试卷生成与题库管理系统毕业论文 vc++.doc

上传人:文库蛋蛋多 文档编号:3993132 上传时间:2023-03-30 格式:DOC 页数:54 大小:181KB
返回 下载 相关 举报
试卷生成与题库管理系统毕业论文 vc++.doc_第1页
第1页 / 共54页
试卷生成与题库管理系统毕业论文 vc++.doc_第2页
第2页 / 共54页
试卷生成与题库管理系统毕业论文 vc++.doc_第3页
第3页 / 共54页
试卷生成与题库管理系统毕业论文 vc++.doc_第4页
第4页 / 共54页
试卷生成与题库管理系统毕业论文 vc++.doc_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《试卷生成与题库管理系统毕业论文 vc++.doc》由会员分享,可在线阅读,更多相关《试卷生成与题库管理系统毕业论文 vc++.doc(54页珍藏版)》请在三一办公上搜索。

1、试卷生成与题库管理系统 开发工具和技术本系统使用Visual C+ 6.0作为开发软件,后台使用SQL Server 2000作为本系统的数据库,对于数据库的访问操作采用ADO技术,从而实现系统逻辑功能。系统需求分析系统主要针对教师对试题的管理需求和对试卷的生成及管理需求。主要功能如下。1.用户登录模块身份验证,读取数据库中用户信息,验证用户的登录方式、用户名及密码,全部通过则进入系统,如果三次登录失败则退出系统。2.抽取现有试卷模块抽取现有试卷(面向所有用户),用户可以浏览权限范围内的科目的所有试卷及答案,包括已组试卷和导入的成套试卷,可以导入成套试卷及答案。3. 自动组卷模块自动组卷(面向

2、所有用户),用户可以对权限范围内的科目进行自动组卷。选定科目后,选择共需几道大题、试卷的总分值、每道大题的题型、每大题包含小题的数量及每道大题的分值(以上为必选);对于每道大题可以进入“选择题目范围及难度”模块对题目进行范围和难度的限制(可选)。组卷后选择是否保存试卷。试卷生成后可以将试卷和答案导出至word文档。再次选定科目后清除上一次的显示结果进入下一次的自动组卷模式。4. 手动组卷模块手动组卷(面向所有用户),用户可以对权限范围内的科目进行手动组卷。选定科目后,选择共需几道大题、试卷的总分值、每道大题的题型、每大题包含小题的数量及每道大题的分值;对于每道大题需进入“选择试题”模块浏览试题

3、库中的对应题型从中手动选择所需试题。由于题库中题量较大,可以通过分类查询及精确查询筛选试题进行查看,亦可将试题导出至word文档进行浏览,选择试题完毕后保存回到“手动组卷”模块。(以上全部为必须操作)。组卷后选择是否保存试卷。试卷生成后可以将试卷和答案导出至word文档。再次选定科目后清除上一次的显示结果自动进入下一次的手动组卷模式。5. 试卷管理模块试卷管理(面向管理员),一般管理员仅可以对自己组成及导入的试卷进行管理,系统管理员可以管理全部科目中的全部试卷。功能包括:浏览试卷、删除试卷、修改答案。其中在“浏览试卷”模块和“修改答案”模块中可以将试卷及答案导出至word文档进行查看及修改。6

4、. 试题管理模块试题管理(面向管理员),一般管理员仅可以对权限范围内的科目的试题进行管理,系统管理员可以管理全部科目中的全部试题。功能包括:浏览试题、导出试题至word文档查看、查询试题(分为条件查询和精确查询)、成批(从word)导入试题、逐道添加试题、删除试题、修改试题、清空试题。7.题型管理模块题型管理(面向管理员),一般管理员和系统管理员均可对题型进行管理。功能包括:添加新题型和删除已有题型。8. 科目管理模块科目管理(面向系统管理员),只有系统管理员可以对科目进行管理。功能包括:添加新科目和删除已有科目。9. 修改密码模块修改密码(面向所有用户),所有用户登录后均可对自己的密码进行修

