书店系统--总体设计
Posted xanlv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了书店系统--总体设计相关的知识,希望对你有一定的参考价值。
项目功能需求 :
1、能进行操作用户的注册,修改基本信息,删除和查询。
2、能对图书的基本信息进行增加、删除、修改和查询操作。
3、能填写进货单,一张进货单带有多条具体的进货信息,进货的书籍必须是图书管理里面已经有的;进货的同时修改库存对应书籍的存货量。
4、能填写销售单,一张销售单带有多条具体的销售信息,销售的书籍必须是图书管理里面已经有的,而且销售的数量不能超过当前库存的数量;销售的同时修改库存对应书籍的存货量。
5、可以查看库存的明细,可以按照条件进行查找具体的图书的库存值。
6、权限方面进行简化,做固定的权限控制。把用户按照模块分成不同操作权限的人员,特设一个admin的用户,可以操作全部的功能。
项目基本设计 :
★ 架构设计:
整体框架、模块划分
模块划分:用户、图书、进货、销售和库存5个模块
★ 系统功能结构设计:
每个功能模块的具体功能子模块
★ 数据库设计:
项目框架实现:分模块、分层、分包、构建应用程序
核心框架—-实现每个界面的转换
package cn.hncu.bookStore;
import cn.hncu.bookStore.login.ui.Login;
/**
*
*@author<a href="mailto:2402201666@qq.com">xzm</a>
*/
public class bookStoreApp extends javax.swing.JFrame
private static final long serialVersionUID = 1L;
/** Creates new form bookStoreApp */
public bookStoreApp()
initComponents();
this.setContentPane(new Login(this));//添加登录界面
this.validate();
getContentPane().setLocation(150, 50);
//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();
jMenu1 = new javax.swing.JMenu();
menuItemUser = new javax.swing.JMenuItem();
menuItemBook = new javax.swing.JMenuItem();
menuItemInMain = new javax.swing.JMenuItem();
MenuItemOutMain = new javax.swing.JMenuItem();
menuItemStock = new javax.swing.JMenuItem();
menuItemLogin = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setMinimumSize(new java.awt.Dimension(800, 600));
getContentPane().setLayout(null);
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);
jMenu1.setText("Menu");
menuItemUser.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
java.awt.event.KeyEvent.VK_U,
java.awt.event.InputEvent.CTRL_MASK));
menuItemUser.setText("\\u7528\\u6237\\u6a21\\u5757");
menuItemUser.setEnabled(false);
menuItemUser.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt)
menuItemUserActionPerformed(evt);
);
jMenu1.add(menuItemUser);
menuItemBook.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
java.awt.event.KeyEvent.VK_B,
java.awt.event.InputEvent.CTRL_MASK));
menuItemBook.setText("\\u56fe\\u4e66\\u6a21\\u5757");
menuItemBook.setEnabled(false);
menuItemBook.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt)
menuItemBookActionPerformed(evt);
);
jMenu1.add(menuItemBook);
menuItemInMain.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
java.awt.event.KeyEvent.VK_I,
java.awt.event.InputEvent.CTRL_MASK));
menuItemInMain.setText("\\u8fdb\\u8d27\\u6a21\\u5757");
menuItemInMain.setEnabled(false);
menuItemInMain.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt)
menuItemInMainActionPerformed(evt);
);
jMenu1.add(menuItemInMain);
MenuItemOutMain.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
java.awt.event.KeyEvent.VK_O,
java.awt.event.InputEvent.CTRL_MASK));
MenuItemOutMain.setText("\\u9500\\u552e\\u6a21\\u5757");
MenuItemOutMain.setEnabled(false);
MenuItemOutMain.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt)
MenuItemOutMainActionPerformed(evt);
);
jMenu1.add(MenuItemOutMain);
menuItemStock.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
java.awt.event.KeyEvent.VK_S,
java.awt.event.InputEvent.CTRL_MASK));
menuItemStock.setText("\\u5e93\\u5b58\\u6a21\\u5757");
menuItemStock.setEnabled(false);
menuItemStock.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt)
menuItemStockActionPerformed(evt);
);
jMenu1.add(menuItemStock);
menuItemLogin.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
java.awt.event.KeyEvent.VK_L,
java.awt.event.InputEvent.CTRL_MASK));
menuItemLogin.setText("\\u6ce8\\u9500");
menuItemLogin.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt)
menuItemLoginActionPerformed(evt);
);
jMenu1.add(menuItemLogin);
menuBar.add(jMenu1);
setJMenuBar(menuBar);
pack();
// </editor-fold>
//GEN-END:initComponents
private void menuItemLoginActionPerformed(java.awt.event.ActionEvent evt)
//切换到登录界面,灭掉切换到五个界面的功能菜单
menuItemBook.setEnabled(false);
menuItemInMain.setEnabled(false);
MenuItemOutMain.setEnabled(false);
menuItemStock.setEnabled(false);
menuItemUser.setEnabled(false);
this.setContentPane(new Login(this));
this.validate();
void menuItemStockActionPerformed(java.awt.event.ActionEvent evt)
//切换到库存模块
this.setContentPane(new cn.hncu.bookStore.store.ui.listPanel(this));
this.validate();
void MenuItemOutMainActionPerformed(java.awt.event.ActionEvent evt)
//切换到销售模块
this.setContentPane(new cn.hncu.bookStore.out.ui.listPanel(this));
this.validate();
void menuItemInMainActionPerformed(java.awt.event.ActionEvent evt)
//切换到进货模块
this.setContentPane(new cn.hncu.bookStore.in.ui.listPanel(this));
this.validate();
void menuItemBookActionPerformed(java.awt.event.ActionEvent evt)
//切换到图书模块
this.setContentPane(new cn.hncu.bookStore.book.ui.listPanel(this));
this.validate();
private void menuItemUserActionPerformed(java.awt.event.ActionEvent evt)
//切换到用户模块
this.setContentPane(new cn.hncu.bookStore.user.ui.listPanel(this));
this.validate();
public javax.swing.JMenuItem getMenuItemOutMain()
return MenuItemOutMain;
public javax.swing.JMenuItem getMenuItemBook()
return menuItemBook;
public javax.swing.JMenuItem getMenuItemInMain()
return menuItemInMain;
public javax.swing.JMenuItem getMenuItemStock()
return menuItemStock;
public javax.swing.JMenuItem getMenuItemUser()
return menuItemUser;
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 bookStoreApp().setVisible(true);
);
//GEN-BEGIN:variables
// Variables declaration - do not modify
private javax.swing.JMenuItem MenuItemOutMain;
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.JMenu jMenu1;
private javax.swing.JMenuBar menuBar;
private javax.swing.JMenuItem menuItemBook;
private javax.swing.JMenuItem menuItemInMain;
private javax.swing.JMenuItem menuItemLogin;
private javax.swing.JMenuItem menuItemStock;
private javax.swing.JMenuItem menuItemUser;
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
工具包:
package cn.hncu.bookStore.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils
/**
* 把long型时间转换成日期格式"yyyy年MM月dd日HH:mm:ss:"的字符串
* @param t
* 待转换的(long型)时间
* @return
* 日期格式的字符串
*/
public static String longToString(long t)
Date d=new Date();
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss:");
return df.format(d);
/**
* 把日期格式"yyyy-MM-dd-HH:mm:ss:"的字符串转换成long型时间
* @param str
* 待转换的日期字符串
* @return
* long型时间
* @throws ParseException
*/
public static long stringToLong(String str) throws ParseException
DateFormat df=new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss:");
Date d=df.parse(str);
return d.getTime();
package cn.hncu.bookStore.utils;
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;
public class FileIOUtil
/**
* 构造函数私有化
*/
private FileIOUtil()
/**
* 把目录fileName里的数据读出
* @param fileName
* 文件地址
* @return
* 返回对应类型的集合
*/
public static<E> List<E> readFromFile(String fileName)//定义在静态方法上的泛型
File file=new File(fileName);//凡是读文件,最好用File开道
if(!file.exists())//文件不存在返回空集合
return new ArrayList<E>();
ObjectInputStream in=null;
try
in=new ObjectInputStream(new FileInputStream(file));
@SuppressWarnings("unchecked")
List<E> list=(List<E>)in.readObject();
return list;
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
catch (ClassNotFoundException e)
e.printStackTrace();
finally
if(in!=null)
try
in.close();
catch (IOException e)
throw new RuntimeException("数据文件关闭失败", e);
return new ArrayList<E>();
/**
* 存储:向目录fileName里读入数据
* @param list
* 待存入数据的集合
* @param fileName
* 文件地址
* @return
* 存储成功就返回true,否则,返回false
*/
public static<E> boolean writeToFile(List<E> list,String fileName)
ObjectOutputStream out=null;
try
out=new ObjectOutputStream(new FileOutputStream(fileName));
out.writeObject(list);
return true;
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
finally
if(out!=null)
try
out.close();
catch (IOException e)
throw new RuntimeException("数据文件关闭失败", e);
return false;
公共功能:
package cn.hncu.bookStore.common;
public enum uuidModelConstance
/**
* 枚举:把user的五种类型UserModel,BookModel,InMainModel,InDetailModel,OutMainModel,OutDetailModel,StockModel枚举出来
*/
User("UserModel"),Book("BookModel"),In_Main("InMainModel"),In_Detail("InDetailModel"),
Out_Main("OutMainModel"),Out_Detail("OutDetailModel"),Stock("StockModel");
private final String name;
private uuidModelConstance(String name)
this.name=name;
public String getName()
return name;
package cn.hncu.bookStore.common.uuid.vo;
import java.io.Serializable;
public class uuidModel implements Serializable
/**
* 用唱票模型自动生成uuid编号
* 封装uuid,自动生成uuid
*/
private static final long serialVersionUID = 1L;
private String modelName;//表示UserModel,BookModel,InMainModel,InDetailModel,OutMainModel,OutDetailModel,StockModel
private int currentNum;//modelName当前的uuid编号
public uuidModel()
//set,get
public String getModelName()
return modelName;
public void setModelName(String modelName)
this.modelName = modelName;
public int getCurrentNum()
return currentNum;
public void setCurrentNum(int currentNum)
this.currentNum = currentNum;
@Override
public int hashCode()
final int prime = 31;
int result = 1;
result = prime * result
+ ((modelName == null) ? 0 : modelName.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;
uuidModel other = (uuidModel) obj;
if (modelName == null)
if (other.modelName != null)
return false;
else if (!modelName.equals(other.modelName))
return false;
return true;
package cn.hncu.bookStore.common.uuid.dao.Ebi;
import cn.hncu.bookStore.common.uuidModelConstance;
public interface uuidDAO
/**
* 用唱票模型自动生成uuid编号
* @param umc
* 需要自动生成uuid的类型(UserModel,BookModel,InMainModel,InDetailModel,OutMainModel,OutDetailModel,StockModel)
* @return
* 生成对应类型uuid的编号
*/
public String getNextNum(uuidModelConstance umc);
package cn.hncu.bookStore.common.uuid.dao.Ebo;
import java.util.List;
import cn.hncu.bookStore.common.uuidModelConstance;
import cn.hncu.bookStore.common.uuid.dao.Ebi.uuidDAO;
import cn.hncu.bookStore.common.uuid.vo.uuidModel;
import cn.hncu.bookStore.utils.FileIOUtil;
public class uuidEbo implements uuidDAO
private final static String FILE_NAME="uuid.txt";//把数据存储到uuid.txt文件中,或读取
@Override
public String getNextNum(uuidModelConstance umc)
String modelName=umc.getName();//获得待生成uuid编号的user类型
List<uuidModel> list=FileIOUtil.readFromFile(FILE_NAME);//从文件中读取所有已生成user类型uuid的数据
for(uuidModel um:list)
if(um.getModelName().equals(modelName.trim()))//如果modelName在文件中存在,则返回此类型uuid下一个编号
int res=um.getCurrentNum();
um.setCurrentNum(res+1);
FileIOUtil.writeToFile(list, FILE_NAME);//把经过更新的uuid数据存入文件夹
return ""+res;
//如果for循环没有找到,说明modelName是第一个,编号为1
//new一个此类型的对象,存入文件夹
uuidModel um=new uuidModel();
um.setModelName(modelName);
um.setCurrentNum(2);
list.add(um);
FileIOUtil.writeToFile(list, FILE_NAME);
return ""+1;
package cn.hncu.bookStore.common.uuid.dao.factory;
import cn.hncu.bookStore.common.uuid.dao.Ebi.uuidDAO;
import cn.hncu.bookStore.common.uuid.dao.Ebo.uuidEbo;
public class uuidDAOFactory
/**
* 构造函数私有化
*/
private uuidDAOFactory()
/**
* 获得接口uuidDAO
* @return
* uuidDAO
*/
public static uuidDAO getUuidDAO()
return new uuidEbo();
开发者涨薪指南
48位大咖的思考法则、工作方式、逻辑体系
以上是关于书店系统--总体设计的主要内容,如果未能解决你的问题,请参考以下文章
Java-单机版的书店管理系统(练习设计模块和思想_系列 四 )
Java之------单机版书店管理系统(设计思想和设计模式系列三)工具包和公共包
Java之------单机版书店管理系统(设计思想和设计模式系列三)工具包和公共包