java書店系統(tǒng)畢業(yè)設(shè)計 總體設(shè)計(1)
java書店系統(tǒng)項目功能需求:
1、能進行操作用戶的注冊,修改基本信息,刪除和查詢。
2、能對圖書的基本信息進行增加、刪除、修改和查詢操作。
3、能填寫進貨單,一張進貨單帶有多條具體的進貨信息,進貨的書籍必須是圖書管理里面已經(jīng)有的;進貨的同時修改庫存對應(yīng)書籍的存貨量。
4、能填寫銷售單,一張銷售單帶有多條具體的銷售信息,銷售的書籍必須是圖書管理里面已經(jīng)有的,而且銷售的數(shù)量不能超過當(dāng)前庫存的數(shù)量;銷售的同時修改庫存對應(yīng)書籍的存貨量。
5、可以查看庫存的明細,可以按照條件進行查找具體的圖書的庫存值。
6、權(quán)限方面進行簡化,做固定的權(quán)限控制。把用戶按照模塊分成不同操作權(quán)限的人員,特設(shè)一個admin的用戶,可以操作全部的功能。
項目基本設(shè)計:
★ 架構(gòu)設(shè)計:
整體框架、模塊劃分
模塊劃分:用戶、圖書、進貨、銷售和庫存5個模塊

★ 系統(tǒng)功能結(jié)構(gòu)設(shè)計:
每個功能模塊的具體功能子模塊
★ 數(shù)據(jù)庫設(shè)計:
項目框架實現(xiàn):分模塊、分層、分包、構(gòu)建應(yīng)用程序
核心框架—-實現(xiàn)每個界面的轉(zhuǎn)換

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型時間轉(zhuǎn)換成日期格式"yyyy年MM月dd日HH:mm:ss:"的字符串
* @param t
* 待轉(zhuǎn)換的(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:"的字符串轉(zhuǎn)換成long型時間
* @param str
* 待轉(zhuǎn)換的日期字符串
* @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 {
/**
* 構(gòu)造函數(shù)私有化
*/
private FileIOUtil(){
}
/**
* 把目錄fileName里的數(shù)據(jù)讀出
* @param fileName
* 文件地址
* @return
* 返回對應(yīng)類型的集合
*/
public static<E> List<E> readFromFile(String fileName){//定義在靜態(tài)方法上的泛型
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("數(shù)據(jù)文件關(guān)閉失敗", e);
}
}
}
return new ArrayList<E>();
}
/**
* 存儲:向目錄fileName里讀入數(shù)據(jù)
* @param list
* 待存入數(shù)據(jù)的集合
* @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("數(shù)據(jù)文件關(guān)閉失敗", 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當(dāng)前的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
* 生成對應(yīng)類型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";//把數(shù)據(jù)存儲到uuid.txt文件中,或讀取
@Override
public String getNextNum(uuidModelConstance umc) {
String modelName=umc.getName();//獲得待生成uuid編號的user類型
List<uuidModel> list=FileIOUtil.readFromFile(FILE_NAME);//從文件中讀取所有已生成user類型uuid的數(shù)據(jù)
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);//把經(jīng)過更新的uuid數(shù)據(jù)存入文件夾
return ""+res;
}
}
//如果for循環(huán)沒有找到,說明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 {
/**
* 構(gòu)造函數(shù)私有化
*/
private uuidDAOFactory(){
}
/**
* 獲得接口uuidDAO
* @return
* uuidDAO
*/
public static uuidDAO getUuidDAO(){
return new uuidEbo();
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java商城項目實戰(zhàn)之購物車功能實現(xiàn)
這篇文章主要為大家詳細介紹了java商城項目實戰(zhàn)之購物車功能實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
SpringBoot項目中Date類型數(shù)據(jù)在接口返回的時間不正確的問題解決
如果接口返回的Date類型時間與數(shù)據(jù)庫中datetime不一致,可能是由于沒有正確配置時區(qū)導(dǎo)致的,解決方法是在yaml配置文件中指定正確的日期格式和時區(qū)配置,修改配置并重啟項目后,可以獲得正確的時間,下面就來介紹一下2024-09-09
java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法
這篇文章主要為大家詳細介紹了java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09
Java servlet通過事件驅(qū)動進行高性能長輪詢詳解
這篇文章主要介紹了基于servlet3.0+事件驅(qū)動實現(xiàn)高性能長輪詢的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2022-06-06

