网上选课.docx
《网上选课.docx》由会员分享,可在线阅读,更多相关《网上选课.docx(16页珍藏版)》请在冰点文库上搜索。
![网上选课.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/5581791a-67f0-438b-afce-4495a991b088/5581791a-67f0-438b-afce-4495a991b0881.gif)
网上选课
软件综合课程设计报告
题目名称:
班级:
学生学号:
学生姓名:
指导老师:
程序成绩:
报告成绩:
总成绩:
优良中及格不及格
2011年12月30日
1前言
众所周知,在许多大学里,并没有提供完全固定的课程表,学生在每学期的一开始要根据自己的专业要求和兴趣在一些选修课或者限选课中进行选择,从而决定本学期自己要学习的课程。
但是在早期,同学们往往需要在对应课程的前期到课堂现场进行注册,这样有时就会出现僧多粥少的现象,以至于超出选课人数而不得不转而选修其他课程。
解决这种窘境的办法就是更快的提前决定选课结果而不是学生亲自到课堂选择,于是可以利用网络进行在线选课,是的选课过程更加有效而合理。
实际上目前有许多学校都使用在线选课系统在每学期开学的时候为学生提供选课服务。
2需求分析
网上选课系统设计为学生和教师同时使用,所以在登陆页面允许学生和教师同时使用,而且根据使用者角色的不同,自动迁移到不同的页面。
学生登录系统后可以查看所有课程的选课情况,而且可以对选课人数没有满员的课程进行选课操作,同时也可以查看自己已经选择了哪些课程;教师登录系统以后可以查看所有课程的选课情况,也可以添加可选的课程。
在这里教师充当了在线选课的管理员角色。
开发平台的构建:
tomcat+mysql+jsp。
Tomcat是一个轻量级使用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
MySQL是一个小型关系型数据库管理系统,是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。
这样就增加了速度并提高了灵活性。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。
网页还能通过tags和scriptlets访问存在于服务端的资源的使用逻辑。
JSP将网页逻辑和网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的使用程序的开发变得迅速和容易。
3系统分析和设计
3.1功能描述
从功能上来说,整个系统大概分成以下几个模块。
(1)登陆。
选课是带有个人性质的行为,不能够允许任何人为其他人选课,所以必须在用户使用系统的大部分功能之前提供一个验证机制,不管是学生还是教师,必须通过输入用户名和密码来进入系统。
同时,学生查看自己的选课情况时,系统也必须知道当前用户是谁,才能够从数据库中选取出来对应的记录。
(2)学生选课模块。
学生登录系统以后可以查看所有可以选择的课程,并选取自己感兴趣的课程。
这个模块就是用于列出所有课程信息,并允许学生完成选课操作。
(3)学生选课结果浏览模块。
学生登录系统以后也可以针对自己已经选择的课程进行查看,以决定是否还要选择其他课程。
(4)教师查看所有课程选择记过模块。
教师登陆系统以后,可以随时查看最新的选课信息,如所有课程的信息和对应的选课人数等。
(5)添加课程模块。
在学生选课之前,必须有对应的课程信息,在这个模块中教师可以添加对应的课程信息,包括课程名称、教师名称、学分等信息。
而对于整个系统来说,使用者主要分为以下两种角色。
学生。
学生只能选择自己感兴趣的课程和查看自己的选课系统,面向的是自己个体的信息,对应的模块是上面的
(1)、
(2)、(3)这3个模块。
教师。
教师面向的是整个课程的信息,并且担当起课程管理的角色,同时可以查看每个课程的选课情况,对应的模块是上面的
(1)、(4)、(5)这3个模块。
下图为选课系统UseCase图
在线选课系统UseCase图
3.2系统流程图
对于学生来说,如果登陆成功,则页面默认会直接迁移到选课页面,显示出可以选择的课程一览供学生选择。
在选课页面有两种方式可以迁移到选课结果一览页面,一种是对某课程进行选课操作,另一种是直接单击页面上部的链接。
在选课结果一览页面单击页面上部的链接可以回到选课页面。
在选课页面和选课结果一览页面都可以通过单击页面上部的“退出登录”链接退出系统,并返回登陆页面。
对于教师来说,如果登陆成功,则页面默认会直接迁移到课程一览页面,显示出当前所有课程的选课情况。
在课程一览页面单击页面上部的链接可以使页面迁移到添加课程页面。
在添加课程页面同样可以通过两种方式返回课程一览页面,一种是单击“登录”按钮登录新课程成功以后,页面会返回课程一览页面,另一种是直接单击页面上部的链接。
在课程一览页面和添加课程页面都可以通过单击页面上部的“退出登录”链接退出系统,并返回登录页面。
按照学生和教师两种角色考虑,整个系统的页面迁移如下图
学生教师
在线选课系统页面迁移图
接下来是对每个页面功能进行基本设计,包括页面的显示内容、交互内容以及迁移动作等。
(1)登录页面包含两个输入域,其中用户名为普通输入域,而密码为password类型的输入域。
页面初期表示的时候,焦点落在用户名输入域上。
登录还包括两个单选按钮,一个是学生,一个是教师,用来区分当前登录用户的角色,默认是学生角色被选中。
登陆页面的交互内容包含“登录”和“清除”两个按钮。
“登录”按钮按下时,根据用户输入的信息去数据库中进行校验;“清除”按钮按下时,清除用户刚才的输入信息。
“登录”按钮按下时,根据用户输入的用户名、密码、和角色去数据库中进行校验,如果校验通过,则根据当前用户选角色的不同进行页面迁移,即学生跳转到选课页面,教师跳转到课程一览页面。
(2)在学生选课页面,上部是欢迎信息和相关链接,链接包括连个部分,一部分是到选课结果一览页面的链接,另一部分是用来退出登录使用的链接。
页面主题信息是当前用户可以选择的课程一览,这里所谓的可以选择的课程一览指的是所有课程,但不包括用户已经选择过的课程。
课程一览中分别显示对应课程的相关信息,其中需要注意的是“已选人数”一项,这一项表示了在显示页面这一时刻已经选择了该课程的人数。
每一个课程都对应有一个选课按钮,当选课人数已经达到了对大选课人数(或者大于最大选课人数)的时候,对应课程的选课按钮应该是灰色不可按下的状态。
当用户按下对应课程的选课按钮的时候,将尝试将用户的选课信息登录进数据库。
如果选课成功则页面迁移到选课结果一览页面,否则继续显示当前页面并提示错误消息。
(3)选课结果一览页面比较简单,是单纯的参照页面,本页面将当前用户所有已选课程成功的课程形成一览显示在页面上,页面大致显示内容和选课页面比较相像,页面上部依然是欢迎信息和链接,链接包括两个,一个可以到选课页面,一个可以用来退出登录。
页面主体信息包括当前用户已经选择的课程一览,其中包括课程对应的详细信息,例如课程编号、课程名称、授课老师以及学分和上课时间等信息。
教师登录成功后首先进入的是课程一览页面。
作为教师的角色应该注重的是全局的概念,所以这里的一览页面应当包括所有的课程信息。
(4)课程一览页面依然有欢迎信息和链接,链接一个用来迁移到添加课程页面,一个用来退出登录。
页面的主体信息是当前所有的课程,除了课程本身的相关信息以为,还应该包括对应课程当前的选课情况,包括最大选课人数和已选课人数等信息。
(5)添加课程页面是一个单纯的登录页面,包括欢迎信息和链接,这里的链接可以使页面迁移到所有课程一览页面。
登录内容包括课程的主要信息,如课程编号、课程名称学分、授课老师、上课时间和限选人数等信息。
添加课程页面的“登录”按钮按下的时候,首先检查用户输入信息的合法性,如果没有问题则提交到服务器。
这时需要对对应课程编号进行检查,因为课程编号应该惟一,用来区别不同的课程,所以必须保证输入的课程编号在数据库中没有已经存在的记录。
如果检查通过,则将课程信息登录到数据库中,同时页面迁移到课程一览页面。
3.3数据库设计
3.3.1E-R图设计
在线选课系统中实体有学生、教师、课程。
学生的属性为用户名,密码。
教师的属性为用户名,密码。
课程的属性为课程编号、课程名称、学分、上课时间、限选人数。
关系为多对多。
M
N
MN
在线选课数据库E-R图
3.3.2数据库结构描述
在线选课系统主要包括的模块有登录、选课、课程登录等,实际上对应的数据库应该有3个表。
(1)针对用户登录,需要有一个用户表,这个表中应当包含用户名、密码、真实姓名和用户角色(学生或者教师)这样几个字段。
(2)针对课程,应该有一个存放课程基本信息的表,包括课程编号、课程名称、授课老师、学分、限选人数、上课时间等信息。
(3)针对学生选课操作,应该有一个单独的选课表,其中记录了选课的用户名和对应的课程编号,标识课程记录。
在线选课系统使用的数据库的基本结构分别如下:
(1)用户表,表名为USER。
字段名
类型
长度
是否为主键
可否为空
说明
SUERNAME
VARCHAR
20
是
否
用户登录用户名
PASSWORD
VARCHAR
20
否
否
用户登录密码
REALNAME
VARCHAR
20
否
否
用户真实姓名
ROLE
CHAR
1
否
否
0:
学生1:
教师
(2)课程信息表,表名为COURSE。
字段名
类型
长度
是否为主键
可否为空
说明
COUUSE_ID
CHAR
6
是
否
课程编号
COURSE_NAME
VARCHAR
40
否
否
课程名称
TEACHER
VARCHAR
40
否
否
授课老师姓名
POINT
INT
否
否
学分
TIME_1
CHAR
2
否
否
第一次上课时间
TIME_2
CHAR
2
否
否
第二次上课时间
LIMITED
INT
否
否
限制人数
(3)选课表,表名为ELECTIVE。
字段名
类型
长度
是否为主键
可否为空
说明
USERNAME
VARCHAR
20
是
否
选课学生的用户名
COURSE_ID
CHAR
6
是
否
对应课程编号
从这3个表之间的关系可以看出,用户表和课程表都是属于基本表达类型,而选课表则在这两个表之间起到了一个关联表的作用。
建立数据库并创建上述表结构的SQL如下:
CREATEDATABASEch04;
droptableifexistsuser;
CREATETABLEUSER(
USERNAMEVARCHAR(20)NOTNULL,
PASSWORDVARCHAR(20)NOTNULL,
REALNAMEVARCHAR(20)NOTNULL,
ROLECHAR
(1)NOTNULL,
PRIMARYKEY(USERNAME));
droptableifexistscourse;
CREATETABLECOURSE(
COURSE_IDCHAR(6)NOTNULL,
COURSE_NAMEVARCHAR(40)NOTNULL,
TEACHERVARCHAR(40)NOTNULL,
POINTINTNOTNULL,
TIME_1CHAR
(2)NOTNULL,
TIME_2CHAR
(2)NOTNULL,
LIMITEDINTNOTNULL,
PRIMARYKEY(COURSE_ID));
droptableifexistselective;
CREATETABLEELECTIVE(
USERNAMEVARCHAR(20)NOTNULL,
COURSE_IDCHAR(6)NOTNULL,
PRIMARYKEY(USERNAME,COURSE_ID));
4系统实现
4.1主要类
使用Servlet进行数据库的相关操作,把数据库连接的获取放到一个共同的处理中完成,为所有的Servlet做一个父类,这个父类唯一的方法就是获取一个数据库连接,这个父类命名为Common,这样有利于维护。
有了Common类,如果数据库连接字符串发生改变,只需要修改这一个文件即可影响到所有的Servlet。
其他的类都是从Common类中继承来的。
classCommon//针对一些共通处理的父类
classLoginextendsCommon//针对登录页面的
classViewCourseextendsCommon//针对学生选课登录结果页面的
classChooseCourseextendsCommon//针对学生选课登录页面的
classCourseListextendsCommon//针对教师查看选课结果页面的
classAddCourseextendsCommon//针对教师添加课程页面的
classCourse//针对课程的bean类
4.1主要方法
javaScript中的的方法:
cmnScript.js中的方法,jsp文件中用到的一些方法有JavaScript脚本语言编写并放置在cmnScript.js文件中。
调用时用语句在文件的head中进行声明。
functioncmnWindowLoad()//共通的页面载入处理
functionlogout()//退出登录
functiongotoPage(sNextPage)//跳转到指定页面
functiongetLength(inStr)//得到全角半角的长度,全角=2,半角=1
functionfnClose()//关闭IE窗口前提示
functiongotoAddPage()//画面迁移到新增知识点页面
functiongotoSearchPage()//画面迁移到新增知识点页面
functiongotoIndex()//画面迁移到首页
functionhasSpecialString(strArg)//判断是否有非法字符存在
functionhasSpecialChar(strArg,strSpecial)//判断是否有非法字符存在
4.2主要变量
在Course类中,共用类,在类中保存了课程的基本信息以及关联信息,包括课程编号、课程名称、授课老师、学分、上课时间、限选人数以及选课人数。
对于课程一览的数据类型,决定采用Vector的形式存放课程,对于Vector中的每一个课程,都用一个独立的课程对象来保存信息,这个对象在ch04.Course中。
privateStringcourseId="";//课程ID
privateStringcourseName="";//课程名称
privateStringteacher="";//授课老师姓名
privateintpoint=0;//学分
privateStringtime1="";//第一节课时间
privateStringtime2="";//第二节课时间
privateStringtime1Express="";//第一节课时间表达式
privateStringtime2Express="";//第二节课时间表达式
privateintlimited=0;//选课人数
privateintamount=0;//已选课人数
在这个代码中注意到针对某课程的上课时间多添加了两个成员变量,因为在数据库中存放上课时间的是两位数字,但是页面显示的时候需要将对应的数字转化为对应的文字表达式才能比较直观地表达上课时间的概念,所以必须在这个类中对两位数字的上课时间和一个文字字符串的表达式进行转换,这个转换的通用方法getExpress进行的。
4.3页面实现
在线选课系统的代码目录结构如下表:
对应功能
\ch04
根目录,放主要的JSP文件和各自对应到JavaScript文件
\common
页面用到的共同JavaScript脚本文件和CSS定义文件
\inc
页面共同使用的JSP代码块
\WEB-INF
TomcatWeb使用程序必备文件夹,其中放置web.xml文件
\src
放置Servlet的Java代码
\classes
放置Servlet的Java类文件
\lib
放置需要用到的第三方工具,例如JDBC驱动程序等
每个模块的编写,或者说每个页面的编写,都包括两个部分,一部分是JSP,一部分是Servlet。
(1)对于用户来说,第一个见到的页面应该是登录页面,而且在显示登陆页面之前不需要做任何准备工作,也不需要从数据库中读取信息,所以单纯显示登陆页面,使用一个JSP文件就可以了。
在编写登录页面的JSP文件和之前,需要考虑前面的基本设计中的思路,在JSP文件中需要尝试在session中寻找用户名和用户角色这两个变量,如果有了对应的值,则需要在页面适当的地方将其反应出来。
在登录页面login.jsp,页面如下:
(2)学生选课页面同样分为JSP和Servlet两个部分,针对学生选课页面,最主要的数据形式是课程一览,这里以此为例进行说明。
课程一栏可以看做一个数组,首先做出一个约定,Servlet从数据库中选取出来对应的课程一览时,按照变量名courses往session中进行设置,在JSP页面显示的时候,则按照courses从session中读取对应的课程一览数据进行显示。
学生选课页面chooseCourse.jsp页面如下:
(3)选课结果一览页面的Servlet对应的是servlet/ViewCourse,是单纯的显示页面,没有表单提交,所以JSP显示和Servlet的处理都比较简单。
选课结果一览页面的JSP和Servlet之间的数据传递主要体现在,Servlet在页面显示之前准备好数据,在JSP页面获取。
本页面的数据同样是课程一览,只是逻辑上和选课页面的课程一览不同,但是主要数据类型还是基本相同的,所以在选课结果一览依然采用Vector的形式保存课程信息,也同样采用courses的变量名在session中保持课程一览信息。
唯一的区别在于,选课结果一览页面不需要查看课程的限选人数和选课人数,所以页面显示的表格要稍微简单一些。
对应的页面源代码viewCourse.jsp页面如下:
(4)根据前面的基本设计,教师在登录在线选课系统以后进入的默认页面是所有课程的选课情况一览页面。
教师看到的选课情况一览和学生看到的选课结果一览页面有点类似,但是也有区别。
教师看到的选课情况一览面向的是所有课程的选课情况,而学生看到的是自己的选课结果;教师看到的选课情况包括该课程的限选人数,而学生看到的不包括该对应信息。
但是从代码级别考虑,这两个页面的相似性还是比较大的。
在JSP和Servlet之间的约定,这里同样采用Vector的方式存储课程一览,而且在session中的变量名为courses。
JSP代码名为courseList.jsp,页面如下:
(5)添加课程页面和前面的其他页面有所不同,他不需要显示的准备工作,而且是一个单纯的登录页面。
添加课程页面依然要考虑JSP和Servlet的约定,这是因为,当用户输入的课程信息因为某种原因无法登录数据库的时候,需要重新显示添加课程页面,而且用户刚才输入的信息应该依然在页面上保留。
因为添加课程页面上的信息是一个完整课程的信息,所以约定JSP和Servlet共同操作的是一个课程对象,在session中的变量命名为course,这里是单数形式,代表只是一个课程的详细信息。
在编写对应的JSP代码的时候,需要注意从session中取得对应的信息并显示在页面上的合适位置,而且在显示上课时间的时候,需要将上课时间的两位字符串进行分割,从而正确显示下拉列表框的内容。
添加课程的JSP文件名为addCourse.jsp,页面如下:
5结束
在实际的使用系统中,往往情况很复杂,例如一个完整的Web项目中,可能用户的角色不止两种,如包括校长、党委书记、系主任、教师、学生、系统管理员等,根据角色的不同,看到的系统也有所不同,这时依靠在登录页面设置不同角色的选择按钮就显得有些不合适了。
一种通常采用的办法是在数据库用表中为用户设置级别,或者相当于角色,用户登录系统的时候没有任何差异,也不需要用户选择自己的角色,只是在用户校验通过以后,通过服务器段代码确认用户的级别,并决定用户下一步的行为。
这样做能够极大地增强系统的扩展能力。
参考文献
[1]沈应逵曾凌.JavaWeb数据库系统使用开发和实例.人民邮电出版社