1、电子信息科学和技术专业课程设计题单 班级_0982081_学生 _董冰辉_课程名称 专业课程设计_ 课 题 密码锁设计 设计要求 利用visualc#作为前台开发工具, 后台数据库管理,实现一学生成绩管理系统。实现具体功 能: 系统管理(身份分类、录入、修改、删除) 2 学生信息管理(学生信息录入、修改、删除、查询) 3 成绩管理(成绩录入、修改、删除、查询) 4 课程管理(课程信息录入、修改、删除、查询) 课 题 发 给 日 期 6月14日 课程设计完成日期 6月28日 指 导 教 师 评语: 评分: 摘 要伴随计算机普及,计算机在生活中得到越来越多应用,其中在计算机上运行多种软件在处理生活
2、中实际问题中起着重大作用,而现在在编写应用程序时,C+以其高效及灵活性成为大多程序设计者首选。其次对于一般用户者,利用C+语言设计出适用小型软件对处理生活中繁琐问题有很大作用。在学校或班级,常常会对某次考试中全部学生成绩进行统计和管理,因为学生数目常常繁多,所以在处理统计学生总成绩和平均成绩时工作会相对繁琐,所以针对这种情况,同时对分析成绩管理所需要功效,在利用C+语言及VC+6.0程序运行平台之下,设计了一个小型学生成绩管理系统,该系统含有学生成绩相关性息录入、显示、查询、修改、删除和统计功效。关键词:学生成绩管理系统;计算机;C+目 录一、概述.4二、需求于功效分析.5三、模块设计和分析.
3、6四、类设计和分析.8五、概念模型设计.9六、逻辑设计.10 七、程序源代码.12 八、使用手册.24九、总结.25十、参考文件.26一、概述1. 设计背景学生成绩管理系统是一个教育单位不可缺乏部分,它内容对于学校决议者和管理者来说全部至关关键,所以学生成绩管理系统应该能够为用户提供充足信息和快捷查询手段,不过几年前,各个学校学生成绩管理基础上全部是靠手工进行,伴随各个学校规模增大,相关学生成绩管理工作所包含数据量越来越大,有学校不得不靠增加人力、物力来进行学生成绩管理。这种管理方法存在着很多缺点,如:效率低、保密性差,另外所用其时间长,产生大量文件和数据,这对于查找、更新和维护全部带来了不少
4、困难。现在学校学生越来越多,成绩管理工作量越来越大,手工管理成绩弊端也越来越显著。伴随科学技术不停提升,计算机科学日渐成熟,其强大功效已为大家深刻认识,它已进入人类社会各个领域并发挥着越来越关键作用。作为计算机应用一部分,使用计算机对学生档案信息进行管理,含有手工管理所无法比拟优点。比如:检索快速、查找方便、可靠性高、存放量大、保密性好、寿命长、成本低等。这些优点能够极大地提升学生档案管理效率。所以我想借此次课程设计之际,设计一个简易学生成绩管理系统。2. 设计目标1、掌握利用数据库原理进行系统分析和设计方法;2、掌握关系数据库设计方法;3、掌握利用SQL Server 技术;4、加强C+编程
5、能力3. 设计内容1.设计一个简易学生成绩管理数据库系统,包含数据库建立需求分析,数据输入输出。2.设计用户操作界面,关键实现数据查询,录入,显示,修改,删除,统计基础功效。 二、需求和功效分析(1)需求分析学生成绩管理系统关键提供成绩查询,方便管理网上信息查阅平台,学生能够经过该系统查阅和自己相关信息,查看留言、提交留言。老师能够经过成绩管理系统查阅学生成绩信息,老师信息,查看老师留言、学生留言、提交留言、留言管理等相关操作。系统管理员能够实现以上全部功效,还有对学生添加、删除、修改、老师添加、删除、修改,数据库备份、数据库还原等相关操作。依据开发要求,学生成绩管理系统关键应用于教育系统,完
6、成对日常教学、教务、老师和学生计算机化管理。开发学生成绩管理系统可使学院教职职员减轻工作压力,比较系统地对教务、教学上各项服务和信息进行管理,同时,能够降低劳动力使用,加紧查询速度、加强管理,和国家各部门相关信息化步伐,使各项管理愈加规范化。现在,学校工作繁杂、资料重多。现在,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,现在还没有一套完整、统一系统。所以,开发一套适和大众、兼容性好系统是很有必需。(2)功效分析 “学生成绩管理系统”包含九个模块:输入学生资料,输出学生资料,学生姓名按次序排列,添加学生资料,按姓名查找,删除该学生资料,查找并显示学生资料,按姓名查找,修改该学生资
7、料,从文件中读入数据,储存学生资料并退出系统。这九个模块既相互联络又相互独立。本系统依据学生成绩管理需要,而建立一个“学生成绩管理系统”,以方便对成绩各项管理操作。本系统能对成绩进行输入和输出;能按姓名对学生进行排序,并显示学生资料、成绩等,不过得以系统输入学生资料、成绩为前提;能添加学生成绩资料;能依据学生姓名来查询该学生成绩资料,并修改或是删除该学生信息;能够从文件中读取学生信息,而且添加到系统中;能把对系统所进行操作进行保留,以立即更新系统中数据。(3)工作流图 学生成绩管理系统学生,老师,科目基础信息班级成绩信息 查询统计修改统计删除统计增加统计显示系统原先统计科目基础信息老师基础信息
8、学生基础信息三、模块设计和分析(1)输入学生资料模块:关键功效用来对学生成绩进行搜集和输入。在学生信息保留在系统中前提下,成绩录入需要输入学生资料,比如班级,学号,姓名。在正确输入学生资料后,就能够对该学生各科成绩进行录入。该学生各科成绩输入成功后,系统会提醒是否继续进行操作,假如想继续输入学生成绩就输入y,不想再输入学生成绩话就输入n,再输入n以后,系统返回到主菜单。(2)输出学生资料模块:关键功效用来对学生成绩进行输出。在系统已经录入了学生资料成绩前提下,使用该功效能够显示全部学生信息,资料等等。具体包含学生班级,学号,姓名和各科成绩。在查看学生资料,成绩各方面信息后,按任意键就能够返回到
9、主菜单。(3) 按学生姓名进行排列模块关键功效是用来对学生资料按姓名进行排序。在系统保留学生资料,成绩前提下,使用此功效能够对学生资料按姓名进行排序,这么就方便查找姓氏相同或是相近同学资料。(4) 添加学生资料模块关键功效是用来添加学生资料,成绩。假如系统有保留学生资料情况下,想录入学生成绩话,就不用添加学生资料这模块。假如系统没有保留该学生信息话,就要使用此模块,在成功添加学生资料后,就能够对该学生进行其它操作。(5)按姓名查找,删除该学生资料模块关键功效是用来删除学生资料。在系统保留学生资料前提下,想删除某学生资料,能够输入学生姓名,系统查找该学生资料后,就能够删除了。因为学生辍学,毕业等
10、原因,立即对系统进行更新,删除部分没用信息,能够使系统愈加优化(6)查找并显示学生资料模块关键功效是用来查找学生资料。在系统保留了某学生资料前提下,想要查找该学生资料,能够输入该学生姓名,这么系统就会显示该学生资料和各科成绩等信息(7)按姓名查找,修改学生资料模块关键功效是用来修改学生资料。在系统保留了某学生资料前提下,想要查找该学生资料,能够输入该学生姓名,系统就会显示该学生资料和各科成绩等信息,这么就能够修改该学生资料,成绩等信息。(8)从文件中读入数据模块关键功效是用来从文件中读入学生数据。因为部分资料能够用Word文档或Excel表格输入,故在此模块中增加了导入数据功效。这么就方便很多
11、,不用把学生资料一个一个添加,节省了很多时间精力。(9)储存学生资料并退出系统模块 关键功效是用来储存学生资料。在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统最新操作进行保留,立即更新系统,方便下一次操作。四、 类设计于分析 Student类类图 studentnumclanamebyyljsjzcsjkjsjyytypedef classpublic: char num10; char cla10; char name20; char byyl10; char jsjzc20; char sjk10; char jsjyy20;Student;表1 Student类说明表名称
12、属性说明num数据组员说明学生学号cla数据组员说明学生班级name数据组员说明学生名字byyl数据组员说明学生编译原理成绩jsjzc数据组员说明学生计算机组成成绩sjk数据组员说明学生数据库成绩jsjyy数据组员说明学生计算机英语成绩五、概念模型设计(E-R图)1. 实体及属性图学生专业性别学号姓名老师所教科目职称性别姓名编号课程课程名学分课程号 2.实体及其联络图老师m 讲授成绩1nm主修课程学生六、逻辑设计 1.E-R模型转换为关系模式 学生(学号,姓名,性别,专业) 老师(编号,姓名,性别,职称,所教科目) 课程(课程号,课程名,学分) 成绩(学号,姓名,数学,物理,化学,英语,政治,
13、总成绩,平均成绩)2. 范式分析 (1) 分析关系模式学生(学号,姓名,性别,专业)在关系模式学生(学号,姓名,性别,专业)中,每一个属性全部不能再分,故,属于1NF. 在关系模式学生(学号,姓名,性别,专业)中,主键为学号,所以,姓名,性别,专业,全部是非主属性。依据候选键定义可知,学号完全决定姓名,性别,专业,即每一个非主属性完全依靠于候选键,故,该关系模式属于2NF。在关系模式学生(学号,姓名,性别,专业)中,姓名,性别,专业,全部是非主属性,且每一个非主属性不传输函数依靠于候选键学号,即,学号决定姓名,但姓名不决定性别,不决定专业。故,该关系模式属于3NF。 在关系模式学生(学号,姓名
14、,性别,专业)中,候选键为学号,函数依靠为学号姓名,学号性别,学号专业,故,该关系模式属BCNF。 因为在关系模式学生(学号,姓名,性别,专业)中不存在多值依靠,故该关系模式不属于4NF。 总而言之,关系模式学生(学号,姓名,性别,专业)为BCNF。 (2)分析关系模式老师(编号,姓名,性别,职称,所教科目)和课程(课程号,课程名,学分)在关系模式老师(编号,姓名,性别,职称,所教科目)和课程(课程号,课程名,学分)中,每一个属性全部不能再分,故,属于首先满足1NF.主键分别为编号和课程号,每一个非主属性完全依靠于候选键,故,这两个关系模式首先属于2NF。且每一个非主属性不传输函数依靠于候选键
15、学号,故属于3NF。而且,候选键编号和课程号决定一切非主属性,故,该关系模式属于BCNF。 因为关系模式中不存在多值依靠,故,不属于4NF。 即,关系模式老师(编号,姓名,性别,职称,所教科目)和课程(课程号,课程名,学分)属于BCNF。 (3)分析关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)在关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)中每一个属性全部不能再分,故,先属于1NF。在关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)中,主键为学号,其它全部是非主属性,每一个非主属性完全依靠于候选键,故,该关系模
16、式属于2NF。 在关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)中,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩全部是非主属性,因为存在函数依靠,即,学号平均成绩,平均成绩总成绩,故,该关系模式不属于3NF。总而言之,关系模式成绩(学号,姓名,数学,物理,化学,英语,政治,总成绩,平均成绩)为2NF。七、源代码及查询截图2. 程序源代码: (1)建表代码:create table 学生成绩信息( 学号 CHAR(10) NOT NULL, 姓名 CHAR(10) NOT NULL, 高数 CHAR(5) NOT NULL, 物理 CHAR (5) NOT N
17、ULL, 英语CHAR (5) NOT NULL,化学 CHAR (5) NOT NULL,政治CHAR (5) NOT NULL,总成绩 CHAR (5) NOT NULL,平均成绩 CHAR (5) NOT NULL); create table 课程基础信息( 课程号 CHAR(5) NOT NULL,课程名 CHAR(10) NOT NULL,学分 CHAR (5) NOT NULL);create table 学生基础信息( 学号 CHAR(10) NOT NULL,姓名 CHAR (10) NOT NULL,专业 CHAR(10) NOT NULL,性别 CHAR(4) NOT N
18、ULL);create table 老师基础信息( 编号 CHAR(10) NOT NULL,姓名 CHAR (10) NOT NULL,职称 CHAR(4) NOT NULL,性别 CHAR(4) NOT NULL,所教科目 CHAR(10) NOT NULL, (2)数据库连接代码:建立一个CAdodc类 class CAdodc : public CWndprotected:DECLARE_DYNCREATE(CAdodc)public:CLSID const& GetClsid()static CLSID const clsid= 0x67397aa3, 0x7fb1, 0x11d0,
19、 0xb1, 0x48, 0x0, 0xa0, 0xc9, 0x22, 0xe8, 0x20 ;return clsid;virtual BOOL Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect,CWnd* pParentWnd, UINT nID,CCreateContext* pContext = NULL) return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
20、BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect, CWnd* pParentWnd, UINT nID,CFile* pPersist = NULL, BOOL bStorage = FALSE,BSTR bstrLicKey = NULL) return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,pPersist, bStorage, bstrLicKey); 实现:#include stdafx.h#i
21、nclude adodc.h#include _recordset.h#include Font.hCString CAdodc:GetConnectionString()CString result;InvokeHelper(0x1, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);return result;void CAdodc:SetConnectionString(LPCTSTR lpszNewValue)static BYTE parms =VTS_BSTR;InvokeHelper(0x1, DISPATCH_PROPER
22、TYPUT, VT_EMPTY, NULL, parms, lpszNewValue);(3)功效模块代码: 显示数据库中原纪录:void CBaDialog:OnStatr()m_ListCtrlx.DeleteAllItems();m_ListCtrlb.DeleteAllItems();m_ListCtrll.DeleteAllItems();if(m_Set.IsOpen()m_Set.Close();if(m_bSet.IsOpen()m_bSet.Close();m_cob.GetLBText(m_cob.GetCurSel(),m_Getstring);this-Select()
23、;m_tSet.Open();m_nRecordCount=this-Show();this-display();this-exhibit();m_bS = GetDlgItem(IDC_STATR)-EnableWindow(FALSE);this-Enable(TRUE); 增加统计功效实现: void CBaDialog:OnAdd() / TODO: Add your control notification handler code hereSelec=TRUE;CAddialog dlg;if( dlg.DoModal()=IDOK) if(dlg.m_nxue=200) / m_
24、nxue为学生学号 AfxMessageBox(学号在1200之间);/增加统计时学号输入异常,系统提醒 return; m_Set.AddNew(); /实现对数据插入 m_nRecordCount+=1; /统计数量加一 m_Set.m_column1=dlg.m_nxue; m_Set.m_column2=dlg.m_strName; m_Set.m_column3=dlg.m_fmaths; m_Set.m_column4=dlg.m_fphysical; m_Set.m_column5=dlg.m_fchemistry; m_Set.m_column6=dlg.m_fenglish;
25、 m_Set.m_column7=dlg.m_fpolitic;m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglish+dlg.m_fpolitic; /对输入数进行求和 m_Set.m_column9=(float)(m_Set.m_column8/5); /计算平均值 this-Equal(); m_Set.Update();/Update()一定放在Equal()后,更新数据 m_Set.Requery(); this-Xuan(); 删除统计功效实现: void CBaDialog:OnD
26、elect() / TODO: Add your control notification handler code here CDelectDialog dlg;Selec=FALSE;if(dlg.DoModal()=IDOK)if(dlg.m_nPass!=1234) /程序中密码均为1234AfxMessageBox(密码不正确!你没有权限删除统计); /密码不正确删除不能实施 elsethis-Select(); /实现对数据删除 m_Set.MoveFirst();BOOL sel=FALSE;do if(m_Set.m_column1!=dlg.m_nxue) m_Set.Mov
27、eNext(); else m_nRecordCount-=1; sel=TRUE; m_bSet.MoveFirst(); this-Equal(); m_Set.Delete(); m_Set.Requery(); break; while(!m_Set.IsEOF(); if(sel=FALSE) /数据库中没有要符合要求统计AfxMessageBox(没有此统计);return;elsethis-Xuan();修改统计功效实现: oid CBaDialog:OnEdit() / TODO: Add your control notification handler code here
28、CEditDialog dlg;if(dlg.DoModal()=IDOK) if(strcmp(dlg.m_pass,1234)!=0)AfxMessageBox(你没有权限更改统计!请重输入密码:); else this-Select(); m_Set.m_strFilter.Format(学号=%d,dlg.m_xue); m_Set.Requery(); if(m_Set.IsEOF() AfxMessageBox(没有此统计); Else /实现修改功效 for(int i=0;i=60 & q60)m_bSet.m_column4+=1;if(p=60)m_bSet.m_colum
29、n4-=1;if(p=80 & q80)m_bSet.m_column5+=1;if(p=80)m_bSet.m_column5-=1; m_bSet.Update(); if(!m_bSet.IsEOF() m_bSet.MoveNext(); else break; m_Set.Edit(); /更新数据 m_Set.m_column2=dlg.m_strName; /更新姓名 m_Set.m_column3=dlg.m_fmaths; /更新数学成绩 m_Set.m_column4=dlg.m_fphysical; /更新物理成绩 m_Set.m_column5=dlg.m_fchemi
30、stry; /更新化学成绩 m_Set.m_column6=dlg.m_fenglish; /更新英语成绩 m_Set.m_column7=dlg.m_fpolitic; /更新政治成绩 m_Set.m_column8=dlg.m_fmaths+dlg.m_fphysical+dlg.m_fchemistry+dlg.m_fenglish+dlg.m_fpolitic; /更新总成绩 m_Set.m_column9=(float)(m_Set.m_column8/5); /更新平均成绩 m_Set.Update(); m_Set.m_strFilter.Empty(); m_bSet.Clos
31、e(); m_Set.Close(); m_ListCtrlx.DeleteAllItems(); m_ListCtrlb.DeleteAllItems(); this-Select(); this-Show(); this-display(); 查询统计功效实现:void CBaDialog:OnFind() / TODO: Add your control notification handler code hereCFinDialog dlg;if( dlg.DoModal()=IDOK) this-Select();m_bSet.Close();if(dlg.m_Getstring2=
32、)/实现“=”查询m_Set.m_strFilter.Format(%s=%.2f,dlg.m_Getstring1,dlg.m_find);if(dlg.m_Getstring2=)/实现“=”查询m_Set.m_strFilter.Format(%s=%.2f,dlg.m_Getstring1,dlg.m_find);if(dlg.m_Getstring2=)/实现“=”查询m_Set.m_strFilter.Format(%sShow(); 3.程序截图:(1) 程序界面先开始按钮“显示”为可按状态,“增加统计”等四个按钮为灰色,不能按,按下“显示”按钮后,“显示”按钮变为不可按状态,其
33、它四个键变为可按状态,而且数据框中显示数据库中原统计。(2) 增加统计(3)增加结果(4)删除统计(密码为1234)(5)删除结果(6)修改统计(密码为1234)(7)修改结果(8)查询统计(9)查询结果(10)显示学生,老师,科目基础信息 4、设计中存在问题: 即使程序能运行,但还是存在着部分不足。以下是两处比较大不足:(1) 因为自己编程能力很差,所以程序代码全部是对一个类似例子经过改动得来。故而,程序即使能够运行,不过其中潜在错误很多,一不小心就会是程序瓦解,无法工作。这是此次课设一个致命不足。(2) 程序在实现对数据修改功效时,必需在对话框中输入学生各科成绩。需要修改科目成绩就写修改后
34、成绩,不用修改成绩还得再抄上去,比较麻烦。八、使用手册(1)用户进入系统后,就会看到学生管理系统主菜单页面。系统总共有九个模块,分别由0到8表示,在主菜单页面只能输入数字0到8,输入其它字符无效,假如用户输入无效字符,系统仍停留在主菜单页面。(2) 进入到主菜单页面后,用户能够依据自己需求选择不一样选项,选择后系统就会进入子系统页面,然后用户按系统提醒操作就行了。九、总结该经过这个课程设计,我们愈加牢靠掌握了C+知识。并对于以前不熟悉知识有了愈加深刻了解。同时,在完成此次课程设计过程中,老师同学给了我们很多宝贵提议和指点,我们很感谢她们。即使有些疲惫和困倦,但带给我很多收获。C+已经学了一个学
35、期了,有很多知识全部存在似懂非懂现象,这种现象经过实际上机操作,已经降低了很多。对这些知识也有了更深了解和很好掌握。也有很多理论上说得过去代码,但到了实际操作,却是行不通。这种迷惑,有很多已经经过实际操作处理了,并能够深刻认识,但也有很多没有明白。只能避过这些方法,换方法实现。在课程设计之前,因为有了综合试验经验和教训,明白了写代码这一步是很关键,因为当你把代码输入电脑,并用编译器将其运行,发觉经过不了,再来检验找出问题,这是一件很辛劳事情,也很浪费时间。于是在课程设计时候,我们花了几星期时间来计划和写代码,将要实现内容分析清楚,才把代码输入电脑。我们认为写程序,应该先找到该程序中关键地方,用多个方法来实现该关键,这才可能避免等到发觉逻辑上或编译器不支持上错误,才来想补救方法,这么花费时间在想补救方法是很不值得。此次任务完成,也表现出同学之间团结精神。实践是检验真理唯一标准。没有实践,就不会发觉和深刻体会它真实所在。只有经过检验真理,在自己心里,才会认可它真实性。面向对象程序设计完成,使我们知道了真理关键性,理论和实际相结合,才能真正把握所学和所掌握知识。同时培养了我们团体精神,使我我们知道了团体关键性。十、参考文件1 钱能.C+程序设计.北京:清华大学出版社2 钱能.C+程序设计试验指导.北京:清华大学出版社3 谭浩强.C程序设计.北京:清华大学出版社