个人详细记账簿管理系统.docx

上传人:b****6 文档编号:4135306 上传时间:2022-11-28 格式:DOCX 页数:40 大小:447.20KB
下载 相关 举报
个人详细记账簿管理系统.docx_第1页
第1页 / 共40页
个人详细记账簿管理系统.docx_第2页
第2页 / 共40页
个人详细记账簿管理系统.docx_第3页
第3页 / 共40页
个人详细记账簿管理系统.docx_第4页
第4页 / 共40页
个人详细记账簿管理系统.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

个人详细记账簿管理系统.docx

《个人详细记账簿管理系统.docx》由会员分享,可在线阅读,更多相关《个人详细记账簿管理系统.docx(40页珍藏版)》请在冰豆网上搜索。

个人详细记账簿管理系统.docx

个人详细记账簿管理系统

代码行数

756

项目名称

个人记账簿管理系统

1.实训目的

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

2.实训内容

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

3.需求分析

3.1需求描述

3.1.1项目来源及背景

个人记账簿是每个人在生活中都会用到的APP,具有广泛的适用性和应用价值,也具备较易进行分析和设计的特点。

3.1.2项目需求

主要功能

登录:

输入账号和密码,完成登录操作,进入主界面,显示个人记账簿管理系统中所有的账单基本信息(主键、名称、消费时间、花费总额等)以及可进行的相关操作的选项。

退出:

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

注册:

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

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

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

添加账单:

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

删除账单:

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

修改账单:

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

查询账单:

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

扩展功能

可对账单信息进行导出操作,存储至一个文本文档中。

3.2用例描述

 

图3.1系统用例图

4.功能设计

4.1系统层次方框图

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

●视图层:

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

●控制层:

访问流程控制

●业务层:

完成具体功能的实现

●数据库访问层:

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

具体结构如下图所示:

 

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

1.登录功能

图4.1登录功能时序图

图4.2登录功能活动图

2.注册功能

图4.3注册功能时序图

图4.4注册功能活动图

3.显示所有用户信息功能

图4.5显示所有用户信息时序图

图4.6显示所有用户信息活动图

4.添加用户信息功能

图4.7用户信息添加时序图

图4.8用户信息添加活动图

5.查询用户信息功能

图4.9查询用户信息时序图

图4.10查询用户信息活动图

5.数据设计

5.1类图设计

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

●数据库访问层:

DB类

●数据封装类:

Login类、User类

●业务层:

LoginService类、UserService类

●控制层:

Controller类

●视图层:

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

Operation类

●其它:

Test类

系统中各类之间关系如下图所示:

图5.1系统类图

1.数据库访问层

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

图5.2数据库访问层类图

2.数据封装类

Login类和User类分别用于登录、注册操作时的数据封装和用户信息管理时的数据封装,具体内容如下图所示:

图5.3数据封装类类图

 

3.业务层

LoginService类进行登录、注册等对Login类的访问操作,UserService类进行用户信息管理的操作,两者均采用单态模式创建对象,具体内容如下图所示:

图5.4业务层类图

4.控制层

Controller类用于进行系统的流程控制,具体内容如下所示:

图5.6控制层类图

5.视图层

MainView类用于完成登录、注册等提示信息的显示和系统主界面的显示,具体内容如下所示:

图5.7MainView类图

Operation接口是增、删、改、查等操作的抽象,AddView类、DeleteView类、ModifyView类和QueryView类均使用Operation接口,分别完成增、删、改、查等操作,利用简单工厂模式与Controller类建立关系,具体内容如下所示:

图5.8视图层类图

6.其它

Test类是程序的主类,用于启动系统,具体内容如下:

图5.9Test类图

5.2数据表设计

序号

字段名

类型

长度

备注

1

id

int

4

主键、自增

2

uername

varchar

20

唯一性、不为空

3

password

varchar

20

不为空

t_login表

序号

字段名

类型

长度

备注

1

id

int

11

主键、自增

2

name

varchar

50

不为空

3

time

date

默认

不为空

4

total

double

默认

不为空

t_user表

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.7退出

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

图7.8退出显示

7.关键代码

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

