这里有新鲜出炉的 Java 并发编程示例,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 java 书店系统毕业设计,第一步系统总体设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java 书店系统项目功能需求:
1、能进行操作用户的注册,修改基本信息,删除和查询。
2、能对图书的基本信息进行增加、删除、修改和查询操作。
3、能填写进货单,一张进货单带有多条具体的进货信息,进货的书籍必须是图书管理里面已经有的;进货的同时修改库存对应书籍的存货量。
4、能填写销售单,一张销售单带有多条具体的销售信息,销售的书籍必须是图书管理里面已经有的,而且销售的数量不能超过当前库存的数量;销售的同时修改库存对应书籍的存货量。
5、可以查看库存的明细,可以按照条件进行查找具体的图书的库存值。
6、权限方面进行简化,做固定的权限控制。把用户按照模块分成不同操作权限的人员,特设一个 admin 的用户,可以操作全部的功能。
项目基本设计:
★ 架构设计:
整体框架、模块划分
模块划分:用户、图书、进货、销售和库存 5 个模块
★ 系统功能结构设计:
每个功能模块的具体功能子模块
★ 数据库设计:
项目框架实现:分模块、分层、分包、构建应用程序
核心框架—- 实现每个界面的转换
- 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型时间转换成日期格式"yyyy年MM月dd日HH:mm:ss:"的字符串
- * @param t
- * 待转换的(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:"的字符串转换成long型时间
- * @param str
- * 待转换的日期字符串
- * @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 {
- /**
- * 构造函数私有化
- */
- private FileIOUtil() {}
- /**
- * 把目录fileName里的数据读出
- * @param fileName
- * 文件地址
- * @return
- * 返回对应类型的集合
- */
- public static < E > List < E > readFromFile(String fileName) { //定义在静态方法上的泛型
- 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("数据文件关闭失败", e);
- }
- }
- }
- return new ArrayList < E > ();
- }
- /**
- * 存储:向目录fileName里读入数据
- * @param list
- * 待存入数据的集合
- * @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("数据文件关闭失败", 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当前的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
- * 生成对应类型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"; //把数据存储到uuid.txt文件中,或读取
- @Override public String getNextNum(uuidModelConstance umc) {
- String modelName = umc.getName(); //获得待生成uuid编号的user类型
- List < uuidModel > list = FileIOUtil.readFromFile(FILE_NAME); //从文件中读取所有已生成user类型uuid的数据
- 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); //把经过更新的uuid数据存入文件夹
- return "" + res;
- }
- }
- //如果for循环没有找到,说明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 {
- /**
- * 构造函数私有化
- */
- private uuidDAOFactory() {
- }
- /**
- * 获得接口uuidDAO
- * @return
- * uuidDAO
- */
- public static uuidDAO getUuidDAO() {
- return new uuidEbo();
- }
- }
来源: http://www.phperz.com/article/17/1128/359767.html