基于JSP/Servlet设计、实现一个课程管理Web应用程序,该程序实现如下功能。
有登录页面,登录用帐号密码保存在数据库中,合法登录后进入学习成绩管理页面。否则给出错误提示。
在学习成绩管理页面可添加一门课程的成绩,添加内容包括:课程编号、课程名称、学生姓名、课程成绩等内容。添加后信息保存在数据库中。
可根据课程名称和学生姓名进行查询。
可删除和修改课程信息的内容。(即删除一条课程记录或修改课程记录中的某一字段)。
二、程序设计
1.数据库设计:
经过分析可知,改程序主要有如下的实体对象,用户、课程、学生三个实体对象。因此该数据库主要有四张表,分别如下:
连接数据库的类设计如下:
package database;
import java.sql.Connection;
import java.sql.DriverManager;
public class DataBaseConnection {
public static Connection createDBConn(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=Student_system
return conn;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
2.程序界面设计:
通过程序的要求可知该程序有jsp页面或Html页面以及servlet组成。Jsp主要负责与用户的交互实现视图页面的功能,而servlet主要负责页面跳转控制以及数据处理的功能。
由实验的要求具体的实验设计如下:
A、用户通过一个登陆页面,输入用户名、密码,然后该jsp页面将请求发送给处理用户身份验证的servlet,该servlet获取数据库的信息进行校验,如果用户的身份合法则跳转到应用程序的主界面,否则给出错误的提示信息,并且要求用户重新输入用户名和密码重新登陆。
登陆页面的设计图如下所示:
B、对于程序的主界面主要实现对于用户需要的导航功能以及实现具体的操作功能。该程序的主界面主要有三个Html的Framset构成,分别为topFrame,leftFrame,mainFrame组成,leftFrame主要实现程序的导航,而mainFrame具体的实现程序的功能。
主界面设计界面如下:
C、具体的功能设计如下
<1>学生个人成绩查询:学生通过输入学号可以查询学生所学科目的所以成绩。
<2>课程管理:该模块主要实现对课程的新增、已有课程的查询以及对每门课程成绩的录入功能的导航。
课程的新增:如有新的课程需要新增,则用户通过提示输入课程编号、课程名称、授课教师名字实现课程的新增。
科目成绩管理:通过该功能,用户可以实现对指定的科目的成绩管理,修改或者新增功能。用户可以查询对应的科目增加或修改成绩。
查看已有课程:通过查看已有的科目可以实现对已有科目的信息的修改、删除以及学生成绩添加、修改的功能。
<3>学生信息管理:通过该模块可以实现对学生个人信息的查询、新增、修改的功能。
学生个人信息查询:输入学号或姓名可以查看学生的基本信息。
学生个人信息添加:根据提示输入学生的各项基本,提交添加学生信息。
学生信息修改:输入学生学号或姓名查找到学生信息,对学生信息进行修改提交。
<4>退出登录:结束会话,返回至登录页面。
3.servlet设计:
Servlet主要负责对页面请求的跳转和对数据库的操作功能。该程序主要有如下的servlet,分别为:
1. AddCourse_Serverlet : 添加课程
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import database.DataBaseConnection;
import java.sql.*;
public class AddCourse_Serverlet extends HttpServlet {
public AddCourse_Serverlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn=DataBaseConnection.createDBConn();
PrintWriter out=response.getWriter();
Statement st=null;
try {
st=conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
String number;
String name;
String teacher;
number=request.getParameter("number");
name=request.getParameter("name");
teacher=request.getParameter("teacher_name");
if(number!=null&&number.length()!=0){
number=new String(number.trim().getBytes("ISO-8859-1"),"utf-8");
}
if(name!=null&&name.length()!=0){
name=new String(name.trim().getBytes("ISO-8859-1"),"utf-8");
}
if(teacher!=null&&teacher.length()!=0){
teacher=new String(teacher.trim().getBytes("ISO-8859-1"),"utf-8");
}
try {
st.executeUpdate("insert into Course(Course_NO,Course_Name,Teacher_Name) values('"+number+"','"+name+"','"+teacher+"')");
} catch (SQLException e) {
e.printStackTrace();
}
out.println("success!");
}
public void init() throws ServletException {
// Put your code here
}
}
2. addStudentInformation: 添加课程信息
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import database.DataBaseConnection;
public class addStudentInformation extends HttpServlet {
public addStudentInformation() {
super();
}
/**
* Destruction of the servlet.
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection conn=DataBaseConnection.createDBConn();
PrintWriter out=response.getWriter();
Statement st=null;
try {
st=conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
String number=null;
String name=null;
String sclass=null;
String sex=null;
String academy=null;
String professional=null;
String time=null;
number=request.getParameter("number");
name=request.getParameter("name");
sclass=request.getParameter("sclass");
sex=request.getParameter("sex");
academy=request.getParameter("academy");
professional=request.getParameter("professional");
time=request.getParameter("time");
if(number!=null&&number.length()!=0){
number=new String(number.trim().getBytes("ISO-8859-1"),"utf-8");
}
if(name!=null&&name.length()!=0){
name=new String(name.trim().getBytes("ISO-8859-1"),"utf-8");
}
if(sclass!=null&&sclass.length()!=0){
sclass=new String(sclass.trim().getBytes("ISO-8859-1"),"utf-8");
}
if(sex!=null&&sex.length()!=0){
sex=new String(sex.trim().getBytes("ISO-8859-1"),"utf-8");
}
if(academy!=null&&academy.length()!=0){
academy=new String(academy.trim().getBytes("ISO-8859-1"),"utf-8");
}
if(professional!=null&&professional.length()!=0){
professional=new String(professional.trim().getBytes("ISO-8859-1"),"utf-8");
}
if(time!=null&&time.length()!=0){
time=new String(time.trim().getBytes("ISO-8859-1"),"utf-8");
}
try {
st.executeUpdate("insert into Student values('"+number+"','"+name+"','"+sclass+"','"+sex+"','"+academy+"','"+professional+"','"+time+"')");
} catch (SQLException e) {
e.printStackTrace();
}
out.println("success!");
}
public void init() throws ServletException {
// Put your code here
}
}
3. CourseManagement:课程操作控制
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import database.DataBaseConnection;
public class CourseManagement extends HttpServlet {
public CourseManagement() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String operation;
String ID;
String number;
String name;
String teacher_name;
response.setContentType("text/html");
Connection conn=DataBaseConnection.createDBConn();
PrintWriter out=response.getWriter();
Statement st=null;
try {
st=conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
operation=request.getParameter("operation");
ID=request.getParameter("id");
number=request.getParameter("number");
name=request.getParameter("name");
teacher_name=request.getParameter("teacher_name");
if (ID != null && ID.length() != 0) {
ID = new String(ID.getBytes("ISO-8859-1"), "utf-8");
}
if (number != null && number.length() != 0) {
number = new String(number.getBytes("ISO-8859-1"), "utf-8");
}
if (name != null && name.length() != 0) {
name = new String(name.getBytes("ISO-8859-1"), "utf-8");
}
if (teacher_name != null && teacher_name.length() != 0) {
teacher_name = new String(teacher_name.getBytes("ISO-8859-1"), "utf-8");
}
if(operation.equals("delete")){
try {
st.execute("delete from Course where Course_NO='"+ID+"' ");
} catch (SQLException e) {
e.printStackTrace();
out.print("delete fail!");
}
}
if(operation.equals("edit")){
response.sendRedirect("CourseEdit.jsp?id="+ID+"");
}
if(operation.equals("update")){
try{st.executeUpdate("update Course set Course_Name='"+name+"',Teacher_Name='"+teacher_name+"' where Course_No='"+number+"'");
}catch(Exception e){
e.printStackTrace();
}
}
}
public void init() throws ServletException {
// Put your code here
}
}
4. Login_control:登录控制
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import database.DataBaseConnection;
public class Login_control extends HttpServlet {
public Login_control() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
int times=0;
String temp=null;
final PrintWriter out = response.getWriter();
final Connection conn = DataBaseConnection.createDBConn();
HttpSession session=request.getSession();
Statement select;
ResultSet rs = null;
String name = request.getParameter("Name");
if (name != null && name.length() != 0) {
name = new String(name.getBytes("ISO-8859-1"), "utf-8");
}
String password = request.getParameter("Password");
if (password != null && password.length() != 0) {
password = new String(password.getBytes("ISO-8859-1"), "utf-8");
}
try {
select = conn.createStatement();
rs = select.executeQuery("select Password from Users where U_Name='"+name+"'");
} catch (final Exception e) {
e.printStackTrace();
select = null;
}
try {
while(rs.next()){
temp=rs.getString("Password");
times++;
}
} catch (final SQLException e){
}
if(times==1&&temp.equals(password)){
session.setAttribute(name, "Name");
response.sendRedirect("Main.html");
try {
conn.close();
} catch (final SQLException e) {
e.printStackTrace();
}
}
else{
out.println("密码输入错误");
out.println("返回登录页面");
}
}
public void init() throws ServletException {
// Put your code here
}
}
三、程序实现
1.登录:
用户名或密码输入有误:
登录成功显示主界面:
1.成绩查询:(输入学号200710405223查询结果)
2.课程管理:
课程管理分类导航:
添加课程:
添加成功:
编辑成绩:
该模块实现对课程的信息的修改以及增加该门课程的学生成绩.
查看已有课程(输入上一步添加的课程编号:200710进行查询)
3.学生信息管理:
学生信息管理导航界面:
学生个人信息查询:(输入学号200710405223进行查询)
学生个人信息添加:
四、总结
本次试验是在自己看书查看相关资料完成的,虽然程序简单,实现功能不多,但是经过本次试验我真正的认识了web开发。
该学生成绩管理系统,主要实现了学生信息管理、课程管理以及学生成绩管理。每一个模块实现的功能简单,主要为查询、修改、新增。Jsp页面主要实现页面展示的功能,而servlet则负责页面请求的跳转以及对数据库数据的更新操作。
本程序依然存在设计和实现上的问题,对于jsp页面与Java代码的分离,处理的不是很好,对于一些需求与数据库交互的页面依然在页面中插入了大量的Java代码。而对于数据库的查询和更新功能,依旧通过具体的sql语句实现,未实现在对象的操作中获取和更改数据未体现面相对象的设计思想。并且通过测试可知程序在效率方面做得很差,对于数据的查询和页面加载方面需要一定的等待时间,需要在页面设计和数据库的操作方面做处理。并且对于数据库未使用存储过程等数据库方面的知识来改进效率。当然程序中依然有很大的不足,望老师加以批评和指正。