高级数据库技术课程设计报告-学生考试管理系统.doc_第1页
高级数据库技术课程设计报告-学生考试管理系统.doc_第2页
高级数据库技术课程设计报告-学生考试管理系统.doc_第3页
高级数据库技术课程设计报告-学生考试管理系统.doc_第4页
高级数据库技术课程设计报告-学生考试管理系统.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1. 设计目的和任务12.开发环境12.1硬件环境12.2软件环境13.设计题目13.1题目名称13.2题目详细描述13.3功能要求24.相关技术及知识点34.1 sqlconnection对象34.2 sqlcommand对象34.3 sqldataadapter对象44.4 datatable对象44.5 dataset对象55.设计与实现65.1登录界面65.2教师管理界面75.3管理员管理界面125.4学生考试界面146.总结187.参考资料19高级数据库技术(ado.netxml)课程设计报告1. 设计目的和任务 综合运用ado.net 相关知识,设计一个具有实用价值的学生考试管理系统。 (1)巩固和加深对本课程基本知识的理解和掌握; (2)掌握c#编程和ado.net程序调试的基本技能; (3)掌握设计ado.net应用软件的基本思路和方法; (4)提高运用ado.net解决实际问题的能力; (5)培养撰写设计报告的能力。 2.开发环境2.1硬件环境笔记本电脑硬件概要cpu 英特尔 genuine intel(r) cpu t2130 1.86ghz主板wistron - 英特尔 945pm (calistoga-pm) + ich7-m/u内存金士顿 2g ddr2-sdram 666 mhz 显卡nvidia geforce go 7200 (g72)主硬盘希捷 120gb 声卡英特尔 82801gb ich7 - high definition audio b0网卡英特尔 pro/wireless 3945abg network connection (hp - row)2.2软件环境microsoft windows xp操作系统;microsoft sql server 2005;microsoft visual studio 2005;3.设计题目3.1题目名称学生考试管理系统3.2题目详细描述1、登录界面 2、新用户注册 3、教师管理界面 4、管理员管理界面 5、学生在线考试 3.3功能要求登录界面 功能: 1) 用户对应相应的权限进行登录,分教员、学生、管理员。登录后根据选择的权限进入相应的界面; 2) 输入用户名框非空,密码框非空,权限选择判断; 3) 新学员用户注册。注册后需管理员激活才能登录。教师管理界面 功能(按菜单项说明): 1) 试题管理,子菜单如下: 增加试题; 查询试题:按科目查询试题; 试题列表:按难度查询试题列表,并可增加、修改试题。 2) 考试管理,子菜单如下: 生成试卷; 试卷管理:查看试卷信息、激活/取消试卷。 3) 成绩管理,按试卷名查寻成绩。要算出平均分。管理员管理界面功能(按菜单项说明): 1) 用户管理,子菜单如下: 新建用户:新建学员用户,新建教员用户。 查询及修改学员。 用户信息列表,包括查询以及教员学员信息 2) 题库管理,管理试题库 学生在线考试 1) 维护个人信息 对个人信息进行查询, 修改2)在线答题。功能:可以选择已激活试卷答题。 在线评分。 保存考试成绩可供教师查询。4.相关技术及知识点ado.net提供了多种对象模型,比较典型的以下有五种,它们全部归类system.data.sqlclient名称空间下。4.1 sqlconnection对象ado.net使用sqlconnection对象与sql server进行连接。连接字符串的常用形式有两种:1.使用windows集成安全身份认证, 例如:string connectionstring =integratedsecurity=sspi;database=myschool.mdf;server=localhost;2.在连接字符串中指定服务器名、用户id、用户口令、数据库名等信息。 例如:string connectionstring = server=localhost; uid=sa; pwd=123; database=myschool.mdf;然后通过连接字符串直接创建sqlconnection对象,如sqlconnection conn = new sqlconnection(connectionstring);4.2 sqlcommand对象 在ado.net中,有两种操作数据库的方式:1.无连接的方式;2.保持连接的方式。不论哪种都可以通过sqlcommand对象提供的方法传递对数据库操作的命令,并返回命令执行结果。在保持连接的方式下操作数据库的一般步骤为:1.创建sqlconnection的实例;2.创建sqlcommand的实例;3.打开连接;4.执行命令;5.关闭连接。sqlcommand对象提供了多种完成对数据库操作的方法。常用有:1.executenonquery该方法执行sql语句的结果,但不返回命令执行的表数据,仅返回操作所影响的行数。2.executereaderexecutereader方法提供了只向前的、顺序的快速读取数据库中数据的方法。3.executescaler()该方法用于执行select查询,得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。4.3 sqldataadapter对象 sqldataadapter对象通过无连接的方式完成数据库和本地dataset之间的交互。使用这种方式操作数据库的一般步骤为:1.创建sqlconnection的实例;2.创建sqldataadapter的实例,需要的话,根据select语句生成其他sql语句;3.创建dataset的实例;4.使用fill方法将数据库中的表填充到dataset的表中;5.利用datagridview或者其他控件对象编辑或显示数据;6.需要的话,使用update方法更新数据库。sqldataadapter对象通过selectcommand、insertcommand、updatecommand和deletecommand属性为后台数据库提供对应的操作命令,并传递需要的参数。一般情况下,只需要提供select语句和连接字符串创建sqldataadapter对象,然后利用sqlcommandbuilder对象生成insertcommand、updatecommand和deletecommand属性。4.4 datatable对象 ado.net可以在与数据库断开连接的方式下通过dataset或datatable对象进行数据处理,当需要更新数据时才重新与数据源进行连接,并更新数据源。datatable对象表示保存在本机内存中的表,它提供了对表中行列数据对象的各种操作。可以直接将数据从数据库填充到datatable对象中,也可以将datatable对象添加到现有的dataset对象中。在断开连接的方式下,dataset对象提供了和关系数据库一样的关系数据模型,代码中可以直接访问dataset对象中的datatable对象,也可以添加、删除datatable对象。1. 创建datatable对象可以通过以下两种方式创建datatable对象:1) 通过datatable类的构造函数创建datatable对象,例如:datatable table = new datatable();2) 通过dataset的tables对象的add方法创建datatable对象,例如:dataset dataset = new dataset();datatable table = dataset.tables.add(mytablename);2. 在datatable对象中添加列在datatable对象中添加列的最常用的方法是通过datatable对象的column属性中的add方法。添加后的每一列都是一个datacolumn对象。3. 设置datatable对象的主键关系数据库中的表一般都有一个主键,用来惟一标识表中的每一行记录。通过datatable对象的primarykey属性可以设置datatable的主键。主键可以是一个或者多个datacolumn对象组成的数组。例如:datacolumn key = new datacolumn1;/dt是一个datatable对象key0 = dt.columns0;dt.primarykey = key;4. 在datatable对象中创建行datatable对象的每一行都是一个datarow对象,所以创建行时可以先利用datatable对象的newrow方法创建一个datarow对象,并设置新行中各列的数据,然后利用add方法将datarow对象添加到表中5. 将sql server数据库中的表填充到datatable中除了可以直接创建datatable对象的行列信息外,也可以通过dateadapter对象的fill方法将sql server数据库中的表填充到datatable对象中。4.5 dataset对象1. 创建dataset对象使用创建的dataset对象可以完成各种数据操作,利用向导生成的数据库数据源是一个强类型的dataset以及一对或多对强类型的datatable和tableadapter的组合。类型化的dataset是一个生成的类,是从.net framework的一般dataset类衍生来的,但提供了已定义的架构以及特定于该架构的属性和方法。同时,对于dataset中的每个表,还生成了特定于该dataset的附加衍生类,而且每个类都为相关的表提供了特定的架构、属性和方法。当然,也可以直接创建一般的dataset对象,例如:dataset mydataset = new dataset();2. 填充dataset对象创建dataset后,就可以使用sqldataadapter对象把数据导入到dataset对象中,比如通过fill方法将数据填充到dataset中的某个表中。5.设计与实现(包括每个设计点的文字描述,图表,关键代码) (该说明在最终报告里面要删除!)5.1登录界面在登录界面(图5-1)用户对应相应的权限选择用户类型进行登录,分教员、学生、管理员。登录后根据选择的权限进入相应的界面。输入用户名框非空,密码框非空,权限选择判断;登录界面还有新用户注册,同样是选择不同用户类型进行注册。注册后需管理员激活才能登录。还有一个就是找回密码,用户通过输入用户名和姓名等信息找回密码。 图5-1登录界面代码: if (validateinput() / 验证输入成功 string message = ; / 验证输入的密码 if (loginbll.validateuser(txtloginid.text.trim(), txtloginpwd.text, cbologintype.text, ref message) / 记录登录用户名和登录类型 userhelper.loginid = txtloginid.text; userhelper.logintype = cbologintype.text; if (cbologintype.text = 教师) / 创建教员主窗体对象 teacherform teacherform = new teacherform(); / 显示窗体 teacherform.show(); else if (cbologintype.text = 学生) studentform studentform = new studentform(); studentform.show(); else adminform adminform = new adminform(); adminform.show(); / 登录窗体隐藏 this.visible = false; 5.2教师管理界面在教师管理界面(图5-2)中有以下菜单和按钮:*选择题目(图5-3):右键选择题目加入到新建的试卷中;*成绩管理(图5-4)选择不同的试卷进行查询,读取数据到dataset,然后用dataset中数据计算该试卷的平均分;也可以直接修改dataset中表的数据,然后保存。增加试题:先输入好题目,然后提交,将数据插入数据库中;还有一些其它的功能,查询试题:按科目查询试题;试题管理:按难度查询试题列表,并可增加、修改试题。试题列表,按难度查询试题列表,并可增加、修改试题然后保存,将数据保存到数据库; 图5-2 图5-3 图5-4教师管理界面代码:/ 点击时,打开新增试题窗体 private void tsmiaddquestion_click(object sender, eventargs e) / 创建窗体对象 addquestionform addquestionform = new addquestionform(); / 设置 mdi 主窗体 addquestionform.mdiparent = this; / 显示窗体 addquestionform.show(); / 点击菜单中的“帮助”-”关于”,以模式窗口显示 about 窗体 private void tsmiabout_click(object sender, eventargs e) aboutform aboutform = new aboutform(); aboutform.mdiparent = this; aboutform.show(); / 以模式窗口显示 / 窗体加载事件处理 private void teacherform_load(object sender, eventargs e) / 设置状态栏标签显示的文字 lblteacher.text = string.format(教员0登录了!, userhelper.loginid); private void teacherform_formclosed(object sender, formclosedeventargs e) application.exit(); private void btnsearchquestion_click(object sender, eventargs e) checktitles ct = new checktitles(); ct.show(); private void btnquestionlist_click(object sender, eventargs e) / 创建窗体对象 testlist tform = new testlist(); / 设置 mdi 主窗体 tform.mdiparent = this; / 显示窗体 tform.show(); 选择题目代码: /选择题目窗口 private void testlist_load(object sender, eventargs e) dataset=getdatasetbll.getallquestion(ref dataadapter); dataset2 = getdatasetbll.getselectedquestion(ref dataadapter2, examid); dgvtest.datasource =dataset.tablesquestion; txtexamname.text = createtestform.examname; examid = createtestform.examid; /刷新 private void button1_click_1(object sender, eventargs e) dataset.tablesquestion.clear(); dgvtest.datasource = getdatasetbll.getquestionbydifficulty(cbodifficulty.text.trim(), ref dataadapter); /将选中的题目加入试卷中 private void tsmaddquestion_click(object sender, eventargs e) string message=; int sum = dgvtest.selectedcells.count; for (int i = 0; i sum;i+) string questionid = dgvtest.selectedcellsi.value.tostring(); message = createtestbll.addquestion(examid, questionid, ref examsum); txtexamsum.text = examsum.tostring(); messagebox.show(message); /将选中的题目从试卷中删除 private void tsmdeletequestion_click(object sender, eventargs e) string message=; int sum = dgvtest.selectedcells.count; for (int i = 0; i sum; i+) string questionid = dgvtest.selectedcellsi.value.tostring(); message = createtestbll.deletequestion(examid, questionid, ref examsum); txtexamsum.text = examsum.tostring(); messagebox.show(message); /已选择题目列表 private void btn_click(object sender, eventargs e) dataset2.tablesquestion.clear(); dataset2 = getdatasetbll.getselectedquestion(ref dataadapter2,examid); dgvselectedquestion.datasource = dataset2.tablesquestion; private void button3_click(object sender, eventargs e) this.close(); 成绩管理代码:/成绩管理的窗口 private void testgrademanageform_load(object sender, eventargs e) examid = cboexamid.text.tostring(); dataset = getdatasetbll.getscore(ref dataadapter,examid); /加载examid foreach (datarow row in dataset.tablesscore.rows) foreach(string item in cboexamid.items) if (item.tostring().equals(rowexamid.tostring() goto con; cboexamid.items.add(rowexamid.tostring(); con: ; dgvscore.datasource = dataset.tablesscore; private void btnsearch_click(object sender, eventargs e) /查询成绩 examid = cboexamid.text.tostring(); dataset.tablesscore.clear(); dataset = getdatasetbll.getscore(ref dataadapter, examid); dgvscore.datasource = dataset.tablesscore; int sum = 0,i=0,avgscore=0; foreach (datarow row in dataset.tablesscore.rows) sum += int.parse(rowscorevalue.tostring(); i+; if(i!=0) avgscore = sum / i; txtavgscore.text = avgscore.tostring(); /刷新 private void btnrefresh_click(object sender, eventargs e) dataset.tablesscore.clear(); dataset = getdatasetbll.getscore(ref dataadapter, examid); /保存 private void btnsave_click(object sender, eventargs e) dialogresult result = messagebox.show(确定); if (result = dialogresult.ok) sqlcommandbuilder builder = new sqlcommandbuilder(dataadapter); dataadapter.update(dataset, score); 5.3管理员管理界面管理员管理界面(图5-5):通过选择不同的菜单和按钮进入不同的界面,用户管理,其中有新建用户(新学员用户,新建教员用户)。 查询及修改学员(图5-6):用dataset读取数据到datagridview。 用户信息列表,包括查询以及教员学员信息。 题库管理,管理试题库 。 图5-5 图5-6学员信息界面代码:/学员窗口 private void testlist_load(object sender, eventargs e) dataset=studentlistbll.getallquestion(ref dataadapter); dgvtest.datasource = dataset.tablesstudent; /刷新 private void button1_click(object sender, eventargs e) dataset.tablesstudent.clear(); dataadapter.fill(dataset, student); /保存 private void button2_click(object sender, eventargs e) dialogresult result = messagebox.show(确定); if (result = dialogresult.ok) sqlcommandbuilder builder = new sqlcommandbuilder(dataadapter); dataadapter.update(dataset, student); /按性别查询 private void cbodifficulty_selectedindexchanged(object sender, eventargs e) dataset.tablesstudent.clear(); dgvtest.datasource = studentlistbll.getquestionbydifficulty(cbodifficulty.text.trim(), ref dataadapter); private void button3_click(object sender, eventargs e) this.close(); 5.4学生考试界面学生在线考试界面(图5-8):通过选择不同的菜单和按钮进入不同的界面:在线答题界面(图5-9):可以选择已激活试卷答题。还有维护个人信息 :对个人信息进行查询,修改 ;在线评分。保存考试成绩可供教师查询。 图5-8 图5-9学生在线考试界面代码: public partial class studentform : form public studentform() initializecomponent(); private void tsbonlineanswer_click(object sender, eventargs e) selectexamform sexamform = new selectexamform(); sexamform.mdiparent = this; sexamform.show(); private void tsbonlineanswer_click(object sender, eventargs e) answerquestionform aquestionform = new answerquestionform(); aquestionform.mdiparent = this; aquestionform.show(); 回答问题界面代码: /“答题卡”按钮 private void btnanswercard_click(object sender, eventargs e) answercardform answercardform=new answercardform(); answercardform.show(); /窗体加载事件 private void answerquestionform_load(object sender, eventargs e) dataset = getdatasetbll.examload(ref dataadapter, ref examid); /将题目放入strexam中 foreach (datarow row in dataset.tablesquestion.rows) strexamj, 0 = rowquestion.tostring(); strexamj, 1 = rowoptiona.tostring(); strexamj, 2 = rowoptionb.tostring(); strexamj, 3 = rowoptionc.tostring(); strexamj, 4 = rowoptiond.tostring(); strexamj, 5 = rowanswer.tostring(); j+; lblquestion.text += convert.tostring(questionindex + 1); displayquestion(questionindex); /显示题目及选项 public void displayquestion(int i) txtquestion.text = strexami,0; rdoa.text = rdoa.text+strexami,1; rdob.text = rdob.text+strexami,2; rdoc.text = rdoc.text+strexami,3; rdod.text = rdod.text+strexami,4; /“下一题”按钮事件,为studentanswers数组赋值 private void btnnext_click(object sender, eventargs e) lblquestion.text = 问题; rdoa.text = a.; rdob.text = b.; rdoc.text = c.; rdod.text = d.; if (questionindex j-1) messagebox.show(试题已答完,你可以点击按钮进行查看, 提示, messageboxbuttons.ok, messageboxicon.information); return; lblquestion.text += convert.tostring(questionindex + 1); displayquestion(questionindex); /记时器控件的tick事件 private void tmrcosttime_tick(object sender, eventargs e) int minute; int second; if (quizhelper.remainseconds 0) quizhelper.remainseconds-; minute = quizhelper.remainseconds / 60; second = quizhelper.remainseconds % 60; lbltimer.text = string.format(0:00:1:00, minute, second); else tmrcosttime.stop(); messagebox.show(时间到了,该交卷了!,提示,messageboxbuttons.ok,messageboxicon.warning); quizresultform quizresultform=new quizresultform(); quizresultform.mdiparent=this.mdiparent; quizresultform.show(); this.close(); /判断用户选择的答案 public string getstudentanswer() string answer = ; if (rdoa.checked) answer = a; else if (rdob.checked) answer = b; else if (rdoc.checked) answer = c; else if (rdod.checked) answer = d; else messagebox.show(请选择一项答案); return answer; 6.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论