数据库应用课程设计实验报告---学生成绩管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

社会实践报告
设计题目:_____小雨点学生成绩管理系统
设计时间: 2012.7.10 至2012.7.21
指导教师:
评语:________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____
目录
设计总说明 (3)
关键词 (4)
绪论 (5)
第1章数据库设计 (6)
1.1 需求分析 (6)
1.1.1 数据需求 (6)
1.1.2 数据字典 (6)
1.1.3 数据流程图 (7)
1.2 概念分析 (7)
1.3 逻辑结构设计 (9)
1.4 物理实施 (9)
1.4.1 创建数据库 (9)
1.4.2 创建数据表 (10)
1.4.3 像数据表中插入数据 (10)
1.4.4 创建视图 (12)
1.4.5 触发器和完整性约束 (12)
1.4.6 存储过程 (13)
第2章系统界面设置及主要功能 (14)
2.1 添加主菜单和功能按钮 (14)
2.2 登录界面设置 (15)
2.3 学生信息增、删、改界面 (17)
2.4 对学生信息多角度查询 (21)
总结 (27)
参考文献 (28)
附录程序代码 (29)
1 StuConStr.h头文件的代码 (29)
2 登录界面“确定”按钮代码 (29)
3 添加登录界面背景图片的代码 (29)
4 使控件变为透明的代码 (30)
5 主界面“添加”按钮代码 (30)
6 主界面“查找”按钮代码 (31)
7 主界面“修改”按钮代码 (33)
8 主界面“删除”按钮代码 (35)
9 添加菜单栏和工具栏代码 (35)
10 信息查询界面“查询”按钮代码 (36)
11 成绩录入界面“查询”代码 (36)
12 成绩录入界面“添加”代码 (37)
13 成绩录入界面“修改” (37)
14 成绩录入界面“删除”按钮代码 (38)
小雨点学生成绩管理系统
设计总说明:在当今社会,无论中小学还是大学,成绩管理是一项必要而且很关键的工作。

现在随着学生数量的急剧增加,处理学生的成绩数据变的越来越烦琐艰巨。

在当今社会,计算机已经普及到了几乎每个学校、家庭,我们的学习和生活已经处处离不开计算机的存在。

按照传统的管理方法,学生成绩都是登录在纸质的成绩册上,使用很不方便,在进行查询、修改、插入和删除操作时,可能由于人为的失误,使这些数据很容易丢失。

另一方面,传统的管理方法在面对大量的数据时,工作量非常大,效率非常低。

所以要设计出一套高效的、合理的学生成绩管理系统是很有必要的。

本系统依据开发要求主要应用于教育系统,完成对日常的教育工作中学生成绩档案的数字化管理。

开发本系统可使老师减轻工作压力,比较系统地对学生的信息和成绩进行管理,查询、增添、修改、删除都变的非常简便,节省了大量的工作量。

本课程设计是在学习了《数据库系统A》和相关开发软件课程之后,让学生通过实际项目的设计、开发,培养学生独立进行数据库软件的建模、在计算机中进行数据库设计、并通过相关软件开发系统的能力。

输入一个班级的学生基本信息(包括学号,姓名,性别,科目),对N门考试的成绩进行管理(例N=5),要求:
1、用户录入每个学生每门课程的分数;
2、能够计算每个学生的各门功课总分和平均分,并按总分将成绩排序,显示每个学生的总分和排名;
3、计算全班各门功课的平均分,显示没门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩等信息;
4、显示每门科目中,成绩在90分以上的学生信息。

另外还输出每门科目中不及格的学生信息;
5、能按姓名或者学号查找,增加,删除和保存各个学生的信息。

本系统主要用于对学生成绩进行管理,能够进行插入、删除、修改、查询和显示学生的信息。

登录该系统时,用户需要输入口令和密码,以确保数据的安全性,成功登录的用户,可以插入学生的信息和成绩,并对学生的信息和成绩进行增、删、改操作。

基于上述想法,我们将学生数据保存到数据库中,以C++为前台进行系统的设计。

因为成绩管理系统是一项很实用的系统,所面对的数据量很大,所以我们要求系统能够高效快速的处理这些数据,并且要保证数据的正确性、相容性和安全性。

所以在数据库中需要定义很多触发器,比如删除了某位同学的信息则删除对应的所有成绩信息、活着删除了某门课程则删除该门课所有的成绩等。

