Java设计模块系列之书店管理系统单机版(一)
书店管理系统:
项目练习目标 :
1、java应用程序基本分析
2、培养面向对象编程的基本思想
3、java基本设计模式综合应用
4、掌握分层和接口的基本设计
5、构建合理的java应用程序包结构
6、综合应用jse所学习的知识
7、在应用中合理使用集合框架
8、在应用中综合使用swing的常用组件
9、基本的表现层的实现机制
10、io流和文件的基本操作
11、培养良好的java编程习惯
12、培养调试java程序的能力,培养改错的能力
项目功能需求 :
1、能进行操作用户的注册,修改基本信息,删除和查询。
2、能对图书的基本信息进行增加、删除、修改和查询操作。
3、能填写进货单,一张进货单带有多条具体的进货信息,进货的书籍必须是图书管理里面已经有的;进货的同时修改库存对应书籍的存货量。
4、能填写销售单,一张销售单带有多条具体的销售信息,销售的书籍必须是图书管理里面已经有的,而且销售的数量不能超过当前库存的数量;销售的同时修改库存对应书籍的存货量。
5、可以查看库存的明细,可以按照条件进行查找具体的图书的库存值。
6、权限方面进行简化,做固定的权限控制。把用户按照模块分成不同操作权限的人员,特设一个admin的用户,可以操作全部的功能。
项目基本设计 :
★ 架构设计
整体框架、模块划分
模块划分:用户、图书、进货、销售和库存5个模块
★ 系统功能结构设计
每个功能模块的具体功能子模块
★ 数据库设计
项目框架实现:分模块、分层、分包、构建应用程序
1、用户管理(user.txt)
说明:其中的type为int类型,用来表示操作用户的类型。
1——表示为admin,可以进行全部操作
2——表示为能操作图书模块的人员
3——表示为能操作进货模块的人员
4——表示为能操作销售模块的人员
5——表示为能操作库存模块的人员
2、图书管理(book.txt)
3、进货管理(inmain.txt)
4、进货明细管理(indetail.txt)
5、销售管理(outmain.txt)
6、销售明细管理(outdetail.txt)
7、库存管理(stock.txt)
项目分包
第一层:按照模块分
用户模块(user)、
图书(book)、
进货(in)、
销售(out)、
库存(store)
第二层:按照三层模式分
表现层(ui)、逻辑层(business) 和 数据层(dao)
通常还要增加一个值对象层(vo)
第三层:按照层内划分去分
视具体情况而定,如business和dao内还要再采用铁三角的形式建子包,而ui和vo则不需要再划分子包)。
项目分层思想:
未完善,请继续关注本(二)
下面为部分代码:(util里面的一个公共类)
cn.hncu.bookstore.util
fileioutil.java:
package cn.hncu.bookstore.util; import java.io.file; import java.io.fileinputstream; import java.io.filenotfoundexception; import java.io.fileoutputstream; import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputstream; import java.util.arraylist; import java.util.list; import javax.swing.joptionpane; /** * 用户的公用数据读取写入类 * @author 陈浩翔 * * @version 1.0 */ public class fileioutil { public fileioutil() { } /** * 从数据库中读取所有的数据并返回出来 * * @param filename(数据表对应的文件名字) * @param ee(传递过来的泛型的类型!) * @return 所有表的记录! */ @suppresswarnings("unchecked")//压警告 public static<e> list<e> readformfile(string filename,e ee){ list<e> list = new arraylist<e>(); final file file = new file(filename); objectinputstream in =null; if(!file.exists()){ joptionpane.showmessagedialog(null, "数据表不存在!"); return list; } try { in = new objectinputstream(new fileinputstream(filename)); try { list = (list<e>) in.readobject(); } catch (classnotfoundexception e) { e.printstacktrace(); } } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); }finally{ if(in!=null){ try { in.close(); } catch (ioexception e) { throw new runtimeexception("数据库关闭失败"); } } } return list; } /** * 写入一个list集合进入数据文件filename * * @param list(需要存储的数据集合) * @param filename(写入到哪个文件的文件名字) */ public static void write2file(list<object> list, string filename){ objectoutputstream out = null; try { out = new objectoutputstream(new fileoutputstream(filename)); out.writeobject(list); } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); }finally{ if(out!=null){ try { out.close(); } catch (ioexception e) { throw new runtimeexception("数据库关闭失败!"); } } } } }
封装的用户数据:
cn.hncu.bookstore.user.vo;
usermodel.java
package cn.hncu.bookstore.user.vo; /** * @author 陈浩翔 * @version 1.0 * * <br/> * 用于保存用户信息的值对象<br/> * 1、可序列化<br/> * 2、私有化所有变量成员,补setter-getters方法<br/> * 3、写equals和hashcode方法----用主键(uuid)唯一标识码<br/> * 4、tostring方法<br/> * 5,空参构造方法<br/> */ public class usermodel { private string uuid;//用户唯一标识码 private string name;//用户名 private int type;//用户类型 private string pwd;//用户密码 public usermodel() { } /** * 功能:得到uuid-用户唯一的标识码 * * @return 返回uuid-用户唯一的标识码 */ public string getuuid() { return uuid; } /** * 功能:设置uuid-用户唯一的标识码 * @param uuid-用户唯一的标识码-string型参数 */ public void setuuid(string uuid) { this.uuid = uuid; } /** * 功能:得到用户的用户名 * @return---name-用户名 */ public string getname() { return name; } /** * 功能:设置用户的用户名 * * @param name--用户设置的用户名,string型参数 */ public void setname(string name) { this.name = name; } /** * 功能:得到用户的类型: * 1——表示为admin,可以进行全部操作 * 2——表示为能操作图书模块的人员 * 3——表示为能操作进货模块的人员 * 4——表示为能操作销售模块的人员 * 5——表示为能操作库存模块的人员 * @return 用户的类型 */ public int gettype() { return type; } /** * 功能:设置用户的类型: * 1——表示为admin,可以进行全部操作 * 2——表示为能操作图书模块的人员 * 3——表示为能操作进货模块的人员 * 4——表示为能操作销售模块的人员 * 5——表示为能操作库存模块的人员 * @param type--用户的类型-int型参数 */ public void settype(int type) { this.type = type; } /** *功能:得到用户的密码 * @return string型,用户的密码 */ public string getpwd() { return pwd; } /** * 功能:设置用户的密码 * @param pwd--string型参数 */ public void setpwd(string pwd) { this.pwd = pwd; } @override public int hashcode() { final int prime = 31; int result = 1; result = prime * result + ((uuid == null) ? 0 : uuid.hashcode()); return result; } @override public boolean equals(object obj) { if (this == obj) return true; if (obj == null) return false; if (getclass() != obj.getclass()) return false; usermodel other = (usermodel) obj; if (uuid == null) { if (other.uuid != null) return false; } else if (!uuid.equals(other.uuid)) return false; return true; } @override public string tostring() { return "usermodel [uuid=" + uuid + ", name=" + name + ", type=" + type + ", pwd=" + pwd + "]"; } }
封装的用户查询数据:
cn.hncu.bookstore.user.vo;
userquerymodel.java
package cn.hncu.bookstore.user.vo; public class userquerymodel extends usermodel{ }
虽然这个类什么都没有,就只是继承了usermodel,但还是必须写,这是大家都遵守的java编写规范!
用户dao(数据层):(接口)
cn.hncu.bookstore.user.dao.dao;
userdao.java
package cn.hncu.bookstore.user.dao.dao; import java.util.list; import cn.hncu.bookstore.user.vo.usermodel; import cn.hncu.bookstore.user.vo.userquerymodel; /** * * @author 陈浩翔 * * @version 1.0 * 用户模块的数据层接口 */ public interface userdao { /** * 功能:创建一个用户 * * @param usermodel---将要创建的用户数据 * @return---true表示创建成功,false表示创建失败 */ public boolean create(usermodel user); /** * 功能:删除一个用户 * * @param uuid---用户唯一的标识码,每个用户都不会相同 * @return---true表示删除成功,false表示删除失败 */ public boolean delete(string uuid); /** * 功能:修改用户数据资料 * * @param user---需要修改的用户数据参数名 * @return 返回true-表示修改成功了,返回false-表示修改失败 */ public boolean update(usermodel user); /** * 功能:得到所有的用户数据 * * @return---一个usermodel集合,也就是用户的数据 */ public list<usermodel> getall(); /** * 功能:按照一定的查找条件进行查找, * <br/> * 把满足查找条件的用户数据返回。 * * @param uqm---被封装的查找条件 * @return---满足查找条件的用户数据集合 */ public list<usermodel> getbycondition(userquerymodel uqm); /** * 功能:得到一个确定的用户的数据资料 * * @param uuid---用户唯一标识码 * @return ---返回按这个唯一标识码找到的用户数据 */ public usermodel getsingle(string uuid); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 基于Session的国际化实现方法