个人成绩单管理.docx 您所在的位置:网站首页 高一期末物理试卷及答案 个人成绩单管理.docx

个人成绩单管理.docx

2023-03-22 23:57| 来源: 网络整理| 查看: 265

个人成绩单管理.docx

《个人成绩单管理.docx》由会员分享,可在线阅读,更多相关《个人成绩单管理.docx(44页珍藏版)》请在冰豆网上搜索。

个人成绩单管理.docx

个人成绩单管理

代码行数

869

项目名称

个人成绩单管理

1.实训目的

面向对象程序设计课程设计是计算机科学与技术专业培养计划中的重要实践教学环节,旨在通过一个管理信息系统的开发,加深学生对Java语言的理解和应用,尤其是对面向对象编程思想、Java编码规范、JDBC访问数据库的理解,巩固软件工程课程的相关知识,了解软件开发的基本流程,进一步提高学生的学习能力、理解能力、表达能力及沟通能力。

2.实训内容

使用Eclipse为开发工具,使用RationalRose为建模工具,使用MySQL为数据库服务器,基于JDBC技术,分析、设计并实现一个管理信息系统。

3.需求分析

3.1需求描述

3.1.1项目来源及背景

个人成绩单管理是学生在每学期期末记录学期各科成绩的主要应用,具有较强的实用性,贴近实际,便于完成系统的分析与设计。

3.1.2主要功能

登录:

输入账号和密码,完成登录操作,进入主界面,显示成绩单管理系统中所有的成绩单的基本信息(主键、名称、创建时间、平均分等)以及可进行的相关操作的选项。

退出:

登录后可进行退出操作,结束整个程序。

注册:

输入账户、密码和确认密码完成新用户的注册。

按创建时间显示所有的成绩单:

登录成功后在主界面中以表格形式按创建时间升序显示所有成绩单的基本信息(主键、名称、创建时间、平均分等)。

添加成绩单:

输入一份成绩单的各项基本信息(名称、创建时间等),再输入这份成绩单中各科的成绩(科目名称、类型、成绩等),完成成绩单的添加操作,添加成功后以表格形式按创建时间升序显示所有成绩单的基本信息。

删除成绩单:

根据显示的成绩单基本信息,输入某个成绩单的主键,完成成绩单的删除操作,删除成功后以表格形式按创建时间升序显示剩余成绩单的基本信息。

修改成绩单:

根据显示的成绩单基本信息,输入某个成绩单的主键,显示成绩单的基本信息和成绩单中的各科成绩信息,根据提示选项,选择修改成绩单基本信息或某科成绩或删除某科成绩,输入相应字段值或某科成绩的主键,完成成绩单信息的修改,修改成功后显示该成绩单修改后的详细信息。

查询成绩单:

利用主键查询,获得一份成绩单的详细信息。

3.2用例描述

 

4.功能设计

4.1系统层次方框图

为保证系统具有较好的可维护性和可扩展性,对系统进行分层设计,共分四层:

●视图层:

接收用户输入信息,显示界面信息和用户信息

●控制层:

访问流程控制

●业务层:

完成具体功能的实现

●数据库访问层:

完成对数据库访问操作的封装

 

具体结构如下图所示:

 

4.2算法设计(活动图或时序图)

4.2.1.登录功能

在主界面(MainView)输入账号和密码,封装成Login对象后发后给业务层(LoginService),在业务层中组合成执行登录操作的SQL语句,再将其传递给数据库访问类(DB),由其完成数据库的查询操作。

依据查询结果,如果成功则创建控制类(Controller)对象,显示欢迎信息和对用户信息进行维护的选项;如果失败,则显示提示信息并允许重新输入账号和密码。

图4.1登录功能时序图

图4.2登录功能活动图

4.2.2.注册功能

在主界面输入数字1,表示进行注册操作。

依次输入账户、密码和确认密码,当密码和确认密码不一致时,需要重新输入密码和确认密码。

之后,账户和密码封装至Login对象中,传递给业务层(LoginService),由业务层组合成添加SQL语句,发送至数据库访问类(DB),完成添加操作。

如果添加成功,则返回主界面,输入新注册的账户和密码进行登录;如果添加失败,则重新进行输入。

图4.3注册功能时序图

图4.4注册功能活动图

4.2.3.显示所有成绩单信息功能

登录成功及完成对用户信息增、删、改操作后,均需要进行所有用户信息的显示,由控制类(Controller)调用视图层(MainView)中的方法,在方法中再利用业务层(UserService)完成对数据库访问类(DB)的访问,获取t_user表的所有记录。

图4.5显示所有成绩单信息时序图

图4.6显示所有成绩单信息活动图

4.2.4.添加成绩单功能

