1、 基于 JSP 的选课系统 一 .概述 1.1 设计题目及实现目标 随着科学技术的不断提高 ,计算机科学日渐成熟 ,其强大的功能已为人们深刻认识 ,它已进入人类社会的各个领域并发挥着越来越重要的作用 。学生选课系统作为一种现代化的教学技术,以越来越受到人民的重视。是一个学校不可缺少的部分 ,它的内容对于学校的决策者和管理者来说都至关重要 ,所以学生选课系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点 ,如 :效率低、保密性差 ,另外时间一长 ,将产生大量的文件和数据 ,这对于查找、更新和维护都带来了不少的困难。 学生选课
2、系统就是为了管理好选课信息而设计的。学生选课系统的将使选课管理工作规范化,系统化,程序化,避免选课管理的随意性,提高信息处理的速度 和准确性,能够及时、准确、有效的查询和修改选课情况。 学习 Web 应用程序的开发 (B/S 方式 ), JSP 编程技术开发 选课系统;通过编程实践掌握 JSP 的动态网页与 MySql 数据库相结合的技术; 通MVC(模型 -视图 -控制 )架构模式,使其在开发过程中得以应用。 实现系统有较好的可维护性、可靠性、可理解性、效率。易于用户理解和操作。可维护性包括了可读性、可修改性、可测试性、等含义。可靠性通常包括正确性和健壮性。开发过程中,在各种矛盾的目标之间作
3、权衡,并在一定的限制的条件下(时间、可用的软、硬件资源等),使上述各方面最大 限度的得到满足。 1.2 开发环境简介 实验中采用的开发环境 : 编译器: JDK1.6 Web 服务器 : Tomcat6.0 插件开发平台: MyEclipse8.5 数据库服务器: MySQL5.0 二 .系统 需求 2.1 系统功能描述 学生选课系统是典型的信息管理系统 (MIS),本系统是根据现代化校园的发展而设计的基于 jsp 的学生 选课 管理系统, 本系统就是为了管理好选课信息而设计的。 学生选课系统需要满足来自 两 方面的需求,这三个方面分别是学生和 老师。学生的需求是查询 系的课程、学生选课情况;
4、 选课管理员的功能,包括对学生、选课进行管理和统计。学生可以直接查看选课情况,学生可以根据本人学号和密码登录系统,还可以进行本人 课程 情况的查询 、修改 和维护部分个人信息 及对所在专业的所有班级进行成绩查询 。 管理员可以浏览、查询、修改、统计选课的基本信息;浏览、查询、统计和修改学生选课的基本信息设计不同用户的操作权限和登陆方法对所有用户开放的学生选课查询和个人部分信息维护查看个人情况信息维护学生个人密码根据选课情况对数据库进行操作并生成报表根据选课情况对数据库进行操作并生成报表查询及统计各种信息维选课信息维护工作人员和管理员信息维护学生信息处理信息的完整性。 1) 学生信息模块完成学生
5、的登陆,然后根据各位同学所在的系不同,调用相应的选课模块。 2) 其中学生登录模块的功能是验证登录人员确实 存在 的学生,学生启动本系统后,系统 提示输入学生学号码和密码(输出登陆密码及学生的学号) 验证后进入主控操作界面。 3) 课程信息管理 有学生已经选择的科目和可以选择的科目 ,学生同时可以在规定时间内对自己选择的科目进行修改, 学生必需先登陆才能进行对课程的选课否则不能进入选课系统 . 2.2 系统功能 模块 1.系统用户由三类组成:教师、学生和管理员; 2.管理员负责的主要功能: 课程审核,课程统计,成绩查看; 课程管理(删除和修改) 选课管理(实现选课功能开放和禁止、教师成绩输入开
6、放和禁止) 3.学生模块 :主要包括学生选课模块、学生查询模块和学生部分信息修改模块。 4.教师通过登录,可以添加课程,查看选课学生的基本信息,可以输入成绩; 2.3 E-R 图 实体 -联系图 (Entity-Relation Diagram)用来建立数据模型 ,在数据库系统概论中属于概念设计阶段,形成一个独立于机器,独立于 DBMS 的 ER 图模型。 通常将它简称为 ER 图,相应地可把用 ER 图描绘的数据模型称为 ER 模型。 ER 图提供了表示实体(即数据对象)、属性和联系的方法,用来描述现实世界的概念模型。 三 数据库 逻辑结构设计 3.1 数据库的需求设计 数据库技术是信息资源
7、管理最有效的手段 。 数据库设计是指:对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。 方便显示和方便查询,建立两层 :数据库的基本层 -表和数据库的视图。 3.2概念结构设计阶段 (1) 定义实体 系名 系代号 系科 专业 属于 专业号 专业名 密码 性别 专业名 学生 姓名 学号 选修 成绩 属于 属于 班级号 学期号 系别名 课程 课程 号 课程名称 课程简介 课程性质 课程状态 无 讲授 专业号 教师 教师 号 姓名 密码 学期 专业号 老师号 实体集成员都有一个共同的特征和属性集,可以从收集的源材料 基本数据资料表中直接
8、或间接标识出大部分实体。 分析可是本系统包含的实体有 :院系 tbDept、专业 tbProfession 老师、 tbTea 学生、 tbStudent 课程、 tbCourse 选课、 tbSC 管理员、 tbAdministrator ( 2)定义联系 根据实际的业务需求和规则,使用实体联系矩阵来标识实体间的二元关系,然后根据实际情况确定出连接关系的势、关系名和说明,确定关系类型,是标识关系、非标识关系 (强制的或可选的 )还是非确定关系、分类关系。 根据本系统确定的联系有院系和专业是一对多关系,专业和学生也是一对多关系,老师和课程也是一对的关系, 专业和课程也是一对多关系 。学生和课程
9、为多对多关系。 ( 3)定义码 通过引入交叉实体除去上一阶段产生的非确定关系,然后从非交叉实体和独立实体开始标识侯选码属性,以便唯一识别每个实体的实例,再从侯选码中确定主码。为了确定主码和关系的有效性,通过非空规则和非多值规则来保证,即一个实体实例的一个属性不能是空值,也不能在同一个时刻有一个以上的值。 院系 tbDept(主键:系别)、专业 tbProfession(主键:专业号,外键:系别) 老师、 tbTea(主键:老师号,外键:课程号) 学生、 tbStudent(主键:学生号,外键:专业号) 课程、 tbCourse(主键:课程号 外键:专业号,老师号) 选课、 tbSC(联合主键:
10、学生号和课程号,外键:学生号,课程号) 管理员、 tbAdministrator(主键:管理员号)。 ( 4)定义属性 从源数据表中抽取说明性的名词开发出属性表,确定属性的所有者。定义非主码属性,检查属性的非空及非多值规则。此外,还要检查完全依赖函数规则和非传递依赖规则,保证一个非主码属性必须依赖于主码、整个主码、仅仅是主码 。 定义表主要代码: 院系表 tbDept 字段名 类型 长度 是否为主键 可否为空 说明 Dept_no varchar 20 是 否 院系号 Dept_name varchar 40 否 是 院系名 专业表 tbProfession 字段名 类型 长度 是否为主键 可
11、否为空 说明 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 var
12、char 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 是 否 学生学号
13、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系统总
14、框架图 t b A d m in is t r a t o rA n oA n a m eA p w dt b C o u r s eC n oC n a m eC t e r mC n a t u r eC s t a t eC in t r oP r o _ n ot b D e p tD e p t _ n oD e p t _ n a m et b P r o f e s s io nP r o _ n oP r o _ n a m eD e p t _ n ot b S CSnoC n oG r a d et b S t u d e n tSnoS n a m eS p w dS s
15、 e xS c la s sS t e r mS e n t e r t im et b T e a c h e rTe a _ n oTe a _ n a m eTe a _ p w dP r o _ n o首页 学生 选课删课 修改密码 查询 老师 评分 查询 管理员 添加课程 信息管理 设置课程状态 4.2 细分功能介绍 4.2.1 学生功能部分 学生通过首页的登陆框,进入 student.jsp 页面,系统通过数据库(通过loginServlet 实现)查询,查出学生选修课程,并通过读取其专业信息及当今所处学期,列出其本学期可选的课程。通过输入学号及新密码,系统会根据学号查询 tbSt
16、udent,更新密码。通过输入选修课号,可以增加选修课,通过删除,可以删除已选的课程,通过查询可以实现按班级查询,按学号查询以及按姓名查询。 4.2.2教师功能部分 老师登录后,会通过查询数据库,显示老师教授的课程,方便老师对相关课程进行评分,同时会通过数据库查询显示未评分的学生,提醒老师进行评分,同时老师还可以修改密码,填写教授课程的专业介绍,对相关课程评分,查询选修学生的情况。 登录失败 学生登录 登陆成功 显示选修课程 显示可选课程 修改密码 选修课程 删除选修课 查询选修课程成绩 按班级查询 按学号查询 按姓名查询 4.2.3管理员 功能部分 管理员通过后台登录,登陆后管理员可以录入相
17、关专业某学期的专业课程,及课程的相关信息,并可以设定课程状态(课程现在是否处于可选状态,选了该课程,现在还能否退掉),同时管理员还可以更新及修改学生及老师的基本信息,对学生及老师基本信息进行管理。 4.3 功能的具体实现及代码 以学生功能模块为例,介绍各部分的具体实现及其代码。 4.3.1 数据库操作类 package com.courses; import java.sql.Connection; import java.sql.DriverManager; 填写专业介绍 查询学生成绩 给学生评分改分 修改密码 教师登录 登陆成功 显示教授课程 显示未评分学生 登录失败 添加选修课程 设定课
18、程状态(当前是否可选) 管理学生及教师信息 管理员登录(后台登陆) 登陆成功 登录失败 import java.sql.SQLException; import mons.dbutils.DbUtils; import mons.dbutils.QueryRunner; import mons.dbutils.ResultSetHandler; public class DButil private String url=“jdbc:mysql:/localhost:3306/courses“; private String jdbcDriver=“com.mysql.jdbc.Driver“
19、; private String user=“root“; private String password=“pbm914“; public int update(Connection conn,String sql,String param) int result=0; QueryRunner qr= new QueryRunner(); try result=qr.update(conn,sql,param); catch (SQLException e) e.printStackTrace(); return result; public Object query(Connection
20、conn,String sql,String param,ResultSetHandler rsh) QueryRunner qr=new QueryRunner(); Object result=null; try result=qr.query(conn,sql,param,rsh); catch (SQLException e) e.printStackTrace(); return result; public String getUrl() return url; public void setUrl(String url) this.url = url; public String
21、 getJdbcDriver() return jdbcDriver; public void setJdbcDriver(String jdbcDriver) this.jdbcDriver = jdbcDriver; public String getUser() return user; public void setUser(String user) this.user = user; public String getPassword() return password; public void setPassword(String password) this.password =
22、 password; 4.3.2 登录功能 通过 JSvalidation 框架,验证输入是否合法,然后通过 loginServlet 判断登录是否成功。 JSvalidation 框架是导入的一个插件。 loginServlet 相关代码: String sno=request.getParameter(“username“);/获得登录名及密码 String pwd=request.getParameter(“pwd“); HttpSession se=request.getSession(); se.setAttribute(“sno“, sno); /设置用户 session方便进行查
23、询 /System.out.println(pwd); /System.out.println(pwd); String sql=“select Spwd,Sentertime,Pro_no,Sterm from tbStudent where Sno=“+sno; /sql语句,对数据库查询 Connection conn=null; /下面为数据库连接及查询操作 DButil db=new DButil(); String url=“jdbc:mysql:/localhost:3306/stucourse“; db.setUrl(url); DbUtils.loadDriver(db.getJdbcDriver(); try conn=DriverManager.getConnection(db.getUrl(),db.getUser(),db.getPassword(); catch (SQLException e) e.printStackTrace(); List list=(List) db.query(conn,sql,null,new MapListHandler(); System.out.println(db.getUrl(); if(conn!=null) System.out.println(“success“); if(list!=null)