packagex;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;

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(){

try{

con=DriverManager.getConnection("jdbc:

mysql:

//localhost:

3306/user","root","123");

}catch(SQLExceptione){

e.printStackTrace();

}

}

publicResultSetexecuteQueryByParam(Stringsql,Object...o){

this.buildConnection();

try{

pre=con.prepareStatement(sql);

for(inti=0;i

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

}

rs=pre.executeQuery();

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

publicResultSetexecuteQueryNoParam(Stringsql){

this.buildConnection();;

try{

pre=con.prepareStatement(sql);

rs=pre.executeQuery();

}catch(SQLExceptione){

e.printStackTrace();

}

returnrs;

}

publicintexecuteUpdate(Stringsql,Object...o){

this.buildConnection();

try{

pre=con.prepareStatement(sql);

for(inti=0;i

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

}

intcount=pre.executeUpdate();

returncount;

}catch(SQLExceptione){

e.printStackTrace();

return0;

}

}

publicvoidclose(){

try{

if(rs!

=null){

rs.close();

}

pre.close();

con.close();

}catch(SQLExceptione){

e.printStackTrace();

}

}

7.2数据分装类

1.Login.java

packageFengZhuang;

publicclassLogin{

privateStringusername;

privateStringpassword;

publicStringgetUsername(){

returnusername;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicStringgetPassword(){

returnpassword;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

}

2.User.java

packageFengZhuang;

importjava.util.Date;

publicclassUser{

privateintid;

privateStringname;

privateDatetime;

privatedoubletotal;

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicDategetTime(){

returntime;

}

publicvoidsetTime(Datetime){

this.time=time;

}

publicdoublegetTotal(){

returntotal;

}

publicvoidsetTotal(doubletotal){

this.total=total;

}

}

7.3业务层

1、LoginService.java

packageService;

importFengZhuang.Login;

importx.DB;

importjava.sql.ResultSet;

importjava.sql.SQLException;

publicclassLoginService{

privateDBdb;

privatestaticLoginServiceservice;

privateLoginService(){

db=DB.getInstance();

}

publicstaticLoginServicegetInstatnce(){

if(service==null){

service=newLoginService();

}

returnservice;

}

publicbooleanlogin(Loginlo){

Stringsql="select*fromt_loginwhereusername=?

andpassword=?

";

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

try{

if(rs.next()){

returntrue;

}

}catch(SQLExceptione){

e.printStackTrace();

}finally{

db.close();

}

returnfalse;

}

publicbooleanregister(Loginlo){

Stringsql="insertintot_login(username,password)values(?

?

)";

intcount=db.executeUpdate(sql,lo.getUsername(),lo.getPassword());

db.close();

if(count>0){

returntrue;

}else{

returnfalse;

}

}

}

2、UserService.java

packageService;

 

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.util.ArrayList;

importjava.util.Date;

importjava.util.List;

importFengZhuang.User;

importx.DB;

publicclassUserService{

privateDBdb;

privatestaticUserServiceservice;

privateUserService(){

db=DB.getInstance();

}

publicstaticUserServicegetInstance(){

if(service==null){

service=newUserService();

}

returnservice;

}

publicListgetAllUsers(){

Stringsql="select*fromt_user";

ResultSetrs=db.executeQueryNoParam(sql);

Listusers=null;

try{

users=this.getList(rs);

}catch(SQLExceptione){

e.printStackTrace();

}finally{

db.close();

}

returnusers;

}

publicListqueryUsersByName(Stringname){

Stringsql="select*fromt_userwherenamelike?

";

ResultSetrs=db.executeQueryByParam(sql,"%"+name+"%");

Listusers=null;

try{

users=this.getList(rs);

}catch(SQLExceptione){

e.printStackTrace();

}finally{

db.close();

}

returnusers;

}

privateListgetList(ResultSetrs)throwsSQLException{

Listusers=newArrayList();

Useruser;

while(rs.next()){

user=newUser();

user.setId(rs.getInt

(1));

user.setName(rs.getString

(2));

user.setTime(rs.getDate(3));

user.setTotal(rs.getDouble(4));

users.add(user);

}

returnusers;

}

publicbooleaninsertOneUser(Stringname,Datetime,doubletotal){

Stringsql="insertintot_user(name,time,total)values(?

?

?

)";

intcount=db.executeUpdate(sql,name,time,total);

db.close();

if(count>0){

returntrue;

}else{

returnfalse;

}

}

publicbooleandeleteUserById(intid){

Stringsql="deletefromt_userwhereid=?

";

intcount=db.executeUpdate(sql,id);

db.close();

if(count>0){

returntrue;

}else{

returnfalse;

}

}

publicbooleanupdateUser(intid,Stringname,Datetime,doubletotal){

Stringsql="updatet_usersetname=?

sex=?

birthday=?

whereid=?

";

intcount=db.executeUpdate(sql,name,time,total,id);

db.close();

if(count>0){

returntrue;

}else{

returnfalse;

}

}

publicUsergetUserById(intid){

Stringsql="select*fromt_userwhereid=?

";

ResultSetrs=db.executeQueryByParam(sql,id);

try{

if(rs.next()){

Useruser=newUser();

user.setId(id);

user.setName(rs.getString

(2));

user.setTime(rs.getDate(3));

user.setTotal(rs.getDouble(4));

returnuser;

}

}catch(SQLExceptione){

e.printStackTrace();

}finally{

db.close();

}

returnnull;

}

}

7.4视图层

1.operation.java

packageview;

importService.UserService;

importjava.util.InputMismatchException;

publicinterfaceoperation{

voidoperation(UserServiceservice)throwsInputMismatchException;

}

2.AddView.java

packageview;

importService.UserS

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1