C++作为前台是将数据库中的数据读取出来,有助于用户对这些数据进行相应的操作,使操作更方便,更符合用户的要求。

所以该系统应该要有一个良好的界面,使用户感觉很直
观,使用快捷,这就是用C++所要实现的功能。

既然在一个系统中同时涉及到数据库和C++,所以我们要从数据库中读取数据,并且和界面联系起来,同时也能将用户界面上的数据存储到数据库中。

以上是设计此系统应该注意的地方和设计原则,以下就是遵循这些原则和标准设计出的一套完整的管理系统。

关键词:SQL Server;成绩管理;MFC
绪论
本课程设计是在学习了《数据库系统A》和以前学过的C++等相关软件课程后,通过实际的操作来熟悉数据库和相关软件的应用,培养独立的完成对相关课题或者项目的分析能力、设计能力和调试能力。

这次的课程设计是继大二开设的C++面向对象课程设计之后的,同样是运用MFC程序来设计。

与上次课程设计唯一不同的就是数据的存储位置不同。

在大二下学期开设的课程设计中,我们主要是将数据保存到数据文件当中,而这次课程设计我们要将数据保存到数据库中。

所以我们要解决的首要问题就是如何将数据库中的数据导出来,这也是我们这次课程设计的关键,因为其他的操作我们在学面向对象程序设计C++时已经练习过。

这次的课程设计中,着重培养的是学生的自学能力,以及独立分析互联网上和图书馆里的各种资料,用来丰富自己的知识并且提高对SQL、VC++等软件的实际操作能力。

通过这次的课程设计,使我们对已经学习过的数据库课程的进一步的掌握,对知识进行最大程度的消化融汇。

因此这次的课程设计对我们来说具有非常重要的作用:为以后学生工作做必要的准备和实践,提高自身对数据库开发的能力。

学生成绩管理系统,在系统中分为大的两个个方面:一是学生信息的增删改,二是学生成绩的增删改。

(1)用户进入系统后,可以查询相应学号的学生的信息,可以增加、删除、修改学生信息。

(2)用户可以录入学生的成绩,只需输入对应的学号和课程号以及成绩,简单易操作,并且可以对记录进行增、删、改操作。

此次设计的学生成绩管理系统,虽然简单,但是却十分实用,极大的方便了用户对学生信息和成绩的操作,节省了大量的工作量。

第1章数据库设计
1.1 需求分析
1.1.1 数据需求
学生成绩管理系统需要完成的主要功能有:
1.学生的基本信息录入,包括学号、姓名、性别、出生时间、专业、总学分、备注、地
址。

2.课程信息表的录入,包括课程号、课程名,学分。

3.成绩信息表的查询、插入、修改、删除等操作,包括课程号、学号、成绩。

