目录
一、系统设计
3.1系统功能设计
系统要求能够实现以下功能:
(1) 要求学生能够进行选课。
(2) 要求学生能够对教师进行教学质量评估及对其留言。
(3) 要求教师能够查看评教,以及对同行进行教学质量评估。
(4) 要求管理员能够对学生,教师信息进行插入,删除等操作
(5) 要求管理员能够对教学质量评估进行统计。
3.2 系统设计思想
本系统存在3种用户:学生、教师、管理员。学生和教师用管理员给定的帐号、密码登陆页面进行操作。登陆判定上首次基于数据库验证,然后把用户信息写进session,然后其他页面采用session验证。 系统结构上采用页面镶嵌程序和语句,工作原理如下图所示。
在系统结构中,用户界面层通过统一的接口向数据库存储层发送请求,数据库存储层收到请求处理之后把数据返回到用户界面层。
3.3 数据库分析
3.3.1数据库需求分析
数据库需求分析就是要了解在这个系统中,用户需要查询、更新、删除和保存哪些数据,收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的具体设计打下基础。
针对教师教学质量评估系统功能的需求,总结出如下需求信息。
(1) 用户分教师、学生和管理员。
(2) 教师担任一门或多门课程。
(3) 学生能选修一门或多门课程,学生选择的课程要有选课记录。
(4) 学生对自己所选择的课程相对应的教师进行教学评估(进行打分),并根据情况意愿留言。
(5) 教师根据自己所授课程查看学生对自己的评分,同时查看学生对自己的留言。
经过需求总结,考虑到将来功能上的扩展,设计如下数据项和数据结构。
(1) 学生,包括数据项:学号、姓名、系名、班名、密码等。
(2) 教师,包括数据项:教师ID、姓名,所属院系、所授课程、所带班级、密码等。
(3) 管理员,包括数据项:管理员ID、密码等。
(4) 课程,包括数据项:课程编码、课程名称、授课教师等。
(5) 选课记录,包括数据项:课程编号、课程名称、学号。
(6) 学生分数记录表:包括数据项:学号、教师姓名、课程名称、分数。
(7) 教师分数记录表:包括数据项:教师ID、教师姓名、所属院系、所授课程、分数
(8) 留言, 包括数据项:留言、编号、教师姓名等。
3.3.2数据库概念结构
得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体以及实体之间的关系,为后面的数据库逻辑结构设计打下基础。这些实体包括各种具体信息通过互相之间的作用形成数据流动。
本系统根据上面的设计规划出的实体有:学生实体、教师实体、管理员实体、课程实体、选课实体、学生分数记录实体、教师分数记录实体、留言实体。
实体之间的关系的E-R图如下所示。
其他实体的E-R图比较简单,这里就不详细介绍了。
3.3.3数据库逻辑结构设计
数据库概念结构设计完后,将数据概念结构转化为数据库系统所支持的实际数据模型,也就是数据库逻辑结构。
教师教学质量评估系统中各个表设计如下:
二、系统实现
5.1 系统页面主体设计
系统登陆页面设计如图:
5.2 数据操作类
基本的数据库操作都被封装到DB类,该类对数据库访问的方法包括了数据库的连接、查询、插入、删除、更新等操作。在开发过程中,涉及到数据库的操作时,可以直接调用DB的方法。这样可以提高开发人员的效率,充分体现了组件的重用性。类代码如下:
package Javabeans;
import java.sql.*;
public class DB {
private Connection con;
private Statement stm;
private ResultSet rs;
private String classname="com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=教师教学质量评估系统";
public DB(){}
public Connection getCon(){
try{
Class.forName(classname);
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
try{
con=DriverManager.getConnection(url,"sa","");
}
catch(Exception e){
e.printStackTrace(System.err);
con=null;
}
return con;
}
public Statement getStm(){
try{
con=getCon();
stm=con.createStatement();
}catch(Exception e){e.printStackTrace(System.err);}
return stm;
}
public Statement getStmed(){
try{
con=getCon();
stm=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
}catch(Exception e){e.printStackTrace(System.err);}
return stm;
}
public ResultSet search(String sql){
if(sql==null)sql="";
System.out.println("sql:"+sql);
try{
stm=getStmed();
rs=stm.executeQuery(sql);
}
catch(Exception e){e.printStackTrace();}
return rs;
}
public int dosql(String sql){
int num=-1;
if(sql==null)sql="";
try{
stm=getStmed();
num=stm.executeUpdate(sql);
}
catch(Exception e){e.printStackTrace();num=-1;}
return num;
}
public void closed(){
try{
if(rs!=null)rs.close();
}
catch(Exception e){e.printStackTrace();}
try{
if(stm!=null)stm.close();
}
catch(Exception e){e.printStackTrace();}
try{
if(con!=null)con.close();
}
catch(Exception e){e.printStackTrace();}
}
}