个人成绩单管理系统(共44页).doc
精选优质文档-倾情为你奉上代码行数687项目名称个人成绩单管理系统1实训目的面向对象程序设计课程设计是计算机科学与技术专业培养计划中的重要实践教学环节,旨在通过一个管理信息系统的开发,加深学生对Java语言的理解和应用,尤其是对面向对象编程思想、Java编码规范、图形用户接口、JDBC访问数据库的理解,巩固软件工程课程的相关知识,了解软件开发的基本流程,进一步提高学生的学习能力、理解能力、表达能力及沟通能力。2实训内容使用MyEclipse为开发工具,使用Rational Rose为建模工具,使用MySQL为数据库服务器,基于GUI和JDBC技术,分析、设计并实现一个管理信息系统。3.需求分析3.1 需求描述成绩管理一直是学校教学管理中十分重要但又相当复杂的管理工作之一,一味的采用传统的手工处理已经不符合教育和管理的要求,而当今时代的计算机具有运算速度快,处理能力强等特点,很自然地进入到这一应用领域中。因此,为了保证学校的信息流畅,工作高效,很有必要设计一个学生成绩管理系统。这不但能使教务人员从繁杂的成绩管理中解脱出来,对于推动教学的发展也起到非常重要的作用。大部分学校学生成绩管理工作都是采用传统的手工管理,但是这些传统人工管理的方式存在着许多缺点,比如:效率较低,学生成绩信息是一个庞大的数据,要想查找其中一个学生的数据简直是大海捞针,庞大的数据还导致错误率较高。所以我选择Eclipse来开发学生成绩管理系统,由于以上的优点,开发该系统用来帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化、规范化和自动化。1用户注册和登录(1)用户需注册新的用户名和密码并将其存储在数据库内,用户注册成功后需输入用户名和密码登录系统,用户必须在登录系统后才能进行相关操作。(2)当用户名和密码错误时,允许用户重新进行登录操作。2增添学生成绩信息(1)用户在系统的提示下,输入相关信息,完成插入记录的操作。(2)当输入的数据类型不正确时,系统会显示失败并允许用户重新输入。3删除学生成绩信息(1)用户可以根据人名或者id对相关记录进行删除。(2)当输入的数据类型不正确时,系统会显示删除失败并允许用户重新输入。4查询id学生成绩信息(1)用户可以查询整条记录或输入指定id查询指定科目成绩,完成查询记录的操作。(2)当输入的数据类型不正确时,系统会显示修改失败并允许用户重新输入。5查询名字学生成绩信息(1)用户在系统的提示下,输入相关信息,完成查询记录的操作。(2)当输入的数据类型不正确时,系统会显示查询失败并允许用户重新输入。3.2 用例描述图3.1 系统用例图4.功能设计4.1 系统层次方框图4.1 系统结构为保证系统具有较好的可维护性和可扩展性,对系统进行分层设计,共分四层:l 视图层:接收个人成绩输入信息,显示界面信息和成绩信息l 控制层:访问流程控制l 业务层:完成具体功能的实现l 数据库访问层:完成对数据库访问操作的封装具体结构如下图所示:DataBase数据库访问层:DB类业务层:XxxService类控制层:Controller类、视图层:XxxView类图4.1 系统结构图图4.1 系统层次方框图4.2 算法设计(活动图或时序图)1.登录功能在主界面(MainView)输入账号和密码,封装成Login对象后发后给业务层(LoginService),在业务层中组合成执行登录操作的SQL语句,再将其传递给数据库访问类(DB),由其完成数据库的查询操作。依据查询结果,如果成功则创建控制类(Controller)对象,显示欢迎信息和对用户信息进行维护的选项;如果失败,则显示提示信息并允许重新输入账号和密码。图4.1 登录功能时序图2.注册功能在主界面输入数字1,表示进行注册操作。依次输入账户、密码和确认密码,当密码和确认密码不一致时,需要重新输入密码和确认密码。之后,账户和密码封装至Login对象中,传递给业务层(LoginService),由业务层组合成添加SQL语句,发送至数据库访问类(DB),完成添加操作。如果添加成功,则返回主界面,输入新注册的账户和密码进行登录;如果添加失败,则重新进行输入。图4.2注册功能时序图3.显示所有成绩单的基本信息功能登录成功及完成对用户信息增、删、改操作后,均需要进行所有成绩单的基本信息的显示,由控制类(Controller)调用视图层(MainView)中的方法,在方法中再利用业务层(UserService)完成对数据库访问类(DB)的访问,获取t_grade表的所有记录。图4.3显示所有成绩单信息时序图4.添加成绩单信息功能在控制类(Controller)输出的选择信息的提示下(1表示执行添加操作),利用简单工厂模式创建视图层(AddView)对象,之后回调接口方法,完成对业务层(UserService)中注册方法的调用,在该方法中向数据库访问类(DB)发送添加SQL语句。如果添加成功,则显示所有成绩单信息(参考显示所有成绩单信息功能的实现);如果添加失败,则提示重新输入。图4.4 成绩单信息添加时序图5.查询用户信息功能在控制类(Controller)输出的选择信息的提示下(4表示执行添加操作),利用简单工厂模式创建视图层(QueryView)对象,之后回调接口方法,在方法中输入要查询的用户名,再对业务层(UserService)中查询方法执行调用,在该方法中向数据库访问类(DB)发送模糊查询SQL语句。如果查询成功,则显示查询到的成绩单信息(参考显示所有成绩单信息功能的实现);如果查询失败,则提示重新输入。图4.5 查询成绩单信息时序图删除成绩单信息和修改成绩单信息的功能设计请参考添加成绩单信息操作。5.数据设计5.1 类图设计根据分析,系统由13个类构成,分别为:l 数据库访问层:DB类l 数据封装类:Login类、Grade类l 业务层:LoginService类、UserService类l 控制层:Controller类l 视图层:AddView类、DeleteView类、ModifyView类、QueryView类、MainView类、Operation类l 其它:Test类系统中各类之间关系如下图所示:图5.1 系统类图5.2 数据表设计根据概要设计中Login类图和Grade类图可知,系统需要两张表t_login和t_grade,其中,t_login表用于存储登录信息,t_grade表用于存储成绩单的基本信息,两张表之间没有关联关系,具体结构如下所示:表5-1 t_login表序号字段名类型长度备注1idint4主键2accountchar20唯一性、不为空3passwordchar20不为空表5-2 t_grade表序号字段名类型长度备注1idint4主键2namechar20不为空3mathfloat不为空4Chinesefloat不为空5Englishfloat不为空6timedate默认创建时间6.运行结果注册:图6.1录:图6.2添加:图6.3删除:图6.4ID查找:图6.5姓名查找:图6.67.关键代码(DB.java)package cn.edu.ccut.util;import java.sql.*;public class DB private Connection con; private PreparedStatement pre; private ResultSet rs; private static DB db; static try Class.forName("com.mysql.jdbc.Driver"); catch (ClassNotFoundException e) e.printStackTrace(); private DB() public static DB getInstance() if(db = null) db = new DB(); return db; private void buildConnection() try con = DriverManager.getConnection("jdbc:mysql:/localhost:3306/4711?useSSL=false", "root", "kanyuhang"); catch (SQLException e) e.printStackTrace(); public ResultSet executeQueryByParam(String sql,Object. o) this.buildConnection(); try pre = con.prepareStatement(sql); for (int i = 0; i < o.length; i+) pre.setObject(i+1,oi); rs = pre.executeQuery(); catch (SQLException e) e.printStackTrace(); return rs; public ResultSet executeQueryNoParam(String sql) this.buildConnection(); try pre = con.prepareStatement(sql); rs = pre.executeQuery(); catch (SQLException e) e.printStackTrace(); return rs; public int executeUpdate(String sql,Object. o) this.buildConnection(); try pre = con.prepareStatement(sql); for (int i = 0; i < o.length; i+) pre.setObject(i+1,oi); int count = pre.executeUpdate(); return count; catch (SQLException e) e.printStackTrace(); return 0; public void close() try if (rs != null) rs.close(); pre.close(); con.close(); catch (SQLException e) e.printStackTrace(); (controller.java)package cn.edu.ccut.controller;import cn.edu.ccut.service.GradeService;import cn.edu.ccut.view.*;import java.util.InputMismatchException;import java.util.Scanner;public class Controller public void controller() throws InputMismatchException Scanner scan = new Scanner(System.in);while (true) MainView.showMain();System.out.println("please select your operation:");System.out.println("1.insert 2.delete 3.modify 4.query 5.exit");int i = scan.nextInt(); GradeService service = GradeService.getInstance(); Operation o = null;boolean flag = true;switch (i) case 1: o = new AddView();break;case 2: o = new DeleteView();break;case 3: o = new ModifyView();break;case 4: o = new QueryView();break;case 5:System.out.println("Bye");return;default: /scan.close();System.out.println("input error,please input 15!");flag = false; if(flag)o.operation(service); (grade.java)package cn.edu.ccut.po;import java.sql.Date;public class Grade private int id;private String name;private float math;private float Chinese;private float English;private Date time;public int getId() return id; public void setId(int id) this.id = id; public String getName() return name; public void setName(String name) this.name = name; public float getMath() return math; public void setMath(float math) this.math = math; public float getChinese() return Chinese; public void setChinese(float Chinese) this.Chinese = Chinese; public float getEnglish() return English; public void setEnglish(float English) this.English = English; public Date getTime() return time; public void setTime(Date time) this.time = time; (login.java)package cn.edu.ccut.po;public class Login private String username; private String password; public String getUsername() return username; public void setUsername(String username) this.username = username; public String getPassword() return password; public void setPassword(String password) this.password = password; (gradeServers.java)package cn.edu.ccut.service;import cn.edu.ccut.po.Grade;import cn.edu.ccut.util.DB;import javax.xml.transform.Result;import java.sql.Date;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;SuppressWarnings("unused")public class GradeService private DB db;private static GradeService service;private GradeService()db = DB.getInstance(); public static GradeService getInstance()if(service = null)service = new GradeService(); return service; public List<Grade> getAllGrades() String sql = "select * from t_grade" ResultSet rs = db.executeQueryNoParam(sql); List<Grade> grades = null;try grades = this.getList(rs); catch (SQLException e) e.printStackTrace();finally db.close(); return grades; public List<Grade> queryGradeByName(String name) String sql = "select * from t_grade where name like ?" ResultSet rs = db.executeQueryByParam(sql,"%"+name+"%"); List<Grade> grades=null;try grades = this.getList(rs); catch (SQLException e) e.printStackTrace();finally db.close(); return grades; private List<Grade> getList(ResultSet rs) throws SQLException List<Grade> grades = new ArrayList<Grade>(); Grade grade = null;while(rs.next()grade = new Grade();grade.setId(rs.getInt(1);grade.setName(rs.getString(2);grade.setMath(rs.getFloat(3);grade.setChinese(rs.getFloat(4);grade.setEnglish(rs.getFloat(5);grade.setTime(rs.getDate(6);grades.add(grade); return grades; public boolean insertOneGrade(String name,float math,float Chinese,float English,Date time) String sql = "insert into t_grade(name,math,Chinese,English,time) values(?,?,?,?,?)"int count = db.executeUpdate(sql,name,math,Chinese,English,time);db.close();if(count>0)return true;elsereturn false; public boolean deleteGradeById(int id) String sql = "delete from t_grade where id = ?"int count = db.executeUpdate(sql,id);db.close();if(count > 0)return true;elsereturn false; public boolean updateGrade(String name,float math,float Chinese,float English,Date time,int id) String sql = "update t_grade set name = ?,math=?,Chinese=?,English=?,time=?, where id = ?"int count = db.executeUpdate(sql,name,math,Chinese,English,time,id);db.close();if(count > 0)return true;else return false; public Grade getGradeById(int id) String sql = "select * from t_grade where id = ?" ResultSet rs = db.executeQueryByParam(sql,id);try if(rs.next()Grade grade = new Grade(); grade.setId(id);grade.setName(rs.getString(2);grade.setMath(rs.getFloat(0);grade.setChinese(rs.getFloat(0);grade.setEnglish(rs.getFloat(0);grade.setTime(rs.getDate(4);return grade; catch (SQLException e) e.printStackTrace();finally db.close(); return null; (loginService.java)package cn.edu.ccut.service;import cn.edu.ccut.po.Login;import cn.edu.ccut.util.DB;import java.sql.ResultSet;import java.sql.SQLException;public class LoginService private DB db; private static LoginService service; private LoginService() db = DB.getInstance(); public static LoginService getInstatnce() if (service = null) service = new LoginService(); return service; public boolean login(Login lo) String sql = "select * from t_login where username = ? and password = ?" ResultSet rs = db.executeQueryByParam(sql, lo.getUsername(),lo.getPassword(); try if (rs.next() return true; catch (SQLException e) e.printStackTrace(); finally db.close(); return false; public boolean register(Login lo) String sql = "insert into t_login(username,password) values(?,?)" int count = db.executeUpdate(sql, lo.getUsername(),lo.getPassword(); db.close(); if (count > 0) return true; else return false; (AddView.java)package cn.edu.ccut.view;import cn.edu.ccut.service.GradeService;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.InputMismatchException;import java.util.Scanner;public class AddView implements Operation /SuppressWarnings("resource")Overridepublic void operation(GradeService service) throws InputMismatchException Scanner scan = new Scanner(System.in);while(true) System.out.println("please input name、math、Chinese、English、time to ADD,if return input 0:"); String name = scan.next(); if("0".equals(name) break; float math0 = scan.nextFloat(); float Chinese0 = scan.nextFloat(); float English0 = scan.nextFloat(); String time0 = scan.next(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date time = new Date();try time = format.parse(time0); catch (ParseException e) e.printStackTrace(); boolean flag = service.insertOneGrade(name, math0 ,Chinese0,English0, new java.sql.Date(time.getTime();if(flag)System.out.println("add success"); /scan.close();return;elseSystem.out.println("add failure,try again"); (DeleteView.java)package cn.edu.ccut.view;import cn.edu.ccut.service.GradeService;import java.util.InputMismatchException;import java.util.Scanner;public class DeleteView implements Operation /SuppressWarnings("resource")Overridepublic void operation(GradeService service) throws InputMismatchException Scanner scan = new Scanner(System.in);while(true)System.out.println("please input grade'id to DELETE,if return input 0:");int id = scan.nextInt();if(id = 0)break; boolean flag = service.deleteGradeById(id);if(flag)System.out.println("delete success"); /scan.close();return;elseSystem.out.println("delete failure"); (MainView.java)package cn.edu.ccut.view;import cn.edu.ccut.controller.Controller;import cn.