5、改,保存修改后下一次登录以新密码为准。系统总体设计本系统的两大主要功能为:题库功能和试卷功能。由此将系统划分为八大模块,分别为:试题管理、题型管理、科目管理、抽取现有试卷、自动组卷、手动组卷、试卷管理和修改密码。功能模块设计试卷生成与题库管理系统的主要功能是为使用者提供一个简单快捷的试题录入、查询、浏览,快速组卷及试卷管理的软件系统。同时降低在查找试题上的工作难度,节省时间,也方便了设置试卷难度,并提供保存和查看组成试卷和成套导入的试卷的功能。系统模块分为以下几个部分,如图3.1所示。图3.1 模块图设计流程下面着重介绍一下登录模块的搭建过程。安装本系统后,打开程序,先进入欢迎界面,点击“登录

6、系统”,进入登录界面。1. 结构图登录模块结构图如图3.2所示。登录进入主界面欢迎界面失败三次退出程序图3.2 登录模块结构图2. 界面设计“登录”界面是用户进入主界面的路径,由三个静态文本框控件和两个Edit Box控件,两个按钮控件和一个Combo Box控件组成。界面如图3.3所示。图3.3 登录界面3. 属性设置三个静态文本框的Caption属性分别为:登录方式、用户名、密码。Combo Box的Data属性为:系统管理员n普通管理员n一般用户。“密码:”静态文本框对应的Edit Box的Style的Password属性为选中状态。两个按钮控件的Caption属性分别为:登录系统和取消

7、登录。4. 数据库相关设计登录信息需从用户信息表读取,该表tbLogin有四个字段,分别是:Username、Password、权限、科目。如表3.1所示。表3.1 用户信息表列名数据类型字段长度可否为空说明Usernamenvarchar20NOT NULL用户名Passwordnvarchar20NOT NULL密码Purviewnvarchar20NOT NULL用户权限(登录方式)Subjectnvarchar50NULL用户权限内的科目5. 功能当用户在登录界面输入相关信息后,系统进行判断,输入的用户名、密码、选择的登录方式和数据库中的信息对应无误后进入主界面。如果没有选择登录方式,

8、系统提示请先选择登录方式!;用户名或密码未填写,系统提示用户名或密码未填写!;用户名输入错误或者登录方式选择错误,系统提示用户不存在!;用户名和登录方式均正确后验证密码,正确进入,不正确提示重新输入,最多输入三次,超过次数后系统自动退出。系统记录下此用户的权限和用户名,以便以后对信息的各种操作。系统管理员有对所有题库、题型、所有科目的试题和试卷的管理权限;一般管理员有对题型、权限范围内科目的试题和试卷的管理权限;一般用户只能利用本系统对权限范围内的科目添加试卷(组卷和导入成套试卷),对试题信息只有浏览权限。这样保证了系统的安全性。登录在登录窗口选择登录方式、键入用户名和密码后进行登录,登录信息

