设计规格说明文档_第1页
设计规格说明文档_第2页
设计规格说明文档_第3页
设计规格说明文档_第4页
设计规格说明文档_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、设计规格说明文档 1 引言1.1 目的该文档的目的是描述自动出卷系统的系统设计,主要包括系统功能简介,系统结构设计、系统接口设计、模块设计、界面设计、代码描述等。本文档预期的读者包括:设计人员;开发人员;项目管理人员;测试人员。1.2 范围1.2.1 系统目标开发一个满足老师出卷要求和学生测试要求的自动出卷系统,以减轻老师繁重的出卷任务并且方便学生进行自我测评。1.2.2 主要软件需求该系统主要功能包括:人员信息管理、自动出卷、学生测试。1.2.3 软件设计约束、限制软件支持单机操作,暂无线上功能。1.3 缩写无1.4 术语定义软件结构:软件的逻辑架构。指软件的模块及组成结构。1.5 参考资料

2、窦万峰,软件工程方法与实践,北京:机械工业出版社,20091.6 版本信息修改编号修改日期修改后版本修改位置修改内容描述12014-11-111.0全部完成第一次编写2 数据设计2.1 数据对象和形成的数据结构自动出卷系统涉及的数据对象及其数据结构主要有以下几种。(1) 用户信息:描述用户的基本信息,包括用户的账号、密码、姓名、登录权限、安全问题以及安全问题的答案,其数据结构是一种顺序的数据结构。(2) 用户:包括管理员、老师和学生,其数据结构是一种枚举类型。(3) 题目信息:包括题目的编号、科目、章节、题型难度、题目文本、题目答案,是一种顺序数据结构。题目分为选择题、填空题和简答题三种、每种

3、题目都有难、中、易三种难度,系统根据出卷要求将符合条件的试题选入到试卷中。(4) 试卷信息:包括试卷编号、科目、试卷类型(单元测试、综合测试)、难度、试卷包含的题目信息,是一种顺序存储结构。(5) 出卷要求:包括试卷科目、试卷类型、试卷难度、试卷题量、试题分值、试卷标题,是一种顺序数据结构。2.2 文件和数据库结构2.2.1 外部文件结构数据库表 (1) 用户(账户、用户名、密码、登录权限、安全问题、问题答案)(2) topic(Qno、Qsubject、Qchapter、Qtype、Qdiff、Question、Qanswer、Qctime)表中的属性分别表示题目的编号、题目的章节、题目的类

4、型、题目的难度、题目的文本、题目的答案、题目创建的时间。(3) temptopic(Qno、Qsubject、Qchapter、Qtype、Qdiff、Question、Qanswer、Qctime)表中的属性分别表示题目的编号、题目的章节、题目的类型、题目的难度、题目的文本、题目的答案、题目创建的时间。本表用来存储教师用户添加而没有被管理员审核的题目。(4) paper(Pno、Psubject、Ptype、Pdiff、Phead、Ppaper、Pctime)表中的属性分别表示试卷的编号、试卷的科目、试卷的类型、试卷的难度、试卷的标题、试卷包含的题目信息,试卷创建的时间。2.2.2 全局数据

5、用户账号2.2.3 文件盒数据交叉索引3 体系结构设计3.1 数据和控制流复审3.1.1 总体数据流图3.1.2 登录3.1.3 管理员模块3.1.4 老师出卷模块3.1.5 学生测试模块3.1.6 题库管理3.2 得出的程序结构3.2.1 登录界面3.2.2 管理员模块3.2.3 出卷模块3.2.4 测试模块 4 界面设计4.1 人机界面设计规约4.1.1 登录界面首次登录,修改密码4.1.2 修改密码若为初始化用户信息,会跳出警示。若已经初始化后,则跳转到登陆界面4.1.3 找回密码根据用户初始化时提供的安全问题和答案,输出用户的密码。4.1.4 出卷模块主界面点击按钮,调用不同的功能4.

