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