2019年12月16日 分级考试
一、题目
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
石家庄铁道大学选课管理系统 1、项目需求: 本项目所开发的学生选课系统完成学校对学生的选课信息的统计与管理,减少数据漏掉的情况,同时也节约人力、物力和财力。告别以往的人工统计。 2.系统要求与功能设计 2.1 页面要求 (1)能够在Tomcat服务器中正确部署,并通过浏览器查看; (2)网站页面整体风格统一; (3)首页(登录页)要求实现不同用户登录后,进入的功能页不相同。 (4)教师功能页:有添加课程、修改个人信息、浏览选课学生信息三个模块。 (5)学生功能页:有修改个人信息、浏览课程信息、选课三个功能模块。 (5)管理员功能页:有添加教师信息、添加学生信息两个模块。 2.2功能要求: (1)添加教师信息:管理员可以添加教师基本信息,教师基本信息包括:教师工号(八位数字组成,例如02000081)、教师姓名、教师性别、教师所在学院、职称(教授、副教授、讲师、助教)组成; (2)添加学生信息:管理可以添加学生基本信息,学生基本信息包括学号(八位数字组成,例如20180052)、学生姓名、学生性别、所在班级、所属专业组成; (3)添加课程信息:教师登陆后,可以添加自己任职的课程基本信息,课程基本信息包括:课程编号(六位数字组成,例如050013),课程名称、选课人数、任课教师(任课教师不需录入,那位教师填写课程信息,那位教师就是任课教师); (4)修改个人信息:教师或学生登陆后可以修改个人信息,但教师工号或学号不能修改,另外教师或学生只能修改自己的信息,无法看到或修改其他学生或教师的基本信息。 (5)浏览课程信息:学生登陆后可以看到所有课程的列表信息,点击课程名称可以查看课程的详细信息,包括已选课人数;点击教师名称可以查看教师的详细信息。 (6)选课:进入选课页面,课程信息列表显示所有选课人数未达到课程设置的选课人数上限,点击课程名称可以看到课程详细信息,点击课程详细信息页面的“选课”按钮,可以实现选课功能。 (7)浏览选课学生信息:教师进入该页面后,可以看到自己设置的课程信息列表,点击课程名称,可以看到,选择该课程的所有学生基本信息列表。 (8)登陆功能:管理员、教师、学生登陆后可以看到不同的功能页面,教师或学生登陆后只能看到自己的相关信息,不同教师、不同学生登陆后无法查看其他人的信息。(要求至少创建两个教师用户、十个学生用户演示选课过程) 3数据库设计: 要求实现课程基本信息表、教师基本信息表、学生基本信息表、选课基本信息表。(提示:选课基本信息包括课程编号、教师编号、学号等基本信息) 4、WEB发布: 要求可以实现在浏览器直接访问系统。 评分等级分类: A级:起评分90分,要求完全按照要求实现全部功能。(结合以前成绩综合考量,确认为免试); B级:起评分80分,最高分不超过89分,可以完成选课的基本流程,实现教师、学生、课程基本信息添加、选课功能实现,剩余功能有两个以下(包括两个)未实现; C级:起评分70分,最高分不超过79分,可以实现教师、学生、课程基本信息添加、修改个人信息,无法实现选课功能; D级:起评分60分,最高分不超过69分,可以完成教师、学生、课程两个以上(包括两个)基本信息添加; E级:无法达到上述级别要求。
二、源程序代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package Servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import Bean.Classes; import Bean.Student; import Bean.Teacher; import Dao.ClassesDao; import Dao.StudentDao; import Dao.TeacherDao; /** * Servlet implementation class AddServlet */ @WebServlet("/addServlet") public class AddServlet extends HttpServlet { public AddServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8");//设置从jsp或HTML中请求数据的值,也就是设置为中文,防止乱码 String method=req.getParameter("method");//getParameter()获取的是客户端设置的数据。 if(method.equals("teacher")) { String tname=req.getParameter("name"); String tsex=req.getParameter("sex"); String tnumber=req.getParameter("tnumber"); String tacademy=req.getParameter("tacademy"); String twork=req.getParameter("twork"); Teacher teacher=new Teacher(tname, tnumber, tsex, tacademy, twork); TeacherDao TD=new TeacherDao(); if(TD.insert(teacher)) { //如果添加成功 req.setAttribute("message", "添加成功"); //这里表示,在req的作用域中设置一个massage变量,变量内容是:添加成功 //然后,当跳转到它下一个界面时,这个作用域里的值可以通过Object message =request.getAttribute("message")拿出来使用 req.getRequestDispatcher("admin.jsp").forward(req, resp); } else { //处理失败 req.setAttribute("message", "添加重复,请重新输入"); req.getRequestDispatcher("addTeacher.jsp").forward(req, resp); } } else if(method.equals("student")) { String sname=req.getParameter("sname"); String ssex=req.getParameter("sex"); String snumber=req.getParameter("snumber"); String sgrade=req.getParameter("sgrade"); String specialities=req.getParameter("specialities"); Student student=new Student(sname, snumber, ssex, sgrade, specialities); StudentDao SD=new StudentDao(); if(SD.insert(student)) { //如果添加成功 req.setAttribute("message", "添加成功"); //这里表示,在req的作用域中设置一个massage变量,变量内容是:添加成功 //然后,当跳转到它下一个界面时,这个作用域里的值可以通过Object message =request.getAttribute("message")拿出来使用 req.getRequestDispatcher("admin.jsp").forward(req, resp); } else { //处理失败 req.setAttribute("message", "添加重复,请重新输入"); req.getRequestDispatcher("addStudent.jsp").forward(req, resp); } } else if(method.equals("class")) { String cname=req.getParameter("cname"); String cnumber=req.getParameter("cnumber"); String cteacher=req.getParameter("cteacher"); String most=req.getParameter("most"); int a=Integer.parseInt(most); Classes classes=new Classes(cnumber,cname,cteacher,a); ClassesDao cD = new ClassesDao(); if(cD.insert(classes)) { //如果添加成功 req.setAttribute("message", "添加成功"); //这里表示,在req的作用域中设置一个massage变量,变量内容是:添加成功 //然后,当跳转到它下一个界面时,这个作用域里的值可以通过Object message =request.getAttribute("message")拿出来使用 req.getRequestDispatcher("admin.jsp").forward(req, resp); } else { //处理失败 req.setAttribute("message", "添加重复,请重新输入"); req.getRequestDispatcher("addStudent.jsp").forward(req, resp); } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package Servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import Bean.Student; import Bean.Teacher; import Dao.LoginDao; import Dao.StudentDao; import Dao.TeacherDao; /** * Servlet implementation class LoginServlet */ @WebServlet("/loginServlet") public class LoginServlet extends HttpServlet { public LoginServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { LoginDao login=new LoginDao(); TeacherDao tD=new TeacherDao(); StudentDao sD=new StudentDao(); String number=request.getParameter("account"); String password=request.getParameter("password"); String account=request.getParameter("account"); if(number.length()==6) { if(login.log(account, password)) { Teacher teacher=null; teacher=tD.log(account, password); request.getSession().setAttribute("teacher", teacher); request.setAttribute("message", "恭喜"+teacher.getTname()+"登陆成功"); request.getRequestDispatcher("teacher.jsp").forward(request, response); } else { request.setAttribute("message", "账号或密码错误"); request.getRequestDispatcher("index.jsp").forward(request, response); } }else if(number.length()==8) { if(login.log(account, password)) { Student student=null; student=sD.log(account, password); request.getSession().setAttribute("student", student); request.setAttribute("message", "登陆成功"); request.getRequestDispatcher("student.jsp").forward(request, response); } else { request.setAttribute("message", "账号或密码错误"); request.getRequestDispatcher("index.jsp").forward(request, response); } } else if(number.equals("admin")) { if(password.equals("123456")) { request.setAttribute("message", "登陆成功"); request.getRequestDispatcher("admin.jsp").forward(request, response); } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package Servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import Bean.Classes; import Bean.Student; import Bean.Teacher; import Dao.ClassesDao; import Dao.StudentDao; import Dao.TeacherDao; /** * Servlet implementation class UpdateServlet */ @WebServlet("/updateServlet") public class UpdateServlet extends HttpServlet { private static final long serialVersionUID = 1L; public UpdateServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); String method=req.getParameter("method"); if(method.equals("teacher")) { String tname=req.getParameter("tname"); String tsex=req.getParameter("tsex"); String tnumber=req.getParameter("tnumber"); String tacademy=req.getParameter("tacademy"); String twork=req.getParameter("twork"); Teacher teacher=new Teacher(tname, tnumber, tsex, tacademy, twork); TeacherDao TD=new TeacherDao(); TD.update(teacher); //对数据库进行修改; req.setAttribute("message", "修改成功"); req.getSession().setAttribute("teacher", teacher); req.getRequestDispatcher("teacher.jsp").forward(req,resp); } else if(method.equals("student")) { String sname=req.getParameter("sname"); String snumber=req.getParameter("snumber"); String password=req.getParameter("password"); String ssex=req.getParameter("ssex"); String sgrade=req.getParameter("sgrade"); String specialities=req.getParameter("specialities"); Student student=new Student(sname, snumber, password,ssex,sgrade, specialities); StudentDao sD = new StudentDao(); sD.update(student); //对数据库进行修改; req.setAttribute("message", "修改成功"); req.getSession().setAttribute("student", student); req.getRequestDispatcher("student.jsp").forward(req,resp); } else if(method.equals("classlist")) { ClassesDao cD = new ClassesDao(); //List<Classes> class_list = cD.list((String) req.getSession().getAttribute("teacher.tname")); List<Classes> class_list = cD.list("嘿嘿嘿"); //.cD.0 System.out.println((String) req.getSession().getAttribute("teacher.tname")); req.getSession().setAttribute("class_list", class_list); req.getRequestDispatcher("classUpdate.jsp").forward(req,resp); } else if(method.equals("class")) { String cname=req.getParameter("cname"); String cnumber=req.getParameter("cnumber"); String cteacher=req.getParameter("cteacher"); String most=req.getParameter("most"); int a=Integer.parseInt(most); Classes cl =new Classes(cnumber, cname,cteacher,a); ClassesDao cD = new ClassesDao(); cD.update(cl); //对数据库进行修改; req.setAttribute("message", "修改成功"); req.getSession().setAttribute("cl", cl); req.getRequestDispatcher("teacher.jsp").forward(req,resp); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
我认为最重要的部分就是servlet的部分,当时实现的是可以添加老师学生和课程,不过由于刚开始画饼画的有点大,所以到最后时间比较紧张,到最后的时候改有点小问题,不过已经改好了。由于不清楚如何实现动态查询,所以我就根据账号的长度来判断身份,老师学生和管理员,以实现跳到不同的界面,然后在servlet中把人的信息放到session中,从jsp中读取然后回写。
三、感想
虽然得的是D标,但是我感觉这一节课还是学到了很多东西,比如session域的存取值,简单涉及el表达式,发现el表达式是个很强大的东西。并且认识到自己对数据库建表的想法还不够完善,有的时候代码敲到后期发现表建的不合适还需要更改。并且JavaBean里面的构造方法也需要根据对象的需要来创建,有时候是需要有缺省值,有时候不需要全部初始化,需要根据具体情形和会用到的场景来判断。