1.1.2数据字典
表1 学生信息表(XSB)结构
表2 课程信息表(KCB)结构
表3 成绩表(CJB)结构
1.1.3数据流程图
图1 数据流程图
1.2概念分析
在以上需求分析的基础上,设计出该系统的E-R图以及各数据项之间的关系模式,则得出学生表E-R图:
图2 学生表E-R图课程表E-R图:
图3 课程表E-R图成绩表E-R图
图4 成绩表E-R图所以得出总的E-R图:
图5 总E-R图
1.3逻辑结构设计
关系模型:
学生表(XH, XM, XB, CSSJ, ZY, ZXF, BZ, DZ);
课程表(KCH, KCM, XF);
成绩表(XH, KCH, CJ)
1.4物理实施
1.4.1 创建数据库
CREATE DATABASE PXSCJ
ON PRIMARY
(NAME= 'PXSCJ_data',
FILENAME='F:\数据库课程设计\数据源\PXSCJ.mdf',
SIZE=10 , MAXSIZE=UNLIMITED , FILEGROWTH=5) LOG ON
(NAME= 'PXSCJ_log',
FILENAME='F:\数据库课程设计\数据源\PXSCJ.LDF',
SIZE=5 , MAXSIZE=UNLIMITED , FILEGROWTH=20%)
1.4.2 创建数据表
创建学生信息表:
USE PXSCJ
GO
CREATE TABLE XSB
(
XH CHAR(6) NOT NULL PRIMARY KEY,
XM CHAR(8) NOT NULL,
XB CHAR(2) NULL CHECK(XB='男' OR XB='女'),
CSSJ DATETIME NULL,
ZY CHAR(12) NULL,
ZXF INT NULL DEFAULT 0 CHECK(ZXF>=0 AND ZXF<160), BZ V ARCHAR(500)NULL,
DZ V ARCHAR(500)NULL
创建课程信息表:
CREATE TABLE KCB
(
KCH CHAR(3) NOT NULL PRIMARY KEY,
KCM CHAR(16) NOT NULL,
XF TINYINT NOT NULL DEFAULT 0)
创建成绩表:
CREATE TABLE CJB
(
XH CHAR(6) NOT NULL ,
KCH CHAR(3) NOT NULL ,
CJ INT NULL DEFAULT 0 CHECK(CJ>=0 AND CJ<=100))
1.4.3 像数据表中插入数据
学生信息表部分数据如图6:
图:6 学生信息表部分数据课程信息表数据如图7:
图7 课程信息表数据成绩表部分数据如图8:
图8 成绩表部分数据
1.4.4 创建视图
USE PXSCJ
GO
CREATE VIEW XS_KC_CJ
AS
SELECT XSB.XH,XSB.XM,KCB.KCH,KCB.KCM,CJB.CJ
FROM KCB
INNER JOIN CJB ON KCB.KCH=CJB.KCH
INNER JOIN XSB ON XSB.XH=CJB.XH
1.4.5 触发器和完整性约束
删除学生对应成绩记录(使用触发器实现)
实现功能:当删除学生记录后,同步删除成绩表(CJB)该学生的成绩记录。

可以通过创建学生表(XSB)的DELETE触发器实现此功能。

触发器语句如下:
CREATE TRIGGER CHECK_XSB_CJB ON XSB
FOR DELETE
AS
DELETE FROM CJB WHERE XH IN(SELECT XH FROM DELETED)
删除课程对应成绩记录(使用完整性约束实现)
实现功能:当删除课程记录后,同步删除成绩表(CJB)中所有学生该课程的成绩记录。

语句如下:
ALTER TABLE CJB WITH CHECK ADD CONSTRAINT FK_CJB_KCB FOREIGN KEY(KCH)
REFERENCES KCB(KCH)
ON DELETE CASCADE
用触发器验证输入数据
实现功能:当向成绩表(CJB)表插入一条记录时,检查该记录的“学号”在学生表中是否存在,检查“课程号”在课程表(KCB)中是否存在。

若有一项为否,则不允许插入。

触发器语句如下:
CREATE TRIGGER [DBO].[CHECK_XSB_KCB] ON [DBO].[CJB]
FOR INSERT
AS
IF
EXISTS
(SELECT XH FROM INSERTED WHERE NOT EXISTS
(SELECT XH FROM XSB WHERE INSERTED.XH=XSB.XH))
OR EXISTS (SELECT KCH FROM INSERTED WHERE NOT EXISTS(SELECT KCH FROM KCB WHERE INSERTED.KCH=KCB.KCH))
ROLLBACK TRANSACTION
1.4.6 存储过程
存储过程名为CJ_Data。

参数:学号(in_xh)、课程号(in_kch)和成绩(in_cj)。

实现功能:根据存储过程的3个参数,对指定学号、课程号的学生成绩进行增、删、改。

编写思路:
(1)根据课程号查询该课程对应的学分。

(2)根据学号和课程号查询该成绩记录,删除原来成绩记录。

如果成绩>=60,则该学生总学分减去该课程的学分。

(3)如果新成绩=-1(表示删除该成绩记录),则储存过程结束。

(4)增加成绩记录,如果成绩>=60,则该学生总学分加上该课程的学分。

存储过程如下:
CREATE PROCEDURE CJ_Date(@in_xh CHAR(6),@in_kch CHAR(3),@in_cj INT)
AS
SET NOCOUNT ON
DECLARE @in_count INT
DECLARE @in_xf TINYINT
DECLARE @in_cjb_cj INT
SET @in_xf=(SELECT XF FROM KCB WHERE KCH=@in_kch)
SET @in_count=(SELECT COUNT(*) FROM CJB WHERE XH=@in_xh AND KCH=@in_kch)
SET @in_cjb_cj=(SELECT CJ FROM CJB WHERE XH=@in_xh AND KCH=@in_kch)
IF(@in_count>0)
BEGIN
DELETE FROM CJB WHERE XH=@in_xh AND KCH=@in_kch
IF(@in_cjb_cj>60)
BEGIN
UPDATE XSB SET ZXF=ZXF-@in_xf WHERE XH=@in_xh
END
END
IF(@in_cj!=-1)
BEGIN
INSERT INTO CJB V ALUES(@in_xh,@in_kch,@in_cj)
IF(@in_cj>60)
BEGIN
UPDATE XSB SET ZXF=ZXF+@in_xf WHERE XH=@in_xh
END
END
第2章系统界面设置及主要功能
2.1 添加主菜单和功能按钮
在项目工作区窗口中选择ResourceView页面,双击资源“Menu”项中的“IDR_MAINFRAME”,则菜单编辑窗口出现在主页面的右面,如图9所示。

相应的XSCJ 项目的菜单资源被显示出来,在菜单的最后一项,Visual C++为用户留出了一个空位置,用来输入新的菜单项。

在此可输入“学生信息管理”“学生成绩管理”和“成绩输入”
图9 XSCJ菜单资源
同理,双级资源“Toolbar”项中的IDR_MAINFRAME,则工具条编辑器窗口出现在主界面的右面,如图10所示。

在此可以添加新的按钮:
图10 工具栏编辑窗口2.2 登录界面设置:
登录界面设置如图11所示:
登录界面的控件ID和标题设置如表4所示:
表4 登陆界面设置ID和标题
打开MFC ClassWizad,切换到Member Variables页下添加成员变量,详见表5

表5 登录界面设置控件关联变量
背景图片的添加过程为:打开MFC ClassWizad,在Message Maps里添加WM_PAINT和WM_CTLCOLOR函数,函数代码见附录。

添加图片的过程如下:在ResourceView中选中一项,单击右键:选择Insert,在“插入资源”中选择Bitmap,单击导入,选择格式为bmp的图片,则在项目工作区窗口会出现一个Bitmap选项,里面又要加入的图片,见图12:
图12 插入图片
如果用户名或密码错误,则会出现如图13的提示:
图13 用户名或密码错误提示
如果用户名密码正确,则成功登录系统,如图14:
图14 成功登录提示
如果点击退出,则有如图15提示:
图15 退出系统提示
2.3 学生信息增、删、改界面
界面设置如图16所示:
登录界面的控件ID和标题设置如表6所示:
打开MFC ClassWizad,切换到Member Variables页下添加成员变量,详见图17
图16 学生信息增、删、改界面
图17 为控件添加数据成员
建立头文件StuConStr.h,在其定义本应用系统在后续编程中一直要用使用的连接字符串宏常量SQLCONSTR。

具体代码见附录。

输入学号对学生进行添加功能,若学号已存在,则弹出系统消息,如图18
图18 重复添加相同学号学生信息的系统提示
若输入数据表中不存在的学号的学生信息,则弹出“添加成功”的系统信息,如图19:
图19 添加成功系统消息
对学生信息进行查询时,如果不存在要查询的学号,则弹出如图20系统消息:
图20 查询非数据表中学号的学生信息的系统消息
如果要查询的学生的学号存在,则直接在显示在各个控件中,如查询学号为081106的学生,得到图21:
图21 查询结果
在对学生信息进行修改时,可以先查询该学生的信息,再点击修改按钮,修改成功,出现图22提示:
图22 修改成功提示
在对学生信息进行删改成功,则出现图23提示:
图23 修改成功系统消息
2.4 对学生信息多角度查询
点击菜单栏上的“学生信息管理”或工具栏上的“信”,可以对学生信息进行多角度查询。

在此界面中,可以按学号查询学生信息,也可以按姓名查找学生信息,并且可以按系部来看全系学生的基本信息情况。

基本界面如图24所示:
图24 学生信息多角度查询界面
设置此对话框的方法为:在Dialog下插入一个新对话框,有机对话框打开属性,在ID 中输入“IDD_STUINFO_MODIFY”,标题为:”学生成绩管理系统——学生信息查询修改”。

按Ctrl+W快捷键,弹出“添加新类”对话框,单击OK按钮,类名输入“CStuInfoModify”。

设置ADODC的属性,在“Command Type”中选择“1-adCmdText”,表示命令为SQL 语句。

打开DataGrid控件的属性对话框,定位到“全部”页。

将DataGrid一栏右边的“DataSource”绑定为ADODC的ID,这里是“IDC_StuADODC”。

以后的操作类似,不再重复叙述。

登录界面的控件ID和标题设置如表7所示:
打开MFC ClassWizad,切换到Member Variables页下添加成员变量,详见图25:
图25为控件添加数据成员
运行程序,例如查询学号为081101,专业为基础部的学生,点击查询,显示结果如图26所示:
图26 查询结果
如果系部中不存在要查询的学号或姓名,则出现如图27提示:
图27 未找到记录提示
2.5 学生成绩的增删改和查询
点击菜单栏上的“学生成绩管理”下拉菜单中的“成绩录入”或工具栏上的“成绩录入”,即可进入学生成绩增删改和查询的界面,如图28所示:
图28 学生成绩增删改和查询的界面
登录界面的控件ID和标题设置如表8所示:
表8 登陆界面设置ID和标题
打开MFC ClassWizad,切换到Member Variables页下添加成员变量,详见图29。

图29 为控件添加数据成员
对学生成绩的查询,可以按照不同的方式:姓名、学号、课程名、课程号,极大的方便了用户的使用,如按照课程名“计算机基础”进行查询时,课得到如图30所示的结果:
图30 成绩查询结果
对学生成绩添加时,如果学号或课程号为空,则出现如图31的提示:
图31 添加成绩错误提示
如果添加的记录存在,则出现图32提示:
图32 添加记录存在提示
若添加成功,则出现图33提示,并且记录更新到该界面左边的表格中:
图33 添加成功提示
对成绩进行修改时,如果修改的记录不存在,则弹出图34提示
图34 修改记录不存在提示
如果修改成功,则出现图35提示,点击确定后,系统更新到左边的表格中:
图35 修改成功提示
对成绩记录进行删除时,如果记录不存在,则弹出如图36的消息:
图36 删除记录不存在的系统消息
如果删除成功,则弹出“删除成功”的系统消息,并且更新到左边的表中,如图37:
图37 删除成功系统消息
总结
通过两周时间做出来的学生管理系统,基本的功能已经实现,如对学生信息的增加、删除、修改、查询以及对学生成绩的增加、删除、修改等,还可以对学生信息和成绩进行多角度查询,节省了大量的工作量。

而且设置界面清爽干净,功能及操作一目了然,并且通过对触发器的定义,可以在删除学生信息的同时删除该学生对应的成绩,减少了系统大量的冗余数据。

当然,系统也有一些不足之处需要改进,比如系统在运行过程中如果有的地方操作不当,会造成运行错误,这是由于代码中存在一些不合理的地方,以我们现在的知识也许还不知道错误出在哪里,但是相信在不断的学习和积累的过程中我们会慢慢了解。

在这两周做课程设计中,收获了很多。

因为这次课程设计设计的知识面非常广。

从数据库方面来说,涉及到数据库设计的五个步骤:需求分析、概念结构设计、逻辑结构设计、物理结构设计和运行调试,对于常用的SQL语句如查询语句、创建视图、定义触发器、定义完整性约束和存储过程等都进行了一次系统的训练;对于VC++来说,这次进行MFC编程,实现学生成绩管理的各个功能,通过增加对话框、控件、菜单、工具按钮等,对MFC又了进一步的理解,第一次用MFC编程时对MFC的功能等都非常模糊,现在已经系统的了解其控件功能以及程序代码等,而且此次成绩管理系统中首次用到了菜单栏和工具按钮,是以前都没有接触的。

而且以前设计MFC都是照着书抄,对其代码的意思完全不懂,现在经过了练习,已经可以达到了举一反三的效果,根据网上或者书籍上的内容,可以自己尝试着编写并运行程序,达到了创新的目的。

但是此次课程设计最大的收获不只只是对SQL和MFC更加熟悉和理解了,而是充分锻炼了我们的实际动手操作能力,这是现在大学生最缺乏的能力。

平时我们看着书上的实例觉得编程也不过如此,都觉得很简单就可以编好运行,造成了眼高手低的局面。

而在实际操作中,会遇到各种各样的问题,而这些问题是书上没有介绍的,这就需要我们独立思考,查询各种资料,尝试着去找出哪里出错了,并且找到解决得办法。

锻炼我们独立思考的同时,也培养了我们团结合作的精神,有些问题需要去和周围的同学一起探讨,这样可以得到更好的解决方法。

这些独立思考和团队合作精神是我们在学习和工作中必不可少的精神,让我们在学习和工作中取得更高的成就。

这也是我们这次课程设计真正的目的所在。

经过这次课程设计,提高了我的能力,也让我明白了自己的不足,在今后的学习工作中一定会努力改正。

参考文献
[1] 郑阿奇,刘启芬,顾韵华.SQL Server 实用教程.第3版.北京:电子工业出版社,2009
[2] 周启涛,高英.Visual C++ 数据库开发基础与应用.第1版.北京:人民邮电出版社,2005
附录程序代码
1 StuConStr.h头文件的代码
#ifndef _STUCONSTR_H_
#define _STUCONSTR_H_
#define SQLCONSTR "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PXSCJ;Data Source=."
#endif
2 登录界面“确定”按钮代码
void CLoginDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(true);
if(m_username=="")
{
MessageBox("用户名不能为空!请重新输入!","系统消息");
return;
}
if(m_username!="李晓媛"||m_passkey!="lixiaoyuan")
{
MessageBox("用户名或密码错误!请重新输入!","系统消息");
m_username="";
m_passkey="";
UpdateData(false);
return;
}
else
{
CDialog::OnOK();
}
}
3 添加登录界面背景图片的代码
void CLoginDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
//CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP11);
//IDB_BITMAP是你自己的图对应的ID
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
// Do not call COleDBRecordView::OnPaint() for painting messages
}
4 使控件变为透明的代码
HBRUSH CLoginDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// HBRUSH hbr = COleDBRecordView::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
if(nCtlColor==CTLCOLOR_STATIC)
//对所有的STATIC控件的属性进行设定
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
return hbr;
// TODO: Return a different brush if the default is not desired
//return hbr;
}
5 主界面“添加”按钮代码
void CXSCJView::OnAdd()
{
// TODO: Add your control notification handler code here
CString strname;
strname.Format("Provider=SQLOLEDB.1;Integrated Security=SSPI;\
Persist Security Info=False;Initial Catalog=PXSCJ;Data Source=.");
_bstr_t strCnn=strname;
try
{
UpdateData(TRUE);
pConnection.CreateInstance (__uuidof(Connection));
pConnection->Open(strCnn,"","",NULL);
pRs.CreateInstance (__uuidof(Recordset));
CString SqlStr;
SqlStr.Format ("select * from XSB where XH='%s'",m_stuXH);
pRs->Open (_variant_t(SqlStr),_variant_t((IDispatch*)pConnection,true),adOpenKeyset, adLockOptimistic,adCmdText);
if(!pRs->RecordCount==0)
{MessageBox("您输入的学号已存在,请重新添加!","系统消息");}
else
{
pRs->AddNew();
pRs->PutCollect("XH",_variant_t(m_stuXH));
pRs->PutCollect("XM",_variant_t(m_stuXM));
pRs->PutCollect("CSSJ",_variant_t((DATE)m_stuCSSJ));
pRs->PutCollect("ZY",_variant_t(m_stuZY));
pRs->PutCollect("BZ",_variant_t(m_stuBZ));
pRs->PutCollect("DZ",_variant_t(m_stuDZ));
if(m_stuXBN==atoi("男"))
pRs->PutCollect("XB",_variant_t("男"));
else
pRs->PutCollect("XB",_variant_t("女"));
pRs->Update();
MessageBox("添加成功!","系统消息");
}
pRs->Close();
pConnection->Close();
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source ());
_bstr_t bstrDescription(e.Description ());
CString sError;
sError.Format
("Source:%Description:%s",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
AfxMessageBox(sError);
}
6 主界面“查找”按钮代码
void CXSCJView::OnSearch()
{
_variant_t varFld;
CString strname;
strname.Format("Provider=SQLOLEDB.1;Integrated Security=SSPI;\
Persist Security Info=False;Initial Catalog=PXSCJ;Data Source=.");
_bstr_t strCnn=strname;
UpdateData(TRUE);
pConnection.CreateInstance(__uuidof(Connection));
pConnection->Open(strCnn,"","",NULL);
pRs.CreateInstance(__uuidof(Recordset));
CString SqlStr;
SqlStr.Format ("select * from XSB where XH ='%s'",m_stuXH);
pRs->Open(_variant_t(SqlStr),_variant_t((IDispatch*)pConnection,true),adOpenKeyset, adLockOptimistic,adCmdText);
if(!pRs->RecordCount==0)
{
varFld=pRs->Fields->GetItem("XH")->Value;
CString strXH(_T(varFld.bstrVal ));
strXH.TrimRight();
m_stuXH=strXH;
varFld=pRs->Fields->GetItem("XM")->Value;
CString strXM(_T(varFld.bstrVal ));
strXM.TrimRight();
m_stuXM=strXM;
varFld=pRs->Fields->GetItem("ZY")->Value;
CString strZY(_T(varFld.bstrVal ));
strZY.TrimRight();
m_stuZY=strZY;
varFld=pRs->Fields->GetItem("BZ")->Value;
CString strBZ(_T(varFld.bstrVal ));
strBZ.TrimRight();
varFld=pRs->Fields->GetItem("DZ")->Value;
CString strDZ(_T(varFld.bstrVal ));
strDZ.TrimRight();
m_stuDZ=strDZ;
m_stuBZ=strBZ;
varFld=pRs->Fields->GetItem("CSSJ")->Value;
CString strCSSJ(_T(varFld.bstrVal ));
strCSSJ.TrimRight();
m_stuCSSJ=varFld.date ;
varFld=pRs->Fields->GetItem("XB")->Value;
CString sql;
sql=(LPCTSTR)(_bstr_t)varFld;
if(sql=="女")
m_stuXBN=1;
else
m_stuXBN=0;
//m_stuXBN=atoi(sql);
// AfxMessageBox(sql);
UpdateData(FALSE);
}
else
{MessageBox("没有您要查找的学号信息!","系统消息");}
}
7 主界面“修改”按钮代码
void CXSCJView::Onxiugai()
{
UpdateData(TRUE);
if(m_stuXH==""||m_stuXM=="")
{
MessageBox("学号和姓名不能为空!请重新输入!","系统消息");
return;
}
_CommandPtr pCmd=NULL;
_variant_t vNULL;
vNULL.vt=VT_ERROR;
vNULL.scode =DISP_E_PARAMNOTFOUND;
CString strname;
strname.Format("Provider=SQLOLEDB.1;Integrated Security=SSPI;\ Persist Security Info=False;Initial Catalog=PXSCJ;Data Source=.");
_bstr_t strCnn=strname;
UpdateData(TRUE);
pConnection.CreateInstance(__uuidof(Connection));
pConnection->Open(strCnn,"","",NULL);
pCmd.CreateInstance (__uuidof(Command));
pCmd->ActiveConnection =pConnection;
CString SqlStr;
SqlStr.Format("delete from XSB where XH='%s'",m_stuXH);
pCmd->CommandText =(_bstr_t)SqlStr;
pCmd->Execute (&vNULL,&vNULL,adCmdText);
pConnection->Close();
try
{
pConnection.CreateInstance (__uuidof(Connection));
pConnection->Open(strCnn,"","",NULL);
pRs.CreateInstance (__uuidof(Recordset));
CString SqlStr;
SqlStr.Format ("select * from XSB where XH='%s'",m_stuXH);
pRs->Open (_variant_t(SqlStr),_variant_t((IDispatch*)pConnection,true),adOpenKeyset, adLockOptimistic,adCmdText);
if(!pRs->RecordCount==0)
{MessageBox("您输入的学号已存在,请重新添加!","系统消息");}
else
{
pRs->AddNew();
pRs->PutCollect("XH",_variant_t(m_stuXH));
pRs->PutCollect("XM",_variant_t(m_stuXM));
pRs->PutCollect("CSSJ",_variant_t((DATE)m_stuCSSJ));
pRs->PutCollect("ZY",_variant_t(m_stuZY));
pRs->PutCollect("BZ",_variant_t(m_stuBZ));
pRs->PutCollect("DZ",_variant_t(m_stuDZ));
if(m_stuXBN==atoi("男"))
pRs->PutCollect("XB",_variant_t("男"));
else
pRs->PutCollect("XB",_variant_t("女"));
pRs->Update();
MessageBox("修改成功!","系统消息");
m_stuXH="";
m_stuXM="";
m_stuZY="";
m_stuDZ="";
m_stuBZ="";
UpdateData(false);
}
pRs->Close();
pConnection->Close();
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source ());
_bstr_t bstrDescription(e.Description ());
CString sError;
sError.Format
("Source:%Description:%s",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
AfxMessageBox(sError);
}
}
8 主界面“删除”按钮代码
void CXSCJView::OnDelete()
{
_CommandPtr pCmd=NULL;
_variant_t vNULL;
vNULL.vt=VT_ERROR;
vNULL.scode =DISP_E_PARAMNOTFOUND;
CString strname;
strname.Format("Provider=SQLOLEDB.1;Integrated Security=SSPI;\ Persist Security Info=False;Initial Catalog=PXSCJ;Data Source=.");
_bstr_t strCnn=strname;
UpdateData(TRUE);
pConnection.CreateInstance(__uuidof(Connection));
pConnection->Open(strCnn,"","",NULL);
pCmd.CreateInstance (__uuidof(Command));
pCmd->ActiveConnection =pConnection;
CString SqlStr;
SqlStr.Format("delete from XSB where XH='%s'",m_stuXH);
pCmd->CommandText =(_bstr_t)SqlStr;
pCmd->Execute (&vNULL,&vNULL,adCmdText);
pConnection->Close();
AfxMessageBox("删除成功!");
9 添加菜单栏和工具栏代码
void CXSCJView::OnStuinfo()
{
CStuInfoModify StuInfoDlg;
StuInfoDlg.DoModal ();
void CXSCJView::OnToolInfo()
{
CStuInfoModify StuInfoDlg;
StuInfoDlg.DoModal();
}
void CXSCJView::OnMenuitem32772()
{
CStuScoreAdd StuScoreDlg;
StuScoreDlg.DoModal();
}
void CXSCJView::OnScoreModify()
{
CStuScoreAdd StuScoreDlg;
StuScoreDlg.DoModal();
}
10 信息查询界面“查询”按钮代码
void CStuInfoModify::OnBUTSearch()
{
UpdateData();
CString SqlStr;
SqlStr="select XSB.XH as 学号,XM as 姓名,XB as 性别,ZY as 专业,ZXF as 总学分,DZ as 地址,CSSJ as 出生时间from XSB where ZXF>=0"+MakeSqlStr();
m_StuADO.SetRecordSource(SqlStr);
m_StuADO.Refresh();
_ConnectionPtr m_pCon;
_RecordsetPtr m_pRs;
m_pCon.CreateInstance(__uuidof(Connection));
m_pCon->Open(SQLCONSTR,"","",0);
m_pRs.CreateInstance(__uuidof(Recordset));
m_pRs->Open((_variant_t)SqlStr,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic, adCmdText);
if(m_pRs->RecordCount ==0)
{
MessageBox("未找到记录","提示");
CWnd* XH=GetDlgItem(IDC_XH);
CWnd* XM=GetDlgItem(IDC_XM);
XH->SetWindowText("");
XM->SetWindowText("");
return;
}
}
11 成绩录入界面“查询”代码
void CStuScoreAdd::OnSearch()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString str;
m_combo.GetLBText(m_combo.GetCurSel(),str);
m_adodc.SetRecordSource("select*from XS_KC_CJ where "+str+"='"+m_edit+"'");
m_adodc.Refresh();
}
12 成绩录入界面“添加”代码
void CStuScoreAdd::OnAdd()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_xh==""||m_kch=="")
{
MessageBox("学号和课程不能为空,请重新输入!","系统消息");
return;
}
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
_bstr_t vSQL,sql;
CString cj;
cj.Format("%d",m_cj);
_RecordsetPtr m_pRecordset;
vSQL="select*from CJB where XH='"+m_xh+"' and KCH='"+m_kch+"'";
m_pRecordset=m_AdoConn.GetRecordSet(vSQL);
if(!m_pRecordset->adoEOF)
{
MessageBox("该项记录已经存在!请重新输入!","系统消息");
return;
}
else
{
sql="insert into CJB(XH,KCH,CJ) values('"+m_xh+"','"+m_kch+"',"+cj+")";
m_AdoConn.ExecuteSQL(sql);
m_AdoConn.ExitConnect();
m_adodc.SetRecordSource("select*from XS_KC_CJ");
m_adodc.Refresh();
MessageBox("添加成功!","系统消息");
}
}
13 成绩录入界面“修改”
void CStuScoreAdd::Onchange()
{
// TODO: Add your control notification handler code here。

相关文档
最新文档