6、1.5 出卷界面用户输入出卷要求,点击确定后,确认出卷要求4.1.6 查看生成试卷界面点击每条题目,在左边文本框显示题目文本,在右边文本框显示题目答案。点击替换题目按钮,跳转到题库管理界面选择替换的题目;点击查看文本,跳转到查看试卷界面。4.1.7 查看题库界面根据要求显示数据库中的题目,点击添加题目,跳转到添加题目界面,填写题目信息,保存到临时数据库,待审核4.1.8 查看试卷库点击左边试卷列表中的试卷,在右边表中显示该试卷包好的题目信息。点击右边的题目,在下面的文本框中显示题目文本和答案。4.1.9 查看文本界面点击生成文本,保存试卷内容到word文档中4.1.10 管理员模块主界面、4.

7、1.11 审核临时题库4.1.12 用户管理界面跳转到本界面,显示出数据库内已经有的用户信息4.1.13 查询界面输入账户名,点击确定后显示相应的用语信息,点击修改跳转到修改界面,修改用户信息;点击删除,将该用户从数据库中删除。4.1.14 添加用户界面4.1.15 修改用户信息输入新用户信息,点击确定后,将此用户信息保存到数据库中。4.1.16 题库管理界面4.1.17 添加题目界面管理员题库管理与老师题目管理相似,但是管理员添加的题目直接添加到数据库中。4.1.18 学生测试主界面点击确定,显示符合要求的试卷列表,选择某张试卷,点击测试跳转到测试界面。4.1.19 测试界面左边文本框中显示

8、题目文本,右边文本框为学生答题区域。点击交卷,显示测试结果界面。4.1.20 测试结果界面显示学生的测试结果。5 接口设计5.1 外部接口设计以ADO.NET访问ACCESS数据库5.2 内部接口设计规约5.2.1 内部模块接口调用关系1、 登录系统模块a) 管理员模块i. 用户管理1. 添加用户2. 修改用户3. 删除用户ii. 题库管理1. 添加题库2. 题目禁用b) 老师出卷模块i. 出卷ii. 题库管理1. 添加题目iii. 查看试卷库1. 修改试卷c) 学生登录模块i. 选择试卷ii. 测试1. 保存答案2. 匹配答案3. 生成结果5.2.2 接口数据结构 登录模块管理员模块老师出卷

9、模块学生测试模块用户管理题库管理添加用户修改用户删除用户出卷管理题库查看试卷库添加题目修改试卷选择试卷测试保存答案生成结果匹配答案6 程序描述6.1 模块基本信息6.1.1 登录模块输入:用户信息输出:跳转到用户权限对应的功能模块功能:完成身份认证和功能选择6.1.2 管理员模块输入:用户信息、题目信息等功能:完成人员管理和题库管理6.1.3 老师出卷模块输入:出卷要求输出:试卷功能:完成出卷,生成并保存试卷6.1.4 学生测试模块输入:测试要求、答案输出:测试结果功能:学生自我测试6.2 关键算法6.2.1 出卷算法试卷难度:简单 50%简单题 30%中等题 20%难题中等 30%简单题 5

10、0%中等题 20%难题难 20%简单题 30%中等题 50%难题int ce,cm,cd;/选择题简单,中等,难题题量int te,tm,td;/填空题简单,中等,难题题量int je,jm,jd;/简单题简单,中等,难题题量If(简单)ce = 题量*50%;cm = 题量*30%;cd = 题量*20%;If(ce+cm+cd)<题量)ce +=题量-ce-cm-cd;Random r = new Random();int rr = r.next(20);string str = “select top 题量 from topic rnd(rr*Qno)”; 6.2.2 出卷代码if

11、 (diff = "简单") ce = Convert.ToInt16(0.5 * cnum); cm = Convert.ToInt16(0.3 * cnum); cd = Convert.ToInt16(0.2 * cnum); te = Convert.ToInt16(0.5 * tnum); tm = Convert.ToInt16(0.3 * tnum); td = Convert.ToInt16(0.2 * tnum); je = Convert.ToInt16(0.5 * jnum); jm = Convert.ToInt16(0.3 * jnum); jd

