个人成绩单管理系统Word格式文档下载.docx
- 文档编号:19382143
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:35
- 大小:650.04KB
个人成绩单管理系统Word格式文档下载.docx
《个人成绩单管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《个人成绩单管理系统Word格式文档下载.docx(35页珍藏版)》请在冰豆网上搜索。
4.1系统结构
为保证系统具有较好的可维护性和可扩展性,对系统进行分层设计,共分四层:
●视图层:
接收个人成绩输入信息,显示界面信息和成绩信息
●控制层:
访问流程控制
●业务层:
完成具体功能的实现
●数据库访问层:
完成对数据库访问操作的封装
具体结构如下图所示:
图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个类构成,分别为:
DB类
●数据封装类:
Login类、Grade类
LoginService类、UserService类
Controller类
AddView类、DeleteView类、ModifyView类、QueryView类、MainView类、
Operation类
●其它:
Test类
系统中各类之间关系如下图所示:
图5.1系统类图
5.2数据表设计
根据概要设计中Login类图和Grade类图可知,系统需要两张表t_login和t_grade,其中,t_login表用于存储登录信息,t_grade表用于存储成绩单的基本信息,两张表之间没有关联关系,具体结构如下所示:
表5-1t_login表
序号
字段名
类型
长度
备注
1
id
int
4
主键
2
account
char
20
唯一性、不为空
3
password
不为空
表5-2t_grade表
name
math
float
Chinese
5
English
6
time
date
默认
创建时间
6.运行结果
注册:
图6.1
录:
图6.2
添加:
图6.3
删除:
图6.4
ID查找:
图6.5
姓名查找:
图6.6
7.关键代码
(DB.java)
packagecn.edu.ccut.util;
importjava.sql.*;
publicclassDB{
privateConnectioncon;
privatePreparedStatementpre;
privateResultSetrs;
privatestaticDBdb;
static{
try{
Class.forName("
com.mysql.jdbc.Driver"
);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
privateDB(){}
publicstaticDBgetInstance(){
if(db==null){
db=newDB();
returndb;
privatevoidbuildConnection(){
con=DriverManager.getConnection("
jdbc:
mysql:
//localhost:
3306/4711?
useSSL=false"
"
root"
kanyuhang"
}catch(SQLExceptione){
publicResultSetexecuteQueryByParam(Stringsql,Object...o){
this.buildConnection();
pre=con.prepareStatement(sql);
for(inti=0;
i<
o.length;
i++){
pre.setObject(i+1,o[i]);
rs=pre.executeQuery();
returnrs;
publicResultSetexecuteQueryNoParam(Stringsql){
;
publicintexecuteUpdate(Stringsql,Object...o){
intcount=pre.executeUpdate();
returncount;
return0;
publicvoidclose(){
if(rs!
=null){
rs.close();
pre.close();
con.close();
}
(controller.java)
packagecn.edu.ccut.controller;
importcn.edu.ccut.service.GradeService;
importcn.edu.ccut.view.*;
importjava.util.InputMismatchException;
importjava.util.Scanner;
publicclassController{
publicvoidcontroller()throwsInputMismatchException{
Scannerscan=newScanner(System.in);
while(true){
MainView.showMain();
System.out.println("
pleaseselectyouroperation:
"
1.insert2.delete3.modify4.query5.exit"
inti=scan.nextInt();
GradeServiceservice=GradeService.getInstance();
Operationo=null;
booleanflag=true;
switch(i){
case1:
o=newAddView();
break;
case2:
o=newDeleteView();
case3:
o=newModifyView();
case4:
o=newQueryView();
case5:
Bye~~~~~~~~~"
return;
default:
//scan.close();
inputerror,pleaseinput1~5!
flag=false;
if(flag){
o.operation(service);
(grade.java)
packagecn.edu.ccut.po;
importjava.sql.Date;
publicclassGrade{
privateintid;
privateStringname;
privatefloatmath;
privatefloatChinese;
privatefloatEnglish;
privateDatetime;
publicintgetId(){
returnid;
publicvoidsetId(intid){
this.id=id;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
publicfloatgetMath(){
returnmath;
publicvoidsetMath(floatmath){
this.math=math;
publicfloatgetChinese(){
returnChinese;
publicvoidsetChinese(floatChinese){
this.Chinese=Chinese;
publicfloatgetEnglish(){
returnEnglish;
publicvoidsetEnglish(floatEnglish){
this.English=English;
publicDategetTime(){
returntime;
publicvoidsetTime(Datetime){
this.time=time;
(login.java)
publicclassLogin{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
publicvoidsetUsername(Stringusername){
this.username=username;
publicStringgetPassword(){
returnpassword;
publicvoidsetPassword(Stringpassword){
this.password=password;
(gradeServers.java)
packagecn.edu.ccut.service;
importcn.edu.ccut.po.Grade;
importcn.edu.ccut.util.DB;
importjavax.xml.transform.Result;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
importjava.util.List;
@SuppressWarnings("
unused"
)
publicclassGradeService{
privateDBdb;
privatestaticGradeServiceservice;
privateGradeService(){
db=DB.getInstance();
publicstaticGradeServicegetInstance(){
if(service==null){
service=newGradeService();
returnservice;
publicList<
Grade>
getAllGrades(){
Stringsql="
select*fromt_grade"
ResultSetrs=db.executeQueryNoParam(sql);
List<
grades=null;
try{
grades=this.getList(rs);
e.printStackTrace();
}finally{
db.close();
returngrades;
queryGradeByName(Stringname){
select*fromt_gradewherenamelike"
ResultSetrs=db.executeQueryByParam(sql,"
%"
+name+"
grades=null;
privateList<
getList(ResultSetrs)throwsSQLException{
grades=newArrayList<
();
Gradegrade=null;
while(rs.next()){
grade=newGrade();
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);
publicbooleaninsertOneGrade(Stringname,floatmath,floatChinese,floatEnglish,Datetime){
insertintot_grade(name,math,Chinese,English,time)values(,,,,)"
intcount=db.executeUpdate(sql,name,math,Chinese,English,time);
if(count>
0){
returntrue;
}else{
returnfalse;
publicbooleandeleteGradeById(intid){
deletefromt_gradewhereid="
intcount=db.executeUpdate(sql,id);
if(count>
0){
publicbooleanupdateGrade(Stringname,floatmath,floatChinese,floatEnglish,Datetime,intid){
updatet_gradesetname=,math=,Chinese=,English=,time=,whereid="
intcount=db.executeUpdate(sql,name,math,Chinese,English,time,id);
}else{
publicGradegetGradeById(intid){
select*fromt_gradewhereid="
ResultSetrs=db.executeQueryByParam(sql,id);
if(rs.next()){
Gradegrade=newGrade();
grade.setId(id);
grade.setMath(rs.getFloat(0));
grade.setChinese(rs.getFloat(0));
grade.setEnglish(rs.getFloat(0));
grade.setTime(rs.getDate(4));
returngrade;
e.printStackT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 成绩单 管理 系统