基于JSP的选课系统报告含源文件.docx
《基于JSP的选课系统报告含源文件.docx》由会员分享,可在线阅读,更多相关《基于JSP的选课系统报告含源文件.docx(22页珍藏版)》请在冰豆网上搜索。
基于JSP的选课系统报告含源文件
基于JSP的选课系统
一.概述
1.1设计题目及实现目标
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
学生选课系统作为一种现代化的教学技术,以越来越受到人民的重视。
是一个学校不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生选课系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:
效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
学生选课系统就是为了管理好选课信息而设计的。
学生选课系统的将使选课管理工作规范化,系统化,程序化,避免选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。
学习Web应用程序的开发(B/S方式),JSP编程技术开发选课系统;通过编程实践掌握JSP的动态网页与MySql数据库相结合的技术;通MVC(模型-视图-控制)架构模式,使其在开发过程中得以应用。
实现系统有较好的可维护性、可靠性、可理解性、效率。
易于用户理解和操作。
可维护性包括了可读性、可修改性、可测试性、等含义。
可靠性通常包括正确性和健壮性。
开发过程中,在各种矛盾的目标之间作权衡,并在一定的限制的条件下(时间、可用的软、硬件资源等),使上述各方面最大限度的得到满足。
1.2开发环境简介
实验中采用的开发环境:
编译器:
JDK1.6
Web服务器:
Tomcat6.0
插件开发平台:
MyEclipse8.5
数据库服务器:
MySQL5.0
二.系统需求
2.1系统功能描述
学生选课系统是典型的信息管理系统(MIS),本系统是根据现代化校园的发展而设计的基于jsp的学生选课管理系统,本系统就是为了管理好选课信息而设计的。
学生选课系统需要满足来自两方面的需求,这三个方面分别是学生和老师。
学生的需求是查询系的课程、学生选课情况;选课管理员的功能,包括对学生、选课进行管理和统计。
学生可以直接查看选课情况,学生可以根据本人学号和密码登录系统,还可以进行本人课程情况的查询、修改和维护部分个人信息及对所在专业的所有班级进行成绩查询。
管理员可以浏览、查询、修改、统计选课的基本信息;浏览、查询、统计和修改学生选课的基本信息设计不同用户的操作权限和登陆方法对所有用户开放的学生选课查询和个人部分信息维护查看个人情况信息维护学生个人密码根据选课情况对数据库进行操作并生成报表根据选课情况对数据库进行操作并生成报表查询及统计各种信息维选课信息维护工作人员和管理员信息维护学生信息处理信息的完整性。
1)学生信息模块完成学生的登陆,然后根据各位同学所在的系不同,调用相应的选课模块。
2)其中学生登录模块的功能是验证登录人员确实存在的学生,学生启动本系统后,系统提示输入学生学号码和密码(输出登陆密码及学生的学号)验证后进入主控操作界面。
3)课程信息管理有学生已经选择的科目和可以选择的科目,学生同时可以在规定时间内对自己选择的科目进行修改,学生必需先登陆才能进行对课程的选课否则不能进入选课系统.
2.2系统功能模块
1.系统用户由三类组成:
教师、学生和管理员;
2.管理员负责的主要功能:
课程审核,课程统计,成绩查看;
课程管理(删除和修改)
选课管理(实现选课功能开放和禁止、教师成绩输入开放和禁止)
3.学生模块:
主要包括学生选课模块、学生查询模块和学生部分信息修改模块。
4.教师通过登录,可以添加课程,查看选课学生的基本信息,可以输入成绩;
2.3E-R图
实体-联系图(Entity-RelationDiagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,形成一个独立于机器,独立于DBMS的ER图模型。
通常将它简称为ER图,相应地可把用ER图描绘的数据模型称为ER模型。
ER图提供了表示实体(即数据对象)、属性和联系的方法,用来描述现实世界的概念模型。
三.数据库逻辑结构设计
3.1数据库的需求设计
数据库技术是信息资源管理最有效的手段。
数据库设计是指:
对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。
方便显示和方便查询,建立两层:
数据库的基本层-表和数据库的视图。
3.2概念结构设计阶段
(1)定义实体
实体集成员都有一个共同的特征和属性集,可以从收集的源材料——基本数据资料表中直接或间接标识出大部分实体。
分析可是本系统包含的实体有:
院系tbDept、专业tbProfession老师、tbTea学生、tbStudent课程、tbCourse选课、tbSC管理员、tbAdministrator
(2)定义联系
根据实际的业务需求和规则,使用实体联系矩阵来标识实体间的二元关系,然后根据实际情况确定出连接关系的势、关系名和说明,确定关系类型,是标识关系、非标识关系(强制的或可选的)还是非确定关系、分类关系。
根据本系统确定的联系有院系和专业是一对多关系,专业和学生也是一对多关系,老师和课程也是一对的关系,专业和课程也是一对多关系
。
学生和课程为多对多关系。
(3)定义码
通过引入交叉实体除去上一阶段产生的非确定关系,然后从非交叉实体和独立实体开始标识侯选码属性,以便唯一识别每个实体的实例,再从侯选码中确定主码。
为了确定主码和关系的有效性,通过非空规则和非多值规则来保证,即一个实体实例的一个属性不能是空值,也不能在同一个时刻有一个以上的值。
院系tbDept(主键:
系别)、专业tbProfession(主键:
专业号,外键:
系别)老师、tbTea(主键:
老师号,外键:
课程号)学生、tbStudent(主键:
学生号,外键:
专业号)课程、tbCourse(主键:
课程号外键:
专业号,老师号)选课、tbSC(联合主键:
学生号和课程号,外键:
学生号,课程号)管理员、tbAdministrator(主键:
管理员号)。
(4)定义属性
从源数据表中抽取说明性的名词开发出属性表,确定属性的所有者。
定义非主码属性,检查属性的非空及非多值规则。
此外,还要检查完全依赖函数规则和非传递依赖规则,保证一个非主码属性必须依赖于主码、整个主码、仅仅是主码。
定义表主要代码:
院系表tbDept
字段名
类型
长度
是否为主键
可否为空
说明
Dept_no
varchar
20
是
否
院系号
Dept_name
varchar
40
否
是
院系名
专业表tbProfession
字段名
类型
长度
是否为主键
可否为空
说明
Pro_no
varchar
20
是
否
专业号
Pro_name
varchar
40
否
是
专业名
Dept_no
varchar
20
否
是
院系号
老师表tbTeacher
字段名
类型
长度
是否为主键
可否为空
说明
Tea_no
varchar
20
是
否
老师号
Tea_name
varchar
40
否
是
老师名
Tea_pwd
varchar
40
否
是
老师号
Pro_no
varchar
20
否
是
院系号
课程表tbCourse
字段名
类型
长度
是否为主键
可否为空
说明
Cno
char
20
是
否
科目号
Cname
varchar
40
否
是
科目姓名
Cnature
varchar
20
否
是
科目性质
Cstate
varchar
20
否
是
科目状态
Cterm
int
否
是
学期
Cintro
varchar
500
否
是
科目简介
Pro_no
varchar
40
否
是
院系号
Tea_no
varchar
20
否
是
老师号
Cstate为1代表该科活动,0代表锁定,活动即学生可以进行选课老师不可以评分,锁定即学生不可以选课,但是老师确可以评分。
学生信息表tbStudent
字段名
类型
长度
是否为主键
可否为空
说明
Sno
char
20
是
否
学生学号
Sname
varchar
40
否
是
学生姓名
Spwd
varchar
40
否
是
学生密码
Ssex
varchar
10
否
是
学院性别
Sclass
varchar
40
否
是
班级
Sterm
int
否
是
学期
Sentertime
Int
否
是
入学时间
Pro_no
varchar
40
否
否
学生密码
选课表tbSC
字段名
类型
长度
是否为主键
可否为空
说明
Sno
varchar
20
是
否
学生号
Cno
varchar
20
是
是
科目号
Grade
varchar
20
否
是
成绩
3.3关系图
四程序核心代码及控件描述
4.1系统总框架图
4.2细分功能介绍
4.2.1学生功能部分
学生通过首页的登陆框,进入student.jsp页面,系统通过数据库(通过loginServlet实现)查询,查出学生选修课程,并通过读取其专业信息及当今所处学期,列出其本学期可选的课程。
通过输入学号及新密码,系统会根据学号查询tbStudent,更新密码。
通过输入选修课号,可以增加选修课,通过删除,可以删除已选的课程,通过查询可以实现按班级查询,按学号查询以及按姓名查询。
4.2.2教师功能部分
老师登录后,会通过查询数据库,显示老师教授的课程,方便老师对相关课程进行评分,同时会通过数据库查询显示未评分的学生,提醒老师进行评分,同时老师还可以修改密码,填写教授课程的专业介绍,对相关课程评分,查询选修学生的情况。
4.2.3管理员功能部分
管理员通过后台登录,登陆后管理员可以录入相关专业某学期的专业课程,及课程的相关信息,并可以设定课程状态(课程现在是否处于可选状态,选了该课程,现在还能否退掉),同时管理员还可以更新及修改学生及老师的基本信息,对学生及老师基本信息进行管理。
4.3功能的具体实现及代码
以学生功能模块为例,介绍各部分的具体实现及其代码。
4.3.1数据库操作类
packagecom.courses;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importmons.dbutils.DbUtils;
importmons.dbutils.QueryRunner;
importmons.dbutils.ResultSetHandler;
publicclassDButil{
privateStringurl="jdbc:
mysql:
//localhost:
3306/courses";
privateStringjdbcDriver="com.mysql.jdbc.Driver";
privateStringuser="root";
privateStringpassword="pbm914";
publicintupdate(Connectionconn,Stringsql,String[]param){
intresult=0;
QueryRunnerqr=newQueryRunner();
try{
result=qr.update(conn,sql,param);
}catch(SQLExceptione){
e.printStackTrace();
}
returnresult;
}
publicObjectquery(Connectionconn,Stringsql,String[]param,ResultSetHandlerrsh){
QueryRunnerqr=newQueryRunner();
Objectresult=null;
try{
result=qr.query(conn,sql,param,rsh);
}catch(SQLExceptione){
e.printStackTrace();
}
returnresult;
}
publicStringgetUrl(){
returnurl;
}
publicvoidsetUrl(Stringurl){
this.url=url;
}
publicStringgetJdbcDriver(){
returnjdbcDriver;
}
publicvoidsetJdbcDriver(StringjdbcDriver){
this.jdbcDriver=jdbcDriver;
}
publicStringgetUser(){
returnuser;
}
publicvoidsetUser(Stringuser){
this.user=user;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
4.3.2登录功能
通过JSvalidation框架,验证输入是否合法,然后通过loginServlet判断登录是否成功。
JSvalidation框架是导入的一个插件。
loginServlet相关代码:
Stringsno=request.getParameter("username");//获得登录名及密码
Stringpwd=request.getParameter("pwd");
HttpSessionse=request.getSession();
se.setAttribute("sno",sno);//设置用户session方便进行查询
//System.out.println(pwd);
//System.out.println(pwd);
Stringsql="selectSpwd,Sentertime,Pro_no,StermfromtbStudentwhereSno="+sno;//sql语句,对数据库查询
Connectionconn=null;//下面为数据库连接及查询操作
DButildb=newDButil();
Stringurl="jdbc:
mysql:
//localhost:
3306/stucourse";
db.setUrl(url);
DbUtils.loadDriver(db.getJdbcDriver());
try{
conn=DriverManager.getConnection(db.getUrl(),db.getUser(),db.getPassword());
}catch(SQLExceptione){
e.printStackTrace();
}
Listlist=(List)db.query(conn,sql,null,newMapListHandler());
System.out.println(db.getUrl());
if(conn!
=null)
System.out.println("success");
if(list!
=null)
System.out.println("OK");
booleant=false;
for(inti=0;i{
Mapmap=(Map)list.get(i);
if(map.get("Spwd").equals(pwd))
{intterm=(Integer)map.get("Sentertime");
TermSetterts=newTermSetter();
term=ts.Set(term);
Stringpro_no=(String)map.get("Pro_no");
se.setAttribute("pro_no",pro_no);
se.setAttribute("term",term);
System.out.println(term);
sql="updatetbStudentsetSterm="+term+"whereSno="+sno;
intres=db.update(conn,sql,null);
t=true;
}
}
try{
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
if(t)
{
request.setAttribute("method",method);
request.setAttribute("sno",sno);
RequestDispatcherrd=request.getRequestDispatcher("/student.jsp");
rd.forward(request,response);
}
else{RequestDispatcherrd=request.getRequestDispatcher("/error.jsp");
rd.forward(request,response);
}
4.3.3显示已选及可选课程
通过tbsc表查询学生已选课程,通过学生专业,查询学生可选课程
查询代码:
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
System.out.println("StuSelectdoPost");
HttpSessionse=request.getSession();
Stringsno=(String)se.getAttribute("sno");
Stringpro_no=(String)se.getAttribute("pro_no");
intterm=(Integer)se.getAttribute("term");
Stringinfo=request.getParameter("info");
System.out.println(pro_no);
System.out.println(term);
System.out.println(sno);
Stringsql="select科目号,科目名,课程简介,老师名fromView_CourseinnerjointbSCwhereView_Course.科目号=tbSC.CnoandSno="+sno;
Connectionconn=null;
DButildb=newDButil();
db.setUrl("jdbc:
mysql:
//localhost:
3306/stucourse");
DbUtils.loadDriver(db.getJdbcDriver());
try{
conn=DriverManager.getConnection(db.getUrl(),db.getUser(),db.getPassword());
}catch(SQLExceptione){
e.printStackTrace();
}
Listlist1=(List)db.query(conn,sql,null,newMapListHandler());
if(conn!
=null)
System.out.println("success");
if(list1!
=null){
System.out.println("list1OK");
for(inti=0;iMapmap=(Map)list1.get(i);
System.out.println(map.get("科目号"));
System.out.println(map.get("科目名"));
System.out.println(map.get("课程简介"));
System.out.println(map.get("老师名"));
}
}
try{
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
db=newDButil();
db.setUrl("jdbc:
mysql:
//localhost:
3306/stucourse");
DbUtils.loadDriver(db.getJdbcDriver());
try{
conn=DriverManager.getConnection(db.getUrl(),db.getUser(),db.getPassword());
}catch(SQLExceptione){
e.printStackTrace();
}
sql="select科目号,科目名,课程简介,老师名fromView_Coursewhere专业号='"+pro_no+"'and学期号="+term;
//sql="select*fromtbStudent";
//Stringparam[]={pro_no};
System.out.println(pro_no);
Listlist2=(List)db.query(conn,sql,null,newMapListHandler());
if(list2!
=null){
System.out.println("list2OK");
for(inti=0;iMapmap=(Map)list2.get(i