《毕业设计(论文)Struts+Hibernate+JSP的网上选课系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)Struts+Hibernate+JSP的网上选课系统设计.doc(41页珍藏版)》请在三一办公上搜索。
1、1引言1.1课题的背景随着国民经济的加速发展,学校办学规模的不断扩大,按照传统的人工方式进行选课,由于人数增加,造成业务量大,以及人为主观因素的影响,已难以适应新形势的需要,不便于工作的顺利开展。为了加强管理,减轻工作人员的负担,提高工作效率,设计出一套实用性较强的学生选课系统。为用户提供丰富的信息、快捷的查询手段,有好的操作界面。使用户摆脱人工操作的繁琐模式,实现网上选课系统的科学化、现代化。为此,以自动化为导向,基于计算机硬件的网上选课系统开始应运而生。1.2国内外研究现状1.2.1国外选课系统的现状在国外高校,他的教学科研软件与国内相比开发的早且成熟,因为他们一般具有较大规模的稳定的技术
2、队伍来提供服务与技术支持。比如美国,早在七十年代末,就建成了NSFNET(国家科学基金网),其课程的选取与进展情况都在网上进行,各地的学生坐在家里通过互联网就可以完成选课及查询信息等功能。而国内的信息化建设相对起步较晚,对于高校来说,更是这样。由于整体信息化程度相对落后,经费短缺,理论体系不健全等原因,国内高校学生选课系统在机构设置、服务范围、服务质量及人员要求上与国外高校相比都有一定的差距。1.2.2国内选课系统的现状在我国,最开始各个高校所采用的都是人工方式的选课,接着发展成C/S结构为体系的选课系统,这就要求每个用户都要安装客户端,才能运行选课程序,非常浪费资源和使用不方便。而当时国内I
3、nternet网的逐步发展壮大,可以应充分依托校园网,实现学生能够进行网上选课,信息的集中管理、分散操作。所以有人提出并设计了以B/S 结构为体系的高校实验选课系统。该系统可以高效、灵活的进行信息的集中管理、分散操作。1.2.3发展趋势随着网络的发展,Web型软件逐渐成为社会主流。网上选课系统发展也会更好。体现在以下两点:第一,在各高校网上选课系统日趋开放,得到用户的好评;为了更好地交流和服务,促进资源的共享和优势互补,研究制定相关的标准并遵从实施,是大趋势。标准化也是开放性的前提。第二,与学校的其他有关系统有机结合,这不仅是数据交换层面的结合,还包括用户统一的门户界面,统一身份验证和授权等一
4、系列互操作问题。第三,高校人数逐渐增加,各高校彻底放弃了传统的手工方式和客户端方式,应用流行的Web方式,这就为网上选课系统垫定了好的基础,人们使用它,重视它,使该系统的发展成为必然的结果。1.3论文构成及研究内容本论文将按照软件工程的方法,首先做需求分析,然后是概要设计,设计出整个系统的功能模块和数据流图;最后是详细的页面设计和编码、测试。详细来说,第一章对网上选课系统进行了简要的介绍。第二章对网上选课系统进行整体分析。第三章对网上系统做出总体设计。第五章对网上选课系统进行详细设计。2系统分析2.1课题的可行性分析可行性分析是指在当前组织内外的具体条件下,这个选课系统的开发是否具备必要的资源
5、及其它条件。2.1.1技术上的可行性对现有技术进行评价,以明确能否利用现有技术进行系统开发及系统实施。开发工具MyEclipse与旧版本相比兼容性好,MySQL数据库稳定、灵活方便、适合现阶段业务规模发展的需要。在硬件方面,本系统要求的硬件标准不高,一般的硬件设备足够运行系统。作为软件开发平台的Java和SQL这些语言,拥有强大的文本处理,网络处理,及数据库操作能力,具备开发应用软件的一切条件。实践证明应用这些进行网上选课系统的开发是可行的。2.1.2经济上的可行性对开发软件的经济状况和投资能力进行分析,本系统开发所需的费用较低,JDK、MyEclipse、TOMCAT、MySQL都是开源软件
6、在网上都可以免费下载,利用现有的设备和装置,不需要其它费用,基本属于零投资。2.1.3操作上的可行性指系统的操作方式在用户组织中是否行得通。目前,高校人员对计算机的使用方法和操作流程都已经相当熟悉,再加上该系统友好的用户界面,很容易就能熟练操作。通过以上从技术、经济、操作三方面的研究与调查,我们可以确定该网上选课系统是可行的。2.2系统的需求分析2.2.1系统描述网上选课系统是依据大学的网上课程申请和管理需求而进行设计的,系统从功能上划分为三个主模块,身份验证模块,查询选课模块,信息管理模块。具体应实现的功能如下:l 身份验证模块功能:根据权限的不同,分别跳转到不同的页面,进行不同的操作。该系
7、统涉及两种用户:学生和教师。l 查询选课模块功能:学生用户可以查看已选课程和选择新课程。老师用户可以查看某门课程的选课信息。l 信息管理模块功能:两种用户均可以查看和修改个人信息。教师用户还可以对专业和课程信息进行修改。2.2.2系统业务流程分析业务流程分析是为了要对详细的调查结果进行整理、分析和确认,必须采用一些简单方便的方法和工具来明确表达它们,使之成为系统开发人员和用户之间进行交流的共同语言。业务流程分析采用的是自顶向下的方法,是对现行系统工作过程的描述。网上选课系统的总业务流程如图2-1所示:图2-1网上选课系统的总业务流程图学生登录成功后的业务流程如图2-2所示:图2-2学生业务流程
8、图教师登录成功后业务流程如图2-3所示:图2-3教师业务流程图2.2.3数据流分析根据业务流程分析,我们可以得到网上选课系统的数据流图。网上选课系统顶层数据流图如图2-4所示:图2-4网上选课系统顶层流程图根据不同的用户权限,展开登录处理过程,数据流图如图2-5、2-6、2-7所示:图2-5用户登录总数据流图学生登录成功后数据流图如下2-6所示:图2-6学生数据流图教师登录成功后数据流图如下2-7所示:图2-7教师数据流图3系统总体设计3.1总体设计的任务和设计原则总体设计的任务就是从系统开发的角度出发,把系统按功能逐曾分割成层次结构,使每一部分完成简单的功能且各个部分之间又保持一定的关系,在
9、这设计阶段,基于这个功能的层次结构把各个部分组合起来成为系统。它包括:1采用某种设计方法,将一个负责的系统按功能划分成模块的层次结构。2确定每个模块的功能,建立与已确定的软件需求的对应关系。3确定模块间的调用关系。4确定模块间的接口,即模块间传递的信息。设计接口的信息结构。3.2系统的功能层次结构图图3-1网上选课系统的功能结构层次图用户登录:用以实现两种用户的登录(老师和学生)。用户管理:系统所有的用户都可以进行修改密码和退出系统操作。只有学生用户才可以注册新用户,老师用户可以看做是管理员。他在后台进行注册,然后直接登录。学生模块:针对用户登录表中type字段不等于1的用户查看个人信息:系统
10、通过该学生的ID号,查询出相关的个人信息。查询可选课程:系统通过该学生的ID号,找到专业ID号,进而找到该专业下的可选课程,该结果集以列表形式表示。学生选择课程:将该课程的ID号,学生的ID号输入到学生选课表中,记录到数据库中。查询已选课程:通过该学生的ID号,从选课表中找到已选课程,该结果集以列表型时表示。输入个人信息:学生注册成功后,跳到输入个人信息页面,数据将被记录到学生信息表中,可以做查询用。教师模块:针对用户登录表中type字段等于1的用户教师添加课程:将该课程的ID号,所属的专业ID号输入到选课信息表中,此课程可以被学生选择。修改课程信息:通过专业ID号和课程ID号,找到要修改的课
11、程,设置课程是否可以被学生选择。修改专业信息:通过专业ID号,找到要修改的专业,设置此专业是否已结业。教师信息统计:通过专业ID号、课程ID号找到相对应的课程,查看学生选课情况,设置上课人数。3.3数据库设计 在系统的开发过程中,数据库的设计是整个系统的基础。良好的数据结构设计不仅可以减少数据冗余、提高查询效率,而且还可以降低应用程序的编写难度,提高工作效率。3.3.1实体E-R图 网上选课系统主要实体间关系E-R图如图3-2所示图3-2网上选课系统主要实体间关系E-R图用户(教师)实体E-R图如图3-3所示:图3-3用户(教师)实体E-R图学生除了具有上述用户属性外还具有其他属性,E-R图如
12、下3-4所示:图3-4学生实体E-R图课程实体E-R图如图3-5所示:图3-5课程实体E-R图专业实体E-R图如图3-6所示:图3-6专业实体E-R图3.3.2数据库的逻辑结构将设计好的E-R图转换为相应的关系模型。可以得到以下几个关系模式:l User( Id,loginName,pwd, type,mail)用户信息(Id号,用户名,密码,权限,邮箱)l Student( Id,Stuname,Stuno,Specialtyid,Stusex,Birthday,Homeaddr,Tel,Addr)学生信息(学生ID号,学生姓名,学号,专业编号,性别,生日,家庭住址,联系电话,现住址)l C
13、ourse(Id,Name,Schooltime,Addr,Credit,Courseinfo,Teachername,Teacherinfo, Isfinish,Specialtyid ) 课程信息(课程ID号,课程名称,上课时间,上课地点,课程学分,课程介绍,授课老师,老师介绍,是否可选,专业编号)l Specialty(Id,Enteryear,Name,Langthyear,Isfinish) 专业信息表(专业ID号,入学年份,专业名称,学制,是否毕业)l SC (Id,StuId,CourseId )课程与学生的关联表(关联号,对应学生表的外键号,对应课程表的外键号)通过关系模型的转
14、换,设计网上选课系统的数据库为五个表,如表3-1所示:表3-1数据库的五个表数据库表名说明tb_Userlogin用来存放用户的登录信息tb_stuuser用来存放学生的个人信息tb_course用来存放课程的相关信息tb_specialty用来存放专业的相关信息tb_stucourse用来存放学生选课的信息3.3.3数据库表的设计用户登录表:图3-7用户登录表建表语句为:create table tb_userlogin(id integer not null primary key auto_increment, loginName varchar(20) not null, pwd va
15、rchar(20) not null, type varchar(1) not null, mail varchar(50) not null);学生信息表:图3-8学生信息表建表语句为:create table tb_stuuser(id integer not null primary key auto_increment, stuName varchar(20) not null, stuNo varchar(15) not null, specialtyId integer not null, stuSex varchar(2) not null, birthday varchar(1
16、0) not null, homeAddr varchar(50) not null, tel varchar(20) not null, addr varchar(50) not null);课程信息表:图3-9课程信息表建表语句为:create table tb_course(id integer primary key auto_increment not null, name varchar(40) not null, schooltime varchar(40) not null, addr varchar(50) not null, credit decimal(3,0) not
17、null, courseInfo varchar(100) not null, teacherName varchar(20) not null, teacherInfo varchar(100) not null, isFinish bit(1) not null, specialtyId integer not null);专业信息表:图3-10专业信息表建表语句为: create table tb_specialty(id integer not null primary key auto_increment, enterYear varchar(4) not null, name va
18、rchar(40) not null, langthYear varchar(10) not null, isFinish bit(1) not null);学生选课表:图3-11学生选课表建表语句:create table tb_stucourse(id integer not null primary key auto_increment, stuID integer not null, courseID integer not null);3.3.4数据库的连接数据库连接语句为:4详细设计4.1开发工具及相关技术介绍4.1.1开发工具介绍4.1.1.1MyEclipse介绍MyEclip
19、se是企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,MyEclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。 MyEclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 MyEclipse 的软件开发人员,因为它允许他们构建与 MyEclipse 环境无缝集成的工具。由于 My
20、Eclipse 中的每样东西都是插件,对于给 MyEclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 总之,MyEclipse是一款功能强大的JavaEE集成开发环境,支持代码编写、配置、测试以及除错,操作灵活,是开发人员的好帮手。4.1.1.2MySQL介绍MySQL是一个快速的多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务。重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。(1)MySQL是一个数据库管理系统。(2)MySQL是一个关系数据库管理系统。(3)MySQL服
21、务器是一个快的、可靠的和易于使用的数据库服务器。(4)MySQL服务器工作在客户/服务器或嵌入系统中。(5)MySQL也可以是一个嵌入的多线程库,你可以把它连接到你的应用中而得到一个小、快且易于管理的产品。4.1.2开发模式MVC介绍MVC架构是随着smalltalk language语言的发展提出的,它是一个著名的用户界面设计架构. MVC模式不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性,可扩展性,可移植性和组件的可复用性. 经典的MVC架构把一个组件(可认为是整个应用程序的一个模块)划分成三部分:Model(模型):模型包含应用程序的核心功能,管理这个模块中所用到的
22、数据和值。View(视图):视图提供模型的表示,管理模块如何显示给用户,它是应用程序的外观。Controller(控制器):控制器对用户的输入作出反应,管理用户与视图发生的交互。MVC设计模式的优点有:多个视图使用同一个模型;对客户机的新类型更容易支持;MVC设计允许一个开发者将一个好的面向对象的设计与用户接口隔离开来,允许在同样的模型中容易地使用多个接口,并且允许在实现阶段对接口作大的修改而不需要对相应的模型进行修改.4.1.3开发技术介绍4.1.3.1Struts2介绍Struts2是一个优雅的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整
23、个过程。Struts2是Struts1和WebWork的共同成果,也可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。Struts2的工作原理:首先浏览器提交一个请求,这个请求经过一系列的过滤器。接着根据请求的动作来调用相应的Action方法,通过配置文件找到Action、类,然后创建一个类的实例,同时通过代理模式调用Action。当Action执行完毕,便会根据struts.xml中的配置找到对应的返回结果。4.1.3.
24、2Hibernate介绍Hibernate是一个免费的开源Java包,它使得与关系数据库打交道变得十分轻松,就像您的数据库中包含每天使用的普通Java对象一样,同时不必考虑如何把它们从神秘的数据库表中取出(或放回到数据库表中)。它解放了您,使您可以专注于应用程序的对象和功能,而不必担心如何保存它们或稍后如何找到它们。大多数应用程序都需要处理数据。Java应用程序运行时,往往把数据封装为相互连接的对象网络,但是当程序结束时,这些对象就会消失在一团逻辑中,所以需要有一些保存它们的方法。有时候,甚至在编写应用程序之前,数据就已经存在了,所以需要有读入它们和将其表示为对象的方法。手动编写代码来执行这些
25、任务不仅单调乏味、易于出错,而且会占用整个应用程序的很大一部分开发工作量。Hibernate在本系统中的应用:(1)表为基础建立Java的实体类。(2)所做的Java类写对应的配置文件,一个类对应一个配置XML文件。(3)hibernate.cfg.xml这个配置文件写好连接数据库名字、URL、数据库驱动名、用户名、密码以及应射到为Java类所写的XML文件中写以上所写的各个Java类对应的Service类,这些Service类主要负责将其对应的类通过映射文件增、删、改到MySQL数据库和从数据库中查出想要得到的对应的Java类。4.1.3.3JSP介绍JSP及其特点:JavaServer P
26、ages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术。JSP和ASP相比具有两方面的优点。首先,动态部分用Java编写,而不是VB Script或其他Microsoft语言,不仅功能更强大而且更易于使用。第二,JSP应用可以移植到其他操作系统和非Microsoft的Web服务器上。JSP和纯Servlet相比JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行HTML设计,同时留
27、出供Servlet程序员插入动态内容的空间。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。4.2主要类的设计与实现根据数据库表的设计,利用Hibernate的特有机制,反向生成五个实体类,分别是Course.java,Specialty.java,StuCourse.java,StuUser.java,UserLogin.java.他们分别对应数据库中的五个表。表的字段对应类的属性。Course.java记录课程信息对象,Specialty.java记录专业信息对象,StuCourse.java记录学生选课的信息,StuUser.jav
28、a记录学生信息的对象,UserLogin.java记录用户登录的对象。主要的Action类有CourseAction.java,StuUserAction.java,StatInfoAction.java这三个类。其中CourseAction.java中可以实现课程的添加、查询、设置是否可选和查看详细信息等功能。StuUserAction.java中可以实现添加、查看个人信息,查询可选、已选课程,选课,退出等功能。StatInfoAction.java中实现按照搜索条件查询专业和课程等功能。4.3系统主要功能的实现4.3.1用户登录界面首先浏览器提交一个请求,即访问http:/localhos
29、t:8080/courseSelection/地址,系统跳到登录页面,如图4-1所示。图4-1登录界面使用说明:用户需输入正确的用户名和密码,方可登录成功。不同的用户跳到不同的页面由用户登录表中的type字段决定,当type=1时,跳到老师主页面,否则跳到学生页面。若用户名或密码错误,则系统提示错误信息,如图4-2所示。图4-2错误信息提示界面4.3.2学生管理模块1.学生登录成后,可以查看个人信息,如图4-3所示:图4-3用户基本信息页面该页面根据登录学生的ID号,从用户信息表中找到该学生信息,然后列出。核心代码:public StuUser findById(Integer id) Stu
30、User user = (StuUser) getHibernateTemplate().get(StuUser.class, id); return user;2.添加个人信息学生注册成功后,需要添加个人信息,如图4-4所示:图4-4添加个人信息界面3.学生点击选择新课程,首先系统先把该专业下的可选课程全部列出来,然后选择如图4-5所示:图4-5选择新课程界面通过学生的ID,找到专业的ID,进而得出此专业下的可选课程.核心代码为:public List findSelect(Integer id) String sql = FROM StuUser stu,Course c WHERE st
31、u.id=? +AND stu.specialtyId=c.specialtyId AND c.isFinish=true AND c.id NOT IN (SELECT courseId FROM StuCourse WHERE stuId=?);Query q = getSession().createQuery(sql);q.setInteger(0, id);q.setInteger(1, id);List list = q.list();if(!list.isEmpty()Object o = list.get(0);Course course = (Course) o1;Syste
32、m.out.println(course.getName();return list;选择课程,将数据保存到选课表中。核心代码:public void insertSC(String courseIds,Integer stuId) Session session = getSession();for (int i = 0; i courseIds.length; i+) StuCourse sc = new StuCourse();sc.setStuId(stuId);sc.setCourseId(Integer.valueOf(courseIdsi);session.save(sc);if
33、(i%5=0)session.flush();session.clear();4. 查询已选课程,页面如图4-6所示:图4-6学生已选课程界面通过学生的ID号,在学生选课表中以外键出现,进而找到课程ID,列出已选的课程。核心代码:public List findSelected(Integer id) String sql = FROM StuUser stu,Course c,StuCourse sc WHERE stu.id=? AND stu.id=sc.stuId And c.id=sc.courseId;Query q = getSession().createQuery(sql);
34、q.setInteger(0, id);List list = q.list();if(!list.isEmpty()Object o = list.get(0);Course course = (Course) o1;System.out.println(course.getName();return list;4.3.3教师管理模块1.教师成功登录后的主页面,如图4-7所示:图4-7教师主页面2.专业管理,教师可以设置某专业是否结业。图4-8专业管理首先先把所有专业都列出来,核心代码为:public List findByAll() List list = getHibernateTemp
35、late().find(FROM Specialty);return list;通过专业的ID号,设置专业已结业.核心代码为:public void updateIsFinish(Integer id) Query q = getSession().createQuery(UPDATE Specialty s SET s.isFinish=? WHERE s.id=?);q.setBoolean(0, true);q.setInteger(1, id);q.executeUpdate();3课程管理主页面 老师点击课程管理,系统将会列出所有课程,如图4-9所示:图4-9课程管理界面核心代码为:
36、public List findByAll() List list = getHibernateTemplate().find(from Course);return list;4.按搜索条件查询课程输入要查询的索引条件,查询某门课程,如图4-10所示:图4-10由搜索条件查询课程界面核心代码为:public List findBySearch(Map map) String sql = FROM Specialty s, Course c Where s.id=c.specialtyId ;if(map.get(specialtyId)!=null)sql += AND c.specialt
37、yId = +map.get(specialtyId);if(map.get(name)!=null)sql += AND c.name like %+map.get(name)+%;if(map.get(teacherName)!=null)sql += AND c.teacherName like %+map.get(teacherName)+%;List list = getHibernateTemplate().find(sql);return list;5.课程详细信息当点击某一门课程,可以查看该课程的详细信息,如图4-11,4-12所示:图4-11课程详细信息图4-12课程详细信息
38、核心代码为:public Course findByID(Integer id) Course course = (Course) getHibernateTemplate().get(Course.class, id);return course;当该课程可选时,可以设置该课程为不可选,通过该课程的ID号,从课程信息表中修改课程的可选性。核心代码:public void updateIsFinish(Integer id) Query q = getSession().createQuery(UPDATE Course c SET c.isFinish=? WHERE c.id=?);q.s
39、etBoolean(0, false);q.setInteger(1, id);q.executeUpdate();7.添加课程界面图4-13添加课程界面核心代码为:public void insert(Course course) getHibernateTemplate().save(course);8.统计信息界面,如图4-14所示:图4-14统计信息界面9.详细的课程统计信息(选课名单界面)当点击查看,系统按照课程的ID号,从选课表中查出选该课程的上课学员名单,如图4-15所示:图4-15选课名单界面核心代码:public List findSelectStu(Integer id)
40、String sql = FROM StuUser s,StuCourse sc WHERE sc.courseId=? AND s.id=sc.stuId;Query q = getSession().createQuery(sql);q.setInteger(0, id);List list = q.list();return list;4.3.4用户管理模块1.用户注册界面,如图4-16所示:图4-16注册界面2.修改密码界面,如图4-17,4-18所示:图4-17教师修改密码界面图4-18学生修改密码界面核心代码:public void updatePwd(Integer id,Str
41、ing pwd) Query q = getSession().createQuery(UPDATE UserLogin user Set user.pwd = ? AND WHERE id = ?);q.setString(0, pwd);q.setInteger(1, id);q.executeUpdate();5 结论在网上选课系统的整个开发过程中,由于本人是初次学习并使用Java这种面向对象的开发语言来开发软件程序,所以在对Java知识理解的广度和深度以及在解决问题的经验方面都存在不足和需要改正的地方。另外,在整个系统的开发过程中,由于时间比较仓促,难免在系统的分析方面有不到位的情况,
42、在程序设计方面有考虑不周全的地方,因此该系必然存在着一些或多或少的缺陷和不足,甚至可能难以满足特定用户的特殊要求。比如说难以实现中文编码问题。再有就是针对每个用户只管理自己课程权限的实现。这些都是我将在今后在程序设计方面要努力实现的目标和方向。在开发过程中,也遇到了不少的问题,经过不断的学习和老师的细心指导,最终解决了这些问题,与此同时,让我也对此系统的开发有了更深刻的了解,对Struts2、Hibernate和JSP网络编程技术有了更高层次的了解,让我不但在技术上有了一定的提高外,而且了解了许多软件开发经验。最后我会继续努力,争取做得更好。 参考文献1百度百科B/S结构2百度百科MyEclipse