Requisitos funcionais do Java Bookstore System Project:
1. Pode operar o registro do usuário, modificar informações básicas, excluir e consultar.
2. Pode adicionar, excluir, modificar e consultar as informações básicas do livro.
3. Você pode preencher o formulário de compra. Um formulário de compra contém várias informações de compra específicas. Os livros adquiridos já devem estar disponíveis no gerenciamento de livros; Ao comprar, modificando o volume do inventário dos livros correspondentes no inventário.
4. Você pode preencher o formulário de vendas. Um formulário de vendas contém várias informações específicas de vendas. Os livros vendidos já devem estar no gerenciamento de livros, e a quantidade de vendas não pode exceder a quantidade atual de inventário; Durante a venda, modifique o volume do inventário dos livros correspondentes no inventário.
5. Você pode ver os detalhes do inventário e encontrar o valor do inventário de livros específicos de acordo com as condições.
6. Simplifique as permissões e implemente o controle de permissão fixa. O usuário é dividido em pessoal com diferentes permissões operacionais de acordo com o módulo, e um usuário de administrador especial pode operar todas as funções.
Design básico do projeto:
★ Design arquitetônico:
Divisão geral de estrutura e módulo: 5 módulos: usuário, livro, compra, vendas e inventário
★ Design da estrutura funcional do sistema:
Submódulos funcionais específicos de cada módulo funcional ★ Design de banco de dados:
Implementação da estrutura do projeto: dividido em módulos, camadas, subcontratação e criação da estrutura principal do aplicativo-implemente a transformação de cada interface
pacote cn.hncu.bookstore; importar cn.hncu.bookstore.login.ui.login;/** * *@autor <a href = "Mailto: [email protected]"> xzm </a> */public class LongApp Extlends javax.jfame {private {private {private {private {private {private {private Staratic sTATRATIATSTORAPT LongStorends javax.com "> xzm </a> */public classStorepppp extlorApp estende javax..jfame {private: / ** Cria o novo formulário BookStoreApp*/ public BookStoreApp () {initComponents (); this.setContentPane (novo login (this)); // Adicione interface de login this.validate (); getContentPane (). SetLocation (150, 50); } // gen-begin: initComponents // <editor-fold defaultState = "colapsed" 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.jmenuitem (); cutmenuitem = new javax.swing.jmenuitem (); copymenuitem = new javax.swing.jmenuitem (); pastemenuitem = new javax.swing.jmenuitem (); deleteemenuitem = new javax.swing.jmenuitem (); helpmenu = new javax.swing.jmenuitem (); contentsmenuitem = new javax.swing.jmenuitem (); aboutmenuitem = new javax.swing.jmenuitem (); jmenu1 = new javax.swing.jmenuitem (); menuitemuser = new javax.swing.jmenuitem (); menuitembook = new javax.swing.jmenuitem (); MenuitIminmain = 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 ("arquivo"); OpenMenuitem.Settext ("Open"); filemenu.add (OpenMenuitem); saveMenuitem.settext ("salvar"); filemenu.add (savemenuitem); saveasmenuitem.settext ("Salvar como ..."); filemenu.add (saveasmenuitem); exitmenuitem.settext ("exit"); exitmenuitem.addactionListener (New java.awt.event.actionListener () {public void actionPerformed (java.awt.event.actionEvent evt) {exitmenuitemactionPorformed (evt);}}); filemenu.add (exitmenuitem); menubar.add (filemenu); editmenu.settext ("edit"); cutmenuitem.settext ("corte"); editmenu.add (Cutmenuitem); copymenuitem.settext ("cópia"); editmenu.add (copymenuitem); pastemenuitem.settext ("pasta"); editmenu.add (pastemenuitem); deleteemenuitem.settext ("delete"); editmenu.add (DeleteMenuitem); Menubar.add (editmenu); helpmenu.settext ("ajuda"); contentsmenuitem.settext ("conteúdo"); helpmenu.add (contentsmenuitem); SobreMenuitem.Settext ("Sobre"); helpmenu.add (Aboutmenuitem); menubar.add (helpmenu); jmenu1.settext ("menu"); menuitemuser.setaccelerator (javax.swing.keyystroke.getKeyTroke (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.getKeyTroke (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.keyystroke.getKeyTroke (java.awt.event.keyevent.vk_i, java.awt.event.inputevent.ctrl_mask)); menuiteminmain.settext ("/u8fdb/u8d27/u6a21/u5757"); MenuitIminmain.setEnabled (false); MenuitEminMain.addactionListener (New java.awt.event.actionListener () {public void ActionPerformed (java.awt.event.actionEvent evt) {menuitEminMainActionPeformed (evt);}}); jmenu1.add (Menuiteminmain); MenuitemoutMain.setAccelerator (javax.swing.keyystroke.getKeyTroke (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) {menuitemoutMainActionPeformed (evt);}}); jmenu1.add (Menuitemoutmain); Menuitemstock.setAccelerator (javax.swing.keystroke.getKeyTroke (java.awt.event.keyevent.vk_s, java.awt.event.inputevent.ctrl_mask)); menitemstock.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.keyystroke.getKeyTroke (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) {menuitemloginActionPeformed (evt);}}); jmenu1.add (menuitemlogin); Menubar.add (Jmenu1); setjmenubar (Menubar); pacote(); } // </editor-Fold> // gen-end: initComponents private void menuitemLoginactionPerformed (java.awt.event.actionEvent evt) {// mude para a interface de login e destrua o menu de função que alterna para cinco interfaces menuTembook.setEnabled (false); MenuitIminmain.setEnabled (false); MenuitemoutMain.setEnabled (false); menuitemstock.setEnabled (false); menuitemuser.setEnabled (false); this.setContentPane (novo login (this)); this.validate (); } void MenuitemstockActionPormed (java.awt.event.actionEvent evt) {// Alterne para o módulo de inventário this.setContentPane (new cn.hncu.bookstore.store.ui.listpanel (this)); this.validate (); } void menuitemoutMainActionPormed (java.awt.event.actionEvent evt) {// mude para o módulo de vendas this.setContentPane (new cn.hncu.bookstore.out.ui.listPanel (this)); this.validate (); } void menuiteminMainActionPerformed (java.awt.event.actionEvent evt) {// Alterne para compra do módulo. this.validate (); } void menuitembookactionPerformed (java.awt.event.actionEvent evt) {// Alterne para o módulo do livro this.setContentPane (new cn.hncu.bookstore.book.ui.listPanel (this)); this.validate (); } private void menuitemuserActionPorled (java.awt.event.actionEvent evt) {// mude para o módulo de usuário 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 getMenuitIminMain () {return menuitEnmain; } public javax.swing.jmenuitem getMenuitemstock () {return menuitemstock; } public javax.swing.jmenuitem getMenuitemuser () {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_exitmenuitemactionPorformed/** * @param Args os argumentos da linha de comando */public static void main (string args []) {java.awt.eventqueue.inVokelater (new Runnable () {public void run () {new BookstorApp (). } // Gen -begin: variáveis // Declaração de variáveis - não modifique o Javax.swing.jmenuitem menuitemoutmain; Private javax.swing.jmenuitem sobremenuitem; 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; // Fim das variáveis Declaração // Gen-End: Variáveis}
Kit de ferramentas:
pacote cn.hncu.bookstore.utils; importar java.text.dateFormat; importar java.text.parseException; importar java.text.simpledEformat; importar java.util.date; public Hh: mm: ss: "* @param t* (tipo longo) tempo a ser convertido* @return* string no formato de data*/ string estática pública longToString (long t) {date d = new Date (); DateFormat df = new SimpleDateFormat ("AAA ANYYY ANO MM MÊS DD DD HH: MM: SS:"); retornar df.format (d); } / ** * Converta a string no formato da data "AAAA-MM-DD-HH: MM: SS:" para um tempo longo * @param str * date string a ser convertido * @return * Time de tempo longo * @Throws parseException * / public Long Stringtolong (String str) SimpledateFormat ("AAAA-MM-DD-HH: MM: SS:"); Data d = df.parse (str); retorno d.gettime (); }} pacote cn.hncu.bookstore.utils; importar java.io.file; importar java.io.fileInputStream; importar java.io.filenotfoundException; importar java.io.fileOutstream; import java.io.ioxception; importação java.io.ObjectStream; importação; importtam; importtamo; import java.ioxception; importesenor.ObjputStream; import Java.io.ioxception; importação.ObjactinputStream; importestram; java.util.ArrayList; importar java.util.list; public class fileioutil { / *** Privatização do construtor* / private fileioutil () {} / *** Leia os dados no diretório FileName* @param filename* endereço* @return* Return o conjunto correspondente* nome do arquivo) {// Defina o arquivo genérico de arquivo = novo arquivo (nome do arquivo); // Para qualquer arquivo de leitura, é melhor usar o arquivo para abrir o canal if (! file.exists ()) {// O arquivo não existe e retorna um conjunto vazio. Retornar novo ArrayList <E> (); } ObjectInputStream em = null; tente {in = new ObjectInputStream (new FileInputStream (arquivo)); @Suppresswarnings ("desmarcado") LISTA <E> LIST = (LIST <E>) in.readObject (); lista de retorno; } catch (filenotfoundException e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } catch (classNotFoundException e) {e.printStackTrace (); } finalmente {if (in! = null) {tente {in.close (); } catch (ioexception e) {lança nova runtimeException ("fechamento de arquivo de dados falhado", e); }}} Retorne novo ArrayList <E> (); } / ** * Armazenamento: Leia os dados no nome do arquivo do diretório * @param list * Coleção de dados a serem armazenados * @param arquivo nome * endereço de arquivo * @return * Retorne true se o armazenamento for bem -sucedido, caso contrário, retorne false * / public static <e> tente {out = new ObjectOutputStream (new FileOutputStream (nome do arquivo)); out.WriteObject (List); retornar true; } catch (filenotfoundException e) {e.printStackTrace (); } catch (ioexception e) {e.printStackTrace (); } finalmente {if (out! = null) {try {out.close (); } catch (ioexception e) {lança nova runtimeException ("fechamento de arquivo de dados falhado", e); }}} retorna false; }} Funções públicas:
package cn.hncu.bookStore.common;public enum uuidModelConstance { /** * Enumeration: enumerate the five types of user UserModel, BookModel, InMainModel, InDetailModel, OutMainModel, OutDetailModel, StockModel */ User("UserModel"), Book("BookModel"), In_main ("inmainModel"), in_detail ("indetailmodel"), out_main ("outmainmodel"), out_detail ("OutdoTailModel"), estoque ("stockmodel"); Nome da string final privada; private uuidmodelConstance (nome da string) {this.name = name; } public string getName () {return name; }} pacote cn.hncu.bookstore.common.uuid.vo; importar java.io.serializable; classe pública uuidmodel implementa serializável { / *** gerar automaticamente o número Uuid com o modelo de senção de votação* encapsulada uuid, gerar automaticamente 1 / private Static Longversion ModelName de String Private String; // indica Usermodel, Bookmodel, InmainModel, IndetailModel, OutmainModel, OutdoTailModel, Stockmodel private int CurrentNum; // ModelName Número Uuid public uuidmodel () {} // set, obtenha string pública getModelnName () {} // set string getModelnName () } 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 resultado = 1; resultado = prime * resultado + ((modelName == null)? 0: modelName.hashcode ()); resultado de retorno; } @Override public boolean equals (object obj) {if (this == obj) retorna true; if (obj == null) retorna false; if (getClass ()! = obj.getclass ()) retornar false; uuidmodel outros = (uuidmodel) obj; if (modelName == null) {if (other.modelName! = null) retorna false; } else if (! ModelName.equals (outros.modelName)) retorna false; retornar true; }} pacote cn.hncu.bookstore.common.uuid.dao.ebi; importação cn.hncu.bookstore.common.uuidmodelConstance; interface pública uuiddao { /** ** ** ** *** (Usermodel, Bookmodel, InmainModel, IndetailModel, OutmainModel, OutdoTailModel, Stockmodel) * @return * Gere o número do tipo correspondente 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; importar cn.hncu.bookstore.utils.fileioutil; classe pública uuidebo implementa uuiddao {private final string file_name = "uuid.txt"; // armazenamento os dados no uuid no uuid.tatic string_name = "uuid.txt"; // armazenamento os dados no uuid no uuid.tatic file_name = "uuxt.txt"; // armazenamento os dados no uuid no uuid.tatic file_name = "uuid.txt"; // armazenamento os dados no uuid no uuid.tatic file_name = "uuid.txt"; // armazenamento os dados do uuid no uuid.tatic file_name ... getNextNum (uuidModelConstance UMC) {String modelName = umc.getName (); // Obtenha a lista de tipos de usuário <UuidModel> list = fileioutil.readfromfile (file_name); // leia todos os dados do tipo de usuário gerado uuid do arquivo for (uuidmodel UMMOM if (um.getModelName (). Equals (ModelName.Trim ())) {// Se houver modelName no arquivo, retorne o próximo número deste tipo uuid int = um.getCurrentNum (); um.setCurrentNum (res+1); Fileioutil.writetofile (list, file_name); // salvar os dados UUID atualizados na pasta retornar ""+res; }} // Se o loop for não for encontrado, significa que o nome do modelo é o primeiro, numerado 1 // novo objeto desse tipo, salve -o na pasta uuidmodel um = new uuidmodel (); um.setModelName (ModelName); um.setCurrentnum (2); list.add (um); Fileioutil.writetofile (list, file_name); retornar "" +1; }} pacote cn.hncu.bookstore.common.uuid.dao.factory; importar cn.hncu.bookstore.common.uuid.dao.ebi.uuiddao; import cn.hncu.bookstore.common.uuid.dao.ebo.uuideBo; uuidDaofactory () {} / ** * Obtenha interface uuiddao * @return * uuiddao * / public static uuiddao getuUiddao () {return new uuidebo (); }} O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.