在控制类(Controller)输出的选择信息的提示下(1表示执行添加操作),利用简单工厂模式创建视图层(AddView)对象,之后回调接口方法,完成对业务层(UserService)中注册方法的调用,在该方法中向数据库访问类(DB)发送添加SQL语句。

如果添加成功,则显示所有用户信息(参考显示所有用户信息功能的实现);如果添加失败,则提示重新输入。

图4.7添加成绩单时序图

图4.8用户信息添加活动图

4.2.5.查询成绩单信息功能

在控制类(Controller)输出的选择信息的提示下(4表示执行添加操作),利用简单工厂模式创建视图层(QueryView)对象,之后回调接口方法,在方法中输入要查询的用户名,再对业务层(UserService)中查询方法执行调用,在该方法中向数据库访问类(DB)发送模糊查询SQL语句。

如果查询成功,则显示查询到的用户信息(参考显示所有用户信息功能的实现);如果查询失败,则提示重新输入。

图4.9查询用户信息时序图

图4.10查询用户信息活动图

5.数据设计

DB类用于封装JDBC的操作,完成对数据库的直接访问,采用单态模式创建对象,具体内容如下所示:

图5.1数据库访问层类图

5.1类图设计

根据分析,系统由15个类构成,分别为:

●数据库访问层:

DB类

●Dao组件:

UserDAO类、StudentDAO类

●数据封装类:

Login类、Student类

●业务层:

LoginService类、StudentService类

●控制层:

StudentController类

●视图层:

AddView类、DeleteView类、ModifyView类、QueryView类、MainView类、Operation类

●其它:

Test类

 

系统中各类之间关系如下图

 

5.2数据表设计

根据算法设计中Login类图和Student类图可知,系统需要两张表user和student,其中,user表用于存储登录信息,student表用于存储用户基本信息,两张表之间没有关联关系,具体结构如下所示:

表5.2user表

序号

字段名

类型

长度

备注

1

id

int

4

主键

2

username

char

20

唯一性、不为空

3

password

char

20

不为空

 

表5.3student表

序号

字段名

类型

长度

备注

1

id

int

4

主键

2

name

char

20

不为空

3

chinese

double

20

不为空

4

math

double

20

不为空

5

english

double

20

不为空

6

avger

double

20

不为空

7

createtime

data

6.运行结果

6.1.注册

程序运行后,首先显示系统的登录界面,在其中可输入账号和密码进行登录操作,或输入“1”进行账户注册。

注册成功后需要重新输入账号和密码进行登录。

图6.1注册界面

 

如果输入的密码和确认密码不一致,则需要重新输入。

图6.2密码和确认密码不一致

6.2.登录

用户可在系统首界面直接输入账号和密码进行登录,或在注册成功后再进行登录。

登录成功后显示所有成绩单信息和系统主控制界面。

图6.3登录成功后的显示

6.3.添加

输入“1”,选择添加用户信息操作。

输入“0”表示返回上一级菜单。

依次输入用户的姓名、性别和生日,完成添加。

添加成功后,显示成功的提示信息,并显示所有用户信息和系统主控制界面。

如果添加失败,则显示失败的提示信息,并提示重新输入。

图6.4添加成绩单界面

6.4.删除

输入“2”,选择删除成绩单操作。

如果输入“0”表示返回上一级菜单。

输入要删除的用户的id(主键)值,完成删除。

删除成功后,显示成功的提示信息,并显示所有成绩单信息和系统主控制界面。

如果删除失败,则显示删除失败的提示信息,并提示重新输入。

图6.5删除成绩单界面

6.5.修改

输入“3”,选择修改成绩单操作。

如果输入“0”表示返回上一级菜单。

输入要修改的用户的id(主键)值,显示该用户的信息。

再依次输入要修改的姓名、语文成绩、数学成绩、英语成绩和创建日期,执行修改操作。

修改成功后,显示成功的提示信息,并显示所有成绩单信息和系统主控制界面。

如果修改失败,则显示删除失败的提示信息,并提示重新输入。

图6.6修改成绩单界面

6.6.查询

输入“4”,选择查询成绩单操作。

如果输入“0”表示返回上一级菜单。

输入要查询的用户名,显示以改名称作为关键字的所有成绩单的信息,之后显示所有成绩单信息和系统主控制界面。

图6.7查询成绩单界面

如果没有查询到相应信息,则显示没有数据的提示,并可进行重新输入。

图6.8没有查询到成绩单的界面

6.6.退出

输入“5”,表示退出系统,结束整个程序。

图6.9退出系统界面

 

7.关键代码

7.1数据库访问类(DB.java)

packageccut.beans.db;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

/**

*工具bean连接数据库驱动串数据库的地址数据库的登录名、密码更新、查询的实现

*

*/