9、正确进入系统主界面。用户名或密码输入错误3次则自动退出系统。代码如下所示。UpdateData(TRUE);if(m_strPurview.IsEmpty()AfxMessageBox(请先选择登录方式!);return;if(m_username.IsEmpty() | m_password.IsEmpty()AfxMessageBox(用户名或密码未填写!);return;CString strSql;strSql.Format(SELECT * FROM tbTeacher where Username=%s,m_username);pRs-Open(strSql,CADORecords

10、et.openQuery);if(!pRs-IsOpen() return; if(pRs-GetRecordCount()MoveFirst();CString strPassword;pRs-GetFieldValue(Username,strUsername);pRs-GetFieldValue(Password,strPassword);pRs-GetFieldValue(Purview,strPurview);pRs-GetFieldValue(Subject,strSubject);pRs-GetFieldValue(ManageSubject,strManageSubject);

11、if(m_strPurview != strPurview)AfxMessageBox(用户不存在!);wrong_num+;if(wrong_num = 3)OnCancel();return;if(m_password != strPassword)AfxMessageBox(密码不正确,请重新输入!);m_password.Empty();UpdateData(FALSE);wrong_num+;if(wrong_num = 3)OnCancel();return;CDialog:OnOK();3.4.2.2 抽取现有试卷-预览试卷及答案在“抽取现有试卷”界面选定试卷后单击“预览试卷及答

12、案”按钮,从数据库中读取当前选中试卷的内容和答案并将其赋值给“预览试卷及答案”模块中的相应属性,进入该模块后在相应位置显示试卷的内容及答案。代码如下所示。CBrowseAllDlg browseallDlg;CString strID = Now_ID;if(strID.IsEmpty()return;CString strType;if(strID.GetLength() % 2)strType = 成套试卷;elsestrType = 已组试卷;CString strAnswer,strPaper;CString strChineseName = m_strSubject;CString

13、strTableName;if(strType = 已组试卷)strTableName = FindtbPaper(strChineseName);elsestrTableName = FindtbExist(strChineseName);CADORecordset *pRs = new CADORecordset(pDB);CString strSql;strSql.Format(select * from %s where ID=%s,strTableName,strID);pRs-Open(_bstr_t(strSql),CADORecordset.openQuery);if(pRs-

14、IsOpen()pRs-GetFieldValue(答案,strAnswer);pRs-GetFieldValue(内容,strPaper);browseallDlg.m_strTitleAnswer = 试卷ID:;browseallDlg.m_strTitleAnswer += strID;browseallDlg.m_strTitleAnswer += 答案;browseallDlg.m_strTitlePaper = 试卷ID:;browseallDlg.m_strTitlePaper += strID;browseallDlg.m_strTitlePaper += 内容;browse

15、allDlg.m_strAnswer = strAnswer;browseallDlg.m_strPaper = strPaper;browseallDlg.strID = strID;browseallDlg.DoModal();pRs-Close();delete pRs;3.4.2.3 自动组卷在“自动组卷”模块中完成所有组卷信息的设置后点击“开始组卷”按钮完成自动组卷的工作。设置信息中难度章节的限制设置为可选项。代码如下所示。CString question_ID = ; /要添加的试卷信息CString question_score =;CString question_answer

16、 = ;CString fangan_ID = ;CString content_answer = SetTitle();for(int i = 0 ; i IsOpen()pRs-Close();/定义字符串存储SQL语句CString strSql;/初始化SQL语句字符串,获得所选题库的数据strSql.Format(select * from %s where Type=%s order by ID,Table_name,m_stri);/打开当前选中的题库pRs-Open(strSql,CADORecordset.openQuery);int Question_num = pRs-G

17、etRecordCount();if(Question_num m_nCounti)AfxMessageBox(题库中题目数量不足!);return FALSE;/随即选择试题int No100;for(int now = 0 ; now 100 ; now+)Nonow = -1;int j = 0;srand(unsigned)time(NULL);/小题while(j MoveTo(x)continue;CString strNo;strNo.Format(_T(%d),j+1);m_strPaper += strNo;m_strPaper += .;content_answer +=

18、strNo;content_answer += .;CString strContent;pRs-GetFieldValue(Content,strContent);m_strPaper += strContent;m_strPaper += rnrn;CString strID;pRs-GetFieldValue(ID,strID);question_ID += strID;CString strAnswer;pRs-GetFieldValue(Answer,strAnswer);if(strAnswer.IsEmpty()strAnswer = 无;question_answer += s

19、trAnswer;content_answer += strAnswer;content_answer += rnrn;j+;if(!(j = m_nCounti & i = m_nNumber)question_ID += ,;question_answer +=;/endwhile/endif/+限制了章节或难度+else/+只限制了章节+if(nSelDiffi = 0)CString strSql;strSql.Format(select * from %s where Type=%s,Table_name,m_stri);int nNo = 1;bool IsFirst = TRUE

20、;for(int j = 0 ; j IsOpen()pRs-Close();/打开当前选中的题库pRs-Open(strSql,CADORecordset.openQuery);int Question_num = pRs-GetRecordCount();if(Question_num m_nCounti)AfxMessageBox(题库中题目数量不足!);return FALSE;/随即选择试题int No100;for(int now = 0 ; now 100 ; now+)Nonow = -1;j = 0;srand(unsigned)time(NULL);/小题while(j M

21、oveTo(x)continue;CString strNo;strNo.Format(_T(%d),j+1);m_strPaper += strNo;m_strPaper += .;content_answer += strNo;content_answer += .;CString strContent;pRs-GetFieldValue(Content,strContent);m_strPaper += strContent;m_strPaper += rnrn;CString strID;pRs-GetFieldValue(ID,strID);question_ID += strID;

22、CString strAnswer;pRs-GetFieldValue(Answer,strAnswer);if(strAnswer.IsEmpty()strAnswer = 无;question_answer += strAnswer;content_answer += strAnswer;content_answer += rnrn;j+;if(!(j = m_nCounti & i = m_nNumber)question_ID += ,;question_answer +=;/endwhile/endif/+只限制了难度+elseif(nSelChapi = 0)int nNo = 1

23、;for(int j = 0 ; j 0)/判断是否已经有题库打开if(pRs-IsOpen()pRs-Close();/定义字符串存储SQL语句CString strSql;/初始化SQL语句字符串,获得所选题库的数据strSql.Format(select * from %s where Type=%s and Difficulty=%s order by ID,Table_name,m_stri,autoDifficulty_Chinesej);/打开当前选中的题库pRs-Open(strSql,CADORecordset.openQuery);int Question_num = pR

24、s-GetRecordCount();/随即选择试题int No100;for(int now = 0 ; now 100 ; now+)Nonow = -1;int k = 0;srand(unsigned)time(NULL);/小题while(k MoveTo(x)continue;CString strNo;strNo.Format(_T(%d),nNo);m_strPaper += strNo;m_strPaper += .;content_answer += strNo;content_answer += .;CString strContent;pRs-GetFieldValue

25、(Content,strContent);m_strPaper += strContent;m_strPaper += rnrn;CString strID;pRs-GetFieldValue(ID,strID);question_ID += strID;CString strAnswer;pRs-GetFieldValue(Answer,strAnswer);if(strAnswer.IsEmpty()strAnswer = 无;question_answer += strAnswer;content_answer += strAnswer;content_answer += rnrn;k+

26、;nNo+;if(!(nNo = m_nCounti & i = m_nNumber)question_ID += ,;question_answer +=;/endwhile/endif/endfor/endif/+既限制了章节又限制了难度+elseCString strSql;strSql.Format(select * from %s where Type=%s,Table_name,m_stri);bool IsFirst = TRUE;for(int j = 0 ; j 30 ; j+)if(Chapter_numij = 1)CString temp;if(IsFirst)temp

27、.Format( and (Chapter=%s,autoChapter_Chinesej);strSql += temp;elsetemp.Format( or Chapter=%s,autoChapter_Chinesej);strSql += temp;IsFirst = FALSE;strSql += );int nNo = 1;for(j = 0 ; j 0)/判断是否已经有题库打开if(pRs-IsOpen()pRs-Close();/定义字符串存储SQL语句temp.Format( and Difficulty=%s,autoDifficulty_Chinesej);strSql

28、 += temp;/打开当前选中的题库pRs-Open(strSql,CADORecordset.openQuery);int Question_num = pRs-GetRecordCount();/随即选择试题int No100;for(int now = 0 ; now 100 ; now+)Nonow = -1;int k = 0;srand(unsigned)time(NULL);/小题while(k MoveTo(x)continue;CString strNo;strNo.Format(_T(%d),nNo);m_strPaper += strNo;m_strPaper += .

29、;content_answer += strNo;content_answer += .;CString strContent;pRs-GetFieldValue(Content,strContent);m_strPaper += strContent;m_strPaper += rnrn;CString strID;pRs-GetFieldValue(ID,strID);question_ID += strID;CString strAnswer;pRs-GetFieldValue(Answer,strAnswer);if(strAnswer.IsEmpty()strAnswer = 无;q

30、uestion_answer += strAnswer;content_answer += strAnswer;content_answer += rnrn;k+;nNo+;if(!(nNo = m_nCounti & i = m_nNumber)question_ID += ,;question_answer +=;/endwhile/endif/endfor(难度循环)/endif(选择了难度和章节)/endif/endforCString question_content = m_strPaper; m_strAnswer = content_answer;CString ID = Fi

31、ndID(fangan_ID); CString strDate;GetDlgItem(IDC_DATETIMEPICKER_CREATE)-GetWindowText(strDate);CManageAllDlg *parent = (CManageAllDlg *)GetParent(); CStringstrUsername = parent-GetUsername();newPaper.FanganID = fangan_ID;newPaper.ID = ID;newPaper.QuestionID = question_ID;newPaper.QuestionScore = question_score;newPaper.QuestionAnswer = question_answer;newPaper.Content = question_content;newPaper.Answer = content_answer;newPaper.Username = strUsername;newPaper.Date

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号