资源描述
学生成绩管理系统的设计与实现 1106班 方爽
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
武汉学院
学生学年论文
题 目: 学生成绩管理系统的设计与实现
指导教师: 胡仁
学生姓名: 方爽
学号: 11072071
专 业:计算机信息管理
年级: 大二
二〇一三年五月十日
18
学生成绩管理系统的设计与实现
摘要
本系统依据开发要求主要应用于教育系统,完成对日常的教育工作大学生成绩档案的数字化管理。采用Java技术开发而成.
学生成绩管理系统为老师及同学提供充足的信息和快捷的查询手段。学生成绩管理系统涉及不同类别的用户,分别为学生、教师和管理员以及访客。学生只能对系统的信息进行查询。而老师则可以对信息进行录入和修改,管理员账户则拥有教师和学生拥有的全部权限。
关键词:成绩管理;Java;异步交互
引言
1。2 背景及课题研究意义
为了使学生成绩管理更加的方便,我们有必要开发这样一种实用性强的学生成绩管理系统。这个系统方便学生查看自己的成绩及选课,教师给学生打分,管理员添加学生、教师、课程。
对此课题的研究将有助于提升个人系统设计和分析能力,学会软件项目权限管理的基础实现,对以后大型项目的权限设计打下基础.同时,将对本人以下方面起到积极作用:对JavaEE编程知识的理论实践应用;加深对系统权限管理的理解;提高自己的系统分析、设计能力;初步了解软件项目的开发过程。
在这个系统的开发大学生可以将自己所学的知识用于实践而得到很多锻炼,达到学以致用的目的。
1.2论文撰写思路
本文通过对我校现有的学生成绩管理系统和其他学校的成绩管理系统进行研究,他们大多运用的是ASP。NET+SQLSERVER技术.本系统改变开发语言,实现更具人性化的设计和用户体验。让成绩管理系统更好的服务教师和学生。提高学校管理的效率。由于java具有跨平台的特性,它被用于各种系统之中。这个系统也是用JAVAWEB开发。下图为撰写该论文的主要流程。
图1论文制作流程图
2相关技术概要
下面主要介绍该系统涉及到的技术及开发工具。
1、JSP
JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*。htm,*。html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*。jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
2、JavaBean
JavaBeans就是Java的可重用组件技术.ASP通过COM来扩充复杂的功能,如文件上传、发送E-Mail以及将业务处理或复杂计算分离出来成为独立可重复利用的模块。JSP通过JavaBeans实现了同样的功能扩充。JavaBeans组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据提取等。
3、3层B/S结构
3层由客户端(浏览器)、服务器、数据库组成。在三层模型中,命令先是被发送到服务的中间层,然后由它将SQL语句发送给数据库。数据库对SQL语句进行处理并将结果送回到中间层,中间层再将结果送回给用户。这种模型称为三层式结构。
3 系统需求分析
3。1 用户身份级别功能分析
系统设计到三种身份的用户:管理员、教师、学生.
表1:角色功能表
管理员
添加新的教师、学生、添加可选课程删除各种信息
教师
给学生上成绩
学生
选课、查看成绩
图2 系统用例图
3.2 学生功能模块分析
学生是学生成绩管理系统的主体。其他的功能都是为管理学生成绩信息提供服务的.学生选择身份登录后,左边是他的导航,右面显示他的基本信息,他可以在左边点击查看可选课程进行选课、点击查看成绩可以查看已经出成绩的课程的成绩、点击修改密码可以修改自己的密码。
3.3 教师功能模块分析
教师选择身份登录后,就可以进行相应的操作。查看自己教的课程,点击课程就可以查看选此课的所有学生,然后可以给他们上成绩。
3。4 管理员功能模块分析
管理选择身份登录后,可以做一下操作:添加新的教师及信息、添加新的学生及信息、添加新的选课信息、关闭选课、删除离职的教师信息和删除毕业或退学的学生信息.
4系统概要设计
4.1 系统功能结构
系统主要用于对学生成绩的管理.围绕这个核心功能,产生了三种角色。他们的功能主要如表1所示。
4.2 系统技术架构
系统采用B/S三层技术架构,即页面展示层、流程控制层、数据库访问层.这三层分别由Jsp、Servlet、JavaBean担任.
4.3 系统类图
学生、管理员、教师三个角色分别有三个接口,三个接口有三个实现类.学生的实现类(StudentDAOImpl)可以用Student、Lesson、Result三个bean类完成自己的功能,管理员的实现类(ManagerDAOImpl)可以用Student、Lesson、Teacher三个bean类完成自己的工作,教师实现类(TeacherDAOImpl)用Result、Lesson两个bean类完成相应操作。
4。4 系统顺序图
顺序图是,一个用户在系统中一个操作中各个细节的时间顺序的集合。下面列举系统中几个典型的顺序图。
1.管理员添加教师的顺序图。
管理员填写好教师信息后点击添加,这个请求就会发送到服务器,服务器接受到请求后把这个工作交给AddTeacher这个Servlet处理。AddTeacher又调用MannagerDAOImpl中相应的方法将这个Teacher对象保存到数据库中,最后消息一步一步传到管理的页面上。
2.学生选课
学生点击选课按钮,请求发送到服务器后,服务器先将传来的信息给Servlet GetLesson处理,GetLesson后调用StudentDAOImpl类的查看是否有可选课程的方法处理.然后将结果返回给用户。如果没有可选课程则该操作结束.如果有可选课程,学生可以选课,在学生选择了课程之后,服务器将这个请求交给Servlet selectLesson处理。selectLesson将Lesson信息传给StudentDAOImpl类中的添加课程的方法将课程添加到数据库中。然后信息返回到学生页面。
4。5 数据库设计
考虑到数据量比较大,该系统采用ORACLE数据库。数据库中一共4张表:学生表、教师表、课程表、成绩表。表之间的关系如下图所示:
图3 数据库表之间的关系
下面详细介绍各个表的结构:
学生表:
表2:学生表数据库设计
字段名
属性
条件
描述
Student_id
Varchar2(20)
Not null PK
学生学号
Student_name
Varchar2(20)
Not null
学生姓名
Password
Varchar2(16)
Not null default 学号
密码
Sex
Varchar2(5)
Not null
性别
Professional
Varchar2(30)
Not null
专业
Photo
Varchar2(50)
Not null
照片
Age
Number(1)
年纪
Grade
Number(1)
Not null
年级
Student_intro
Varchar2(200)
学生基本介绍
教师表:
表3:教师表数据库设计
字段名
属性
条件
描述
Teacher_id
Varchar2(20)
Not null PK
教师工号
Teacher _name
Varchar2(20)
Not null
教师姓名
Password
Varchar2(16)
Not null default 学号
密码
Sex
Varchar2(5)
Not null
性别
College
Varchar2(30)
Not null
学院
Photo
Varchar2(50)
Not null
照片
Age
Number(1)
年纪
Teacher _intro
Varchar2(200)
教师基本介绍
课程表:
表4:课程表表数据库设计
字段名
属性
条件
描述
Lesson_id
Varchar2(20)
Not null PK
课程编号
Lesson _name
Varchar2(20)
Not null
课程名
Teacher_id
Varchar2(20)
Not null FK
教师编号
Grade
Number(1)
Not null
所属年级
State
Number(1)
Not null
是否为可选
Professional
Varchar2(30)
Not null
所属专业
成绩表:
表5:成绩表数据库设计
字段名
属性
条件
描述
id
Number(10)
Not null PK
成绩编号
Lesson_id
Varchar2(20)
Not null FK
课程编号
Student_id
Varchar2(20)
Not null FK
学生学号
Score
Number(3)
Not null
得分
有主外键的表之间都存在级联删除和条件判断的功能。
5 。详细设计及实现
5。1 系统开发平台目录结构设计
在开发之前要把目录结构和命名规则定好,下图为该系统的目录结构:
图4 系统的目录结构
Src目录是存放java源代码的地方,beans存放的是实体类,control存放的是SERVLET,DAO存放的是数据访问对象,DAOImpl存放数据库访问对象的实现类,这个是按照抽象编程的原则。dbConn存放的是连接数据库和操作数据库方法类的包.存放的是数据库驱动和其他引用包.存放JSP文件、CSS文件、JS文件。
5。2 数据库连接模块和整体流程
该系统使用JDBC连接数据库,首先必须将要使用数据库的连接驱动引入项目.这里我们使用的ORACLE数据库,故引入ojdbc14。jar这个包。首先在database。properties文件中加入连接数据库的基本参数,如下:
driver=oracle.jdbc.driver。OracleDriver
url=jdbc:oracle:thin:@localhost:1521:
user=scott
password=admin
dbname=management
在通过一个java文件读取配置文件的配置:DBProperty。Java
package com.suggestion。database;
import java.io。File;
import java.io.IOException;
import java。io。InputStream;
import java。util。Properties;
public class DBProperty {
private File file;
private String dbstr;
@SuppressWarnings(”unused”)
private String name;
public DBProperty(){}
public String getProper(String properfile,String name){
this.name=name;
file = new File(properfile);
if(!file。exists()){
dbstr = file.getPath();
}else{
dbstr = "mydatabase.properties";
}
InputStream in=getClass().getClassLoader().getResourceAsStream(dbstr);
Properties prop=new Properties();
try {
prop.load(in);
}catch (IOException e) {
e.printStackTrace();
}
return prop。getProperty(name);
}
}
再用读取出的数据得到数据库的连接对象:DBConnection。java
package com.suggestion.database;
import java.sql.Connection;
import java。sql。DriverManager;
import java。sql.SQLException;
/**
* @author leichao
* @createtime 2010-12-22
* @version 1。0
*/
public class DBConnection {
private static DBConnection instance;
private String driver;
private String url;
private String user;
private String password;
private String dbname;
private DBConnection() throws Exception{
DBProperty prop = new DBProperty();
String file="mydatabase.properties";
driver=prop.getProper(file,"driver”);
url=prop。getProper(file,"url”);
user=prop。getProper(file,”user”);
password=prop。getProper(file,"password”);
dbname=prop。getProper(file,”dbname”);
try{
Class.forName(driver);
}catch(Exception e)
{
e。printStackTrace();
}
}
public static DBConnection getInstance(){
try{
if(instance==null){
instance=new DBConnection();
}
return instance;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public Connection getConnection()throws SQLException{
Connection con;
try{
con=DriverManager.getConnection(url+dbname, user, password);
return con;
}catch(SQLException e){
e。printStackTrace();
}
return null;
}
public void CloseConnection(Connection con){
if(con!=null){
try{
con.close();
}catch(SQLException e){
e。printStackTrace();
}
}
}
public static void main(String agrs[]) throws Exception{
new DBConnection();
}
}
这样就得到数据库的连接,后面就可以用连接对象对数据库进行操作了。
系统整体流程如下:
图5 系统的基本流程图
5.3 用户登录模块
当用输入正确的访问地址之后,出现系统登录页面,在用户选择自己的身份后,输入用户名、密码之后会发送一个请求到服务器。如果用户名和密码正确就会跳转到相应的页面,并把用户信息保存在session中,如果在其他页面中没有session信息则用户没有权限访问会跳到登录页面,防止用户乱输入页面地址。如果输入错误会回到登录页面并提示错误.
以下是对登录的操作:
package com.me.control;
import java.io.IOException;
import javax。servlet。ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.me。DAOImpl.StudentDAOImpl;
import com。me.DAOImpl.TeacherDAOImpl;
import com.me.beans。Student;
import com。me。beans.Teacher;
/*
* 登录控制
* 分为三种情况
*/
public class LoginCal extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response。setContentType(”text/html;charset=gbk");
//PrintWriter out = response。getWriter();
String userId = request。getParameter("name");
String pass = request.getParameter("pass");
String who = request.getParameter(”hide");
boolean correct = true;
StudentDAOImpl sdi;
TeacherDAOImpl tdi;
Student s ;
Teacher t;
//判断用户身份
if(who.equals("student")){
s = new Student();
s。setStudent_id(userId);
s.setPassword(pass);
sdi = new StudentDAOImpl();
if(sdi.login(s)!=null){
correct = false;
request。getSession()。setAttribute("username", sdi。login(s)。getStudent_name());
request.getRequestDispatcher(”student.jsp”).forward(request, response);
}
}else if(who。equals("teacher”)){
t = new Teacher();
t。setTeacher_id(userId);
t。setPassword(pass);
tdi = new TeacherDAOImpl();
if(tdi.login(t)!=null){
correct = false;
request.getSession()。setAttribute(”username”, tdi。login(t).getTeacher_name()); request。getRequestDispatcher("student.jsp").forward(request, response);
}
}else{
if(userId。equals(”admin") && pass。equals("admin")){
correct = false;
request。getSession().setAttribute("username”, ”admin”); request。getRequestDispatcher(”manage。jsp”)。forward(request, response);
}
}
if(correct){
request.setAttribute(”message", "用户名或密码错误!");
request.getRequestDispatcher("login。jsp”)。forward(request, response);
}
}
}
登录模块整体流程下:
图6 登录模块的基本流程
5。4 学生操作模块
学生成功登陆在左边导航可以选择自己想要进行的操作,它所调用的方法如下:
模块整体流程下
图7 学生模块的基本流程
5.5 教师操作模块
教师成功登陆后,可以在浏览器左边的导航中找到自己的操作。教师修改密码和学生修改密码相同,故流程图没有画出.教师的操作调用的方法如下:
package com。me。DAO;
import com。me.beans。Student;
import com.me。beans.Teacher;
public interface TeacherDAO {
//根据课程给学生打分
public void setScore(int lessonId,int studentId);
//教师修改密码
public boolean changePassword(Student student);
//教师登录
public Teacher login(Teacher teacher);
}
流程如下:
图8 教师模块的基本流程
5.6 管理员操作模块
管理员是系统中最重要的角色,论文做重点介绍。他主要对教师、学生、课程三个对象进行操作,他一共有7个方法,入一下代码所示:
package com。me.DAO;
import java.util。ArrayList;
import com.me。beans.Lesson;
import com。me。beans.Student;
import com.me。beans。Teacher;
public interface ManagerDAO {
//管理员添加学生信息
public void addStudent(Student student);
//管理员添加教师信息
public void addTeacher(Teacher teacher);
//管理员添加可选课程
public void addLesson(Lesson lesson);
//管理员更改可选课程
public void changeLesson(String lessonId);
//管理员删除学生信息
public void deleteStudent(Student student);
//管理员删除教师信息
public void deleteTeacher(Teacher teacher);
//得到已有教师
public ArrayList〈Teacher〉 getTeacher();
}
最后一个方法是,当管理员添加课程时,要找对应的任课教师。所以该系统有教师才可能添加课程.
基本系统流程如下:
图9 管理员模块的基本流程
学习软件工程的心得和收获
学习软件工程这门课程已经有一个学期了,整一个学期下来,应该说还是有许多值得肯定的地方的,其实在我看来,软件工程与其说是一门课程,不如说是一门思想。是一个如何去分析和处理问题的过程,应该说其范畴已经远远不止局限于该门课程,成为了一个综合的一个能够解决问题的思想集合.
其次,这门课程教给了我们在完成一个实际项目时的一般程序及过程,我认为这是一份非常具有实际意义的教学内容。当我们在毕业之后,这是我们实际要运用的一项非常有用的技能,而且不仅仅局限于软件工程的范畴,我们即使是从事与其它行业,不也是要从需求获取开始,一直有条有理地到最后成品的出炉吗?
参考文献
[1]张海藩.软件工程导论(第四版):清华出版社,2007
[2]施霞萍,张欢欢,王瑾德,马可幸。Java程序设计:机械工业出版社,2008
[3]程杰.SQL语言与数据库操作技术大全:电子工业出版社,2009
[4]廖若雪.JSP高级编程:机械工业出版社,2009
[5]李长,饶居华,李鹏,王志兵.Eclipse与J2ee应用开发:北京大学出版社, 2008
[6]郭宁,周晓华.软件项目管理[M]:清华出版社, 2007
[7]VivekChopra,Sing Li,Jeff Genender.Apache Tomcat 6高级编程
人民邮电出版社,2009
展开阅读全文