《学生成绩信息管理系统概要设计等(共41页).docx》由会员分享,可在线阅读,更多相关《学生成绩信息管理系统概要设计等(共41页).docx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上第四章 概要设计概要设计的主要任务是把得到的系统模型转换为和。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的及调用关系、确定模块间的接口及人机界面等。数据包括数据特征的描述、确定数据的结构特性、以及的设计。4.1学生成绩信息管理模块划分其中每个模块下又有很多子模块,本次设计中我负责的是课程开设模块与发布考试信息模块,通过对需求的整合与整理,学生成绩信息管理系统的总体用例图如下所示。图4.1系统总体用例图Figure 4.1 System use case diagram学生成绩信息管理系统下分三个子系统,每个人负责子系统下2-3个模块,在初步需
2、求分析的基础上制定出的课程开设模块与发布考试信息模块划分如图4.2与4.3所示。 图4.2 课程开设管理功能模块图Figure 4.2 curriculum management function module 图4.3 发布考试信息功能模块图Figure 4.3 release test information function module diagram4.1.1课程发布管理子模块课程发布项目是在该功能模块下教师对可发布的课程进行查看、编辑、增加、发布等功能,包括课程查看、课程编辑、课程发布。教师可随时查看可发布课程的信息,并对这些课程进行编辑修改,之后可对课程进行发布,具体包括:1.课
3、程查看:查看可发布课程的信息。2.课程编辑:对可发布的课程进行编辑或增加,此操作仅由教师可进行。3.课程发布:对可发布里的课程进行发布操作。课程发布用例图:图4.4课程发布用例图Figure 4.4 course release Use Case Diagram4.1.2课程删改管理子模块课程删改项目是在该功能模块下教师可以对已发布的课程进行删除、修改等操作,包括课程信息核对与课程信息删改。在发布的课程中,教师会根据实际情况进行核对,之后进行删改操作,具体包括:1.课程信息核对:将需要操作的课程信息进行核对,并作相应的记录。2.课程信息删改:对已发布的课程进行编辑和删改,此操作仅由教师可进行。
4、课程删改管理用例图:图4.5 课程删改管理用例图Figure 4.5 case deletion management course4.2数据库设计数据库设计是建立数据库及其应用系统的关键技术,是信息系统开发和建设的核心技术,具体说,数据库设计是指对于一个给定的应用环境,构造最优的数据模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。数据库建设是硬件、软件和干件的结合三分技术,七分管理,十二分基础数据技术与管理的界面称之为“干件”,数据库设计应该与应用系统设计相结合,结构(数据)设计:设计数据库框架或数据库结构,行为(处理)设计:设计应用程序、
5、事务处理等结构和行为分离的设计4.2.1概念结构设计概念结构设计的任务是在需求分析阶段产生的需求说明书的基础上,按照特定的方法把它们抽象为一个不依赖于任何具体机器的数据模型,即概念模型。概念模型使设计者的注意力能够从复杂的实现细节中解脱出来,而只集中在最重要的信息的组织结构和处理模式上对用户要求描述的现实世界(可能是一个工厂、一个商场或者一个学校等),通过对其中诸处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息储存、查询和加工的要求等。所建立的模型应避开数据库在计算机上的具体实现细节,用一种抽象的形式表
6、示出来。以扩充的实体联系模型方法为例,第一步先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图)。第二步再将前面得到的多个用户的局部视图集成为一个全局视图,即用户要描述的现实世界的概念数据模型。设计概念结构通常有四种方法:自顶向下、自底向上、逐步扩张和混合策略(即将自顶向下和自底向上相结合)。本系统采用的是自底向上的方法,即自顶向下进行需求分析,然后再自底向上的设计概念结构。数据库的概念设计如图4.6所示,其反映的是数据库表的关系,具体的表有课程计划表(Course Schedule)表依赖于课程基本
7、表(Course)学生选课表(Student Course Schedule)操作表(Appeal)。图4.6 数据库关系图Figure 4.6 Database diagram4.2.2 逻辑结构设计1.可发布课程(编号,名称,状态,授课教师,课序号,学分,课程类别,说明)主键:编号函数依赖编号-其他所有属性由函数依赖可知,依赖左端为候选码,所以采购项目属于BCNF2.已发布课程(编号,名称,授课教师,课序号,学分,课程类别,开课单位,上课时间,上课地点,选课人数,说明)主键:编号函数依赖编号-其他所有属性由函数依赖可知,依赖左端为候选码,所以采购物资属于BCNF3.删改课程操作(编号,操作
8、课程,操作时间,操作教师,说明)主键:编号函数依赖编号-其他所有属性由函数依赖可知,依赖左端为候选码,所以投标表属于BCNF4.学生选课信息表(学生编号,所选教师编号,院系编号,所选课程编号,学期)联合主键:学生编号,所选教师编号,院系编号,所选课程编号函数依赖(学生编号,所选教师编号,院系编号,所选课程编号)-其他非主属性由函数依赖可知,不存在传递依赖,但是依赖左端不都为候选码,所以评标表满足第三范式。4.2.3物理结构设计为给定的逻辑数据模型选取一个最合适应用要求的物理结构的过程就是数据库的物理设计。物理设计时要确定数据库的存储路径,数据规模等,在数据库管理系统中创建数据库,建立数据库的所
9、有数据模式。本系统数据库在设计过程中参考逻辑结构设计,充分考虑了数据表的划分及其之间的联系,在保障数据流向简明、查询效率较高的前提下,设计了如下数据库表结构:1.可发布课程表(Course)表4.1 可发布课程表Table4.1 Published curriculum 字段名字段解释类型是否可空CrsId课程编号(主键)IntNot nullCrsName课程名称nvarchar(50)nullSummarization概述nvarchar(50)nullAppealsByCrsId课程操作IDIntnullExamsByCrsId 考试IDIntnullCommentsByCrsId评论I
10、DIntnullCourseSchedulesByCrsId课程发布IDIntnullCoursesTablesByCrsId课程表IDIntnullStudentSchedulesByCrsId学生选课IDInt说明:这里的课程状态为课程是否被发布,课序号是对应一门课程来说的比如ACCESS数据库这门课有很多老师在上这门课程的课程号都是一样的但是对应不同的老师和上课时间会给一个课序号。2.发布课程表(Course schedule)表4.2 发布课程表Table4.2 Release course table字段名字段解释类型是否可空CSch Id课程编号(主键)IntNot nullCSc
11、h Name课程名称nvarchar(50)nullCSch Teacher授课教师(主键)nvarchar(50)nullCSch Course number单位nvarchar(50)nullCSch Credit学分intnullCSch Course category课程类别nvarchar(50)nullCSch Course unit开课单位nvarchar(50)nullCSch Course time上课时间datetimenullCSch Class location上课地点Nvarchar(50)nullCSch Course num选课人数nvarchar(50)null
12、CSch Explain说明nvarchar(50)null说明:这里的课程编号与授课老师是主键,授课单位为学院名称,相比课程表增加的上课时间根据课程安排的情况而定,在此注意的是不同的老师可能会教授同一门课程,因此在此处使用了课程编号与授课教师的联合主键。3,删改课程操作(Appeal)表4.3 投标表Table4.3 Bidding table字段名字段解释类型是否可空Ope Id操作编号(主键)IntNot nullOpe Cour操作课程IntNot nullOpe Time操作时间DatetimeNot nullOpe Teacher操作教师(主键)Varchar(max)Ope Ex
13、plain说明floatNot null说明:这里的课程编号与授课老师是主键,与发布课程表一致,原理与其相同,主要是老师对发布的课程进行的删改操作。4.学生选课信息表(Student Schedule) 表4.4 学生选课信息表Table4.4 Student information table字段名字段解释类型是否可空SSch Id学生编号(主键)IntNot nullSSch BidId所选教师编号(主键)IntNot nullSSch ExpertId院系编号(主键)intNot nullSSch Business所选课程编号(主键)IntNot nullSSch Price学期int说
14、明:该表是体现学生所选课程的信息,由于选课的人数众多,易混乱,因此采用的是多属性联合主键的形式。第五章 详细设计详细是中的一个步骤,就是对的一个细化,就是详细设计每个模块实现算法,所需的结构。在详细设计阶段,主要是通过需求分析的结果,设计出满足用户需求的嵌入式系统产品。详细设计必须遵循概要设计来进行。详细设计方案的更改,不得影响到概要设计方案;如果需要更改概要设计,必须经过项目经理的同意。详细设计,应该完成详细设计文档,主要是模块的详细设计方案说明。和概要设计一样,每个模块的详细设计文档都应该独立成册。5.1类图类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,
15、是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图一般在详细设计过程中出现,主要用来描述系统中各个模块中类之间的关系,包括类或者类与接口的继承关系,类之间的依赖、聚合等关系。在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。它还描述每一个类的详细信息,包括变量,和方法。在化类图之前,首先应对类有一定的了解,类一
16、般包含3个组成部分。第一个是类名;第二个是属性(attributes);第三个是该类提供的方法( 类的性质可以放在第四部分;如果类中含有内部类,则会出现第五个组成部分)。类名部分是不能省略的,其他组成部分可以省略。通过类图,就能实际的把系统中的各个类,即对象描述清楚,下一步就是按照这个详细的设计编码了。1. 系统整体类图在画系统总体类图时,考虑到整体项目庞大,各类间的属性繁多,且相互间的关系比较复杂,因此将各类的属性省略。图5.1 系统总体类图Figure5.1 All Class diagram 说明:系统总体类图如上所示,其大体展示出了本项目各类之间的关系,之后的编码也会建立在此类关系之上
17、。2.学生子系统类图 画完系统总体类图后,便该完成子系统的类图,两个子系统的关系大体一致,在此仅画出学生子系统的类图,学生子系统下有四个表,由于表个数较少,此处将类图的属性及关系都画出来,已体现子系统的完整性。图5.2 选课子系统类图Figure 5.2 class diagram of course selection subsystem 上图是选课子系统的类图,在Idea中根据表间的关系绘出,图中的四个表依次为课程、课程表、选课、学生选课,表内的属性如上图所示,在往后的编程中,实体类间的关系也由上图给出。5.2时序图时序图(Sequence Diagram),亦称为或循序图或顺序图,是一种
18、UML交互图。它通过描述之间发送的时间顺序显示多个对象之间的动态协作。它可以表示的行为顺序,当执行一个用例行为时,时序图中的每条对应了一个类操作或中引起转换的触发事件。1.课程查看说明:首先教师进入可发布课程界面,控制器会执行查询全部操作,从数据库中查出所有的可发布课程,然后将这些课程信息发送到网页上,教师便可观察到全部的课程信息。图5.3 课程信息查看时序图Figure 5.3 course information view timing diagram2.可发布课程操作说明:首先教师进入可发布课程界面,可得到所有可选课程的信息,教师可对这些课程进行增、删、改操作,操作之后可将操作保存到数据
19、库中。图5.4 可发布课程操作时序图Figure 5.4 can be released in the course of the operation sequence diagram3.发布课程说明:首先教师进入可发布课程界面,可得到所有可选课程的信息,之后教师可以点击发布课程按钮,后台会根据该课程ID查询到该课程的信息,教师编辑好此课程所需的其他信息即可完成发布。图5.5 发布课程时序图Figure 5.5 Release course sequence diagram4.发布后的课程操作说明:首先教师进入可已发布课程界面,可得到所有已发布课程的信息,之后教师可以点击发布课程后的增、删、改
20、按钮,亦可进行单独查询,后台会根据该课程ID及信息进行相应操作,教师编辑好此课程所需的其他信息即可完成操作。图5.6 发布后的课程时序图Figure 5.6 Post release timing chart第六章 系统实现与代码编写 系统实现与代码编写阶段是将前边所有的逻辑设计转换成用户可操作的系统,这一阶段主要的任务是代码编写,从而产生物理文件。这个阶段中将通过项目结构图,从软件架构的角度来描述一个系统的主要功能。6.1项目结构项目由SSH三层架构开发而成,项目的组织结构图见图6.1至6.4,项目的详细组织结构表见表6.1图6.1 项目组织总结构图Fig.6.1 General organ
21、ization chart of the project图6.2项目组织部分数据访问层结构图Fig.6.2 structure of data access layer in project organization图6.3项目组织部分业务层Figure 6.3 project organization part service layer图6.4项目组织表示层结构图Fig. 6.4 structure of presentation layer of project organization项目类文件结构:表6.1项目组织结构表Table 6.1 organizational chart o
22、f the project分类类名描述Web文件(前台)index.jsp登录界面pageNotFound.jsp失败界面main.html教师登录成功界面allCourse.html所有课程界面allCourseS,html已发布课程界面allCstoexam.html发布考试界面allExam.html考试信息界面Service层(后台)AppealServicelmpl操作业务层CommentServiceImpl评论业务层CourseScheduleServiceImpl选课业务层CourseServiceImpl课程业务层ExamServiceImpl考试业务层StudentServ
23、iceImpl学生业务层TeacherServiceImpl教师业务层ASPX.CS文件(前台)AdminDaoI用户数据层AppealDaoI操作数据层CoursesTableDaoI课程表数据层CommentDaoI评论数据层CourseScheduleDaoI学科数据层CourseDaoI课程数据层ASPX.CS文件(后台)EnterScoreDaoI插入成绩数据层ExamDaoI考试数据层StudentDaoI学生数据层StudentScheduleDaoI学生选课层TeacherDaoI老师数据层业务逻辑层CourseAction课程控制器ExamAction考试控制器SCActio
24、n选课控制器StudentAction学生控制器TeacherAction教师控制器TestAction测试控制器6.2功能代码本项目功能代码详见附录一第七章 测试软件测试是软件项目的质量控制中最常用的手段之一,也是在软件开发过程中比较容易被忽略和执行得不怎么完善和彻底的工作。7.1测试的目的软件测试的目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。包括以下几个方面:验证软件需求和功能是否得到完整实现。测试首先必须用来验证软件的需求和功能是否得到完整实现。其次是验证软件在正常和非正常情况下的功能和特性。测试不仅要验证软件在正常情况下的功能和特性是否可以使用和达到期望值,更多的是验证
25、在非正常情况下功能和特性能否达到期望的要求。软件是否可以发布使用需要经过测试来验证,未经测试的软件是不能发布的。即使是内部使用的软件也同样需要测试,软件的发布需要经过验收测试。7.2 测试的过程在整个测试的过程中包含了单元测试,集成测试,确认测试,验收测试,验证测试和系统测试。本系统的测试,主要是通过手动操作该系统,主要查看的是是否存在异常或操作的结果是否按照设计初衷来完成的,主要分竞价采购模块,询比价采购模块以及招标采购模块来测试。7.2.1课程发布模块1.测试界面 教师登录后的首界面即为所有考试信息界面,教师亦可点击上方菜单选择其他功能。图7.1 全部可发布课程的关键字查询Figure 7
26、.1 Keyword queries for all published courses图7.2 显示全部课程的分页效果Figure 7.2 shows the paging effects of all courses图7.3 发布课程信息表Figure 7.3 release curriculum information sheet图7.4 已发布课程信息表Figure 7.4 published curriculum information sheet图7.5 修改删除已发布课程信息表Figure 7.5 modify and delete the published curriculu
27、m information sheet2.测试过程描述 首先教师登录进入课程发布下所有可发布课程界面,教师可以通过关键字查询需要发布的课程也可以在所有课程中选择需要发布的课程,点击发布按钮,填写完所需发布的课程信息后点击确定即完成发布,完成发布后的课程信息可在已发布课程的界面中查找到相关课程,并对自己发布过的信息进行修改、删除等操作。7.2.2考试信息发布模块1.测试界面 教师可以对已发布的课程进行考试信息发布,其操作与课程发布模块大体一致,以下是考试信息发布测试界面。图7.6 发布考试界面Figure 7.6 release exam interface图7.7 发布考试信息表Figure
28、7.7 release examination information sheet图7.8 所有考试信息界面Figure 7.8 all test information interface图7.8 修改考试信息表Figure 7.8 all test information interface图7.9 删除考试信息操作界面Figure 7.9 delete exam information operation interface2.测试过程描述 教师在发布完课程后,可对自己发布的课程进行操作,之后便可对其进行考试发布的操作,教师在发布考试信息时,需要录入考试的地点、状态等信息,之后点击确定按
29、钮,便可进行发布操作,与发布课程的操作类似,之后教师亦可对考试的状态等数据进行修改或直接删除考试信息。第八章 总结8.1 心得结论Java的出现对于学生选课乃至教务管理、教务系统的发展有重大的意义,它致力于创建一个通用的平台,以简单而有效的方式构建特定的分布服务与应用,使得开发者不需要过多的考虑如何解决计算机的技术问题,从而专注于如何实现与完善具有良好扩展性和简装性以及经济实用的应用。在这次软件设计中,首先我们深入了解了学生选课系统的功能、逻辑结构等信息,明白了其全部的业务关系,锻炼了设计能力,并深入了解了SSH框架的使用过程及功能,最重要的是进行了一次团队合作的经历,积累了实战经验。作为一个
30、软件系统,做的过程中我们不能只是单纯的做成单表的信息的增删查改,在画数据流图的过程中,我们应该在理解组织的业务流程的基础上,体现出“过程”,即所做的系统要符合实际应用的业务流程,要有所操作的记录的过程其次,在数据库设计的过程中,每一个关系模式要最好满足第三范式,这样就能避免插入删除修改异常,减少数据冗余。统的过程中,要以系统的观点去看待项目,每个人做的模块要留有一定的接口与其他人进行衔接,设计的软件功能要相互都考虑到且要全面。其次作为本项目的组长,更要有一种全局的观念,统筹大局,对时间进度要有合理地控制,懂得协调人与人之间的矛盾,对整个项目的发展以及每一个模块所要达成的目标有深刻认识。 由于能
31、力有限,此学生系统实现了用户权限分治、操作分离;数据库的插入、查询、更新、删除,但是还有很多的缺陷。对于以后的发展,可以对以下几个方面进行改进;提供数据库的日志管理和恢复。8.2 展望我们经过对系统进行的需求分析、设计直到系统的最终实现,大体上可以满足学生选课平台的功能上的需要了,但是出于各种原因,系统还可以再做更进一步的优化:1.在课程表的设计方面,模块间有些许冲突,在设计阶段我们没有考虑到它的实用问题,因此会给老师的发布造成不便,所以最后我们舍弃了这一功能,在接下来的优化中,我们会继续完善此功能。 2在考试发布模块中,由于先前设计中把院系id与课程id作为了联合主键,忽略了同一院系不同老师
32、教授同一课程的情况,也为系统留下了隐患。3,本系统是基于SSH进行开发的,前台使用ajax获取后台json数据的方式,完成了前后台解耦,优化了系统性能,增加了开发速度,提高了维护性,但没有控件概念,对html没有封装。所以可以尝试在之前的详细设计的基础上改用MVC进行开发,这样可以在某些程度提高系统的性能。参考文献1冯燕奎,赵德奎.JSP实用案例教程M清华大学出版社,20042王家华软件工程M东北大学出版社2001年3月3王宜贵软件工程M北京:机械工业出版社,20024孙卫琴精通strutsM电子工业出版社2004年8月5孙卫琴精通hibernateM电子工业出版社2005年4月6张洪斌jav
33、a2高级程序设计M中科多媒体出版社2001年11月7JimArlowUML2.0andtheUnifiedProcessM机械工业出版社2006年6月8林信良spring2.0技术手册M电子工业出版社2006年6月9熊节、林仪明、张凯峰、陈玉泉等主编CSDN社区电子杂志Java杂志创刊号10程序员杂志2007年第4期11耿祥义编著JSP基础编程M清华大学出版社,200412徐建波,周新莲Web设计原理于编程技术M中南大学出版社,200513孙鑫编著JavaWeb开发详解M电子工业出版社,200614林上杰,林康司编著JSP2.0技术手册M电子工业出版社,2004 15萨师煊,王珊.数据库系统概
34、论(第三版)M.北京:高等教育出版社,1998.16蔡剑,景楠.JavaWeb应用开发:J2EE和TomcatM.北京:清华大学出版社,2004.17王海涛,-贾宗璞.基于Struts和Hibernate的Web应用开发J.计算机工程,201118鹏,殷旻昊.基于Structs+Spring+Hibernate+Ajax技术的科研管理系统设计J.软件导刊,200919瑜江,红黄永.基于Struts的Web开发J.计算机与数字工程,2009 4李峰,刘彦隆.基于SSH框架与jquery技术的JavaWeb开发应用J.科技情报开发与经济,2010附录1Course实体类的代码package tea
35、m.jiangtao.entity;import org.hibernate.annotations.LazyCollection;import org.hibernate.annotations.LazyCollectionOption;import javax.persistence.*;import java.util.Collection;EntityTable(name = course)public class Course private String crsId; private String crsName; private String summarization; pri
36、vate Collection examsByCrsId; private Collection appealsByCrsId; private Collection commentsByCrsId; private Collection courseSchedulesByCrsId; private Collection coursesTablesByCrsId; private Collection studentSchedulesByCrsId; Id Column(name = crs_id) public String getCrsId() return crsId; public
37、void setCrsId(String crsId) this.crsId = crsId; Basic Column(name = crs_name) public String getCrsName() return crsName; public void setCrsName(String crsName) this.crsName = crsName; Basic Column(name = summarization) public String getSummarization() return summarization; public void setSummarizati
38、on(String summarization) this.summarization = summarization; Override public boolean equals(Object o) if (this = o) return true; if (o = null | getClass() != o.getClass() return false; Course course = (Course) o; if (crsId != null ? !crsId.equals(course.crsId) : course.crsId != null) return false; i
39、f (crsName != null ? !crsName.equals(course.crsName) : course.crsName != null) return false; if (summarization != null ? !summarization.equals(course.summarization) : course.summarization != null) return false; return true; Override public int hashCode() int result = crsId != null ? crsId.hashCode()
40、 : 0; result = 31 * result + (crsName != null ? crsName.hashCode() : 0); result = 31 * result + (summarization != null ? summarization.hashCode() : 0); return result; OneToMany(mappedBy = courseByCrs) LazyCollection(LazyCollectionOption.FALSE) public Collection getExamsByCrsId() return examsByCrsId;
41、 public void setExamsByCrsId(Collection examsByCrsId) this.examsByCrsId = examsByCrsId; OneToMany(mappedBy = courseByCrsId) LazyCollection(LazyCollectionOption.FALSE) public Collection getAppealsByCrsId() return appealsByCrsId; public void setAppealsByCrsId(Collection appealsByCrsId) this.appealsByC
42、rsId = appealsByCrsId; OneToMany(mappedBy = courseByCrs) LazyCollection(LazyCollectionOption.FALSE) public Collection getCommentsByCrsId() return commentsByCrsId; public void setCommentsByCrsId(Collection commentsByCrsId) mentsByCrsId = commentsByCrsId; OneToMany(mappedBy = courseByCrsId) LazyCollection(LazyCollectionOption.FALSE) public Collection getCourseSchedulesByCrsId() return courseSchedulesByCrsId; public void setCourseSchedulesByCrsId(Collection courseSchedulesByCrsId) this.course