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實現(xiàn)二叉樹的建立、計算高度與遞歸輸出操作示例
這篇文章主要介紹了Java實現(xiàn)二叉樹的建立、計算高度與遞歸輸出操作,結(jié)合實例形式分析了Java二叉樹的創(chuàng)建、遍歷、計算等相關(guān)算法實現(xiàn)技巧,需要的朋友可以參考下2019-03-03利用java實現(xiàn)一個客戶信息管理系統(tǒng)
這篇文章主要給大家介紹了關(guān)于利用java實現(xiàn)一個客戶信息管理系統(tǒng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04使用MyBatisPlus自動生成代碼后tomcat運行報錯的問題及解決方法
這篇文章主要介紹了使用MyBatisPlus自動生成代碼后tomcat運行報錯的問題及解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別
本文主要介紹了淺談Spring中@NotEmpty、@NotBlank、@NotNull區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02