面向对象课程设计(濮)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南师范大学工程与设计学院面向对象系统课程设计
课题名称: 学生考试系统
姓名:濮湘华
学号: 2011180532
专业:计算机科学与技术
指导老师:
目录
1、需求分析 (3)
2、系统设计 (3)
3、数据库设计 (6)
4、关键模块设计 (10)
5、课程设计心得 (31)
【课程设计名称】:学生考试系统
【学习内容】:学习数据库的概念模型的设计、数据库的使用、C++的面向对象的学习,VC数据库连接。
一、需求分析
根据学生考试的特点和学校的实际情况,以考试流程为基础,从专业角度出发,提供科学有效的考试模式。考试时采用系统自动从数据表中选题的方式,评卷时通过核对考生答案与正确答案得出考生的分数。
二、系统设计
2.1系统功能结构
学生考试系统功能结构图如图所示。
2.2 系统预览
学生考试系统主要由登陆界面、试题界面、及考试成绩管理等模块组成,学生考试管理系统主窗口用于考生选题答题操作,考试结果信息模块用于对考生的答题结果进行评分。
登陆界面:
主窗口界面:
考试结果窗口界面:
试题管理模块用于增添考试科目,并可以添加、修改和删除试题,如图4所示;学生成绩查询模块用于查询考生的考试成绩,如下图
成绩管理:
2.2 学生考试系统流程
二、数据库设计
1、数据库概念设计
根据前面介绍的需求分析和系统设计规划出本系统中使用的数据库实体对象分别为用户信息实体、科目信息实体、试题信息实体、试题答案信息实体、答案暂存信息实体和考试结果信息实体等。
(1)用户信息实体
用户信息实体包括用户编号、用户名、密码、密码提示问题、答案、真实姓名、年龄、性别、联系电话、用户权限、身份证号和注册日期。用户信息实体E-R图,如下图所示。用户实体:
(2)科目信息实体
科目信息实体包括科目ID和科目名称。科目信息实体E-R图,如下图
(3)试题信息实体
试题信息实体包括试题ID、试题内容、试题答案、试题分数和科目ID。试题信息实体E-R图,如下图
(4)试题答案信息实体
试题答案信息实体包括试题ID、A选项答案、B选项答案、C选项答案和D选项答案。试题答案信息实体E-R图,如下图
(5)答题暂存信息实体
答题暂存信息实体包括题号、试题内容、考生答案、考生得分和考生ID。答题暂存信息实体E-R图,如下图
(6)考试结果信息实体
考试结果信息实体包括起始时间、截止时间、考试科目、考试成绩和学生编号。考试结
果信息实体E-R图,如下图
2、数据库逻辑表
用户信息表主要用于记录用户注册信息、账号信息及密码,保障只有合法用户才能登录系统。该表的结构如图
注册后信息:
(2)考试科目表(subject)
考试科目表主要用于记录要考试的科目信息。该表的结构如图
(3)试题信息表(test)
试题信息表主要用于存放各科目考试题信息。该表的结构如下图
(4)试题答案信息表
试题答案信息表主要用于存放试题的答案选项。该表的结构如图
(5)答题信息暂存表
答题信息暂存表主要用于暂时存储考生在考试过程中的答题信息
(6)考试结果信息表
考试结果信息表主要用于存储考生考试的时间、科目、成绩等信息
三、关键模块设计
1、注册模块设计
注册过程中要用户登记身份证信息,在用户注册的同时系统将自动对身份证信息进行验证,验证身份证信息要从身份证号位数、出身年月、用户性别等资料进行验证。代码如下:
if(m_IDcard.GetLength() != 18)
{
AfxMessageBox("输入身份证号码无效");
return;
}
else
{
int num=0;
char ch;
for(int i=0;i<17;i++)
{
ch = m_IDcard.GetAt(i);
if(ch>47 && ch<58)
num++;
}
if(i==17)
{
ch = m_IDcard.GetAt(i);
if((ch>47 && ch<58) || (ch==88 || ch==120)) / num++;
}
if(num != 18)
{
AfxMessageBox("输入身份证号码无效");
return;
}
else
{
CString syear = m_IDcard.Mid(6,4);
int year = atoi(syear);
CString smonth = m_IDcard.Mid(10,2);
int month = atoi(smonth);
CString sday = m_IDcard.Mid(12,2);
int day = atoi(sday);
BOOL leap;
if(month<1||month>12)
{
AfxMessageBox("输入身份证号码无效");
return;
}
switch(month)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(day<0 || day>31)
{
AfxMessageBox("输入身份证号码无效");
return;
}
break;
case 4: case 6: case 9: case 11:
if(day<0 || day>30)
{
AfxMessageBox("输入身份证号码无效");
return;
}