12、= Convert.ToInt16(0.2 * jnum); if (ce + cm + cd) < cnum) ce += (cnum - (ce + cm + cd); if (te + tm + td) < tnum) te += (tnum - (te + tm + td); if (je + jm + jd) < jnum) je += (jnum - (je + jm + jd); else if (diff = "中等") ce = Convert.ToInt16(0.3 * cnum); cm = Convert.ToInt16(0.5 *

13、 cnum); cd = Convert.ToInt16(0.2 * cnum); te = Convert.ToInt16(0.3 * tnum); tm = Convert.ToInt16(0.5 * tnum); td = Convert.ToInt16(0.2 * tnum); je = Convert.ToInt16(0.3 * jnum); jm = Convert.ToInt16(0.5 * jnum); jd = Convert.ToInt16(0.2 * jnum); if (ce + cm + cd) < cnum) cm += (cnum - (ce + cm +

14、cd); if (te + tm + td) < tnum) tm += (tnum - (te + tm + td); if (je + jm + jd) < jnum) jm += (jnum - (je + jm + jd); else if (diff = "难") ce = Convert.ToInt16(0.2* cnum); cm = Convert.ToInt16(0.3 * cnum); cd = Convert.ToInt16(0.5 * cnum); te = Convert.ToInt16(0.2 * tnum); tm = Conver

15、t.ToInt16(0.3 * tnum); td = Convert.ToInt16(0.5 * tnum); je = Convert.ToInt16(0.2 * jnum); jm = Convert.ToInt16(0.3 * jnum); jd = Convert.ToInt16(0.5 * jnum); if (ce + cm + cd) < cnum) cd += (cnum - (ce + cm + cd); if (te + tm + td) < tnum) td += (tnum - (te + tm + td); if (je + jm + jd) <

16、jnum) jd += (jnum - (je + jm + jd); if (type.ToString() != "综合测试") str1 = string.Format("SELECT TOP " + ce.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '选

17、择题' AND Qdiff = '简单' ORDER BY rnd(Qno)"); str2 = string.Format("SELECT TOP " + cm.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '选择题' AND Qdiff

18、= '中等' ORDER BY rnd(Qno)"); str3 = string.Format("SELECT TOP " + cd.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '选择题' AND Qdiff = '难' ORDE

19、R BY rnd(Qno)"); str4 = string.Format("SELECT TOP " + te.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '填空题' AND Qdiff = '简单' ORDER BY rnd(Qno)"

20、;); str5 = string.Format("SELECT TOP " + tm.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '填空题' AND Qdiff = '中等' ORDER BY rnd(Qno)"); str6 = string.

21、Format("SELECT TOP " + td.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '填空题' AND Qdiff = '难' ORDER BY rnd(Qno)"); str7 = string.Format("SELECT

22、 TOP " + je.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '简答题' AND Qdiff = '简单' ORDER BY rnd(Qno)"); str8 = string.Format("SELECT TOP " + jm.T

23、oString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '简答题' AND Qdiff = '中等' ORDER BY rnd(Qno)"); str9 = string.Format("SELECT TOP " + jd.ToString() + "

24、 * From topic WHERE Qsubject = '" + subject.ToString() + "'AND Qchapter = '" + type.ToString() + "' AND Qtype = '简答题' AND Qdiff = '难' ORDER BY rnd(Qno)"); else str1 = string.Format("SELECT TOP " + ce.ToString() + " * From topic

25、WHERE Qsubject = '" + subject.ToString() + "' AND Qtype = '选择题' AND Qdiff = '简单' ORDER BY rnd(Qno)"); str2 = string.Format("SELECT TOP " + cm.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "' AND Qtype =

26、'选择题' AND Qdiff = '中等' ORDER BY rnd(Qno)"); str3 = string.Format("SELECT TOP " + cd.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "' AND Qtype = '选择题' AND Qdiff = '难' ORDER BY rnd(Qno)"); str4 = strin

27、g.Format("SELECT TOP " + te.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "' AND Qtype = '填空题' AND Qdiff = '简单' ORDER BY rnd(Qno)"); str5 = string.Format("SELECT TOP " + tm.ToString() + " * From topic WHERE

28、 Qsubject = '" + subject.ToString() + "' AND Qtype = '填空题' AND Qdiff = '中等' ORDER BY rnd(Qno)"); str6 = string.Format("SELECT TOP " + td.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "' AND Qtype = '

29、填空题' AND Qdiff = '难' ORDER BY rnd(Qno)"); str7 = string.Format("SELECT TOP " + je.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "' AND Qtype = '简答题' AND Qdiff = '简单' ORDER BY rnd(Qno)"); str8 = string.For

30、mat("SELECT TOP " + jm.ToString() + " * From topic WHERE Qsubject = '" + subject.ToString() + "' AND Qtype = '简答题' AND Qdiff = '中等' ORDER BY rnd(Qno)"); str9 = string.Format("SELECT TOP " + jd.ToString() + " * From topic WHERE Qsub

31、ject = '" + subject.ToString() + "' AND Qtype = '简答题' AND Qdiff = '难' ORDER BY rnd(Qno)"); OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|试题库.mdb" OleDbDataAdapter da1

32、 = new OleDbDataAdapter(str1, conn); OleDbDataAdapter da2 = new OleDbDataAdapter(str2, conn); OleDbDataAdapter da3 = new OleDbDataAdapter(str3, conn); OleDbDataAdapter da4 = new OleDbDataAdapter(str4, conn); OleDbDataAdapter da5 = new OleDbDataAdapter(str5, conn); OleDbDataAdapter da6 = new OleDbDat

33、aAdapter(str6, conn); OleDbDataAdapter da7 = new OleDbDataAdapter(str7, conn); OleDbDataAdapter da8 = new OleDbDataAdapter(str8, conn); OleDbDataAdapter da9 = new OleDbDataAdapter(str9, conn); DataSet ds = new DataSet(); conn.Open(); da1.Fill(ds, "ce"); da2.Fill(ds, "cm"); da3.Fi

34、ll(ds, "cd"); da4.Fill(ds, "te"); da5.Fill(ds, "tm"); da6.Fill(ds, "td"); da7.Fill(ds, "je"); da8.Fill(ds, "jm"); da9.Fill(ds, "jd"); conn.Close(); DataTable newpaper = new DataTable("newpaper"); newpaper = ds.Tables&quo

35、t;ce" newpaper.Merge(ds.Tables"cm"); newpaper.Merge(ds.Tables"cd"); newpaper.Merge(ds.Tables"te"); newpaper.Merge(ds.Tables"tm"); newpaper.Merge(ds.Tables"td"); newpaper.Merge(ds.Tables"je"); newpaper.Merge(ds.Tables"jm"); ne

36、wpaper.Merge(ds.Tables"jd"); dataGridView1.DataSource = ds.Tables0; dataGridView1.Columns0.Visible = false;6.2.3 保存试卷算法/储存DataSet ds = new DataSet();/为试卷中每条题目在数据集中建一个表/将所有表合并ds.merge()/生成Tables“paper”;/将Tables“paper”转换成XML文档形式储存在试卷库中相应试卷的试卷信息部分String str = Tables“paper”.getXml.ToString();/

37、读取ds.readXml(str);6.2.4 试卷保存算法OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|试题库.mdb" OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM paper", conn); DataSet ds1 = new DataSet(); conn.Ope

38、n(); da.Fill(ds1,"paper"); conn.Close(); DataTable newtable = ds1.Tables"paper" DataRow workrow = newtable.NewRow(); /workrow"Pno" = 0; workrow"Psubject" = pplist0; workrow"Ptype" = pplist1; workrow"Pdiff" = pplist2; workrow"Phead" = pplist9; workr

温馨提示

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

评论

0/150

提交评论