Requisitos funcionales del proyecto del sistema de librería Java:
1. Puede operar el registro del usuario, modificar información básica, eliminar y consultar.
2. Puede agregar, eliminar, modificar y consultar la información básica del libro.
3. Puede completar el formulario de compra. Un formulario de compra contiene múltiples información de compra específica. Los libros comprados ya deben estar disponibles en la gestión del libro; Mientras compra, modifica el volumen de inventario de los libros correspondientes en el inventario.
4. Puede completar el formulario de ventas. Un formulario de ventas contiene múltiples información de ventas específica. Los libros vendidos ya deben estar en la gestión del libro, y la cantidad de ventas no puede exceder la cantidad actual de inventario; Mientras vende, modifique el volumen de inventario de los libros correspondientes en el inventario.
5. Puede ver los detalles del inventario y encontrar el valor de inventario de libros específicos de acuerdo con las condiciones.
6. Simplifique los permisos e implementa el control de permiso fijo. El usuario se divide en personal con diferentes permisos de operación de acuerdo con el módulo, y un usuario administrativo especial puede operar todas las funciones.
Diseño básico del proyecto:
★ Diseño arquitectónico:
Marco general y división de módulos: 5 módulos: usuario, libro, compra, ventas e inventario
★ Diseño de estructura funcional del sistema:
Submódulos funcionales específicos de cada módulo funcional ★ Diseño de la base de datos:
Implementación del marco del proyecto: dividido en módulos, capas, subcontratación y construcción del marco central de la aplicación: implementar la transformación de cada interfaz
paquete cn.hncu.bookstore; import cn.hncu.bookstore.login.ui.login;/** * *@autor <a href = "mailto: [email protected]"> xzm </a> */public class BookSteReApp se extiende javax.swing.jframe {privado static final de larga duración / ** Crea un nuevo formulario BookSteRepp*/ public BookSteReApp () {initComponents (); this.setContentPane (nuevo inicio de sesión (this)); // Agregar interfaz de inicio de sesión this.validate (); getContentPane (). SetLocation (150, 50); } // gen-begin: initComponents // <editor-fold defaultState = "colapsed" desc = "código generado"> privado 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 (); pastoruitem = new javax.swing.jmenuitem (); deletemenuitem = 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 (); 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 (nuevo Java.awt.Dimension (800, 600)); getContentPane (). SetLayout (nulo); fileMenu.setText ("archivo"); OpenMenuitem.settext ("abierto"); fileMenu.add (OpenMenuitem); saveMenuitem.settext ("guardar"); fileMenu.add (SaveMenuitem); saveasmenuitem.settext ("Guardar como ..."); fileMenu.add (SaveasMenuitem); ExitMenuitem.settext ("Salir"); exitMenuitem.AdDactionListener (new java.awt.event.actionListener () {public void accionperformed (java.awt.event.actionEvent evt) {exitMenuitEmactionperformed (evt);}}); fileMenu.add (ExitMenuitem); Menubar.add (Filemenu); editMenu.setText ("editar"); CutMenuitem.settext ("CUT"); editMenu.add (CutMenuitem); copyMenuitem.setText ("copia"); editMenu.add (copyMenuitem); pastoruitem.settext ("pegar"); editmenu.add (pastoruito); deletemenuitem.settext ("eliminar"); editmenu.add (deletemenuitem); Menubar.Add (EditMenu); helpMenu.settext ("Ayuda"); ContentsMenuitem.settext ("Contenido"); helpMenu.add (contenidoMenuitem); AboutMenuitem.settext ("Acerca de"); Helpmenu.add (AboutMenuitem); Menubar.add (Helpmenu); JMenu1.settext ("menú"); 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 (falso); 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 (falso); 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 (falso); menuiteminmain.addactionListener (new java.awt.event.actionListener () {public void accionperformed (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 (falso); Menuitemoutmain.addactionListener (new java.awt.event.actionListener () {public void accionperformed (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 (falso); 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); embalar(); } // </editor-fold> // gen-end: initComponents private void menuitEmloginActionperformed (java.awt.event.actionEvent evt) {// cambia a la interfaz de inicio de sesión y destruye el menú de funciones que cambia a cinco interfaces menuitEmbook.setEnabled (falso); MenuitEminMain.SetEnabled (falso); MenuitemoutMain.SetEnabled (falso); MenuitEmstock.SetEnabled (falso); MenuitEmuser.SetEnabled (falso); this.setContentPane (nuevo inicio de sesión (this)); this.Validate (); } void menuitemstockactionperformed (java.awt.event.actionEvent evt) {// cambia al módulo de inventario this.setContentPane (nuevo cn.hncu.bookstore.store.ui.listpanel (this)); this.Validate (); } void menuitemoutmainactionperformed (java.awt.event.actionEvent evt) {// cambia al módulo de ventas este.setContentPane (nuevo cn.hncu.bookstore.out.ui.listpanel (this)); this.Validate (); } void menuiteminmainactionperformed (java.awt.event.actionEvent evt) {// cambia al módulo de compra this.setContentPane (nuevo cn.hncu.bookstore.in.ui.listpanel (this)); this.Validate (); } void MenuitEMBookActionperformed (java.awt.event.actionEvent evt) {// cambia al módulo de libro this.setContentPane (nuevo cn.hncu.bookstore.book.ui.listPanel (this)); this.Validate (); } private void menuitemUserActionperformed (java.awt.event.actionEvent evt) {// cambia al módulo de usuario este.setContentPane (nuevo cn.hncu.bookstore.user.ui.listpanel (esto)); 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 Menuitemstock; } public javax.swing.jmenuitem getMenuitemuser () {return Menuitemuser; } private void ExitMenuTEMActionParformed (java.awt.event.actionEvent evt) {// gen-first: event_exitmenuitEmactionperformed System.exit (0); } // Gen-Last: Event_ExitMenuitEmactionperformed/** * @param args los argumentos de la línea de comandos */public static void main (string args []) {java.awt.eventqueue.invokelater (new runnable () {public void run () {new BookstoreApp (). SetVisible (true);}}); } // Gen -Begin: Variables // Declaración de variables: no modifique javax.swing.jmenuitem menuitemoutmain; Javax.swing privado. Jmenuitem AboutMenuitem; Javax.swing privado. Jmenuitem ContentsMenuitem; Javax.swing privado. JMenuitem Copymenuitem; Javax.swing privado. Jmenuitem Cutmenuitem; privado javax.swing.jmenuitem Deletemenuitem; privado javax.swing.jmenu editmenu; Javax.swing privado. JMenuitem ExitMenuitem; privado javax.swing.jmenu filemenu; Javax.swing.jmenu Helpmenu; privado javax.swing.jmenu jmenu1; Javax.swing privado.jmenubar Menubar; Javax.swing privado. Jmenuitem MenuitEmbook; Javax.swing privado. JMenuitem Menuiteminmain; Javax.swing privado. JMenuitem Menuitemlogin; Javax.swing privado.jmenuitem Menuitemstock; Javax.swing privado. Jmenuitem Menuitemuser; privado javax.swing.jmenuitem OpenMenuitem; Javax.swing privado. Jmenuitem Pastemenuitem; Javax.swing privado.jmenuitem Saveasmenuitem; Javax.swing privado. JMenuitem SaveMenuitem; // Declaración de finales de variables // Gen-END: Variables}
Kit de herramientas:
paquete cn.hncu.bookstore.utils; import java.text.dateFormat; import java.text.parseException; import java.text.simppledateFormat; import java.util.date; fallil de clase pública { /*** Convertir tiempo largo HH: mm: ss: "* @param t* (tipo largo) tiempo para convertir* @return* cadena en el formato de fecha*/ public static string longToString (long t) {date d = new Date (); DateFormat df = new SimpleDateFormat ("Yyyyy Year mm mes dd fecha hh: mm: ss:"); return df.format (d); } / ** * Convierta la cadena en el formato de fecha "aaa yyyy-mm-dd-hh: mm: ss:" a una hora de tipo larga * @param str * cadena de fecha para convertirse * @return * larga hora * @throws parseException * / public static long Stringtolong (String str) lanza ParseException {dateFormat df = new New SimpleDateFormat ("aaa-mm-dd-hh: mm: ss:"); Fecha d = df.parse (str); regresar d.gettime (); }} paquete 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.objectInStream; import java.io.ObjectEn java.util.arrayList; import java.util.list; public class FileIoutil { / *** Constructor Privatization* / private FileIoutil () {} / *** Lea los datos en el Directory FileName* @Param FileName* String* @return* return el conjunto correspondiente de type* / public static <E> list <E> nombre de archivo) {// Defina el archivo genérico = nuevo archivo (nombre de archivo); // Para cualquier archivo de lectura, es mejor usar el archivo para abrir el canal if (! file.exists ()) {// El archivo no existe y devuelve un conjunto vacío. Devolver nuevo ArrayList <E> (); } ObjectInputStream in = null; intente {in = new ObjectInputStream (new FileInputStream (File)); @SupplesSwarnings ("sin verificar") List <E> list = (list <E>) in.ReadObject (); lista de devolución; } catch (FileNotFoundException e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); } catch (ClassNotFoundException e) {E.PrintStackTrace (); } finalmente {if (in! = null) {try {in.close (); } catch (ioException e) {Throw New RuntimeException ("Fallado de cierre del archivo de datos", e); }}} return New ArrayList <E> (); } / ** * Almacenamiento: lea datos en el nombre de archivo del directorio * @param Lista * Recopilación de datos que se almacenarán * @param nombre de archivo * dirección * @return * return true Si el almacenamiento es exitoso, de lo contrario, devuelve falso * / public static <E> boolean writeToFile (list <E> list, string fileNeMame) {ObjectPutStTReam out = null; prueba {out = new ObjectOutputStream (new FileOutputStream (FileName)); out.writeObject (lista); devolver verdadero; } catch (FileNotFoundException e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); } finalmente {if (out! = null) {try {out.close (); } catch (ioException e) {Throw New RuntimeException ("Fallado de cierre del archivo de datos", e); }}} return false; }} Funciones 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 ("outorailmodel"), stock ("stockModel"); Nombre de cadena final privado; privado uuidModelConstance (nombre de cadena) {this.name = name; } public String getName () {nombre de retorno; }} paquete cn.hncu.bookstore.common.uuid.vo; import java.io.serializable; public class uuidModel implementa serializable { / *** Generar automáticamente el número de uuid con el modelo de votación* encapsulado UUID, genera automáticamente uuid* / privado estatic final largo serialversión = 1l; Private String ModelName; // indicar usermodel, bookModel, inMainModel, indetailModel, outMainModel, WauseAilModel, StockModel private int currentNum; // ModelName's UUID Number public uuidModel () {} // set, obtenga una cadena pública getModelName () {rurn Model Name; } 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 iguales (objeto obj) {if (this == obj) return true; if (obj == null) return false; if (getClass ()! = obj.getClass ()) return false; uuidModel otro = (uuidModel) obj; if (modelName == null) {if (otro.modelName! = null) return false; } else if (! ModelName.equals (OTRO.MODELNAME)) return false; devolver verdadero; }} paquete cn.hncu.bookstore.common.uuid.dao.ebi; import cn.hncu.bookstore.common.uuidModelConstance; interfaz pública uuiddao { /*** Generar automáticamente el número de UUID con el modelo de votación* @param Umc* tipos que deben generarse automáticamente (Usermodel, BookModel, InmainModel, IndetailModel, OutMainModel, WaseilModel, StockModel) * @return * Genere el número del tipo UUID */ Cadena pública getNextnum (uuidModelConstance umc);} paquete 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.uiddao; import cn.hncu.bookstore.common.uuid.vo.uuidmodel; import cn.hncu.bookstore.utils.fileioutil; public class uuidebo implementa uuiddao {private final static string file_name = "uuid.txt"; // almacenamiento de los datos en el archivo uuid.txt, o lectura final. getNextNum (uuidModelConstance umc) {string modelName = umc.getName (); // Obtenga la lista de tipos de usuario <UuidModel> list = fileioUtil.readFromFile (file_name); // Lea todos los datos del tipo de usuario generado UUID del archivo para (uuidModel um: list) { if (um.getModelName (). Equals (modelName.trim ())) {// if ModelName existe en el archivo, devuelva el siguiente número de este tipo uuid int res = um.getCurrentNum (); um.setCurrentNum (res+1); Fileioutil.writeTofile (list, file_name); // Guarde los datos UUID actualizados en la carpeta return ""+res; }} // Si no se encuentra el bucle for, significa que ModelName es el primero, numerado 1 // nuevo un objeto de este tipo, guárdelo en la carpeta uuidModel um = new uuidModel (); um.setModelName (ModelName); um.setCurrentNum (2); list.add (um); Fileioutil.writeTofile (list, file_name); devolver "" +1; }} paquete 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 uuiddaDaOfactory { / uuiddaFactory () {} / ** * Get Interface Uuiddao * @return * uuiddao * / public static uuiddao getuuiddao () {return new uuidebo (); }} Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.