华南农业大学软件开发技术实践课程设计实验报告小组成员:赖威(学号201030690215),李志杰(学号201030690217)周加伟(学号201030690230)教师:林毅申提交日期:2013年11月30日2华南农业大学信息学院课程设计实验题目题库管理中心起止日期2013学年第一学期课程名称软件开发技术实践学生资料学号201030690215学生姓名赖威学号201030690217学生姓名李志杰学号201030690230学生姓名周加伟实验内容每一位教师都可将自己平日教学中积累的题目添加到题库中,与传统意义的题库不同的是,在这里教师可以将题库中的题目按照各种不同的属性(章节、知识点、考试时间、考试地区、难易度、助记码等)把每一道题目定义,方便教师搜索查阅,从不同的角度判断题目是否对自己的教学有益,运用到教学中是否能有的放矢、因材施教。评语与成绩项目/分数优良中及格不及格系统分析设计□□□□□程序设计水平□□□□□内容完成情况□□□□□设计报告撰写质量□□□□□课程设计总结情况□□□□□附加说明:成绩(优/良/及格/不及格)指导教师林毅申2013年12月31、基本信息1.1小组基本信息学号姓名手机邮箱所做工作简述签名201030690215赖威15915847987346358653@qq.com数据库设计,数据库实体化工作以及数据库面向业务层的接口201030690217李志杰15813374172369245326@qq.com客户端界面以及相关数据绑定201030690230周加伟15813374064328748244@qq.com业务逻辑层设计与实现,具体功能的算法实现1.2项目基本信息这次我们小组开发的是一个面向一所大学内的任课老师以及在校学生的题库管理系统。作为数字化校园的一部分,该系统的主要的功能包括为教师用户提供的查阅题库,新组试卷功能和面向学生的在线考试功能。题库分为两部分,一部分是之前教师利用组卷功能得到并保存的试卷,一部分是不同类型的题目。题目范围为学校内各门课程期末考试的试题,包括公共基础课以及各学院开设的不同课程。题目不仅包括普通的文字类题目,还包括一些包含复杂元素如图片,特殊公式等的题目,做到基本兼容现在学校内能看到的题目。考虑到小组成员的技术水平以及项目的实际需要,该系统是采用C/S模式。为提高效能,服务器方面采用IOCP模型,客户端采用WPF技术来改善Winform在界面上的劣势。1.3项目技术信息开发语言C#平台Windows7技术客户端(WPF),服务器(IOCP模型)工具VisualStudio2010SqlServer200842、系统架构图注:实线表示数据传输方向,虚线表示模块间调用关系,由被调用者指向调用者客户端程序客户消息请求发送模块发送模块服务器消息接收模块数据加密模块数据解密模块消息队列服务器程序客户1请求客户2请求客户3请求客户1请求。。。数据库业务逻辑处理模块工作者线程池数据解密模块传输数据格式解析模块数据发送模块数据加密模块41325服务器程序:数据加密模块:采用一种加密算法,(具体哪种算法等系统实现时,再进行确定),将即将发送的数据进行加密。保证数据再传输过程中的安全性。与客户端中的数据加密模块原理一样。数据解密模块:采用与加密算法相对应的解密算法,将接受到数据,进行解密,还原得到原始的数据。与客户端中的数据解密模块原理一样。消息队列:为了能实现同时让尽量多的客户连接到服务器,所以不使用一线程处理一客户模型的服务器。这里的消息队列是将所有用户对服务器的各种请求按照先进先出的规则排列起来。等待处理。如果实现是使用windowsio完成端口和对应的SOCKET进行绑定,这个消息队列是由系统生成和维护的。工作者线程池:线程池用于维护和管理服务器中所有以工作者身份存在的线程,工作者线程就是用来处理客户请求的线程。线程池的线程会互斥的到消息队列中取出对应的客户请求进行处理。没有请求时候,所有线程都处于阻塞状态等待消息队列中出现客户请求。当工作者线程获得客户请求的时候会按顺序去调用数据解密模块,数据传输格式解析模块,业务逻辑处理模块,加密发送数据模块。数据传输格式解析模块:数据在网络传输的过程中,我们给它规定特定的格式。通过该模块,服务器可以清楚的知道,客户需要服务器为他实现哪些功能。但是这里解析的数据需要通过解密之后,才能解析。对应的客户端想要与服务器进行交互,就需要使用这个特定的格式发送数据。业务逻辑处理模块:这个模块就是服务器具体工作的模块,模块中包含服务器能够为客户端提供的所有服务。工作者线程通过解析数据格式,知道客户的需求,再从这个模块中调用指定的服务。这个模块也是直接和数据库进行交互的模块。数据发送加密模块:业务逻辑模块处理完客户的请求的服务之后,需要为客户返回处理后的结果。可能是简单的操作成功和失败的返回结果,也可能是直接数据的传输。和加密模块结合在一起,说明数据发送前需要进行加密。数据库模块:采用sqlserver做数据库管理,ADO.NET技术实现面向业务层的接口。63、系统功能客户端:学生:在这个题库管理中心中,我们设定的学生功能有查看试卷、导出试卷和在线考试并评分。查看试卷:学生可以查看不同科目的试卷,选择科目时需要先选择科目分类、学院等上级目录,试卷包括历年考试卷和各学科老师自己组合试题的模拟卷。导出试卷:学生查看了试卷之后如果需要带出,可以选择导出试卷,导出的试卷根据学生选择存储位置以WORD文档存储。老师:老师可以使用的功能包括:查看题目、组卷。组卷分为按要求自动组卷和手动组卷两个部分。查看题目:跟学生的一样,首先选择科目分类、学院等目录,选择了科目之后还需要选择章节和知识点、或者选择某一套题(具体的操作在编码时确定),进入单个题目可以看到题目分类、难易度、内容和答案,还可以把该题目加入到组卷区里(类似网络购物加入购物车的形式)。组卷:自动组卷:老师选择科目、难易度,填入试卷总分和考试时间,选择题数目和选择题总分,填空题数目和填空题总分,客观题视科目需要而定,可以选择简答题、计算题、材料分析题等题型,最后各题总分要跟试卷总分相同,全部填写好之后就可以进行自动组卷,组卷成功之后老师看是否满意,不满意可以重来或者可以留下某一些需要的题其他题目随机加入。数据传输:题库管理中心服务器客户端在线考试评分数据传输查看试卷导出试卷数据提取学生老师手动组卷自动组卷查看题目7用户进行操作需要读取数据的时候发出命令传给服务器,服务器传过来的数据接受后给用户看。服务器:提取数据:根据客户端传来的命令来进行数据库的读取,读取后给传输模块。数据传输:数据提取出来之后,经过格式化以后再进行加密,之后就可以传输给客户端进行解密并呈现给用户。4、数据库设计PDM图8数据字典清单:表名解释QB_ACCOUNTS用户信息表QB_CHAPTERS课程章节表QB_COLLEGES学院信息表QB_COURSES课程信息表QB_ORIGIN题目出处表QB_PAPERS试题信息表QB_POINTS知识点信息表QB_PUBLICKINDS公共课信息表QB_QUESTIONS题目信息表QB_STUDENTS学生信息表QB_TEACHERS教师信息表表名:QB_ACCOUNTS解释:用户信息表QB_ACCOUNTS(用户信息表)是否主键字段名字段描述数据类型长度可空约束缺省值备注是ACCOUNT_IDAccount_IdINTN用户idACCOUNT_NAMEAccount_NameNCHAR(10)10N用户的姓名ACCOUNT_ACCOUNTAccount_AccountNCHAR(20)20N用户的登陆账号ACCOUNT_PASSWORDAccount_PasswordNCHAR(20)20N“123456”用户的登陆密码ACCOUNT_KINDAccount_KindBITN用户的类型。0代表教师,1代表学生表名:QB_CHAPTERS解释:章节信息表QB_CHAPTERS(QB_Chapters)是否主键字段名字段描述数据类型长度可空约束缺省值备注是CHAPTER_IDChapter_IdINTN章节idCHAPTER_COURSEIDChapter_CourseIdINTN课程信息表中的课程id章节所属的课程9表名:QB_COLLEGES解释:学院信息表QB_COLLEGES(QB_Colleges)是否主键字段名字段描述数据类型长度可空约束缺省值备注是COLLEGE_IDCollege_IDINTN学院idCOLLEGE_NAMECollege_NameNCHAR(10)10N学院名COLLEGE_KINDCollege_KindINTN学院所属类别,如:工科表名:QB_COURSES解释:课程信息表QB_COURSES(QB_Courses)是否主键字段名字段描述数据类型长度可空约束缺省值备注是COURSE_IDCourse_IdINTN课程类别COURSE_NAMECourse_NameNCHAR(10)10N课程名COURSE_KINDCourse_KindBITN课程类别:0代表学院专业课;1代表公共基础课COURSE_KINDIDCourse_KindIdINTN学院信息表中的学院id或公共课信息表中的公共课id学院id或者是公共课类别表名:QB_ORIGIN解释:题目来源表QB_ORIGIN(QB_Origin)是否主键字段名字段描述数据类型长度可空约束缺省值备注是ORIGIN_IDOrigin_IdINTN来源idORINGIN_DATEOringin_DateDATEN题目对应的年份ORIGIN_KINDOrigin_KindNCHAR(10)10N题目的出处表名:QB_PAPERS解释:试题信息表10QB_PAPERS(QB_Papers)是否主键字段名字段描述数据类型长度可空约束缺省值备注是PAPER_IDPaper_IdINTN试题idPAPER_MADEDATEPaper_MadeDateDATEN出题时间PAPER_AUTHORPaper_AuthorNCHAR(10)10N出卷人姓名PAPER_ENDPaper_EndNCHAR(10)10N试题用处考试时间表名:QB_POINTS解释:知识点信息表QB_POINTS(QB_Points)是否主键字段名字段描述数据类型长度可空约束缺省值备注是POINT_IDPoint_IdINTN知识点idPOINT_CHAPTERIDPoint_ChapterIdINTN章节信息表中的章节id知识点所对应的章节的id表名:QB_PUBLICKINDS解释:公共课信息表QB_PUBLICKINDS(QB_PublicKinds)是否主键字段名字段描述数据类型长度可空约束缺省值备注是PUBLICKIND_IDPublicKind_IdINTN公共课idPUBLICKIND_NAMEPublicKind_NameNCHAR(10)10N公共课的类型,如全校公共基础课表名:QB_QUESTIONS解释:题目信息表QB_QUESTIONS(QB_Questions)是否主键字段名字段描述数据类型长度可空约束缺省值备注是QUESTION_IDQuestion_IdINTN题目idQUESTION_POINTIDQuestion_PointIdINTN知识点信息表题目所属知识点的id11中的知识点idQUESTION_ORINGINIDQuestion_OringinIdINTN来源表中的来源id题目的来源的idQUESTION_LEVELQuestion_LevelSMALLINTN1题目的难易度,分5个级别,数值越大代表题目越难QUESTION_CODEIDQuestion_CodeIdINTN助记符idQUESTION_KINDChar(10)题目类型表名:QB_STUDENTS解释:学生信息表QB_STUDENTS(QB_Students)是否主键字段名字段描述数据类型长度可空约束缺省值备注是STUDENT_I