publicclassDB{

privateConnectionconn;

privatePreparedStatementprst;

privateResultSetrs;

privatestaticDBdb;

static{

try{

Class.forName("com.mysql.jdbc.Driver");

}catch(ClassNotFoundExceptione){

e.printStackTrace();

}

}

privateDB(){

}

publicstaticDBgetConnection(){

if(db==null){

db=newDB();

}

returndb;

}

privatevoidbuildConnection(){

try{

conn=DriverManager.getConnection("jdbc:

mysql:

//localhost:

3306/demo","root","");

}catch(SQLExceptione){

e.printStackTrace();

}

}

publicResultSetexecuteQueryByParam(Stringsql,Object...o){

this.buildConnection();

try{

prst=conn.prepareStatement(sql);

for(inti=0;i

prst.setObject(i+1,o[i]);

}

rs=prst.executeQuery();

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

publicResultSetexecuteQueryNoParam(Stringsql){

this.buildConnection();

try{

prst=conn.prepareStatement(sql);

rs=prst.executeQuery();

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

publicintexecuteUpdate(Stringsql,Object...o){

this.buildConnection();

try{

prst=conn.prepareStatement(sql);

for(inti=0;i

prst.setObject(i+1,o[i]);

}

intcount=prst.executeUpdate();

returncount;

}catch(SQLExceptione){

e.printStackTrace();

return0;

}

}

publicstaticvoidclose(Connectionconn,PreparedStatementprst,ResultSetrs)throwsSQLException{

if(rs!

=null){

try{

rs.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

if(prst!

=null){

try{

prst.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

if(conn!

=null){

try{

conn.close();

}catch(SQLExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

}

7.2数据封装类

1.User.java

packageccut.beans.po;

publicclassUser{

privateintid;

privateStringusername,password;

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetUsername(){

returnusername;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicStringgetPassword(){

returnpassword;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

publicUser(intid,Stringusername,Stringpassword){

super();

this.id=id;

this.username=username;

this.password=password;

}

publicUser(){

super();

//TODOAuto-generatedconstructorstub

}

@Override

publicStringtoString(){

return"User[id="+id+",username="+username+",password="+password+"]";

}

}

2.Student.java

packageccut.beans.po;

importjava.util.Date;

publicclassStudent{

privateIntegerid;//id

privateStringname;//学生姓名

privateDoublechinese;//语文成绩

privateDoublemath;//数学成绩

privateDoubleenglish;//英语成绩

privateDoubleavger;//平均成绩

privateDatecreatetime;//创建时间

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicDoublegetChinese(){

returnchinese;

}

publicvoidsetChinese(Doublechinese){

this.chinese=chinese;

}

publicDoublegetMath(){

returnmath;

}

publicvoidsetMath(Doublemath){

this.math=math;

}

publicDoublegetEnglish(){

returnenglish;

}

publicvoidsetEnglish(Doubleenglish){

this.english=english;

}

publicDoublegetAvger(){

returnavger;

}

publicvoidsetAvger(Doubleavger){

this.avger=(chinese+math+english)/3;

}

publicDategetCreatetime(){

returncreatetime;

}

publicvoidsetCreatetime(Datecreatetime){

this.createtime=createtime;

}

publicStudent(Integerid,Stringname,Doublechinese,Doublemath,Doubleenglish,Doubleavger,

Datecreatetime){

super();

this.id=id;

this.name=name;

this.chinese=chinese;

this.math=math;

this.english=english;

this.avger=avger;

this.createtime=createtime;

}

publicStudent(){

super();

}

@Override

publicStringtoString(){

return"Student[id="+id+",name="+name+",chinese="+chinese+",math="+math+",english="

+english+",avger="+avger+",createtime="+createtime+"]";

}

}

7.3业务层

1、LoginService.java

packageccut.beans.services;

importjava.sql.Connection;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importccut.beans.db.DB;

importccut.beans.po.Student;

importccut.beans.po.User;

publicclassLoginService{

privateConnectionconn;

privatePreparedStatementprst;

privateResultSetrs;

privateDBdb;

privatestaticLoginServiceservice;

privateLoginService(){

db=DB.getConnection();

}

publicstaticLoginServicegetConnection(){

if(service==null){

service=newLoginService();

}

returnservice;

}

/**

*登录

*@paramlo

*@return

*@throwsException

*/

publicbooleanlogin(Userlo)throwsException{

Stringsql="select*fromuserwhereusername=?

andpassword=?

";

ResultSetrs=db.executeQueryByParam(sql,lo.getUsername(),lo.getPassword());

try{

if(rs.next()){

returntrue;

}

}catch(SQLExceptione){

e.printStackTrace();

}finally{

DB.close(conn,prst,rs);



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有