已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档 基于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.3 E-R图实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,形成一个独立于机器,独立于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_novarchar20是否院系号Dept_namevarchar40否是院系名专业表 tbProfession字段名类型长度是否为主键可否为空说明Pro_novarchar20是否专业号Pro_namevarchar40否是专业名Dept_novarchar20否是院系号老师表 tbTeacher字段名类型长度是否为主键可否为空说明Tea_novarchar20是否老师号Tea_namevarchar40否是老师名Tea_pwdvarchar40否是老师号Pro_novarchar20否是院系号课程表 tbCourse字段名类型长度是否为主键可否为空说明Cnochar20是否科目号Cnamevarchar40否是科目姓名Cnaturevarchar20否是科目性质Cstatevarchar20否是科目状态Ctermint否是学期Cintrovarchar500否是科目简介Pro_novarchar40否是院系号Tea_novarchar20否是老师号Cstate 为1代表该科 活动,0代表 锁定,活动即学生可以进行选课老师不可以评分,锁定即学生不可以选课,但是老师确可以评分。 学生信息表tbStudent字段名类型长度是否为主键可否为空说明Snochar20是否学生学号Snamevarchar40否是学生姓名Spwdvarchar40否是学生密码Ssexvarchar10否是学院性别Sclassvarchar40否是班级Stermint否是学期SentertimeInt否是入学时间Pro_novarchar40否否学生密码选课表 tbSC字段名类型长度是否为主键可否为空说明Snovarchar20是否学生号Cnovarchar20是是科目号Gradevarchar20否是成绩3.3 关系图 四 程序核心代码及控件描述 4.1系统总框架图4.2细分功能介绍 4.2.1学生功能部分 学生通过首页的登陆框,进入student.jsp页面,系统通过数据库(通过loginServlet实现)查询,查出学生选修课程,并通过读取其专业信息及当今所处学期,列出其本学期可选的课程。通过输入学号及新密码,系统会根据学号查询tbStudent,更新密码。通过输入选修课号,可以增加选修课,通过删除,可以删除已选的课程,通过查询可以实现按班级查询,按学号查询以及按姓名查询。4.2.2教师功能部分 老师登录后,会通过查询数据库,显示老师教授的课程,方便老师对相关课程进行评分,同时会通过数据库查询显示未评分的学生,提醒老师进行评分,同时老师还可以修改密码,填写教授课程的专业介绍,对相关课程评分,查询选修学生的情况。4.2.3管理员功能部分 管理员通过后台登录,登陆后管理员可以录入相关专业某学期的专业课程,及课程的相关信息,并可以设定课程状态(课程现在是否处于可选状态,选了该课程,现在还能否退掉),同时管理员还可以更新及修改学生及老师的基本信息,对学生及老师基本信息进行管理。4.3功能的具体实现及代码 以学生功能模块为例,介绍各部分的具体实现及其代码。4.3.1数据库操作类package com.courses;import java.sql.Connection;import java.sql.DriverManager;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;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 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 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 = 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方便进行查询/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)System.out.println(OK);boolean t=false;for(int i=0;ilist.size();i+) Map map=(Map) list.get(i); if(map.get(Spwd).equals(pwd) int term=(Integer) map.get(Sentertime); TermSetter ts=new TermSetter(); term=ts.Set(term); String pro_no=(String) map.get(Pro_no); se.setAttribute(pro_no, pro_no); se.setAttribute(term, term); System.out.println(term); sql=update tbStudent set Sterm=+term+ where Sno=+sno; int res=db.update(conn,sql,null); t=true; try conn.close(); catch (SQLException e) e.printStackTrace();if(t) request.setAttribute(method, method); request.setAttribute(sno, sno); RequestDispatcher rd=request.getRequestDispatcher(/student.jsp); rd.forward(request, response);else RequestDispatcher rd = 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(StuSelect doPost);HttpSession se=request.getSession();String sno=(String)se.getAttribute(sno);String pro_no=(String)se.getAttribute(pro_no);int term=(Integer)se.getAttribute(term);String info=request.getParameter(info);System.out.println(pro_no);System.out.println(term);System.out.println(sno);String sql=select 科目号,科目名,课程简介,老师名 from View_Course inner join tbSC where View_Course.科目号=tbSC.Cno and Sno=+sno;Connection conn=null;DButil db=new DButil();db.setUrl(jdbc:mysql:/localhost:3306/stucourse);DbUtils.loadDriver(db.getJdbcDriver();try conn=DriverManager.getConnection(db.getUrl(),db.getUser(),db.getPassword(); catch (SQLException e) e.printStackTrace();List list1=(List) db.query(conn,sql,null,new MapListHandler();if(conn!=null)System.out.println(success);if(list1!=null)System.out.println(list1 OK);for(int i=0;ilist1.size();i+) Map map=(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 (SQLException e) e.printStackTrace();db=new DButil();db.setUrl(jdbc:mysql:/localhost:3306/stucourse);DbUtils.loadDriver(db.getJdbcDriver();try conn=DriverManager.getConnection(db.getUrl(),db.getUser(),db.getPassword(); catch (SQLException e) e.printStackTrace();sql=select 科目号,科目名,课程简介,老师名 from View_Course where 专业号=+pro_no+and 学期号=+term;/sql=select *from tbStudent;/String param=pro_no;System.out.println(pro_no);List list2=(List) db.query(conn,sql,null,new MapListHandler();if(list2!=null)System.out.println(list2 OK);for(int i=0;ilist2.size();i+) Map map=(Map)list2.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 (SQLException e) e.printStackTrace();request.setAttribute(list1, list1);request.setAttribute(list2, list2);request.setAttribute(sno, sno);request.setAttribute(info, info);RequestDispatcher rd=request.getRequestDispatcher(/stuSelect.jsp); rd.forward(request, response);4.3.4查询课程相关信息 package com.courses;public class StuQuery extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException System.out.println(StuQuery doGet);public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(UTF-8);response.setContentType(text/html;charset=UTF-8);System.out.println(StuQuery doPost);HttpSession se=request.getSession();String pro_no=(String)se.getAttribute(pro_no);String operate=request.getParameter(operate);String t1=request.getParameter(term1);String t2=request.getParameter(term2);String t3=request.getParameter(term3);String className=request.getParameter(class);String sno=request.getParameter(sno);String name=request.getParameter(name);System.out.println(operate);/System.out.println(t1);setTerm set=new setTerm();String sql=null;List list=null;Connection conn=null;DButil db=new DButil();db.setUrl(jdbc:mysql:/localhost:3306/stucourse);DbUtils.loadDriver(db.getJdbcDriver();try conn=DriverManager.getConnection(db.getUrl(),db.getUser(),db.getPassword(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();if(operate.equals(classselect)int term1=set.setterm(t1);System.out.println(className);System.out.println(pro_no);if(className.equals(all)sql=select 班级,学号,姓名,科目名,分数 from Student_Grade where 学期号=+term1+ and 专业号=+pro_no+;elsesql=select 班级,学号,姓名,科目名,分数 from Student_Grade where 学期号=+term1+ and 专业号=+pro_no+ and 班级=+className+;list=(List) db.query(conn,sql,null,new MapListHandler();if(conn!=null)System.out.println(success);if(list!=null)System.out.println(list1 OK);try conn.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();String info=这是+term1+学期+className+班的成绩;request.setAttribute(list, list);RequestDispatcher rd=request.getRequestDispatcher(/result.jsp); rd.forward(request, response);else if(operate.equals(snoselect)int term2=set.setterm(t2);System.out.println(term2);System.out.println(sno);sql=select 班级,学号,姓名,科目名,分数 from Student_Grade where 学期号=+term2+ and 学号=+sno+;list=(List) db.query(conn,sql,null,new MapListHandler();try conn.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();request.setAttribute(list, list);RequestDispatcher rd=request.getRequestDispatcher(/result.jsp); rd.forward(request, response); else if(operate.equals(nameselect)int term3=set.setterm(t3);sql=select 班级,学号,姓名,科目名,分数 from Student_Grade where 学期号=+term3+ and 姓名=+name+;list=(List) db.query(conn,sql,null,new MapListHandler();try conn.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();request.setAttribute(list, list);RequestDispatcher rd=request.getRequestDispatcher(/result.jsp); rd.forward(request, response);else System.out.println(error);try conn.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();4.3.5数据代码(创建表及视图)create table tbDept(Dept_no varchar(20) primary key,Dept_name varchar(40);create table tbProfession(Pro_no varchar(20) primary key,Pro_name varchar(40),Dept_no varchar(20),foreign key (Dept_no) references tbDept(Dept_no) );create table tbTeacher( Tea_no varchar(20) primary key, Tea_name varchar(40), Tea_pwd varchar(40), Pro_no varchar(20), foreign key (Pro_no) references tbProfession(Pro_no) );create table tbCourse(Cno varchar(20) primary key,Cname varchar(40),Cterm int,Cnature varchar(20),Cstate varchar(20),Cintro varchar(500),Pro_no varchar(20),Tea_no varchar(20),foreign key (Pro_no) references tbProfession(Pro_no),foreign key (Tea_no) references tbTeacher(Tea_no);Cnature 是决定选修课与必修课,T代表必修 F代表选修Cstate 为1代表该科 活动,0代表 锁定,drop table tbCourse;create table tbStudent(Sno varchar(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社区基层实务历年真题专项(附答案)
- CJJ 1-2008 城镇道路工程施工与质量验收规范
- 护理病例中的感染控制与预防
- 护理教学比武:高效教学策略
- 护理沟通中的问题解决
- 呼吸系统疾病护理跨学科合作新模式
- 护理护理预防医学基础
- 医院护理安全防范体系构建
- 口腔溃疡预防方法
- 内科患者的床旁超声检查配合与护理
- 2026年甘肃庆阳宁县直事业单位选聘24人笔试模拟试题及答案详解
- 2026年山西省运城市重点学校初一入学数学分班考试试题及答案
- 2026四川省水电投资经营集团有限公司所属电力公司员工招聘5人备考题库含答案详解(精练)
- 2026年江苏省高考地理试卷(含答案及解析)
- 计算机行业2026年投资策略分析报告:迈向 经济新时代
- 2026年上海市中考数学试题【含答案解析】
- 早期胃癌内镜切除术后追加外科手术中国专家共识(2025版)
- GB/T 7829-1987故障树分析程序
- GB/T 13389-2014掺硼掺磷掺砷硅单晶电阻率与掺杂剂浓度换算规程
- GB 29449-2012轮胎单位产品能源消耗限额
- GA/T 49-2019道路交通事故现场图绘制
评论
0/150
提交评论