Java设计模块系列之书店管理系统单机版(二)
java-单机版的书店管理系统(练习设计模块和思想_系列 一 ):
介绍
小提示:上面一点有一个目录,可以快速定位到自己需要看的类。
今天对前面的代码有了小小的修改,让代码更加完善了一点。
至于用户唯一标识码uuid,会在以后修改成程序内部生成的,
现在的uuid还是由用户自己设置。
今天对这个程序,添加了用户界面的表现层的一部分,增加了公共类 枚举,
下面贴出目前我写的这个程序的全部代码:我会逐渐的写完这个程序的,请大家放心!(需要实现的功能在这个书店管理系统的系列一可以找到,我为这个系列的文章已经分类了,方便大家寻找)
这个系列的博客是不会断的。
现在的代码分层:
现在的程序运行后的图片:
我按照从目录上面到下面的顺序贴出代码:
请注意!这个代码顺序并不是我写代码的顺序!
如果你们要参考我的写,请不要按照我贴的代码的顺序。
应该先写公共类,工具类。
再次:数据层类—>逻辑层类—>表现层类
现在程序运行后的部分图片:
usertypeenum类:
cn.hncu.bookstore.common;
usertypeenum类:
package cn.hncu.bookstore.common; /** * 功能:用户类型的枚举!<br/> * 定义在公共模块。<br/> * 变量:<br/> * admin(1,"超级管理员"),<br/> * book(2,"图书管理员"),<br/> * in(3,"进货管理员"),<br/> * out(4,"销售管理员"),<br/> * stock(5,"库存管理员");<br/> * @author chx * @version 1.0 */ public enum usertypeenum { admin(1,"超级管理员"), book(2,"图书管理员"), in(3,"进货管理员"), out(4,"销售管理员"), stock(5,"库存管理员"); private final int type; private final string name; /** * 初始化枚举变量名字 * @param type---枚举变量对应的整型数字 * @param name---枚举变量对应的string型名字 */ private usertypeenum(int type, string name) { this.type=type; this.name=name; } /** * 得到当前枚举变量的数字 * @return---type-编号 */ public int gettype() { return type; } /** * 得到当前枚举变量的中文名字 * @return---name-中文名字 */ public string getname() { return name; } /** * 根据枚举变量的int数字得到数字对应的枚举变量的中文名字 * @param type---需要传入的int型参数 * @return ---如果存在这样的数字对应的枚举变量,就返回这个枚举变量的中文名字。 * <br/>---如果不存在这样的数字对应的枚举变量,就抛出一个异常信息。 */ public static string getnamebytype(int type){ for(usertypeenum usertype:usertypeenum.values()){ if(usertype.gettype()==type){ return usertype.getname(); } } throw new illegalargumentexception("枚举中没有对应的用户类型:"+type); } /** * 根据枚举变量的name中文名字得到name对应的枚举变量的int型type * @param name---需要传入的string型名字 * @return ---如果存在这样的名字对应的枚举变量,就返回这个枚举变量对应的type-int * <br/> ---如果不存在这样的名字对应的枚举变量,就抛出一个异常信息 */ public static int gettypebyname(string name){ for(usertypeenum usertype:usertypeenum.values()){ if(usertype.getname().equals(name)){ return usertype.gettype(); } } throw new illegalargumentexception("枚举中没有对应的用户类型:"+name); } }
userebi接口:
cn.hncu.bookstore.user.business.ebi;
userebi接口:
package cn.hncu.bookstore.user.business.ebi; import java.util.list; import cn.hncu.bookstore.user.vo.usermodel; import cn.hncu.bookstore.user.vo.userquerymodel; /** * 逻辑层的接口 * * @author chx * @version 1.0 */ public interface userebi { /** * 功能:创建一个用户 * * @param usermodel---将要创建的用户数据 * @return---true表示创建成功,false表示创建失败 */ public boolean create(usermodel user); /** * 功能:根据用户的唯一标识码uuid删除一个用户 * * @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); }
userebo类:
cn.hncu.bookstore.user.business.ebo;
userebo类:
package cn.hncu.bookstore.user.business.ebo; import java.util.list; import cn.hncu.bookstore.user.business.ebi.userebi; import cn.hncu.bookstore.user.dao.dao.userdao; import cn.hncu.bookstore.user.dao.factory.userdaofactory; import cn.hncu.bookstore.user.vo.usermodel; import cn.hncu.bookstore.user.vo.userquerymodel; public class userebo implements userebi{ private userdao dao = userdaofactory.getuserdao(); @override public boolean create(usermodel user) { return dao.create(user); } @override public boolean delete(string uuid) { return dao.delete(uuid); } @override public boolean update(usermodel user) { return dao.update(user); } @override public list<usermodel> getall() { return dao.getall(); } @override public list<usermodel> getbycondition(userquerymodel uqm) { // todo auto-generated method stub return null; } @override public usermodel getsingle(string uuid) { return dao.getsingle(uuid); } }
userebifactory类:
cn.hncu.bookstore.user.business.factory;
userebifactory类:
package cn.hncu.bookstore.user.business.factory; import cn.hncu.bookstore.user.business.ebi.userebi; import cn.hncu.bookstore.user.business.ebo.userebo; public class userebifactory { public static userebi getuserebi(){ return new userebo(); } }
userdao接口:
cn.hncu.bookstore.user.dao.dao;
userdao接口:
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); /** * 功能:根据用户的唯一标识码uuid删除一个用户 * * @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); }
userdaofactory类:
cn.hncu.bookstore.user.dao.factory;
userdaofactory类:
package cn.hncu.bookstore.user.dao.factory; import cn.hncu.bookstore.user.dao.dao.userdao; import cn.hncu.bookstore.user.dao.impl.userdaoserimpl; /** * 工厂方法<br/> * new 一个dao的实例 * @author 陈浩翔 * * @version 1.0 * */ public class userdaofactory { public static userdao getuserdao(){ return new userdaoserimpl(); } }
userdaoserimpl类:
cn.hncu.bookstore.user.dao.impl;
userdaoserimpl类:
package cn.hncu.bookstore.user.dao.impl; import java.util.arraylist; import java.util.list; import cn.hncu.bookstore.user.dao.dao.userdao; import cn.hncu.bookstore.user.vo.usermodel; import cn.hncu.bookstore.user.vo.userquerymodel; import cn.hncu.bookstore.util.fileioutil; /** * <br/> * 对用户数据处理的具体实现类 ----实现了userdao接口 * * @author 陈浩翔 * * @version 1.0 */ public class userdaoserimpl implements userdao { private static final string file_name = "user.txt"; @override public boolean create(usermodel user) { // 1先把已有的数据反序列化(读)出来 list<usermodel> list = fileioutil.readformfile(file_name); // 2判断该用户是否已经存在,再决定是否创建 for (usermodel usermodel : list) { // 如果2个用户的uuid相等,用户就是相同的 if (usermodel.getuuid().equals(user.getuuid())) { return false;// 用户已经存在了,返回false } } // 3如果用户不存在,就创建 list.add(user); fileioutil.write2file(list, file_name); return true;// 创建成功,返回true } @override public boolean delete(string uuid) { // 1先把已有的数据反序列化(读)出来 list<usermodel> list = fileioutil.readformfile(file_name); // 2判断该用户是否已经存在,再决定是否删除 // for(int i=0;i<list.size();i++){ // if(list.get(i).getuuid().equals(uuid)){ // list.remove(i); // fileioutil.write2file(list, file_name); // return true; // } // } for (usermodel usermodel : list) { // 如果2个用户的uuid相等,用户就是相同的 if (usermodel.getuuid().equals(uuid)) { list.remove(usermodel); fileioutil.write2file(list, file_name); // 删除成功,返回true return true; } } // 3用户不存在 // 删除失败,返回false return false; } @override public boolean update(usermodel user) { // 1先把已有的数据反序列化(读)出来 list<usermodel> list = fileioutil.readformfile(file_name); // 2判断该用户是否已经存在,再决定是否创建 for (int i = 0; i < list.size(); i++) { // uuid是不能改的,通过uuid来找到那个用户数据,再修改就ok了 if (list.get(i).getuuid().equals(user.getuuid())) { // 将找到的用户修改成user list.set(i, user); fileioutil.write2file(list, file_name); // 找到用户,返回true return true; } } // 3若该用户不存在,则修改失败 return false; } @override public list<usermodel> getall() { return fileioutil.readformfile(file_name); } @override public list<usermodel> getbycondition(userquerymodel uqm) { // todo auto-generated method stub return null; } @override public usermodel getsingle(string uuid) { // 1先把已有的数据反序列化(读)出来 list<usermodel> list = fileioutil.readformfile(file_name); // 2判断该用户是否已经存在,存在就返回那个用户 for (int i = 0; i < list.size(); i++) { if (list.get(i).getuuid().equals(uuid)) { return list.get(i); } } // 3若该用户不存在,返回null return null; } }
addpanel类:
cn.hncu.bookstore.user.ui;
addpanel类:
/* * addpanel.java * * created on __date__, __time__ */ package cn.hncu.bookstore.user.ui; import javax.swing.jframe; import javax.swing.joptionpane; import cn.hncu.bookstore.common.usertypeenum; import cn.hncu.bookstore.user.business.ebi.userebi; import cn.hncu.bookstore.user.business.factory.userebifactory; import cn.hncu.bookstore.user.vo.usermodel; import cn.hncu.bookstore.util.fileioutil; /** * * @author 陈浩翔 */ public class addpanel extends javax.swing.jpanel { private jframe mainframe = null; /** creates new form addpanel */ public addpanel(jframe mainframe) { this.mainframe = mainframe; initcomponents(); myinitdata(); } private void myinitdata() { for (usertypeenum type : usertypeenum.values()) { combtype.additem(type.getname()); } } /** this method is called from within the constructor to * initialize the form. * warning: do not modify this code. the content of this method is * always regenerated by the form editor. */ //gen-begin:initcomponents // <editor-fold defaultstate="collapsed" desc="generated code"> private void initcomponents() { jlabel1 = new javax.swing.jlabel(); jlabel2 = new javax.swing.jlabel(); tfdname = new javax.swing.jtextfield(); jlabel3 = new javax.swing.jlabel(); tfduuid = new javax.swing.jtextfield(); jlabel4 = new javax.swing.jlabel(); tfdpwd2 = new javax.swing.jpasswordfield(); jlabel5 = new javax.swing.jlabel(); jlabel6 = new javax.swing.jlabel(); combtype = new javax.swing.jcombobox(); tfdpwd = new javax.swing.jpasswordfield(); btnadd = new javax.swing.jbutton(); btnback = new javax.swing.jbutton(); setminimumsize(new java.awt.dimension(800, 600)); setlayout(null); jlabel1.setfont(new java.awt.font("微软雅黑", 1, 48)); jlabel1.setforeground(new java.awt.color(204, 0, 0)); jlabel1.settext("\u6dfb\u52a0\u7528\u6237"); add(jlabel1); jlabel1.setbounds(270, 30, 230, 80); jlabel2.setfont(new java.awt.font("微软雅黑", 0, 18)); jlabel2.settext("\u7528\u6237\u7c7b\u578b:"); add(jlabel2); jlabel2.setbounds(40, 310, 90, 30); tfdname.setfont(new java.awt.font("dialog", 1, 18)); tfdname.setautoscrolls(false); add(tfdname); tfdname.setbounds(420, 160, 120, 30); jlabel3.setfont(new java.awt.font("微软雅黑", 0, 18)); jlabel3.settext("uuid:"); add(jlabel3); jlabel3.setbounds(70, 160, 50, 30); tfduuid.setfont(new java.awt.font("dialog", 0, 11)); add(tfduuid); tfduuid.setbounds(140, 160, 110, 30); jlabel4.setfont(new java.awt.font("微软雅黑", 0, 18)); jlabel4.settext("\u59d3\u540d:"); add(jlabel4); jlabel4.setbounds(360, 160, 50, 30); add(tfdpwd2); tfdpwd2.setbounds(420, 240, 170, 30); jlabel5.setfont(new java.awt.font("微软雅黑", 0, 18)); jlabel5.settext("\u5bc6\u7801:"); add(jlabel5); jlabel5.setbounds(70, 240, 50, 30); jlabel6.setfont(new java.awt.font("微软雅黑", 0, 18)); jlabel6.settext("\u786e\u8ba4\u5bc6\u7801:"); add(jlabel6); jlabel6.setbounds(330, 240, 90, 30); combtype.setfont(new java.awt.font("dialog", 1, 18)); combtype.setforeground(new java.awt.color(51, 51, 255)); combtype.setmodel(new javax.swing.defaultcomboboxmodel( new string[] { "请选择..." })); add(combtype); combtype.setbounds(140, 310, 160, 30); tfdpwd.setfont(new java.awt.font("宋体", 1, 18)); add(tfdpwd); tfdpwd.setbounds(140, 240, 160, 30); btnadd.setfont(new java.awt.font("dialog", 1, 24)); btnadd.setforeground(new java.awt.color(0, 204, 204)); btnadd.settext("\u6dfb\u52a0"); btnadd.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { btnaddactionperformed(evt); } }); add(btnadd); btnadd.setbounds(140, 430, 120, 60); btnback.setfont(new java.awt.font("dialog", 1, 24)); btnback.setforeground(new java.awt.color(0, 204, 204)); btnback.settext("\u8fd4\u56de"); btnback.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { btnbackactionperformed(evt); } }); add(btnback); btnback.setbounds(470, 430, 120, 60); }// </editor-fold> //gen-end:initcomponents private void back() { mainframe.setcontentpane(new listpanel(mainframe)); mainframe.validate(); } /** *监听返回按钮 * @param 返回按钮的点击监听 */ private void btnbackactionperformed(java.awt.event.actionevent evt) { back(); } private void btnaddactionperformed(java.awt.event.actionevent evt) { //1收集参数 string uuid = tfduuid.gettext(); string name = tfdname.gettext(); string pwd = new string(tfdpwd.getpassword()); string pwd2 = new string(tfdpwd2.getpassword()); if (!pwd.equals(pwd2)) { joptionpane.showmessagedialog(null, "两次密码输入不一致,请重新输入!"); return; } int type = 0; try { type = usertypeenum.gettypebyname(combtype.getselecteditem() .tostring()); } catch (exception e) { joptionpane.showmessagedialog(null, "请指定用户类型!"); return; } //2组织参数 usermodel user = new usermodel(); user.setname(name); user.setpwd(pwd); user.settype(type); user.setuuid(uuid); //3调用逻辑层 userebi ebi = userebifactory.getuserebi(); //4根据调用返回结果导向不同页面 if (ebi.create(user)) { back(); } else { joptionpane.showmessagedialog(null, "该用户已经存在!"); } } //gen-begin:variables // variables declaration - do not modify private javax.swing.jbutton btnadd; private javax.swing.jbutton btnback; private javax.swing.jcombobox combtype; private javax.swing.jlabel jlabel1; private javax.swing.jlabel jlabel2; private javax.swing.jlabel jlabel3; private javax.swing.jlabel jlabel4; private javax.swing.jlabel jlabel5; private javax.swing.jlabel jlabel6; private javax.swing.jtextfield tfdname; private javax.swing.jpasswordfield tfdpwd; private javax.swing.jpasswordfield tfdpwd2; private javax.swing.jtextfield tfduuid; // end of variables declaration//gen-end:variables }
listpanel类:
cn.hncu.bookstore.user.ui;
listpanel类:
/* * listpanel.java * * created on __date__, __time__ */ package cn.hncu.bookstore.user.ui; import java.util.list; import javax.swing.jframe; import cn.hncu.bookstore.user.business.ebi.userebi; import cn.hncu.bookstore.user.business.factory.userebifactory; import cn.hncu.bookstore.user.vo.usermodel; /** * 表现层-用户列表面板 * * @author 陈浩翔 * @version 1.0 */ public class listpanel extends javax.swing.jpanel { private jframe mainframe = null; /** creates new form listpanel */ public listpanel(jframe mainframe) { this.mainframe = mainframe; initcomponents(); myinitdata(); } /** * 读取所有用户并添加进列表 */ private void myinitdata() { userebi user = userebifactory.getuserebi(); list<usermodel> list = user.getall(); userlists.setlistdata(list.toarray()); } /** this method is called from within the constructor to * initialize the form. * warning: do not modify this code. the content of this method is * always regenerated by the form editor. */ //gen-begin:initcomponents // <editor-fold defaultstate="collapsed" desc="generated code"> private void initcomponents() { jscrollpane1 = new javax.swing.jscrollpane(); userlists = new javax.swing.jlist(); jlabel1 = new javax.swing.jlabel(); btntoadd = new javax.swing.jbutton(); setminimumsize(new java.awt.dimension(800, 600)); setlayout(null); userlists.setmodel(new javax.swing.abstractlistmodel() { string[] strings = { "" }; public int getsize() { return strings.length; } public object getelementat(int i) { return strings[i]; } }); jscrollpane1.setviewportview(userlists); add(jscrollpane1); jscrollpane1.setbounds(150, 150, 480, 230); jlabel1.setfont(new java.awt.font("tahoma", 1, 48)); jlabel1.setforeground(new java.awt.color(204, 0, 51)); jlabel1.settext("user list"); add(jlabel1); jlabel1.setbounds(270, 30, 260, 80); btntoadd.setfont(new java.awt.font("dialog", 1, 18)); btntoadd.settext("\u6dfb\u52a0\u7528\u6237"); btntoadd.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { btntoaddactionperformed(evt); } }); add(btntoadd); btntoadd.setbounds(60, 420, 150, 50); }// </editor-fold> //gen-end:initcomponents private void btntoaddactionperformed(java.awt.event.actionevent evt) { mainframe.setcontentpane(new addpanel(mainframe)); mainframe.validate(); } //gen-begin:variables // variables declaration - do not modify private javax.swing.jbutton btntoadd; private javax.swing.jlabel jlabel1; private javax.swing.jscrollpane jscrollpane1; private javax.swing.jlist userlists; // end of variables declaration//gen-end:variables }
usermodel类:
cn.hncu.bookstore.user.vo;
usermodel类:
用户值对象模块:
package cn.hncu.bookstore.user.vo; import java.io.serializable; import cn.hncu.bookstore.common.usertypeenum; /** * @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 implements serializable{ 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 uuid + "," + name + "," + usertypeenum.getnamebytype(type); } }
userquerymodel类:
cn.hncu.bookstore.user.vo;
userquerymodel类:
虽然没有代码,但不能不写!这是查找用户时需要的。
原因我在系列一写了。
package cn.hncu.bookstore.user.vo; /** * * @author 陈浩翔 * * @version 1.0 */ public class userquerymodel extends usermodel{ }
fileioutil类:
cn.hncu.bookstore.util;
fileioutil类:
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:(数据表对应的文件名字) * @return 所有表的记录! */ @suppresswarnings("unchecked")//压警告 public static<e> list<e> readformfile(string filename){ 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<e> void write2file(list<e> 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("数据库关闭失败!"); } } } } }
bookstore类:(含main方法)
cn.hncu.bookstore;
bookstore类:
用户模块的main方法在这个类中:
/* * bookstore.java * * created on __date__, __time__ */ package cn.hncu.bookstore; import cn.hncu.bookstore.user.ui.listpanel; /** * * @author 陈浩翔 */ public class bookstore extends javax.swing.jframe { /** creates new form bookstore */ public bookstore() { initcomponents(); this.setcontentpane(new listpanel(this)); this.setresizable(false);//不能缩放 this.setdefaultcloseoperation(exit_on_close); } /** this method is called from within the constructor to * initialize the form. * warning: do not modify this code. the content of this method is * always regenerated by the form editor. */ //gen-begin:initcomponents // <editor-fold defaultstate="collapsed" desc="generated code"> private void initcomponents() { menubar = new javax.swing.jmenubar(); filemenu = new javax.swing.jmenu(); openmenuitem = new javax.swing.jmenuitem(); savemenuitem = new javax.swing.jmenuitem(); saveasmenuitem = new javax.swing.jmenuitem(); exitmenuitem = new javax.swing.jmenuitem(); editmenu = new javax.swing.jmenu(); cutmenuitem = new javax.swing.jmenuitem(); copymenuitem = new javax.swing.jmenuitem(); pastemenuitem = new javax.swing.jmenuitem(); deletemenuitem = new javax.swing.jmenuitem(); helpmenu = new javax.swing.jmenu(); contentsmenuitem = new javax.swing.jmenuitem(); aboutmenuitem = new javax.swing.jmenuitem(); setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close); setminimumsize(new java.awt.dimension(800, 600)); filemenu.settext("file"); openmenuitem.settext("open"); filemenu.add(openmenuitem); savemenuitem.settext("save"); filemenu.add(savemenuitem); saveasmenuitem.settext("save as ..."); filemenu.add(saveasmenuitem); exitmenuitem.settext("exit"); exitmenuitem.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { exitmenuitemactionperformed(evt); } }); filemenu.add(exitmenuitem); menubar.add(filemenu); editmenu.settext("edit"); cutmenuitem.settext("cut"); editmenu.add(cutmenuitem); copymenuitem.settext("copy"); editmenu.add(copymenuitem); pastemenuitem.settext("paste"); editmenu.add(pastemenuitem); deletemenuitem.settext("delete"); editmenu.add(deletemenuitem); menubar.add(editmenu); helpmenu.settext("help"); contentsmenuitem.settext("contents"); helpmenu.add(contentsmenuitem); aboutmenuitem.settext("about"); helpmenu.add(aboutmenuitem); menubar.add(helpmenu); setjmenubar(menubar); javax.swing.grouplayout layout = new javax.swing.grouplayout( getcontentpane()); getcontentpane().setlayout(layout); layout.sethorizontalgroup(layout.createparallelgroup( javax.swing.grouplayout.alignment.leading).addgap(0, 400, short.max_value)); layout.setverticalgroup(layout.createparallelgroup( javax.swing.grouplayout.alignment.leading).addgap(0, 279, short.max_value)); pack(); }// </editor-fold> //gen-end:initcomponents private void exitmenuitemactionperformed(java.awt.event.actionevent evt) {//gen-first:event_exitmenuitemactionperformed system.exit(0); }//gen-last:event_exitmenuitemactionperformed /** * @param args the command line arguments */ public static void main(string args[]) { java.awt.eventqueue.invokelater(new runnable() { public void run() { new bookstore().setvisible(true); } }); } //gen-begin:variables // variables declaration - do not modify private javax.swing.jmenuitem aboutmenuitem; private javax.swing.jmenuitem contentsmenuitem; private javax.swing.jmenuitem copymenuitem; private javax.swing.jmenuitem cutmenuitem; private javax.swing.jmenuitem deletemenuitem; private javax.swing.jmenu editmenu; private javax.swing.jmenuitem exitmenuitem; private javax.swing.jmenu filemenu; private javax.swing.jmenu helpmenu; private javax.swing.jmenubar menubar; private javax.swing.jmenuitem openmenuitem; private javax.swing.jmenuitem pastemenuitem; private javax.swing.jmenuitem saveasmenuitem; private javax.swing.jmenuitem savemenuitem; // end of variables declaration//gen-end:variables }
今天就写到这里的,未完待续。。。
目前的添加有一个小bug,就是添加用户时,什么都不输入,
只选择用户类型,也能创建!下次我会修复的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 详解Yii2.0 rules验证规则集合