资源描述
学生管理系统jsp实验报告
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
实践考核类课程(二)
实验报告
姓 名
张杨
学 号
20090725
班 级
软一0901
指 导 教 师
刘益先
实验名称
学生选课系统
开 设 学 期
2010 – 2011第二学期
评 定 成 绩
评定人签字
评 定 日 期
东北大学软件学院
2011年4月
25
1. 系统分析与设计
本次实验是是设计一个基于web平台的学生选课系统,主要用于实现学生选课,课程管理,与课程维护等等模块;需要使用的技术是Servlet、JSP、JDBC、DAO等关键技术。
在本系统中,有三类用户:系统管理员,教师和学生。三种不同的用户所具有的操作权限以及操作内容均不一样。
本选课系统给予教师很大的自主权,系统管理员只负责向系统中添加学生和教师的个人信息。教师、学生可以录网站自行进行选课,排课.系统管理员设置一个选课范围,教师可以开设课程;学生可以登陆网站选择课程。
教师用户登陆网站后可以开设课程,为自己的课程编辑课程内容和课程信息。每门课程可以是必修或则选修,教师为每门课程设置一个学分,并可以在课程结束后给予成绩和分数,如果学生及格,学生将获得该课程的学分。
对于学生用户,每个学生除了必须选择必修课程外,学生可以对自己选课信息进行选择。系统可以根据学生的选课信息,生成一份学生自己的课表。课程结束后学生可登录网站查询成绩.
1.2 系统功能流程
用户登录身份验证模块验证用户名和密码,并根据不同的用户类型,选择;
用户登录身份验证模块
登陆注册模块
录入信息模块
开设课程模块
查询个人信息模块
评分模块
查看课程模块
选课模块
数据库模块
数据库
访问模块
(1)登录与注销
每个用户都可以用自己的帐号登录系统。用户操作完成后推出系统,注销后可以重新登录系统。
(2)修改密码
每个用户第一次登录都用默认密码。
(1) 系统管理员
管理员号
管理员
姓名
密码
用户类型
设置选课:系统管理员通过此项功能设置选课,只有在选课范围内,学生才可以选择课程,不得修改。
录入学生与教师个人信息:通过此项功能可以实现对教师和学生的个人信息添加删除。
(2) 教师用户
教师号
教师
姓名
密码
用户类型
性别
职称
显示和修改个人信息:教师用户登录系统后,可以查看和修改教师的个人信息,如姓名,电话,E—mail地址等。
开设课程:教师用户登录系统后,可以开设课程,可以设置该课程可以设置该课程的最大人数。编辑课程上课时间:教师在开设了课程后,可以灵活地设置上课时间和地点.
给学生分数:课程结束后,教师用户登录系统,可以为学过课程的学生给予相应的成绩,若及格,给予学生学分。
(3) 学生用户
学 号
系 号
班 级
成 绩
政治
面貌
联系方式
就
读
中学
学生
性
别
籍
贯
姓
名
身份证号
交费情况
出生日
期
入学时间
简
历
民 族
专业号
用户类型
显示和修改个人信息:学生登录系统后,可以查看和修改学生的个人信息,如姓名,性别,电话等。
查看必修课程:学生登录后,可以查看所有的必修课程。查看该课程的信息,上课时间地点,开课教师信息等。
选择选修课程:学生登录系统后,在所有选修课程中可以选择至少两门选修课程。同时可以查看相关信息。
查看最终选课信息:学生登录系统后,可列出已选择的课程,若选课信息未被锁定,则可以退选,若所选课程少于两门,系统会提示选择的课程少于两门。
查看学分和成绩
课程结束后,学生登录系统可查看自己学习课程的成绩。
1.3 数据库设计
student,Teacher,Course,List,Admin,每个表与逻辑设计中一种的关系模式相对应。下面是每个数据表中的属性,包括属性列的名称、数据类型、长度、是否可以为空和备注说明等内容。
(1) Student表.Student表用来存储学生的个人信息,使用学号作为主键,如表3—2:
表3—2 Student表
(2) Teacher表.Teacher表用来存储教师的个人信息,用学校分配给教师的教师编号作为主键,这样可以避免重复,如图3—3:
表3—3 Teacher表
(3) Course表.Course表用来存储课程信息,Course表以课程编号为主键,设置课程编号自动增加1(通过建表的时候对属性列设置“标识”,并设置“标识递增量”为1).表中开课教师Id为外键,所有“TId”的值必须是Teacher表中的“TId”值。如表3—4:
表3—4 Course表
(4) List表。List表用来存放课程的上课时间和上课信息,包括课程编号。
表3—6 List表
(5) Admin表.Admin表用来存放系统管理员信息,如表3—9:
表3—9 Admin表
2系统实现与测试
1系统首页,点击进入选课系统登录页面
点击进入选课系统登录页面
2登陆页面
系统的登陆页面index。jsp在页面左边显示出三种身份登录的链接。便于不同用户清晰的看清登录的位置。不同身份的用户登录提交的用户名和密码提交到不同身份的数据库认证页面中。如学生用户登录提交到login.jsp。当验证通过时,跳到学生用户的页面.并把信息保存进session,以供其他页面判断用户是否已经登录。
学生
用户通过欢迎界面进入登录界面,输入用户名以及密码,然后选择权限(学生/老师/管理员)进入自己的页面.该页面会对用户是否输入用户名或密码,输入是否正确进行检验,如果输入正确,则直接进入权限所对应的欢迎界面。否则,则提示用户名或密码错误。
输入学生学号,进入学生欢迎界面。
点击 查看已选课程,学生可以查看自己的已选课程。
点击注册课程选项,进入页面后选择相应课程后课程列表
结果如下:
选择注销 计算机编程艺术 课程,同上.结果如下
管理员
选择管理员进入欢迎界面.
选择 删除课程 可以进行对相应课程的删除.
选择 管理课程,可以实现对于课程的管理。
选择 增加学生 可以实现对学生的添加。
选择 添加/删除老师,可以实现对老师的有效管理。
选择 查看所有学生/老师 可以查看到所有学生/老师的信息.
教师
以老师身份登录,界面如下。
选择查看已带课程,可以查看自己的所有课程。
选择给出成绩,可以成功的为学生给出成绩。
2。1系统采用的关键技术
在页面中用到了页面语言HTML,JavaScript以及JSP;
标记语言使用的是:XML;
后台中使用了Servlet服务器,
数据库操作使用的是JDBC,DAO;
全局使用了MVC设计模式等,是在JDK+ MyEclipse+Tomcat+MySQL的开发环境中完成了这个学生选课系统。
2。2 关键程序流程
下面用视图的方式展示学生选课系统的流程!
基本表
视图
教师课表
班级课表
学生学籍表
学生选课表
课程表
选修课开课表
教师表
学院开课表
学生表
系部表
N
N
N
N
N
1
1
1
N
N
1
1
N
N
2。3 关键代码分析
下面将每个模块中好的部分以及重要的部分进行展示
连接数据库模块:
DataBaseFactory 类用于创建数据库连接,是一个连接数据库的工具类!
package com。jinkun。data;
import java.sql。*;
public class DataBaseFactory {
private Connection conn=null;
public void DataBaseFactory() throws Exception{
}
//得到一个statement
public Statement getStatement() throws Exception{
DriverManager.registerDriver(new org。gjt.mm.mysql。Driver());
Class.forName(”org.gjt.mm.mysql。Driver”).newInstance();
String url ="jdbc:mysql://localhost:3306/register?user=root&password=&useUnicode=true&characterEncoding=UTF-8”;
conn= DriverManager。getConnection(url);
return conn。createStatement();
}
public ResultSet executeQuery(Statement stmt,String query) throws Exception{
ResultSet rs=stmt.executeQuery(query);
return rs;
}
public boolean execute(Statement stmt,String query) throws Exception{
boolean rs=stmt.execute(query);
return rs;
}
public void executeUpdate(Statement stmt,String query) throws SQLException{
stmt.executeUpdate(query);
}
public void close() throws SQLException{
if(conn!=null)
conn.close();
}
}
学生模块:
studentDao在这个类中具体定义了学生的动能以及权限(包括:增加/删除学生,增加/删除某一门课程,以及显示全部的课程列表等等)
public class StudentDao {
private DataBaseFactory dataBase;
public StudentDao()
{
dataBase=new DataBaseFactory();
}
//注销学生的一门课程
public void cancelCoursed(String userid,String classid) throws SQLException, Exception
{
String query="delete from list where Cno=’”+classid+”'”;
dataBase.executeUpdate(dataBase.getStatement(), query);
dataBase。close();
}
public Student getStudent(String stuno) throws Exception
{
Student student=null;
String sqlStudent = ”select * from student where studentID='"+stuno+"’";
ResultSet rs=(ResultSet) dataBase。executeQuery((Statement) dataBase.getStatement(), sqlStudent);
if(rs。next()){
student=new Student(rs.getString(1),rs.getString(2),rs.getString(3));
}
dataBase.close();
return student;
}
//增加一个学生
public void addStudent(Student student) throws SQLException, Exception{
String sqlStudent="insert into student values(’"+student。getID()+”’,'”+student。getName()+"’,” +
”'"+student。getPassword()+”’)";
dataBase.executeUpdate((Statement) dataBase。getStatement(), sqlStudent);
dataBase.close();
}
public List<Student> getAllStudents() throws Exception{
List〈Student> students=new ArrayList();
String sqlStudent=”select * from student”;
ResultSet rs=(ResultSet) dataBase.executeQuery((Statement) dataBase。getStatement(), sqlStudent);
while(rs。next()){
String studentid=rs.getString(1);
String studentName=rs。getString(2);
String password=rs.getString(3);
Student s=new Student(studentid,studentName,password);
students。add(s);
}
dataBase。close();
return students;
}
public Course getCourse(String courseid) throws Exception
{
Course c=null;
String sqlStudent="select * from course where id='”+courseid+”'";
ResultSet rs=(ResultSet) dataBase。executeQuery((Statement) dataBase。getStatement(), sqlStudent);
if(rs.next()){
String className=rs.getString(2);
String teacherName=rs.getString(3);
int counts=Integer.parseInt(rs。getString(5));
c=new Course(courseid,className,teacherName,counts);
}
rs。close();
dataBase.close();
return c;
}
//得到课程列表,用于显示某个学生注册的全部的课程
public List<Course> getCourses(Student student) throws Exception
{
List<Course〉 signUpInfo=new ArrayList〈Course〉();
String sqlStudent="select * from list where Sno='”+student.getID()+"'”;
ResultSet rs=(ResultSet) dataBase.executeQuery((Statement) dataBase。getStatement(), sqlStudent);
while(rs.next()){
String cno=rs.getString(3);
signUpInfo。add(this。getCourse(cno));
}
rs。close();
dataBase。close();
return signUpInfo;
}
//判断学生是否已经注册
public boolean isRegistered(String studentid,String courseid) throws Exception
{
String sqlStudent="select * from list where Sno=’"+studentid+”'”;
ResultSet rs=(ResultSet) dataBase。executeQuery((Statement) dataBase.getStatement(),sqlStudent);
while(rs.next()){
String courid=rs。getString(3);
if(courid.equals(courseid))
return true;
}
rs.close();
dataBase。close();
return false;
}
//用于注册一个学生
public boolean register(String studentid,String courseid,String teacherid) throws SQLException, Exception
{
String sql="select * from counts where id='1'";
ResultSet rs=dataBase.executeQuery(dataBase。getStatement(),sql);
int i=0;
if(rs.next())i=Integer。parseInt(rs。getString(2));
i++;
sql=”update counts set idcounts='”+i+"' where id='1'”;
dataBase。executeUpdate(dataBase。getStatement(),sql);
String sqlStudent="insert into list values(’"+i+"’,'”+studentid+"','”+courseid+"',’"+teacherid+"’,’"+"!!"+"’)”;
dataBase。executeUpdate((Statement) dataBase。getStatement(), sqlStudent);
dataBase.close();
return true;
}
}
老师模块:
TeacherDao与studentDao是类似的;下面展示teacher的servlet
dopost方法;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request。setCharacterEncoding("gbk”);
String type = request.getParameter(”submit");
if(type。equals("check”)){
String number1 = request.getParameter(”number”);
request。setAttribute("number1”, number1);
RequestDispatcher d=request.getRequestDispatcher("/teacher/teaching.jsp");
d。forward(request, response);
}
else if(type。equals(”reply"))
{
HttpSession s=request.getSession();
String teachernum=(String) s.getAttribute(”id”);
TeacherDao t=new TeacherDao();
try{
Teacher tea=t。getTeacher(teachernum);
try{
int limit = Integer.parseInt(request。getParameter(”limit”));
String coursename = request.getParameter(”coursename”);
String coursenum = request.getParameter("coursenum”);
try{
CourseDao c1=new CourseDao();
System。out.print(teachernum);
Course course=c1。getCourse(coursenum);
if(course==null){
Course c = new Course(coursenum,coursename,tea.getName(),limit);
CourseDao cdao=new CourseDao();
cdao.addCourse(teachernum, c);
doError(request,response,"已成功完成”);
}
else{
doError(request,response,"已有该门课程”);
}
}
catch(Exception e){e。printStackTrace();}
}catch(Exception e){doError(request,response,”非法字符输入”);}
}catch(Exception e){doError(request,response,”后台出错”);}
}
else if(type。equals("verify"))
{
String studentnum = request。getParameter(”studentnum");
String coursenum=request.getParameter("classNo”);
String grade = request。getParameter(”grade");
TeacherDao teach = new TeacherDao();
try {
teach。grade(coursenum, studentnum, grade);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(”of");
}
}
public void doError(HttpServletRequest request, HttpServletResponse response,String msg) throws IOException
{
response.setContentType(”text/html");
response.setCharacterEncoding(”UTF—8");
PrintWriter out=response.getWriter();
out。print("<html〉<head>〈meta http—equiv=’Content—Type’ content=’text/html'; charset=’utf-8'〉〈/meta>" +
”<title>信息〈/title〉</head>〈body>");
out.print(msg);
out.print(”<a href='http://localhost:8080/Exercise/teacher/teacher。jsp’ method=’get'〉返回〈/a〉");
out.print(”</body>〈/html〉”);
out.close();
return;
}
课程模块:
管理员模块:
public class ManageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action=request.getParameter(”action”);
if(action。equals("deleteCourse”))
this.doDeleteCourse(request, response);
if(action。equals(”addStudent"))
this.doAddStudent(request, response);
if(action。equals("stuinfo”))
{
RequestDispatcher rs=request.getRequestDispatcher(”/admin/studentInfo.jsp");
rs。forward(request,response);
}
if(action。equals(”teacherInfo"))
{
RequestDispatcher rs=request.getRequestDispatcher(”/admin/teacherInfo.jsp”);
rs。forward(request,response);
}
if(action。equals(”deleteTeacher"))
{
doDeleteTeacher(request,response);
}
if(action.equals("addTeacher”))
{
doAddTeacher(request,response);
}
if(action。equals(”logout”))
{
HttpSession session=request.getSession();
session。invalidate();
response。sendRedirect("http://localhost:8080/Exercise/login。jsp”)
}
}
public void doAddTeacher(HttpServletRequest request,HttpServletResponse response)
{
String id=request。getParameter("teacherID");
String name=request.getParameter(”teacherName");
String password=request.getParameter(”password");
try{
int tid=Integer。parseInt(id);
TeacherDao tdao=new TeacherDao();
if(tdao.getTeacher(id)!=null)
doError(request,response,"已存在该老师”,"addTeacher。jsp");
else{
Teacher a=new Teacher(id,name,password);
try{
tdao。addTeacher(a);
doError(request,response,"成功添加”,"addTeacher.jsp”);
}catch(Exception e)
{
// doError(request,response,"添加失败”);
e.printStackTrace();
}
}
}catch(Exception e)
{
doError(request,response,”非法证件号码!","addTeacher.jsp");
}
}
public void doDeleteTeacher(HttpServletRequest request,HttpServletResponse response)
{
String id=request.getParameter(”id");
TeacherDao tdao=new TeacherDao();
try{
Teacher t=tdao。getTeacher(id);
try{
tdao。deleteTeacher(t);
doError(request,response,"成功删除”,"deleteTeacher。jsp”);}
catch(Exception e)
{
doError(request,response,”操作出错 ,请重新再来",”deleteTeacher。jsp");
}
}catch(Exception e)
{
doError(request,response,"出错了",”deleteTeacher.jsp”);
}
}
public void doAddStudent(HttpServletRequest request,HttpServletResponse response)
{
String id=request.getParameter(”studentID");
String studentName=request.getParameter("studentName");
String password=request。getParameter(”password");
try{
int stuid=Integer。parseInt(id);
if(stuid〈2000||stuid〉20110000)
{
doError(request,response,”非法证件号码","addStudent。jsp”);
}else{
StudentDao studao=new StudentDao();
if(studao。getStudent(id)!=null)
doError(request,response,"已存在该学生","addStudent.jsp");
else{
Student s=new Student(id,studentName,password);
try{
studao.addStudent(s);
doError(request,response,”成功添加",”addStudent。jsp");
}catch(Exception e)
{
doError(request,response,”添加失败”,"addStudent。jsp");
}
}
}
}catch(Exception e)
{
doError(request,response,"非法证件号码!","addStudent。jsp”);
}
}
public void doDeleteCourse(HttpServletRequest request,HttpServletResponse response)
{
String courseid=request。getParameter(”id");
CourseDao coursedao=new CourseDao();
/* if(coursedao.deleteCourse(courseid)==true)
doError(request,response,”删除成功”);
else
doError(request,response,"删除操作失败”);*/
try{
coursedao。deleteCourse(courseid);
doError(request,response,"成功删除”,"deleteCourse。jsp");
}catch(Exception e)
{
//doError(request,respon
展开阅读全文