Exigences fonctionnelles du système de système de librairie Java:
1. Peut exploiter l'enregistrement des utilisateurs, modifier les informations de base, supprimer et interroger.
2. Peut ajouter, supprimer, modifier et interroger les informations de base du livre.
3. Vous pouvez remplir le formulaire d'achat. Un formulaire d'achat contient plusieurs informations d'achat spécifiques. Les livres achetés doivent être déjà disponibles dans la gestion du livre; Lors de l'achat, modifiant le volume d'inventaire des livres correspondants dans l'inventaire.
4. Vous pouvez remplir le formulaire de vente. Un formulaire de vente contient plusieurs informations de vente spécifiques. Les livres vendus doivent déjà être dans la gestion du livre et la quantité de vente ne peut pas dépasser la quantité d'inventaire actuelle; Pendant la vente, modifiez le volume des stocks des livres correspondants dans l'inventaire.
5. Vous pouvez afficher les détails des stocks et trouver la valeur de l'inventaire de livres spécifiques en fonction des conditions.
6. Simplifiez les autorisations et implémentez le contrôle fixe d'autorisation. L'utilisateur est divisé en personnel avec différentes autorisations de fonctionnement en fonction du module, et un utilisateur d'administration spécial peut faire fonctionner toutes les fonctions.
Conception de projet de base:
★ Conception architecturale:
Cadre global et division des modules: 5 modules: utilisateur, livre, achat, vente et inventaire
★ Conception de la structure fonctionnelle du système:
Sous-modules fonctionnels spécifiques de chaque module fonctionnel ★ Conception de la base de données:
Implémentation du cadre du projet: divisé en modules, superposition, sous-traitance et création du cadre central d'application - mise en œuvre de la transformation de chaque interface
Package cn.hncu.bookstore; Importer cn.hncu.bookstore.login.ui.login; / ** * * @ auteur <a href = "Mailto: [email protected]"> xzm </a> * / Public Class BookstoreApp extension javax.swing.jframe {private static final Long SERIALSIONUID = 1l; / ** crée un nouveau formulaire BookStoreApp * / BookStoreApp () {initComponents (); this.setContentPane (new Login (this)); // Ajouter une interface de connexion this.validate (); getContentPane (). SetLocation (150, 50); } // Gen-Begin: initComponents // <Editor-Fold defaultState = "ENCHAPSED" DESC = "Code généré"> private void initComponents () {menuBar = new Javax.swing.jMenubar (); filemenu = new javax.swing.jmenu (); OpenMenuem = new Javax.swing.jMenuItem (); SAVEMENUITEM = NOUVEAU JAVAX.SWING.JMENUITEM (); SaveAsMenuem = new Javax.swing.jMenuem (); eXitMenuItem = new Javax.swing.jMenuem (); editMenu = new Javax.swing.jMenuem (); CutMenuem = new Javax.swing.jMenuem (); CopyMenuItem = new Javax.swing.jMenuem (); pastemeMiUtem = new Javax.swing.jMenuem (); DeletemeMinem = new Javax.swing.jMenuem (); HelpMenu = new Javax.swing.jMenuem (); ContenuMenuem = new Javax.swing.jMenuItem (); À propos de Menuem = new Javax.swing.jMenuem (); jmenu1 = new javax.swing.jmecutem (); MenuIvemUser = new Javax.swing.jMenuem (); MenuItemBook = new Javax.swing.jMenuem (); MENUIMEMINMAIN = NOUVEAU JAVAX.SWING.JMENUITEM (); MenuItemoutmain = new Javax.swing.jMenuem (); MenuItemStock = new Javax.swing.jMenuem (); MeniUtemLogin = new Javax.swing.jMenuem (); setDefaultCloseOperation (javax.swing.windowconstants.exit_on_close); setMinimumSize (new java.awt.dimension (800, 600)); getContentPane (). setLayout (null); fileMenu.seTTExt ("fichier"); OpenMenuTem.SeTText ("Open"); filemenu.add (OpenMenuem); SAVEMEUITEM.SETTEXT ("SAVE"); filemenu.add (SaveMeUitem); SAVEASMENUITEM.SETTEXT ("Save As ..."); filemenu.add (SaveasMenuem); eXitMenuItem.SeTText ("sortie"); exitMenuem.addactionListener (new java.awt.event.actionListener () {public void ActionPerformed (java.awt.event.actionEvent evt) {eXitMenuteMActionperformed (evt);}}); fileMenu.Add (eXitMenuem); MenUbar.Add (FileMenu); EditMenu.SeTTEXT ("édition"); CutMenuItem.SeTText ("Cut"); editMenu.Add (CutMenuem); CopyMenuItem.SeTText ("Copie"); editMenu.Add (CopyMenuItem); pasteMeUitem.setText ("pâte"); editmenu.add (pastemuem); DeletemeMitem.SetText ("Delete"); EditMenu.Add (DeletemeMiUtem); MenUbar.Add (EditMenu); helpMenu.seTText ("Help"); Contenu Menuem.SeTText ("Contenu"); HelpMenu.Add (contenu Menuem); À propos deMenuTem.SeTText ("À propos"); HelpMenu.Add (AboutMenuem); 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"); MenUiUtemUser.SetEnabled (false); MenuItemUser.AddActionListener (new Java.awt.Event.ActionListener () {public void ActionPerformed (java.awt.event.actionEvent evt) {MeniUtemUserActionperformed (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.keenvent.vk_i, java.awt.event.inputevent.ctrl_mask)); MENUIMEMINMAIN.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); Menutemoutmain.setaccelerator (javax.swing.keystroke.getkeystroke (java.awt.event.keenvent.vk_o, java.awt.event.inputevent.ctrl_mask)); MenuItemoutmain.seTText ("/ U9500 / U552E / U6A21 / U5757"); MenuIteMoutmain.SetEnabled (false); Menutemoutmain.addactionListener (new java.awt.event.actionListener () {public void ActionPerformed (java.awt.event.actionEvent evt) {menutemoutmainActionperformed (evt);}}); JMenu1.Add (Menuitemoutmain); menutemStock.setaccelerator (javax.swing.keystroke.getkeystroke (java.awt.event.keenvent.vk_s, java.awt.event.inputevent.ctrl_mask)); MENUITEMSTOCK.SETTEXT ("/ U5E93 / U5B58 / U6A21 / U5757"); menutemStock.setEnabled (false); MENUITEMSTOCK.AddActionListener (new Java.awt.Event.ActionListener () {public void ActionPerformed (java.awt.event.actionEvent evt) {MeniUtemStockActionperformed (evt);}}); JMenu1.Add (MenuitemStock); MENUITEMLOGIN.Setaccelerator (javax.swing.keystroke.getkeystroke (java.awt.event.keenvent.vk_l, java.awt.event.inputevent.ctrl_mask)); MENUITEMLOGIN.SETTEXT ("/ U6CE8 / U9500"); MENUITEMLOGIN.ADDACTIONLISTERNER (new Java.awt.Event.ActionListener () {public void ActionPerformed (java.awt.event.actionEvent evt) {MeniUtemLogInActionperformed (evt);}}); JMenu1.add (Menuitemlogin); MenUbar.Add (JMenu1); setjMenubar (Menubar); paquet(); } // </ editor-fold> // Gen-End: initComponents private void menutemloginactionPerformed (java.awt.event.actionEvent evt) {// Passez à l'interface de connexion et détruisez le menu de fonction qui passe à cinq interfaces MenuitemBook.Stetenable (false); MenuIteMinmain.setEnabled (false); MenuIteMoutmain.SetEnabled (false); menutemStock.setEnabled (false); MenUiUtemUser.SetEnabled (false); this.setContentPane (new Login (this)); this.validate (); } void MeniUtemStockActionPerformed (java.awt.event.actionEvent evt) {// Passez au module d'inventaire this.setContentPane (new Cn.hncu.BookStore.store.Ui.listPanel (this)); this.validate (); } void menutemoutMainActionPerformed (java.awt.event.actionEvent evt) {// Passez au module de vente this.setContentPane (new Cn.hncu.bookstore.out.ui.listpanel (this)); this.validate (); } void MeniUteMinMainActionPerformed (java.awt.event.actionEvent evt) {// Passez au module d'achat this.setContentPane (nouveau cn.hncu.bookstore.in.ui.listpanel (this)); this.validate (); } void MeniUtemBookActionPerformed (java.awt.event.actionEvent evt) {// Passez au module de livre this.setContentPane (new Cn.hncu.bookstore.book.ui.listpanel (this)); this.validate (); } private void MeniUteMUserActionPerformed (java.awt.event.actionEvent evt) {// Passez au module utilisateur this.setContentPane (new Cn.hncu.bookstore.user.ui.listpanel (this)); this.validate (); } public javax.swing.jmecutem getMenueMoutmain () {return menutemoutmain; } public javax.swing.jMenuem GetMenuItemBook () {return menutembook; } public javax.swing.jmecutem getMenuiTeminmain () {return MeniUteMinMain; } public javax.swing.jMenuItem getMenuItemStock () {return menutemStock; } public javax.swing.jMenuItem getMenuItemUser () {return menutemStock; } public javax.swing.jMenuItem getMenuItemUser () {return MeniUtemUser; } private void exitMenuTeMActionPerformed (java.awt.event.actionEvent evt) {// gen } // Gen-Last: Event_ExitMenuItemActionPerformed / ** * @param args les arguments de ligne de commande * / public static void main (String args []) {java.awt.eventqueue.invokelater (new Runnable () {public void run () {new bookstoreApp (). Setvisible (true);}}); } // Gen-Begin: Variables // Déclaration de variables - Ne modifiez pas Javax.swing.swing.jMenuem MeniUtemoutmain; privé javax.swing.jMenuitem AboutMenuem; Javax.swing.swing.jMenuItem Contents Menuem; privé javax.swing.jMenuem CopyMenuemm; privé javax.swing.jMenuItem CutMenuem; privé javax.swing.jMenuItem DeletemeMiUtem; Private Javax.swing.jmenu EditMenu; privé javax.swing.jMenuItem EXITMENUITEM; Privé Javax.swing.jmenu FileMenu; Private Javax.swing.jmenu HelpMenu; privé javax.swing.jmenu jmenu1; privé javax.swing.jmenubar Menubar; privé javax.swing.jMenuItem MENUITIEMBOOK; privé javax.swing.jMenuem MenuiteMinmain; privé javax.swing.jmecutem MenueMlogin; Private Javax.swing.jMenuItem MenuitemStock; privé javax.swing.jMenuItem MenuuitemUser; privé javax.swing.jMenuem OpenMenuem; Private Javax.swing.jmeniuitem pastemuem; privé javax.swing.jMenuem SaveasMenuem; privé javax.swing.jMenuItem SaveMenuMitem; // Fin des variables Déclaration // Gen-End: Variables}
Boîte à outils:
Package cn.hncu.bookstore.utils; import java.text.dateformat; import java.text.parseException; import java.text.simpledateformat; importer java.util.date; casse publique dateutils {/ ** * convertir le temps long du type de type hh: mm: " @param t * (de type long) du temps à convertir * @return * chaîne dans le format de date * / chaîne statique publique longToString (long t) {date d = new Date (); DateFormat df = new SimpledateFormat ("Yyyyy Year MM MOSD DD DAT HH: MM: SS:"); return df.format (d); } / ** * Convertir la chaîne dans le format de date "Yyyy-mm-dd-hh: mm: ss:" en un temps de type long * @param str * date string à converti * @return * Type long du type * @throws parseexception * / public static stringtolong (String Str) lance PasseException {dateformat df = new Static StringTolong (String Str) lance PasseException {dateformat df = new Static StringTolong (String Str) LasteException {dateformat df = new Static StringTolong (String Str) LasteException {dateformat df = new Static Stringtolong (String Str) LasteException {Dateformat df = new Stand SimpledateFormat ("Yyyy-mm-dd-hh: mm: ss:"); Date D = df.Parse (Str); retour 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; java.util.arraylist; import java.util.list; public class fileioutil {/ ** * Constructor privatisation * / private fileioutil () {} / ** * lisez les données du nom de fichier du répertoire * @param nom de fichier * fichier * @return * File de fichier générique = nouveau fichier (nom de fichier); // Pour tout fichier de lecture, il est préférable d'utiliser le fichier pour ouvrir le canal if (! file.exists ()) {// Le fichier n'existe pas et renvoie un ensemble vide. Renvoyer un nouveau ArrayList <e> (); } ObjectInputStream dans = null; try {in = new ObjectInputStream (new FileInputStream (fichier)); @SuppressWarnings ("Unchecked") List <e> list = (list <e>) in.readObject (); Liste de retour; } catch (filenotFoundException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } catch (classNotFoundException e) {e.printStackTrace (); } enfin {if (in! = null) {try {in.close (); } catch (ioException e) {lancer un nouveau runtimeException ("la fermeture des fichiers de données a échoué", e); }}} return new ArrayList <e> (); } / ** * Stockage: Lisez les données dans le nom de fichier du répertoire * @param liste * Collection de données à stocker * @param nom de fichier * Adresse de fichier * @return * renvoie true si le stockage est réussi, sinon, return false * / public static <e> boolean writeTofile (list <e> list, string filename) {objectoutStream out = null; try {out = new ObjectOutputStream (new FileOutputStream (nom de fichier)); out.writeObject (list); Retour Vrai; } catch (filenotFoundException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } enfin {if (out! = null) {try {out.close (); } catch (ioException e) {lancer un nouveau runtimeException ("la fermeture des fichiers de données a échoué", e); }}} return false; }} Fonctions publiques:
Package CN.hncu.BookStore.Common; Énumération publique UuidModelConstance {/ ** * Énumération: énumérez les cinq types d'utilisateur 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"); Nom de la chaîne finale privée; UuidModelConstance privé (nom de chaîne) {this.name = name; } public String getName () {Nom de retour; }} Package cn.hncu.bookstore.common.uuid.vo; import java.io.serializable; public classe UUIDModel implémente Serializable {/ ** * générer automatiquement le numéro UUID avec le modèle de vote-sing * encapsuler UUID, générer automatiquement UUID * / privé static final Serialversionuid = 1l; Private String ModelName; // Indiquez UserModel, BookModel, InMainModel, IndetailModel, OutMainModel, OutdetailModel, StockModel private int currentNum; // ModelName UUID Number 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 résultat = 1; result = prime * Result + ((ModelName == null)? 0: ModelName.HashCode ()); Résultat de retour; } @Override public boolean equals (objet obj) {if (this == obj) return true; if (obj == null) return false; if (getClass ()! = obj.getClass ()) return false; uuidModel Autre = (uuidModel) obj; if (ModelName == null) {if (autre.ModelName! = null) return false; } else if (! ModelName.equals (autre.ModelName)) renvoie false; Retour Vrai; }} Package cn.hncu.bookstore.common.uuid.dao.ebi; Importer cn.hncu.bookstore.common.uUidModelConstance; interface publique Uuiddao {/ ** * Générer automatiquement le numéro UUID avec le modèle de sing de vote * @param umc * (UserModel, BookModel, InmainModel, IndetailModel, OutMainModel, OutdetailModel, StockModel) * @return * Générez le numéro du type correspondant UUID * / public String getNextnum (UUIDModelConstance UMC);} package cn.hncu.bookstore.common.uuid.dao.ebo; import java.util.list; importer cn.hncu.bookstore.common.uuidmodelconstance; import Cn.hncu.bookstore.common.uuid.dao.ebi.uUiddao; Import cn.hncu.bookstore.common.uuid.vo.uuidmodel; Importer cn.hncu.bookstore.utils.fileioutil; classe publique Uuidebo implémente uUiddao {private final static file_name = "uUid.txt"; // stockage les données dans le fichier UUid.txt, ou lire @Override Public WRMO getNextNum (uUIdModelConstance UMC) {String ModelName = UMC.getName (); // Obtenez la liste de types utilisateur <UUIDModel> list = fileioutil.readfromfile (file_name); // Lire toutes les données du type d'utilisateur généré uuid à partir du fichier pour (uUidModel um: list) { if (um.getModelName (). Equals (ModelName.trim ())) {// Si ModelName existe dans le fichier, renvoyez le numéro suivant de ce type uuid int res = um.getCurrentNum (); um.setCurrentNum (res + 1); Fileioutil.writeTofile (list, file_name); // Enregistrez les données UUID mises à jour dans le dossier return "" + res; }} // Si la boucle FOR n'est pas trouvée, cela signifie que ModelName est le premier, numéroté 1 // nouvel objet de ce type, enregistrez-le dans le dossier 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; Classe publique Uuiddaofactory {** * ** * uUiddaofactory () {} / ** * Get Interface Uuiddao * @return * uuiddao * / public static uuiddao getUuiddao () {return new Uuidebo (); }} Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.