



付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、试卷生成与题库管理系统开发工具和技术本系统使用 Visual C+ 6.0 作为开发软件,后台使用 SQL Server 2000 作为本系统的数据库,对于数据库的访问操作采用 ADO技术,从而实现系统逻辑功能。系统需求分析系统主要针对教师对试题的管理需求和对试卷的生成及管理需求。主要功能如下。1. 用户登录模块身份验证,读取数据库中用户信息,验证用户的登录方式、用户名及密码,全部通过则进入系统,如果三次登录失败则退出系统。2. 抽取现有试卷模块抽取现有试卷(面向所有用户) ,用户可以浏览权限范围内的科目的所有试卷及答案,包括已组试卷和导入的成套试卷,可以导入成套试卷及答案。3. 自动组卷模块
2、自动组卷(面向所有用户) ,用户可以对权限范围内的科目进行自动组卷。选定科目后,选择共需几道大题、试卷的总分值、每道大题的题型、每大题包含小题的数量及每道大题的分值(以上为必选) ;对于每道大题可以进入“选择题目范围及难度”模块对题目进行范围和难度的限制(可选) 。组卷后选择是否保存试卷。试卷生成后可以将试卷和答案导出至 word 文档。再次选定科目后清除上一次的显示结果进入下一次的自动组卷模式。4. 手动组卷模块手动组卷(面向所有用户) ,用户可以对权限范围内的科目进行手动组卷。选定科目后,选择共需几道大题、试卷的总分值、每道大题的题型、每大题包含小题的数量及每道大题的分值;对于每道大题需进
3、入“选择试题”模块浏览试题库中的对应题型从中手动选择所需试题。由于题库中题量较大,可以通过分类查询及精确查询筛选试题进行查看,亦可将试题导出至 word 文档进行浏览,选择试题完毕后保存回到“手动组卷”模块。 (以上全部为必须操作)。组卷后选择是否保存试卷。试卷生成后可以将试卷和答案导出至 word 文档。再次选定科目后清除上一次的显示结果自动进入下一次的手动组卷模式。5. 试卷管理模块试卷管理(面向管理员) ,一般管理员仅可以对自己组成及导入的试卷进行管理,系统管理员可以管理全部科目中的全部试卷。功能包括:浏览试卷、删除试卷、修改答案。其中在“浏览试卷”模块和“修改答案”模块中可以将试卷及答
4、案导出至 word 文档进行查看及修改。6. 试题管理模块试题管理(面向管理员) ,一般管理员仅可以对权限范围内的科目的试题进行管理,系统管理员可以管理全部科目中的全部试题。功能包括:浏览试题、导出试题至 word 文档查看、查询试题(分为条件查询和精确查询) 、成批(从 word)导入试题、逐道添加试题、删除试题、修改试题、清空试题。7. 题型管理模块题型管理(面向管理员) ,一般管理员和系统管理员均可对题型进行管理。功能包括:添加新题型和删除已有题型。8. 科目管理模块科目管理(面向系统管理员) ,只有系统管理员可以对科目进行管理。功能包括:添加新科目和删除已有科目。9. 修改密码模块修改
5、密码(面向所有用户) ,所有用户登录后均可对自己的密码进行修改,保存修改后下一次登录以新密码为准。系统总体设计本系统的两大主要功能为:题库功能和试卷功能。由此将系统划分为八大模块,分别为:试题管理、题型管理、科目管理、抽取现有试卷、自动组卷、手动组卷、试卷管理和修改密码。功能模块设计试卷生成与题库管理系统的主要功能是为使用者提供一个简单快捷的试题录入、查询、浏览,快速组卷及试卷管理的软件系统。同时降低在查找试题上的工作难度,节省时间,也方便了设置试卷难度,并提供保存和查看组成试卷和成套导入的试卷的功能。系统模块分为以下几个部分,如图3.1 所示。主控界面题库功能试卷功能密码管理抽修改试题科取自
6、手试密题型目现动动卷码管管管有组组管理理理试卷卷理卷随手添删添删预成机动预修删抽选添修删保除除览套览改除加加取择加改除存现现现导现试现新新试试试试试试有有有入有卷有题科题题题题题题题科试试试答试型目组组型目卷卷卷案卷卷卷及及答答案案逐成逐道批道清添导删空加入除试试试试题题题题图 3.1模块图设计流程下面着重介绍一下登录模块的搭建过程。安装本系统后,打开程序,先进入欢迎界面,点击“登录系统” ,进入登录界面。1. 结构图登录模块结构图如图3.2 所示。欢迎登失败三退出程进 入 主图 3.2登录模块结构图2. 界面设计“登录” 界面是用户进入主界面的路径, 由三个静态文本框控件和两个 Edit B
7、ox 控件,两个按钮控件和一个 Combo Box控件组成。界面如图 3.3 所示。图 3.3登录界面3. 属性设置三个静态文本框的 Caption 属性分别为:登录方式、用户名、密码。ComboBox的 Data 属性为:系统管理员 n 普通管理员 n 一般用户。“密码:”静态文本框对应的 Edit Box 的 Style 的 Password 属性为选中状态。两个按钮控件的 Caption属性分别为:登录系统和取消登录。4. 数据库相关设计登录信息需从用户信息表读取, 该表 tbLogin 有四个字段,分别是:Username、Password、权限、科目。如表 3.1 所示。表 3.1用
8、户信息表列名数据类型字 段可否为空说明长度Usernamenvarchar20NOT NULL用户名Passwordnvarchar20NOT NULL密码Purviewnvarchar20NOT NULL用户权限(登录方式)Subjectnvarchar50NULL用户权限内的科目5. 功能当用户在登录界面输入相关信息后,系统进行判断,输入的用户名、密码、选择的登录方式和数据库中的信息对应无误后进入主界面。如果没有选择登录方式,系统提示 " 请先选择登录方式 !" ;用户名或密码未填写,系统提示" 用户名或密码未填写 !" ;用户名输入错误或者登录方式
9、选择错误,系统提示" 用户不存在 !" ;用户名和登录方式均正确后验证密码,正确进入,不正确提示重新输入,最多输入三次,超过次数后系统自动退出。系统记录下此用户的权限和用户名,以便以后对信息的各种操作。系统管理员有对所有题库、题型、所有科目的试题和试卷的管理权限;一般管理员有对题型、权限范围内科目的试题和试卷的管理权限;一般用户只能利用本系统对权限范围内的科目添加试卷(组卷和导入成套试卷),对试题信息只有浏览权限。这样保证了系统的安全性。登录在登录窗口选择登录方式、键入用户名和密码后进行登录,登录信息正确进入系统主界面。用户名或密码输入错误 3 次则自动退出系统。代码如下所
10、示。UpdateData(TRUE);if(m_strPurview.IsEmpty()AfxMessageBox("请先选择登录方式 !");return;if(m_username.IsEmpty() | m_password.IsEmpty()AfxMessageBox("用户名或密码未填写 !");return;CString strSql;strSql.Format("SELECT*FROMtbTeacherwhereUsername='%s'",m_username); pRs->Open(strSq
11、l,CADORecordset.openQuery); if(!pRs->IsOpen()return;if(pRs->GetRecordCount()<=0)AfxMessageBox("用户不存在 !");wrong_num+;if(wrong_num = 3)OnCancel();return;/ pRs->MoveFirst(); CString strPassword;pRs->GetFieldValue("Username",strUsername); pRs->GetFieldValue("Pa
12、ssword",strPassword); pRs->GetFieldValue("Purview",strPurview); pRs->GetFieldValue("Subject",strSubject); pRs->GetFieldValue("ManageSubject",strManageSubject); if(m_strPurview != strPurview)AfxMessageBox("用户不存在 !"); wrong_num+; if(wrong_num = 3)O
13、nCancel();return;if(m_password != strPassword)AfxMessageBox("密码不正确,请重新输入 !"); m_password.Empty(); UpdateData(FALSE);wrong_num+; if(wrong_num = 3)OnCancel();return;CDialog:OnOK();抽取现有试卷 - 预览试卷及答案在“抽取现有试卷”界面选定试卷后单击“预览试卷及答案”按钮,从数据库中读取当前选中试卷的内容和答案并将其赋值给“预览试卷及答案”模块中的相应属性,进入该模块后在相应位置显示试卷的内容及答案。代
14、码如下所示。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 strTableName;if(strType = "已组试卷 ")str
15、TableName = 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->Is
16、Open()pRs->GetFieldValue("答案 ",strAnswer);pRs->GetFieldValue("内容 ",strPaper);browseallDlg.m_strTitleAnswer = "试卷 ID :"browseallDlg.m_strTitleAnswer += strID;browseallDlg.m_strTitleAnswer += "答案 "browseallDlg.m_strTitlePaper = "试卷 ID:"browseallD
17、lg.m_strTitlePaper += strID;browseallDlg.m_strTitlePaper += "内容 "browseallDlg.m_strAnswer = strAnswer;browseallDlg.m_strPaper = strPaper;browseallDlg.strID = strID;browseallDlg.DoModal();pRs->Close();delete pRs;自动组卷在“自动组卷”模块中完成所有组卷信息的设置后点击“开始组卷”按钮完成自动组卷的工作。设置信息中难度章节的限制设置为可选项。代码如下所示。CStr
18、ing question_ID = ""/要添加的试卷信息CString question_score =""CString question_answer = ""CString fangan_ID = ""CString content_answer = SetTitle();for(int i = 0 ; i < m_nNumber+1 ; i+)/ 方案 ID CString str;m_comboi.GetLBText(m_comboi.GetCurSel(),str); fangan_ID +=
19、FindType(str);fangan_ID += IntToString(m_nCounti);CString temp;/ 大题m_strPaper += Number_Chinesei;m_strPaper += " 、"m_strPaper += m_stri;m_strPaper += "(共 "content_answer += Number_Chinesei;content_answer += "、 "content_answer += m_stri;content_answer += "(共"te
20、mp.Format(_T("%d"),m_nCounti);m_strPaper += temp;content_answer += temp;m_strPaper += " 小题 , 共"content_answer += "小题 , 共 "temp.Format(_T("%d"),m_nScorei);m_strPaper += temp;m_strPaper += " 分)rn"content_answer += temp;content_answer += "分 )rn&quo
21、t;question_score += temp;if(i != m_nNumber)question_score += "、 "/+没有对章节和难度限制 +if(nSelChapi = 0 && nSelDiffi =0)/ 判断是否已经有题库打开if(pRs->IsOpen()pRs->Close();/ 定义字符串存储 SQL语句CString strSql;/ 初始化 SQL语句字符串,获得所选题库的数据strSql.Format("select*from%s where Type='%s'orderbyID&q
22、uot;,Table_name,m_stri);/ 打开当前选中的题库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;int j = 0;srand(unsigned)t
23、ime(NULL);/ 小题while(j < m_nCounti)int x = rand()%(Question_num);if(IsExist(No,x)continue;Noj = x;if(!pRs->MoveTo(x)continue;CString strNo;strNo.Format(_T("%d"),j+1);m_strPaper += strNo;m_strPaper += "."content_answer += strNo;content_answer += "."CString strConten
24、t;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 = "
25、无 "question_answer += strAnswer;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("se
26、lect * from %s where Type='%s'",Table_name,m_stri);int nNo = 1;bool IsFirst = TRUE;for(int j = 0 ; j < 30 ; j+)if(Chapter_numij = 1)CString temp;if(IsFirst)temp.Format(" and (Chapter='%s'",autoChapter_Chinesej);strSql += temp;elsetemp.Format(" or Chapter='%
27、s'",autoChapter_Chinesej);strSql += temp;IsFirst = FALSE;strSql += ")"/ 判断是否已经有题库打开if(pRs->IsOpen()pRs->Close();/ 打开当前选中的题库pRs->Open(strSql,CADORecordset.openQuery);int Question_num = pRs->GetRecordCount();if(Question_num < m_nCounti)AfxMessageBox("题库中题目数量不足 !&
28、quot;);return FALSE;/ 随即选择试题int No100;for(int now = 0 ; now < 100 ; now+)Nonow = -1;j = 0;srand(unsigned)time(NULL);/ 小题while(j < m_nCounti)int x = rand()%(Question_num);if(IsExist(No,x)continue;Noj = x;if(!pRs->MoveTo(x)continue;CString strNo;strNo.Format(_T("%d"),j+1);m_strPaper
29、 += 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;C
30、String 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 +
31、=" "/endwhile/endif/+只限制了难度 +elseif(nSelChapi = 0)int nNo = 1;for(int j = 0 ; j < 5 ; j+)if(Difficulty_numij > 0)/ 判断是否已经有题库打开if(pRs->IsOpen()pRs->Close();/ 定义字符串存储 SQL语句CString strSql;/ 初始化 SQL语句字符串,获得所选题库的数据strSql.Format("select* from %swhere Type='%s'andDifficul
32、ty='%s'orderbyID",Table_name,m_stri,autoDifficulty_Chinesej);/ 打开当前选中的题库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 < Diffic
33、ulty_numij)int x = rand()%(Question_num);if(IsExist(No,x)continue;Nok = x;if(!pRs->MoveTo(x)continue;CString strNo;strNo.Format(_T("%d"),nNo);m_strPaper += strNo;m_strPaper += "."content_answer += strNo;content_answer += "."CString strContent;pRs->GetFieldValue(&q
34、uot;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 +=
35、 strAnswer;content_answer += strAnswer;content_answer += "rnrn"k+;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='
36、;%s'",Table_name,m_stri);bool IsFirst = TRUE;for(int j = 0 ; j < 30 ; j+)if(Chapter_numij = 1)CString temp;if(IsFirst)temp.Format("and(Chapter='%s'",autoChapter_Chinesej);strSql += temp;elsetemp.Format(" or Chapter='%s'",autoChapter_Chinesej);strSql +=
37、 temp;IsFirst = FALSE;strSql += ")"int nNo = 1;for(j = 0 ; j < 5 ; j+)if(Difficulty_numij > 0)/ 判断是否已经有题库打开if(pRs->IsOpen()pRs->Close();/ 定义字符串存储 SQL语句temp.Format("andDifficulty='%s'",autoDifficulty_Chinesej);strSql += temp;/ 打开当前选中的题库pRs->Open(strSql,CADOR
38、ecordset.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 < Difficulty_numij)int x = rand()%(Question_num);if(IsExist(No,x)continue;Nok = x;if(!pRs->MoveTo(x)continue;CStrin
39、g strNo;strNo.Format(_T("%d"),nNo);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->Get
40、FieldValue("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+;nNo+;if(!(nNo = m_nCounti &&am
41、p; i = m_nNumber)question_ID += ","question_answer +=" "/endwhile/endif/endfor(难度循环 )/endif(选择了难度和章节 )/endif/endforCString question_content = m_strPaper;m_strAnswer = content_answer;CString ID = FindID(fangan_ID);CString strDate;GetDlgItem(IDC_DATETIMEPICKER_CREATE)->GetWindow
42、Text(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 = ques
43、tion_content;newPaper.Answer = content_answer;newPaper.Username = strUsername;newPaper.Date = strDate;if(fangan_ID = "" | ID = ""| question_ID = "" | question_score = ""| question_answer = "" | question_content = ""| content_answer = "
44、" | strUsername = ""| strDate = "")return FALSE;UpdateData(FALSE);CString strSave = "确认将该试卷导入到: "strSave += m_strSubject;strSave += "试卷库 "if(MessageBox(strSave," 确 认 保 存 已 组 试 卷 ",MB_ICONQUESTION|MB_OKCANCEL) = IDOK)if(InsertNewItems()CString af
45、x = "试卷编号: "afx += newPaper.ID;afx += "已添加到 "afx += m_strSubject;afx += "试题库 "MessageBox(afx," 提示",MB_ICONINFORMATION|MB_OK);m_buttonOut.EnableWindow(TRUE);m_buttonOutAnswer.EnableWindow(TRUE);return TRUE;elsem_strPaper = ""m_strAnswer = ""
46、UpdateData(FALSE);return FALSE;手动组卷在“手动组卷”模块中完成所有组卷信息的设置后点击“开始组卷”按钮完成自动组卷的工作。代码如下所示。CString question_ID = ""/要添加的试卷信息CString question_score =""/分值CString question_answer = ""CString fangan_ID = ""CString content_answer = SetTitle();for(int i = 0 ; i < m_nNu
47、mber+1 ; i+)/ 方案 ID CString str;m_comboi.GetLBText(m_comboi.GetCurSel(),str); fangan_ID += FindType(str);fangan_ID += IntToString(m_nCounti);CString temp;/ 大题m_strPaper += personNumber_Chinesei;m_strPaper += " 、"m_strPaper += m_stri;m_strPaper += "(共 "content_answer += personNumb
48、er_Chinesei;content_answer += "、 "content_answer += m_stri;content_answer += "(共"temp.Format(_T("%d"),m_nCounti);m_strPaper += temp;content_answer += temp;m_strPaper += " 小题 , 共"content_answer += "小题 , 共 "temp.Format(_T("%d"),m_nScorei);m_s
49、trPaper += temp;m_strPaper += " 分)rn"content_answer += temp;content_answer += "分 )rn"question_score += temp;if(i != m_nNumber)question_score += "、 "int Question_num = 0;str = strSelQuesi;if(!str.IsEmpty()int len = str.GetLength();char temp1000;strcpy(temp,str.GetBuffer(
50、100);int j = 0;while(j < len)int k = 0;char ques100;while(tempj != ',' && j < len)quesk = tempj;j+;k+;quesj = '0'CString strques = ques;/IDif(pRs->IsOpen()pRs->Close();CString strSql;strSql.Format("select*from%swhereID='%s'",Table_name,strques);pRs->Open(strSql,CADORecordset.openQuery);/ 添加信息i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 花卉循环利用技术推广创新创业项目商业计划书
- 数字化售后服务与客户支持体系创新创业项目商业计划书
- 农业物联网传感器创新创业项目商业计划书
- 环境敏感性-洞察及研究
- 个人账户基金保值-洞察及研究
- 高延性水泥基复合材料-洞察及研究
- 从搭伙到合伙-晋西南农民夫妻关系转型研究-基于“过日子”理论视角
- 肝硬化失代偿期患者主要家庭照顾者准备度、照顾负担及焦虑的相关性研究
- 以“游戏”为中心的学前课程方案研究
- ZT公司软件测试员工职业生涯规划管理研究
- 网络安全等级保护等级测评方案模板
- 2025年山东省现场流行病学调查职业技能竞赛理论参考试指导题库(含答案)
- 阻塞性睡眠呼吸暂停低通气综合征-OSAHS的麻醉处理课件
- 2021-2022学年辽宁省大连市高二下学期期末考试化学试题
- 消防部队驾驶员行车安全
- 延期交货申请书
- 2025年度金融机构协议存款收益权转让合同3篇
- 2024版消防设计质量问题案例分析手册建筑机电专业
- 《义务教育道德与法治课程标准》解读
- 学校总务后勤管理经验交流材料
- 2025年非全日制劳动合同模板
评论
0/150
提交评论