教务管理系统数据库课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教务管理系统数据库课程设计报告
理工学院
课程设计报告
课程名称数据库课程设计
设计题目教务管理系统
专业计算机科学与技术
班级
学号
姓名
完成日期2013年12月30 日
课程设计任务书
设计题目:教务管理系统
设计内容与要求:
类似于我校教务管理系统,有四类用户:
教务员可以输入学生、教师、班级、课程信息,一个班级只属于一个专业,一个学生只属于一个班级。
教务员负责输入每个专业、每个班级需要学习哪些课程,指定课程的任课教师。
教师可以查看学习该课程的学生名单。
课程结束后,教师可以录入课程成绩。
一个教师可以教授多个班的多门课程,每门课由多位老师讲授。
课程分两类,必修课和选修课。
系统要记录每个学生学习各门必修课的成绩,还要记录学生选修了哪些选修课以及课程成绩。
学生可以查看自己各门课程的成绩。
学生还可以进行评教,给老师打分。
系统管理员可以输入教室信息,并结合班级、课程、教室信息实现自动排课。
指导教师:
2013年12 月20 日
课程设计评语
成绩:
指导教师:_______________
年月日
目录
1 概述 .......................................................................................................... .2
1.1 课程设计目标 .......................................................................... .2
1.2 课程设计的背景和意义........................................................... .2
1.1.2 课程设计的背景 (2)
2 需求分析.................................................................................................. .3
2.1 系统需求 .................................................................................. .3
2.2 可行性分析............................................................................... .3
2.3 用户要求................................................................................... .3
2.3.1 信息需求 ........................................................................ .3
2.3.2 处理需求......................................................................... .4
2.3.3. 课程设计的意义 (4)
3概念结构设计........................................................................................... .6
3.1设计分析......................................................................................... .6
3.2概念模型设计 ........................................................................... .6
3.2.1 局部概念结构设计 (6)
3.2.2 全局概念结构模型(E-R图) (7)
4 逻辑结构设计.......................................................................................... .8
5 物理结构设计 (10)
5.1数据表的设计 (10)
5.2数据库完整性设计 (12)
5.2.1 数据库实体完整性设计 (12)
5.2.2 数据库参照完整性设计 (12)
5.2.3 数据库用户定义完整性设计 (13)
5.3数据库安全性设计 (13)
6 应用程序设计 (14)
6.1系统功能模块图 (14)
6.2系统界面 (15)
7 设计总结 (28)
8 体会与收获 (29)
参考文献 (30)
1概述
1.1 课程设计目标
课程设计总的目标是衡量学生是否取得学习效果,培养学生具有专业网站初步的规划、设计、制作能力。
具体表现在网站内容、功能、安全等方面合理策划和规划;培养具有主页和二级页面的创意、设计等方面的技术处理能力和具有强大的动态效果制作能力。
培养学生具有基于后台数据库的编程技术,实现客户—服务器端交互式动态网页的制作能力,掌握实际网页设计与制作开发流程和开发方法。
1.2 课程设计的背景及意义
现如今高等院校的招生人数越来越多,必然就会有大量的学生信息、教师信息及课程信息需要处理。
如果只靠人力来完成,这将会变成一项非常繁琐、复杂的工作,而且还有可能出现很多意想不到的错误,给管理这些数据带来了极大的不便,越来越不适合高校的发展需要。
教务管理系统是一个庞大而复杂的系统,它包括对教师信息的管理,对课程资料的管理,对学生信息的管理和对学生成绩的管理等主要功能。
教务管理系统是每所高校的一项必不可少的内容,它的好坏直接影响到学校的主要工作,此系统一旦瘫痪,不仅会影响到学校的每一位学生,学校也会因此受到非常严重的损失。
随着我校近几年来的快速发展,办学模式多元化,在校学生规模不断扩大,为了加速对教务管理的计算机化,我校需要开发出符合我校实际的教务管理系统,为学校教学管理提供一个快速、简单规范的管理平台,同时也方便教员查询相关信息,提高信息传播速度,扩大信息共享范围。
所以,现在设计一个功能完整、操作简单以及界面友好的教务管理系统变得非常重要。
通过这个系统,管理员能够对教师信息、课程信息、学生信息和学生成绩进行查询、添加、修改和删除等操作,用户也可以对自己的基本信息进行修改,学生还可以用该系统进行网上选课和成绩查询,非常的方便。
因此,本系统开发的总体目标就是在教务管理中实现信息管理的系统化、自动化,减少工作繁琐度,增加效率、方便性。
2 需求分析
2.1 系统需求
通过调查,要求系统需要有以下功能:
⑴由于操作人员的计算机知识普遍较差,要求有良好的人机界面;
⑵由于该系统的使用对象多,要求有较好的权限管理;
⑶原始数据修改简单方便,支持多条件修改
⑷方便的数据查询,支持多条件查询;
⑸在相应的权限下,删除数据方便简单,数据稳定性好;
⑹数据计算自动完成,尽量减少人工干预;
2.2 可行性分析
由于本系统管理的对象单一,都是在校学生,且每个数据内容具有较强的关联性,涉及的计算过程不是很复杂。
因此,比较适合于采用数据库管理。
且学校用于学生管理的微机都是PIII以上的机器,在存储量、速度方面都能满足数据库运行的要求。
在技术难度方面,由于有指导老师的指导和相关参考文献,特别是网上资料,特别是参考其它程序的功能,因此完全可以实现。
本系统的设计是在Window XP操作系统环境下,使用VS开发成功的。
在开发过程中,如何选择数据库管理是一个重要的问题,目前,数据库产品较多、开发工具也很多。
每种产品都具有各自的特点和适用范围,因此,在选择数据库时,应考虑数据库应用的特点及适用范围,在选择开发工具时也考虑它的健壮性、可移性、安全性等问题。
2.3 用户要求
2.3.1 信息需求
教务管理系统涉及的实体有:
●教师——工作证号、姓名、职称、电话等;
●学生——学号、姓名、性别、出生年月等;
●班级——班号、最低总学分等;
●系——系代号、系名和系办公室电话等;
●课程——课序号、课名、学分、上课时间及名额等。
这些实体之间的联系如下:
●每个学生都属于一个班,每个班都属于一个系,每个教师也都属于一个系。
●每个班的班主任都由一名教师担任。
●一名教师可以教多门课,一门课可以有几位主讲老师,但不同老师讲的同
一门课其课序号是不同的(课序号是唯一的)。
●一名同学可以选多门课,一门课可被若干同学选中。
●一名同学选中的课若已学完,应该记录有相应成绩。
2.3.2 处理需求
教务系统主要提供数据维护、选课和信息查询。
其中常见的查询有:系统中各对象的基本信息查询。
查询指定班、系的学生信息(名单、人数等)。
查询学生的成绩、学分情况。
查询教师授课情况和学生选课情况……。
2.3.3 安全性与完整性要求
●安全性要求:
1.系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;
2.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
3.系统应对不同用户设置不同的权限,区分不同的用户,如学生,教师,系统管理员。
●完整性要求:
1.各种信息记录的完整性,关键信息记录内容不能为空;
2.各种数据间相互的联系的正确性;
3.相同的数据在不同记录中的一致性。
2.4 需要的信息管理模块
1、学生信息管理
该模块是教务工作人员进行对学生信息的管理,进行学生信息的添加、修
改、删除。
2、教师信息管理
教务工作人员通过此模块来管理教师信息,包括教师信息的添加、修改、删除等。
信息的添加时,需要验证教师的编号是否重复;删除和和修改学生信息,和学生信息管理模块相同。
3、院系管理
此模块是用来管理院系的信息,包括班级院系的添加,修改,删除等。
在进行信息的添加时,需要进行班级的编号是否重复的检查,如院系编号重复则对用户进行提示,不重复则添加成功。
院系管理模块的删除和修改和学生信息管理模块相同。
4、课程信息管理
教务工作人员通过该模块来管理课程的基本信息,包括课程信息的添加,修改,删除和班级课程的设置等,具体做法同前面的模块。
5、成绩管理
教务工作人员通过该模块来进行学生成绩的管理,在进行学生成绩的添加时,可用它来为学生设置所在班级的课程表来直接输入成绩。
6、综合查询
通过该模块可以查询教务所需要的各种信息。
如学生信息查询提供了包括学生学号、姓名、所在班级、班主任名字和宿舍等信息,学生信息进行查询的各种查询条件,用户可以根据单个的查询条件或者它们的组合来进行查询。
同时,在查询的时候还提供了进行模糊查询的功能,即该模块能够利用读者输入的非完整的查询条件进行查询,这样更加方便了用户的查询管理。
综合查询模块包括了学生信息查询、教师信息查询、班级信息查询、院系信息查询、课程信息查询和成绩查询等各种功能查询。
3 概念结构设计
3.1设计分析
在概念结构设计中,我采用自底向上设计概念结构的方法。
即第一步抽象数据并设计局部视图,第二步是集成局部视图,得到全局的概念结构。
3.2概念模型设计
3.2.1局部概念结构设计
(1)、系内的关系模式图
图3-1 系内关系模式图
(2)、选课系统的关系模式图
图3-2 选课系统的关系模式图
图3-3 教师授课系统关系模型图
(4)、教师与班级的关系模型图
图3-4 教师与班级的关系模型图
3.2.2 全局概念结构模型(E-R图)
n
n
图
3-5 全局概念结
构模型图
4 逻辑结构设计
关系模式的设计与优化 E-R 图向关系模型的转换: 1 “教师”实体对应的关系模式:
教师(工作证号,姓名,工资,电话,邮箱,系代号) 代码表示为:Teacher (Tno. Tname. Salary. Tel. Email. Dno )
其中,工作证号为其候选码,又因为教师与系别之间是n :1的工作关系,经过与系别关系模式的合并后,系别号Dno 成为教师关系模式的外码,存在的关系依赖为Tno →( Tname,Salary,Tel,Email,Dno),不存在对候选码的部分依赖与传递依赖,所以满足BCNF 。
1
1
2“学生”实体对应的关系模式:
学生(学号,姓名,性别,年龄,班号,系代号)
代码表示:Student ( Sno, Sname, Ssex, Sage. Class .Dno)
其中,学号为其候选码,又因为学生与班级之间是n:1的属于关系,经过与班级关系模式的合并后,班号Class成为学生关系模式的外码,存在的关系依赖为Sno →(Sname,Ssex.Sage.Class. Dno),Class →Dno,存在对候选码的传递依赖,所以满足2NF.
3系(系代号,系名,系办公室电话)
代码表示:Sdept ( Dno, Dname, Dphone )
系代号为候选码,存在的函数依赖为Dno →(Dname,Dphone),且不存在部分依赖与传递依赖,所以满足BCNF。
4“选修”联系对应的关系模式:
选课(学号,课序号,最后成绩,平时成绩,期中成绩,期末成绩,)
代码表示:SC ( Sno, Cno,Grade. Daigrade. Midbrade. Lasgrade,) 此为m:n联系“选修”所对应的关系模式。
Sno和Cno均为外码。
存在的函数依赖为完全函数依赖(Sno,Cno)→(Grade.Daigrade. Midbrade. Lasgrade. Fingrade),且不存在部分依赖与传递依赖,所以满足BCNF。
5“课程”实体对应的关系模式:
课程(课序号,课名,学分,名额,工作证号)
代码表示:Course ( Cno, Cname, Credit, Cnum, Tno )
其中,课号为其候选码,又由于课程与教师之间是n:1的授课关系,所以经过关系模式的合并后,教师的工作证号被合并为课程关系模式中的外码。
存在的函数依赖为Cno →(Cname,Credit,Cnum,Tno),且不存在对候选码的部分依赖和传递依赖,所以,满足BCNF。
6“班级”实体对应的关系模式:
班级(班号,最低总学分,工作证号,系代号)
代码表示:Class ( Class, Ccredit, Tno. Dno )
其中,班号为其候选码,又由于班级与系别之间是n:1的“属于”关系,经过“班级”与“系别”两个实体关系模式的合并后,系号被合并为班级对应的关系模式
的外码。
而班级与教师之间是n:1的“负责”关系,所以按照规定,教师的工作证号也被合并为班级的外码。
存在的函数依赖为Class →(Ccredit, Tno.Dno ),其中Class →Tno,而Tno →Dno,即存在对候选码的传递依赖,所以只满足2NF。
5 物理结构设计
5.1 数据表的设计
根据实体属性图可以建立以下各表,建表的同时定义表有关的完整性约束条件。
1 学生基本信息表
表5-1学生基本信息表
2 专业基本信息表
表5-2 专业基本信息表
3 学生成绩表
表5-3学生成绩表
4 院系基本信息表
表5-4院系基本信息表
5 教师基本信息表
表5-5教师基本信息表
6 评教基本信息表
表5-6评教基本信息表
7 课程基本信息表
表5-7课程基本信息表
8 班级基本信息表
表5-8班级基本信息表
9 网上选课基本信息表
表5-9网上选课基本信息表
5.2 数据库完整性设计
数据库完整性是指数据库中数据的正确性和相容性。
数据完整性包括三类:实体完整性,参照体完整性和用户定义完整性。
5.2.1 数据库实体的完整性设计
本教务管理系统数据库的实体有:学生,教师,专业,院系,教室,考试成绩,课程。
为保证实体的完整性,将以上所有实体的主属性的属性值都设置为非空。
5.2.2 数据库参照完整性设计
1、学生与课程选修关系模式
学生信息(学号,姓名,性别,年龄)主键:学号
课程信息(课程号,课程名称,学分)主键:课程号
选修(学号,课程号,考试成绩) 主键:学号,课程号
2、学生与班级的从属关系模式:
学生信息(学号,姓名,班级编号) 主键:学号
班级信息(班级编号,班级名称,专业名称,院系名称) 主键:班级编号
3、学生与考试成绩的考试关系模式
学生信息(学号,姓名)主键:学号
成绩信息(成绩号,课程编号)主键:成绩号
4、班级与专业的从属关系模式
专业信息(专业编号,专业名称) 主键:专业编号
班级信息(班级编号,班级名称,专业编号) 主键:班级编号
5、专业与院系的从属关系模式
院系信息(院系编号,专业名称) 主键:专业编号
专业信息(专业编号,专业名称,院系编号) 主键:专业编号
6、教师与课程的授课关系模式
教师(教师编号,姓名) 主键:教师编号
课程(课程编号,课程名称) 主键:课程编号
授课(课程名称,教师编号,课时)主键:课程名称,教师编号
5.2.3数据库的用户定义完整性设计
学生基本信息表:
(1)性别必须是男或女
(2)身份证号必须是18位
(3)所在专业,所属院系必须是本系统提供的
5.3数据库安全性设计
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更
改或破坏。
系统安全保护措施是否有效是数据库系统的主要指标之一。
数据库的安全性和计算机系统的安全性,包括操作系统、网络系统的安全性是紧密联系、相互支持的。
信息系统尽管功能强大,技术先进,但由于受到自身体系结构,设计思路以及运行机制 等限制,也隐含许多不安全因素。
常见因素有:数据的输入,输出,存取与备份,源程序以及应用软件,数据库,操作系统等漏洞或缺陷,硬件,通信部分的漏洞,企业内部人员的因素,病毒,“黑客”等因素。
因此,为使本系统能够真正安全,可靠,稳定地工作,必须考虑如下问题:为保证安全,不致使系统遭到意外事故的损害,系统因该能防止火,盗或其他形式的人为破坏。
1) 系统要能重建 2) 系统应该是可审查的
3) 系统应能进行有效控制,抗干扰能力强
4)
系统使用者的使用权限是可识别的
6 应用程序设计
6.1 系统功能模块图
本系统设计的并不复杂,模块划分也比较清楚。
通过对不同的功能进行分析,就可以得到系统的模块划分:登录管理模块,又分为管理员登录、教师登录和学生登录三个子模块;管理员模块,包括对教师信息、课程信息、学生信息和学生成绩进行查询、添加、修改及删除等子模块; 教师模块,包括对个人信息的查询及密码的修改、课表的查询等子模块; 学生模块,包括对个人信息的查询及密码的修改、网上选课、课表的查询和个人成绩的查询等子模块
图6-1 系统模块图
6.2系统界面
1 系统的主界面
图6-2 系统主界面
部分设计代码如下:
namespace 教务管理系统
{
public MainForm()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private bool checkChildFrmExist(string childFrmName)
{
foreach(Form childFrm in this.MdiChildren)
{
if( == childFrmName)
{
if(childFrm.WindowState == FormWindowState.Minimized) childFrm.WindowState = FormWindowState.Normal;
childFrm.Activate();
return true;
}
}
return false;
}
private void menuItem2_Click(object sender, System.EventArgs e) {
if (this.checkChildFrmExist("ClassInfo") == true)
{
return;
}
ClassInfo newFrm=new ClassInfo();
newFrm.MdiParent = this;
newFrm.Show();
}
private void menuItem3_Click(object sender, System.EventArgs e) {
if (this.checkChildFrmExist("StudentInfo") == true)
{
return;
}
StudentInfo newFrm=new StudentInfo();
newFrm.MdiParent = this;
newFrm.Show();
}
private void menuItem4_Click(object sender, System.EventArgs e) {
if (this.checkChildFrmExist("CourseInfo") == true)
{
return;
}
CourseInfo newFrm=new CourseInfo();
newFrm.MdiParent = this;
newFrm.Show();
}
private void menuItem6_Click(object sender, System.EventArgs e) {
if (this.checkChildFrmExist("CourseElect") == true)
{
return;
}
CourseElect newFrm=new CourseElect();
newFrm.MdiParent = this;
newFrm.Show();
}
private void menuItem7_Click(object sender, System.EventArgs e) {
if (this.checkChildFrmExist("CurriculumSchedule") == true)
{
return;
}
CurriculumSchedule newFrm=new CurriculumSchedule("");
newFrm.MdiParent = this;
newFrm.Show();
}
private void menuItem8_Click(object sender, System.EventArgs e) {
if (this.checkChildFrmExist("ScoreInput") == true)
{
return;
}
ScoreInput newFrm=new ScoreInput();
newFrm.MdiParent = this;
newFrm.Show();
}
private void menuItem11_Click(object sender, System.EventArgs e) {
this.Close();
}
}
}
2学生选课界面界面
图6-3 学生选课界面
部分程序代码如下:
private void CourseElect_Load(object sender, System.EventArgs e) {
dataGrid1.DataSource=this.electTable;
string strConn="workstation id=localhost;Integrated Security=SSPI;database=eisbook;";
SqlConnection cn=new SqlConnection(strConn);
cn.Open();
string sql="select a.课序号,a.课程编号,b.课程名称,b.教师,b.开课系别,"
+"a.上课地点,a.上课时间天,a.上课时间节,b.拼音码"
+" from 课程表a,课程信息b"
+" where (b.本学期课程='Y')and(a.课程编号=b.课程编号)";
SqlDataAdapter da2=new SqlDataAdapter(sql,cn);
da2.Fill(this.courseTable);
this.dv=courseTable.DefaultView;
dataGrid2.DataSource=dv;
}
private void ShowInfo()//
{
string strConn="workstation id=localhost;Integrated Security=SSPI;database=eisbook;";
SqlConnection cn=new SqlConnection(strConn);
cn.Open();
SqlCommand cmd=cn.CreateCommand();
mandText="select a.姓名,b.班级名称,a.学籍编号from 学生信息a,班级信息b "
+"where(a.班级编号=b.班级编号)and(学号
='"+txt1.Text.Trim()+"')";
SqlDataReader dr=cmd.ExecuteReader();
dr.Read();
if(!dr.HasRows)
{
MessageBox.Show("无此学生,请重新输入学号","提示
",MessageBoxButtons.OK,MessageBoxIcon.Stop);
dr.Close();
return;
}
if(dr.GetValue(2).ToString().Trim()!="1")
{
MessageBox.Show("该学生并非在籍学生,不能选课","提示",MessageBoxButtons.OK,MessageBoxIcon.Stop);
return;
}
txt2.Text=dr.GetValue(0).ToString().Trim();
txt3.Text=dr.GetValue(1).ToString().Trim();
dr.Close();
string sql="select a.学号,a.课序号,b.课程名称,b.教师,"
+"b.开课系别,c.上课时间天,c.上课时间节,c.上课地点"
+" from 选课表a,课程信息b,课程表c"
+" where(a.课序号=c.课序号)and('200400000'+b.课程编号=a.课序号)"
+"and(a.学号='"+txt1.Text.Trim()+"')";
SqlDataAdapter da=new SqlDataAdapter(sql,cn);
da.Fill(this.electTable);
this.studentID=txt1.Text.Trim();
this.stduentName=txt2.Text.Trim();
btnElect.Enabled=true;
btnDelete.Enabled=true;
btnView.Enabled=true;
}
private void btnElect_Click(object sender, System.EventArgs e) {
if(dv.Count==0)
{
MessageBox.Show("可选课表为空,无法选课","提示
",MessageBoxButtons.OK,MessageBoxIcon.Stop);
return;
}
string
courseID=dataGrid2[dataGrid2.CurrentCell.RowNumber,0].ToString().Trim ();
string
courseDay=dataGrid2[dataGrid2.CurrentCell.RowNumber,6].ToString().Tri m();
string
courseSec=dataGrid2[dataGrid2.CurrentCell.RowNumber,7].ToString().Tri m();
foreach(DataRow aRow in this.electTable.Rows)
{
if(aRow["课序号"].ToString().Trim()==courseID)
{
MessageBox.Show("所选课程已经在课程表中","课程重复",MessageBoxButtons.OK,MessageBoxIcon.Stop);
return;
}
if(aRow["上课时间天
"].ToString().Trim()==courseDay&&aRow["上课时间节
"].ToString().Trim()==courseSec)
{
string msg="所选课程和已选课程:"+aRow["课程名称"].ToString().Trim()+" 上课时间冲突";
MessageBox.Show(msg,"时间冲突
",MessageBoxButtons.OK,MessageBoxIcon.Stop);
return;
}
}
string strConn="workstation id=localhost;Integrated Security=SSPI;database=eisbook;";
SqlConnection cn=new SqlConnection(strConn);
cn.Open();
SqlCommand cmd=cn.CreateCommand();
mandText="insert into 选课表([学号],[课序号]) values('"+this.studentID+"','"+courseID+"')";
cmd.ExecuteNonQuery();
this.electTable.Clear();
string sql="select a.学号,a.课序号,b.课程名称,b.教师,"
+"b.开课系别,c.上课时间天,c.上课时间节,c.上课地点"
+" from 选课表a,课程信息b,课程表c"
+" where(a.课序号=c.课序号)and('200400000'+b.课程编号=a.课序号)"
+"and(a.学号='"+this.studentID+"')";
SqlDataAdapter da=new SqlDataAdapter(sql,cn);
da.Fill(this.electTable);
}
3 学生信息的查询界面
图6-4 学生信息的增加、删除、修改
部分代码如下:
namespace 教务管理系统
{
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
protected void toolBar1_ButtonClick(object sender,
System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if (e.Button.ToolTipText == "首记录")
{
this.dataGrid1.UnSelect(cmOrders.Position); //取消原选中的行
cmOrders.Position = 0;
this.dataGrid1.Select(cmOrders.Position); //选中当前行
this.dataGrid1.CurrentRowIndex = cmOrders.Position; //移动表头指示图标
return;
}
if (e.Button.ToolTipText == "上一记录")
{
if (cmOrders.Position >= 0)
{
this.dataGrid1.UnSelect(cmOrders.Position);
cmOrders.Position--;
this.dataGrid1.Select(cmOrders.Position);
this.dataGrid1.CurrentRowIndex = cmOrders.Position;
}
return;
}
if (e.Button.ToolTipText == "下一记录")
{
if (cmOrders.Position <= cmOrders.Count-1)
{
this.dataGrid1.UnSelect(cmOrders.Position);
cmOrders.Position++;
this.dataGrid1.Select(cmOrders.Position);
this.dataGrid1.CurrentRowIndex = cmOrders.Position;
}
return;
}
if (e.Button.ToolTipText == "尾记录")
{
this.dataGrid1.UnSelect(cmOrders.Position);
cmOrders.Position = cmOrders.Count-1;
this.dataGrid1.Select(cmOrders.Position);
this.dataGrid1.CurrentRowIndex = cmOrders.Position;
return;
}
if(e.Button.ToolTipText=="新增")
{
cmOrders.AddNew();//新增一条记录
SetDefaultValue();//设置默认值
SetModifyMode(true);//设置控件只读等属性
}
if(e.Button.ToolTipText=="修改")
{
SetModifyMode(true);
}
if(e.Button.ToolTipText=="删除")
{
DialogResult result=MessageBox.Show("确认删除?","删除数据",MessageBoxButtons.OKCancel);
if(result==DialogResult.OK)
if(cmOrders.Count>0)
{
cmOrders.RemoveAt(cmOrders.Position);
da1.Update(dataSet11);
}
else
MessageBox.Show("表中为空,已无可删除数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
if(e.Button.ToolTipText=="提交")
{
bool canSubmit;
canSubmit=this.CheckNotNull();
if(canSubmit==false)
{
return;
}
cmOrders.EndCurrentEdit();
if(dataSet11.GetChanges()!=null)
{
try
{
da1.Update(dataSet11);
SetModifyMode(false);
}
catch(Exception express)
{
MessageBox.Show(express.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
dataSet11.RejectChanges();
}
}
return;
}
if (e.Button.ToolTipText == "取消")
{
try
{
cmOrders.CancelCurrentEdit();
SetModifyMode(false);
}
catch(Exception express)
{
MessageBox.Show(express.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
return;
}
if(e.Button.ToolTipText=="退出")
{
this.Close();
}
}
protected virtual void SetModifyMode(bool blnEdit)
{
btnSearch.Enabled=!blnEdit;
}
protected virtual void SetDefaultValue()
{
return;
}
protected virtual bool CheckNotNull()
{
return(true);
}
private void btnSearch_Click(object sender, EventArgs e) }
}
4 成绩的输入界面
图6-5 成绩查询、输入、修改
部分代码如下:
namespace 教务管理系统
{
private void btnEndElect_Click(object sender, System.EventArgs e)
{
string conStr="workstation id=localhost;Integrated
Security=SSPI;Database=eisbook";
SqlConnection cn=new SqlConnection(conStr);
cn.Open();
SqlCommand cmd=cn.CreateCommand();
mandText="exec sf_终止选课";
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("终止选课成功,将生成新的空成绩单","操作成功",MessageBoxButtons.OK,rmation);
}
}
private void btnQuery_Click(object sender, System.EventArgs e) {
string sql="select a.编号,a.课程编号,b.课程名称,a.学号,c.姓名,a.成绩from 成绩表a,课程信息b,学生信息c "
+"where(a.课程编号=b.课程编号)and(a.学号=c.学号)and(a.是否已确定成绩='N')"
+"and(a.课程编号like '%"+txt2.Text.Trim()+"%')and(b.拼音码like '%"+txt1.Text.Trim()
+"%')and(b.课程名称like '%"+txt3.Text.Trim()+"%')";
string conStr="workstation id=localhost;Integrated
Security=SSPI;Database=eisbook";
SqlConnection cn=new SqlConnection(conStr);
cn.Open();
da=new SqlDataAdapter(sql,cn);
this.scoreTable.Clear();
da.Fill(this.scoreTable);
if(scoreTable.Rows.Count>0)
{
this.courseID=this.scoreTable.Rows[0][1].ToString().Trim();
}
else
{
string msg="该表中没有数据,可能原因有:\n"+"1.本学期没有该门课程\n"+"2.该课程无学生选课\n"
+"3.该课程所有学生成绩已经被最终提交,不可再修改";
MessageBox.Show(msg,"操作失败
",MessageBoxButtons.OK,rmation);
return;
}
txt4.DataBindings.Clear();
txt4.DataBindings.Add("Text",this.scoreTable,"成绩");
}
private void btnModify_Click(object sender, System.EventArgs e) {
if(this.scoreTable.Rows.Count==0)
{
MessageBox.Show("该门课程成绩单为空","提示
",MessageBoxButtons.OK,MessageBoxIcon.Stop);
return;
}
if(txt4.Text.Trim()=="")//检查成绩字段
{
MessageBox.Show("必须输入学生成绩","提示
",MessageBoxButtons.OK,MessageBoxIcon.Stop);
return;
}
string conStr="workstation id=localhost;Integrated
Security=SSPI;Database=eisbook";
SqlConnection cn=new SqlConnection(conStr);
cn.Open();
SqlCommand cmd=cn.CreateCommand();
string
studentNum=dataGrid1[dataGrid1.CurrentCell.RowNumber,0].ToString().Tr im();
mandText="update 成绩表set 成绩
='"+txt4.Text.Trim()+"' where 编号='"+studentNum+"'";
cmd.ExecuteNonQuery();
this.scoreTable.Clear();
da.Fill(this.scoreTable);
}
private void btnSubmit_Click(object sender, System.EventArgs e) {
string conStr="workstation id=localhost;Integrated
Security=SSPI;Database=eisbook";
SqlConnection cn=new SqlConnection(conStr);
cn.Open();
SqlCommand cmd=cn.CreateCommand();
mandText="exec sf_成绩提交"+this.courseID;
DialogResult result;
result=MessageBox.Show("最终提交后学生成绩即不可修改,是否确定提交","提交成绩
",MessageBoxButtons.OKCancel,rmation);
if(result==DialogResult.OK)
{
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("成绩最终提交成功","操作成功
",MessageBoxButtons.OK,rmation);
}
catch(Exception express)
{
MessageBox.Show(express.ToString(),"操作失败
",MessageBoxButtons.OK,rmation);
}
this.scoreTable.Clear();
da.Fill(this.scoreTable);
}
}
private void dataGrid1_Navigate(object sender, NavigateEventArgs ne)
}
}
7 设计总结
在本系统的开发过程中,由于本人开发软件经验不足,在知识、经验方面都存在着不足。
另外,在整个开发的过程中,时间也比较仓促。
因此,该系统必然会存在一些缺陷和不足。
因为对教务处系统的整个流程不够熟悉,在需求分析时未能做到完全满足用户的需求。
虽然该教务处系统没有那么完善,但是未来的发展方向,教务处系统将越来越趋向于安全和信息保护的更高质量的发展。
本次编写的教务处系统程序充分使用了我自己建立的数据库。
因此,界面基本上实现了教务处系统的主要功能。
尽管本管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面清晰、操作方便、效率高、安全性好等优点是本管理系统所必需的。
相信教务处系统将在以后的使用中会更加的频繁,通过开发这个系统,我掌握了的sql及 vs2008的基本使用方法,了解了的基本知识巩固了我对数据库和C#的学习,但在这次课程设计中的最大收获并不是掌握这几门开发工具的应用,而是学会了设计系统的思维方法,项目的设计的过程中如。