版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、福建农林大学计算机与信息学院福建农林大学计算机与信息学院 课程设计报告课程设计报告 课程名称:数据库原理课程设计 论文题目: 学生考试管理系统 姓 名: 系: 计算机科学与技术 专 业: 计算机科学与技术 年 级: 2012 学 号: 指导教师: 2014 年 12 月 28 日 福建农林大学计算机与信息学院福建农林大学计算机与信息学院 课程设计报告结果评定课程设计报告结果评定 评语 评分内容标准分得分 用软件工程的方法进行系统需求分析和系统设计得 出系统的数据流图数据字典和信息模型,写出需求 规格说明书。 15 按数据库设计方法和规范化理论得出符合 3NF 的逻 辑模型,外模型和物理模型。
2、25 定义 MySQL 的基本表和安全性、完整性要求。 10 设计并编写输入输出、查询统计、数据维护等功 能模块的应用程序。 35 对系统的各个功能模块进行集成、总调试和优化工 作,优化用户界面、撰写设计报告。 15 总分 指导教师签字:评定日期: 目目 录录 一一 考试管理系统可行性分析考试管理系统可行性分析 .1 1.1 问题描述及开发背景.1 1.2 开发意义、资金消耗及应用范围分析.1 二二 考试管理系统需求分析考试管理系统需求分析 .1 2.1 用户需求及功能分析汇总.1 2.2 系统流程图及数据流图.2 2.3 数据字典.2 2.4 数据库设计.4 三三 考试管理系统概要设计考试管
3、理系统概要设计 .4 3.1 系统模块划分.4 3.2 确定目标系统实现方案.5 四四 目标系统详细设计目标系统详细设计 .6 4.1 数据库设计.6 4.2 创建数据源并通过数据库操作事务对象连接.6 4.3 创建前台控件与数据源间数据传输的数据窗口对象和查询对象.7 4.3 创建数据管道.8 五五 系统编码系统编码(几个重要部分)(几个重要部分) .9 5.1EXAMONLINE.9-10 5.2ADDSUBJECT.11 5.3EXAMINFO.14-16 5.4TESTRESULT. .16-18 六六 测试测试 .18 6.1 单元模块测试与分析.18 6.2 集成测试与分析.18
4、6.3 系统运行截图.18-23 七七 总结总结.23-24 参考文献参考文献 .23 学生考试管理系统学生考试管理系统 开发环境:开发环境:Virtual C+ 一一 考试管理系统可行性分析考试管理系统可行性分析 1.11.1 问题描述及开发背景问题描述及开发背景 随着教育改革的进行,目前高中阶段教学已逐步采用同大学教学类似的学 分制,原先对于学生考试管理成绩资料的那种人工或半人工的管理方式的低效 性越来越明显;而对于中学若采购成套资料管理系统,无论从资金还是人员配 置方面多少都有些小题大做。鉴于以上话题的诸多特征,策划设计一个功能、 可操纵性以及资金消耗与之适合的学生考试管理系统。 1.2
5、1.2 开发意义、资金消耗及应用范围分析开发意义、资金消耗及应用范围分析 开发此类系统主要是想,在兼顾到性能和资金消耗的前提下,加速中学的 信息管理方式同教育改革相适应的速度。 该系统预定开发周期为一周,开发人员三人,每天工作八小时。规划同劳 动量等值市场开发经费为 500 元(具体规划为:人员酬劳每人每小时酬劳为 20 元,共计 420 元;市场调研、计算机设备使用以及交付客户初期的系统适应性 维护等经费 80 元。 该系统主要面向中学学生考试成绩资料管理人员。 二二 考试管理系统需求分析考试管理系统需求分析 2.12.1 用户需求及功能分析汇总用户需求及功能分析汇总 (1)保密方面:采用密
6、码登陆方式启动。 (2) 数据存储管理方面:采用服务器工作站方式,仅在服务器上运行数据 库管理软件,各年级办公室的计算机共享数据资源;具备不同服务器间、已购数 据库系统间数据块的传输功能。 (3)数据操作方面:注册账号。学生基本信息的录入、修改和查询功能; 课程添加、题库修改和删除功能;学生成绩的查询功能。 (4)易以操纵性:窗口界面布置风格尽量一致,要求输入类的操作尽量少。 (5)容错性能:由于操作人员主要为教师或学生,所以对误操作的处理能能 力要相对强一些。 (6)硬件及系统软件要求:基本的 windowsXP 平台即可。 (7)提供必要的维护文档。 2.22.2 系统流程图及数据流图系统
7、流程图及数据流图 系统流程图如图 2-1 所示(其中:“”表示后台数据流动, “” 表示信息管理员的前端操作) 。 数据流图如图 2-2 所示。 2.32.3 数据字典数据字典 (1)名字:事务 描述:需管理员操作的活动; (2)名字:后台事务 描述:通过激活的事件或数据库系统完成的活动,对于管理员是透明的。 图 2-1 系统流程图 (3)名字:学生基本信息 定义:学生基本信息=学号+姓名+性别+身份证+手机号 位置:数据库 (4)名字:课程信息 定义:课程信息=课程名+课程考题+考题答案+成绩 位置:数据库 (5)名字:学生成绩 定义:学生成绩=学号+课程名+成绩 图 2-2 系统数据流图
8、2.42.4 数据库设计数据库设计 E-R 图如图 2-3 所示。 图 2-3 E-R 图 三三 考试管理系统概要设计考试管理系统概要设计 3.13.1 系统模块划分系统模块划分 系统层次结构如图 3-1 所示,模块划分如图 3-2 所示。 图 3-1 系统层次结构示意图 图 3-2 系统设计模块划分示意图 说明:我负责数据库构建模块的设计。 3.23.2 确定目标系统实现方案确定目标系统实现方案 方案一:方案一:快速原型增量模式开发 优点:开发出最终版本的系统之前,所有原型系统都已通过与用户交互 而得到验证,据此产生的规格说明文档正确地描述了用户的要求,因此,在开 发过程的后续阶段不会因为发
9、现了规格说明文档错误而进行较大的返工。 开发人员通过建立原型系统已经学到了许多东西(至少知道了“系统不 应该做什么,以及怎样不去做不该做的事情” ) ,因此,在设计和编码阶段发生 错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误 的可能性。 劣势:该模式的本质特征是“快速” ,但由于原型系统的用途是获知用户的 真正需求,一旦需求确定了,原型版本就将被抛弃。这也决定了其对人员配备 和劳动量有较高的要求。 方案二:方案二:文档驱动模块化一次性开发 优点:由其文档驱动的特性,决定了这种方案具有阶段性和依赖性,同 时可最大限度推迟系统的具体代码实现。实践表明,对于规模相对较大的软件
10、 项目来说,往往编码开始的越早,最终完成开发工作所需要的时间反而越长。 因为,前面阶段的工作没做或做得不扎实,过早地考虑进行程序实现,往往导 致大量返工,有时甚至发生无法弥补的问题,带来灾难性结果。 可强迫开发人员采用规范的方法严格地规定了每个阶段必须提交的文档, 这将使软件开发设计变得相对容易一些。 由于是模块化设计,单元编码和测试,最后总装,正使得系统具有了一 定的开放性。一者简化了测试阶段复杂度,另一方面也有利于软件发布以后的 运行为阶段完善性维护和适应性维护。 劣势:系统的开发过程完全由文档驱动,同方案一相比,开发周期可能会 较长些。 确定:确定:从该系统的规模、应用范围、开发经费消耗
11、和现实的开发意义等方面综 合考虑,决定开发过程采用方案二进行。 四四 目标系统详细设计目标系统详细设计 说明:由于在开发过程中我主要负责数据库模块的设计,故接下来的内容 将主要叙述数据库模块的详细设计思路。 4.14.1 数据库设计数据库设计 根据第二章中图 2-3 所示的 E-R 数据结构示意图设计了四个而为关系表,分 别是:学生基本信息表,如表 4-1 所示; 课程信息表,如表 4-2 所示; 学生成绩表,如表 4-3 所示; 4.24.2 创建数据源并通过数据库操作事务对象连接创建数据源并通过数据库操作事务对象连接 总共创建两个数据源:本地服务器数据源(用于本校日常管理) ,远程数据 源
12、(用于上传或下载数据) 。 采用 PowerBuilder 的初始化文件 PB.INI 文件,利用通用方式通过事务对象 连接数据源。连接的程序流程如图 4-1 所示。 表 4-1 学生基本信息表定义 名称数据类型字节大小可为空默认值备注 学号char10否主键 姓名char8否 身份证号char20否 性别char2否 联系电话char11否 成绩int4可Null 表 4-2 课程信息表定义 名称数据类型字节大小可为空默认值备注 课程名称Char3否主键,外键 考题Char50可 考试成绩int 4否 表 4-3 学生成绩表定义 名称数据类型字节大小可为空默认值备注 学生用户名Char6否主
13、键,外键 课程名称Char3否主键,外键 成绩Float8可 表 4.1 的数据库操作语句: create table Student( Sno varchar(10) primary key, Sname Varchar(8), Snum Varchar(20), Ssex varchar(2), Stel Varchar(11), Spoint Varint(4) ) ; 表 4.2 的数据库操作语句: create table Course( Cname Varchar(8), primary key, Ctitle Varchar(50), Cpoint Varint(4) ) ; 表
14、 4.3 的数据库操作语句: create table SC( SCno varchar(10) primary key, SCname Varchar(8), SCpoint Varchar(10) ) ; 4.34.3 创建前台控件与数据源间数据传输的数据窗口对象和查询对象创建前台控件与数据源间数据传输的数据窗口对象和查询对象 d_cjupdata:存储过程类数据窗口对象,用于录入、修改、删除学生成绩表 中的记录; d_kc:sql 类数据窗口对象,用于通过课程号参数查询课程表中的对应记录; d_kcpudata:quickSelect 类型数据窗口对象,用于录入、修改、删除课程表 中的记
15、录; d_stuupdata:quickSelect 类型数据窗口对象,用于录入、修改、删除学生 基本信息表中的记录; d_score:sql 类数据窗口对象,用于通过学号参数查询学生成绩表中的相应 记录; d_xs:sql 类数据窗口对象,用于通过学号参数查询学生基本信息表中的相 应记录; query_xs:查询对象,与 d_xs 搭配使用; query_kc: 查询对象,与 d_kc 搭配使用; query_xs_xscj: 查询对象,与 d_score 搭配使用; 图 4-1 通过事务对象连接数据源程序流程示意图 4.34.3 创建数据管道创建数据管道 表结构定义时曾强调,表名、列名、类
16、型、宽度、Null 值等一经确定,便 难以修改。要更改表的这些属性,只有利用数据管道。此外我们还经常要复制 表的结构及表中部分后全部数据、讲一个表中数据加到另一个表中去(即使两 个表的结构不一样),还有讲一个数据库中的表复制到另一个数据库(可能是两 个不同类型的数据库包括服务器和本地库) 。数据管道都能满足这些要求。具体 创建使用程序流程如图 4-2 所示。 图 4-2 数据管道创建和使用程序流程示意图 五五 系统编码系统编码 5.1C+主程序源代码主程序源代码 系统实现的主程序 / ExamOnline.cpp : Defines the class behaviors for the ap
17、plication. / #include stdafx.h #include ExamOnline.h #include ExamOnlineDlg.h #include LOGIN.h #include Back.h #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif / CExamOnlineApp BEGIN_MESSAGE_MAP(CExamOnlineApp, CWinApp) /AFX_MSG_MAP(CExamOnlineApp) / NOTE -
18、 the ClassWizard will add and remove mapping macros here. / DO NOT EDIT what you see in these blocks of generated code! /AFX_MSG ON_COMMAND(ID_HELP, CWinApp:OnHelp) END_MESSAGE_MAP() / CExamOnlineApp construction CExamOnlineApp:CExamOnlineApp() / TODO: add construction code here, / Place all signifi
19、cant initialization in InitInstance / The one and only CExamOnlineApp object CExamOnlineApp theApp; / CExamOnlineApp initialization BOOL CExamOnlineApp:InitInstance() AfxEnableControlContainer(); :CoInitialize(NULL); / Standard initialization / If you are not using these features and wish to reduce
20、the size / of your final executable, you should remove from the following / the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls();/ Call this when using MFC in a shared DLL #else Enable3dControlsStatic();/ Call this when linking to MFC statically #endif /CBack dlg;
21、/dlg.DoModal(); CLOGIN logindlg; if(logindlg.DoModal()=IDOK) CString Name; Name=logindlg.m_UserName; CString sql=select * from register where username=+Name+; m_AdoConn.OnInitADOConn(); m_pRs=m_AdoConn.GetRecordSet(_bstr_t)sql); studentid=atoi(char*)(_bstr_t)m_pRs-GetCollect(studentid); CExamOnlineD
22、lg dlg; m_pMainWnd = dlg.DoModal(); /int nResponse = dlg.DoModal(); /if (nResponse = IDOK) / TODO: Place code here to handle when the dialog is / dismissed with OK /else if (nResponse = IDCANCEL) / TODO: Place code here to handle when the dialog is / dismissed with Cancel :CoUninitialize(); / Since
23、the dialog has been closed, return FALSE so that we exit the / application, rather than start the applications message pump. return FALSE; 5.2.AddSubject 代码代码 添加部件(其他功能类似) / ExamOnline.cpp : Defines the class behaviors for the application. / #include stdafx.h #include ExamOnline.h #include ExamOnlin
24、eDlg.h #include LOGIN.h #include Back.h #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif / CExamOnlineApp BEGIN_MESSAGE_MAP(CExamOnlineApp, CWinApp) /AFX_MSG_MAP(CExamOnlineApp) / NOTE - the ClassWizard will add and remove mapping macros here. / DO NOT EDIT
25、 what you see in these blocks of generated code! /AFX_MSG ON_COMMAND(ID_HELP, CWinApp:OnHelp) END_MESSAGE_MAP() / CExamOnlineApp construction CExamOnlineApp:CExamOnlineApp() / TODO: add construction code here, / Place all significant initialization in InitInstance / The one and only CExamOnlineApp o
26、bject CExamOnlineApp theApp; / CExamOnlineApp initialization BOOL CExamOnlineApp:InitInstance() AfxEnableControlContainer(); :CoInitialize(NULL); / Standard initialization / If you are not using these features and wish to reduce the size / of your final executable, you should remove from the followi
27、ng / the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls();/ Call this when using MFC in a shared DLL #else Enable3dControlsStatic();/ Call this when linking to MFC statically #endif /CBack dlg; /dlg.DoModal(); CLOGIN logindlg; if(logindlg.DoModal()=IDOK) CString Na
28、me; Name=logindlg.m_UserName; CString sql=select * from register where username=+Name+; m_AdoConn.OnInitADOConn(); m_pRs=m_AdoConn.GetRecordSet(_bstr_t)sql); studentid=atoi(char*)(_bstr_t)m_pRs-GetCollect(studentid); CExamOnlineDlg dlg; m_pMainWnd = dlg.DoModal(); /int nResponse = dlg.DoModal(); /if
29、 (nResponse = IDOK) / TODO: Place code here to handle when the dialog is / dismissed with OK /else if (nResponse = IDCANCEL) / TODO: Place code here to handle when the dialog is / dismissed with Cancel :CoUninitialize(); / Since the dialog has been closed, return FALSE so that we exit the / applicat
30、ion, rather than start the applications message pump. return FALSE; 5.3ExamInfo 学生考试科目,成绩的录入,保存 / ExamInfo.cpp : implementation file / #include stdafx.h #include ExamOnline.h #include ExamInfo.h #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_; #endif extern CExamO
31、nlineApp theApp; / CExamInfo dialog CExamInfo:CExamInfo(CWnd* pParent /*=NULL*/) : CDialog(CExamInfo:IDD, pParent) /AFX_DATA_INIT(CExamInfo) / NOTE: the ClassWizard will add member initialization here /AFX_DATA_INIT void CExamInfo:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_
32、DATA_MAP(CExamInfo) DDX_Control(pDX, IDC_SUBJECTCOMBO, m_SubjectCombo); /AFX_DATA_MAP BEGIN_MESSAGE_MAP(CExamInfo, CDialog) /AFX_MSG_MAP(CExamInfo) ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk) ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel) /AFX_MSG_MAP END_MESSAGE_MAP() / CExamInfo message handlers BO
33、OL CExamInfo:OnInitDialog() CDialog:OnInitDialog(); m_AdoConn.OnInitADOConn(); CString sql=select* from subject; m_pRs=m_AdoConn.GetRecordSet(_bstr_t)sql); while(m_pRs-adoEOF=0) CString subject=(char*)(_bstr_t)m_pRs-GetCollect(subjectname); m_SubjectCombo.AddString(subject); m_pRs-MoveNext(); m_AdoC
34、onn.ExitConn(); return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE void CExamInfo:OnButtonOk() UpdateData(); if(m_SubjectCombo.GetCurSel()=-1) AfxMessageBox(请选择科目); return; int studentid=theApp.studentid; m_SubjectCombo.GetLBText(m_Su
35、bjectCombo.GetCurSel(),Subject); m_AdoConn.OnInitADOConn(); CString sql; sql.Format(select * from result where studentid=%d and Subject=%s ,studentid,Subject); m_pRs=m_AdoConn.GetRecordSet(_bstr_t)sql); if(m_pRs-adoEOF) sql=select * from subject where subjectname=+Subject+; m_pRs=m_AdoConn.GetRecord
36、Set(_bstr_t)sql); Sid=atoi(char*)(_bstr_t)m_pRs-GetCollect(subjectid); sql.Format(select *from test where subjectid=%d order by testid,Sid); m_pRs=m_AdoConn.GetRecordSet(_bstr_t)sql); Question=(char*)(_bstr_t)m_pRs-GetCollect(question); CDialog:OnOK(); else MessageBox(该考生以进行过本科目的考试); m_AdoConn.ExitC
37、onn(); void CExamInfo:OnButtonCancel() CDialog:OnCancel(); void CExamInfo:OnOK() OnButtonOk(); 5.4.TestResult 判断考生做题是否正确的部件,正确便加分。 / TestResult.cpp : implementation file / #include stdafx.h #include ExamOnline.h #include TestResult.h #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char T
38、HIS_FILE = _FILE_; #endif / CTestResult dialog extern CExamOnlineApp theApp; CTestResult:CTestResult(CWnd* pParent /*=NULL*/) : CDialog(CTestResult:IDD, pParent) /AFX_DATA_INIT(CTestResult) / NOTE: the ClassWizard will add member initialization here /AFX_DATA_INIT void CTestResult:DoDataExchange(CDa
39、taExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CTestResult) DDX_Control(pDX, IDC_RESULTLIST, m_ResultList); /AFX_DATA_MAP BEGIN_MESSAGE_MAP(CTestResult, CDialog) /AFX_MSG_MAP(CTestResult) ON_BN_CLICKED(IDC_CANCEL, OnCancel) /AFX_MSG_MAP END_MESSAGE_MAP() / CTestResult message handlers B
40、OOL CTestResult:OnInitDialog() CDialog:OnInitDialog(); m_ResultList.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_E X_GRIDLINES|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE); m_ResultList.InsertColumn(0,题号,LVCFMT_CENTER,200,0); m_ResultList.InsertColumn(1,结果,LVCFMT_CENTER,200,1); m_AdoCon
41、n.OnInitADOConn(); CString sql=select*from examminginfo; m_pRs=m_AdoConn.GetRecordSet(_bstr_t)sql); int i=0; int sum=0; while(m_pRs-adoEOF=0) CString num=(char*)(_bstr_t)m_pRs-GetCollect(testnum); CString result=(char*)(_bstr_t)m_pRs-GetCollect(totle); m_ResultList.InsertItem(i,); m_ResultList.SetIt
42、emText(i,0,num); if(result=0) m_ResultList.SetItemText(i,1,错误); else m_ResultList.SetItemText(i,1,正确); i+; sum+=atoi(result); m_pRs-MoveNext(); CString str; str.Format(%d,sum); m_ResultList.InsertItem(i,); m_ResultList.SetItemText(i,0,总分:); m_ResultList.SetItemText(i,1,str+分); CTime time; time=CTime
43、:GetCurrentTime(); CString Tstr=time.Format(%m 月%d 日%H:%M); sql=update result set closetime=+Tstr+,totle=+str+ where starttime=+TimeStr+; m_AdoConn.ExecuteSQL(_bstr_t)sql); m_AdoConn.ExitConn(); return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should r
44、eturn FALSE void CTestResult:OnCancel() CString sql; sql.Format(delete from examminginfo); m_AdoConn.OnInitADOConn(); m_AdoConn.ExecuteSQL(_bstr_t)sql); m_AdoConn.m_pCon-Close(); CDialog:OnCancel(); 六六 测试测试 6.16.1 单元模块测试与分析单元模块测试与分析 (1)数据操作测试:由于该单元的录入、修改、查询、删除和更新这些操作的 控制均由后台数据库系统管理,而后台数据库系统采用的是 Microsoft 发布的成 熟系统,故可能出问题主要发生在前台向后台传送操作参数过程中,而
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甲状腺炎症状解析及护理要点指南
- 朝阳市护士招聘笔试题及答案
- 沧州市专职消防员招聘考试题及答案
- 沧州市护士招聘考试题及答案
- 中国机器人辅助上颈椎内固定临床循证指南总结2026
- 月经不调症状解读及护士实践指导
- 出血征象的评估
- 保定市辅警招聘笔试题及答案
- 职业规划模板资源
- 声音传感器科普
- 收受回扣的管理制度包括(3篇)
- 2026四川宜宾市天原集团招聘77人笔试历年典型考点题库附带答案详解
- 2025功效护肤趋势报告
- 2026年燃气供应公司气源质量监测管理制度
- 2025年汽车高级维修工汽车维修工高级题库
- 风电场项目(土建、电气、机务)强制性条文汇编
- 儿童中医药科普
- JJG 694-2025原子吸收分光光度计检定规程
- 厂区禁烟活动方案
- 2025年中考语文三模试卷
- 电力工程施工进度计划及协调措施
评论
0/150
提交评论