1、个人记账簿管理系统代码行数570项目名称个人记账簿管理系统1实训目的面向对象程序设计课程设计是计算机科学与技术专业培养计划中的重要实践教学环节,旨在通过一个管理信息系统的开发,加深学生对Java语言的理解和应用,尤其是对面向对象编程思想、Java编码规范、图形用户接口、JDBC访问数据库的理解,巩固软件工程课程的相关知识,了解软件开发的基本流程,进一步提高学生的学习能力、理解能力、表达能力及沟通能力。2实训内容使用MyEclipse为开发工具,使用Rational Rose为建模工具,使用MySQL为数据库服务器,基于GUI和JDBC技术,分析、设计并实现一个管理信息系统。3.需求分析3.1
2、需求描述登录:输入账号和密码,完成登录操作,进入主界面,显示个人记账簿管理系统中所有的账单基本信息(主键、名称、消费时间、花费总额等)以及可进行的相关操作的选项。退出:登录后可进行退出操作,结束整个程序。注册:输入账户、密码和确认密码完成新用户的注册。显示账单信息:登录成功后在主界面中以表格形式显示所有账单的信息。添加账单:输入一份账单的各项基本信息(名称、消费时间等),再输入这份账单中的各项花销,完成账单的添加操作,添加成功后显示所有账单的基本信息。删除账单:根据显示的账单基本信息,输入某个账单的主键,完成账单的删除操作,删除成功后以表格形式按创建时间升序显示剩余账单的基本信息。修改账单:根
3、据显示的账单基本信息,输入某个账单的主键,显示账单的基本信息和账单中的各项花费,根据提示信息,选择要修改账单基本信息或某项花费或要删除的某项花费,输入相应字段值或要删除的某项花费的主键,完成账单信息的修改,修改成功后显示该账单修改后的详细信息。查询账单:利用主键查询,获得一份账单的详细信息。3.2 用例描述1、用例:添加账单简单描述:用户在数据库上添加账单信息主参与者:user副参与者:数据库前置条件:连接上数据库且有信息更新需要主流: 用户打开MyEclipse JDBC访问数据库 在控制台输入信息 输入回车,完成账单输入后置条件:账单添加成功附加流:数据库添加失败是提醒错误原因并询问否需要
4、重新输入2、用例:删除账单简单描述:用户在数据库上删除账单信息主参与者:user副参与者:数据库前置条件:连接上数据库且有信息需要删除主流: 用户打开MyEclipse JDBC访问数据库 在控制台输入某个账单的主键 输入回车,完成账单删除 显示剩余账单的基本信息后置条件:账单删除成功附加流:数据库删除失败是提醒错误原因并询问否需要重新删除3、用例:修改账单简单描述:用户在数据库上修改账单信息主参与者:user副参与者:数据库前置条件:连接上数据库且有信息需要修改主流: 用户打开MyEclipse JDBC访问数据库 在控制台输入某个账单的主键 根据提示选择修改账单基本信息 输入回车,完成账单
5、修改 显示剩余账单的基本信息后置条件:账单修改成功附加流:数据库修改失败是提醒错误原因并询问否需要重新删除4、用例:查询账单简单描述:用户在数据库上查新账单信息主参与者:user副参与者:数据库前置条件:连接上数据库且有信息需要查询主流: 用户打开MyEclipse JDBC访问数据库 在控制台输入某个账单的主键 输入回车,完成账单修改 获得一份账单的详细信息后置条件:账单查询成功附加流:数据库查询失败是提醒错误原因并询问否需要重新删除4.功能设计4.1 系统层次方框图4.2 算法设计(活动图或时序图)1.登录功能在主界面(MainView)输入账号和密码,封装成Login对象后发后给业务层(
6、LoginService),在业务层中组合成执行登录操作的SQL语句,再将其传递给数据库访问类(DB),由其完成数据库的查询操作。依据查询结果,如果成功则创建控制类(Controller)对象,显示欢迎信息和对账单信息进行维护的选项;如果失败,则显示提示信息并允许重新输入账号和密码。1.1登录功能时序图2.注册功能在主界面输入数字1,表示进行注册操作。依次输入账户、密码和确认密码,当密码和确认密码不一致时,需要重新输入密码和确认密码。之后,账户和密码封装至Login对象中,传递给业务层(LoginService),由业务层组合成添加SQL语句,发送至数据库访问类(DB),完成添加操作。如果添加
7、成功,则返回主界面,输入新注册的账户和密码进行登录;如果添加失败,则重新进行输入。2.1注册功能时序图3.显示所有账单信息功能登录成功及完成对账单信息增、删、改操作后,均需要进行所有账单信息的显示,由控制类(Controller)调用视图层(MainView)中的方法,在方法中再利用业务层(UserService)完成对数据库访问类(DB)的访问,获取t_bill表的所有记录。3.1显示所有账单信息时序图4.添加账单信息功能在控制类(Controller)输出的选择信息的提示下(1表示执行添加操作),利用简单工厂模式创建视图层(AddView)对象,之后回调接口方法,完成对业务层(UserSe
8、rvice)中注册方法的调用,在该方法中向数据库访问类(DB)发送添加SQL语句。如果添加成功,则显示所有账单信息;如果添加失败,则提示重新输入。4.1账单信息添加时序图5.查询账单信息功能在控制类(Controller)输出的选择信息的提示下(4表示执行添加操作),利用简单工厂模式创建视图层(QueryView)对象,之后回调接口方法,在方法中输入要查询的账单名,再对业务层(UserService)中查询方法执行调用,在该方法中向数据库访问类(DB)发送模糊查询SQL语句。如果查询成功,则显示查询到的账单信息;如果查询失败,则提示重新输入。5.1查询用户信息时序图5.数据设计5.1 类图设计
9、1.数据库访问层DB类用于封装JDBC的操作,完成对数据库的直接访问,采用单态模式创建对象,具体内容如下所示:1.1数据库访问层类图2.数据封装类Login类和User类分别用于登录、注册操作时的数据封装和用户信息管理时的数据封装,具体内容如下图所示:2.1数据封装类类图3.业务层LoginService类进行登录、注册等对Login类的访问操作,UserService类进行账单信息管理的操作,两者均采用单态模式创建对象,具体内容如下图所示:3.1业务层类图4.控制层Controller类用于进行系统的流程控制,具体内容如下所示:4.1控制层类图5.视图层MainView类用于完成登录、注册等
10、提示信息的显示和系统主界面的显示,具体内容如下所示:5.1 MainView类图Operation接口是增、删、改、查等操作的抽象,AddView类、DeleteView类、ModifyView类和QueryView类均使用Operation接口,分别完成增、删、改、查等操作,利用简单工厂模式与Controller类建立关系,具体内容如下所示:5.2视图层类图6.其它Test类是程序的主类,用于启动系统,具体内容如下:Test类是程序的主类5.2 数据表设计序号字段名类型长度备注1idint4主键2accountchar20唯一性、不为空3passwordchar20不为空表4-2 t_use
11、r表序号字段名类型长度备注1idint4主键2namechar20不为空3MoneyDouble2不为空4timedate默认不为空6.运行结果登录并显示账单信息添加账单信息删除账单信息修改账单信息查询账单信息7.关键代码DB类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 (ClassNotFoundEx
12、ception 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/user, root, root); catch (SQLException e) e.printStackTrace(); public ResultSet executeQ
13、ueryByParam(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(
14、); 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 0) return true; else return false; public class UserSe
15、rvice private DB db; private static UserService service; private UserService() db = DB.getInstance(); public static UserService getInstance() if (service = null) service = new UserService(); return service; public List getAllUsers() String sql = select * from t_user; ResultSet rs = db.executeQueryNo
16、Param(sql); List users = null; try users = this.getList(rs); catch (SQLException e) e.printStackTrace(); finally db.close(); return users; public List queryUsersByName(String name) String sql = select * from t_user where name like ?; ResultSet rs = db.executeQueryByParam(sql, % + name + %); List use
17、rs = null; try users = this.getList(rs); catch (SQLException e) e.printStackTrace(); finally db.close(); return users; private List getList(ResultSet rs) throws SQLException List users = new ArrayList(); User user; while (rs.next() user = new User(); user.setId(rs.getInt(1); user.setName(rs.getStrin
18、g(2); user.setMoney(rs.getInt(3); user.setTime(rs.getDate(4); users.add(user); return users; public boolean insertOneUser(String name, double money, Date time) String sql = insert into t_user(name,money,time) values(?,?,?); int count = db.executeUpdate(sql, name, money, time); db.close(); if (count
19、0) return true; else return false; public boolean deleteUserById(int id) String sql = delete from t_user where id = ?; int count = db.executeUpdate(sql, id); db.close(); if (count 0) return true; else return false; public boolean updateUser(int id, String name, double money, Date time) String sql =
20、update t_user set name = ?,money=?,time=? where id = ?; int count = db.executeUpdate(sql, name, money, time, id); db.close(); if (count 0) return true; else return false; public User getUserById(int id) String sql = select * from t_user where id = ?; ResultSet rs = db.executeQueryByParam(sql, id); t
21、ry if (rs.next() User user = new User(); user.setId(id); user.setName(rs.getString(2); user.setMoney(rs.getInt(3); user.setTime(rs.getDate(4); return user; catch (SQLException e) e.printStackTrace(); finally db.close(); return null; Controller类public class Controller public void controller() throws
22、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(); UserService service = UserService.getInstance(); Operation o = nul
23、l; 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 =
24、 false; if(flag) o.operation(service); 视图层public class MainView public static void start() Scanner scan = new Scanner(System.in); while (true) LoginService service; System.out.println(please input your account and password to login,enter 1 for register one new user.); String username = scan.next();
25、String password; while (1.equals(username) System.out.println(please input account:); String newUsername = scan.next(); String newPwd; while (true) System.out.println(please input password:); newPwd = scan.next(); System.out.println(please input confirmation password:); String confirmPwd = scan.next(); if (newPwd.equals(confirmPwd)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1