最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計模塊系列之書店管理系統(tǒng)單機(jī)版(一)

 更新時間:2016年08月22日 15:36:07   作者:qq_26525215  
這篇文章主要為大家詳細(xì)介紹了Java單機(jī)版的書店管理系統(tǒng)設(shè)計模塊和思想第一章,感興趣的小伙伴們可以參考一下

書店管理系統(tǒng):

項目練習(xí)目標(biāo) :
1、Java應(yīng)用程序基本分析
2、培養(yǎng)面向?qū)ο缶幊痰幕舅枷?
3、Java基本設(shè)計模式綜合應(yīng)用
4、掌握分層和接口的基本設(shè)計
5、構(gòu)建合理的Java應(yīng)用程序包結(jié)構(gòu)
6、綜合應(yīng)用JSE所學(xué)習(xí)的知識
7、在應(yīng)用中合理使用集合框架
8、在應(yīng)用中綜合使用swing的常用組件
9、基本的表現(xiàn)層的實現(xiàn)機(jī)制
10、IO流和文件的基本操作
11、培養(yǎng)良好的Java編程習(xí)慣
12、培養(yǎng)調(diào)試Java程序的能力,培養(yǎng)改錯的能力

項目功能需求 :
1、能進(jìn)行操作用戶的注冊,修改基本信息,刪除和查詢。
2、能對圖書的基本信息進(jìn)行增加、刪除、修改和查詢操作。
3、能填寫進(jìn)貨單,一張進(jìn)貨單帶有多條具體的進(jìn)貨信息,進(jìn)貨的書籍必須是圖書管理里面已經(jīng)有的;進(jìn)貨的同時修改庫存對應(yīng)書籍的存貨量。
4、能填寫銷售單,一張銷售單帶有多條具體的銷售信息,銷售的書籍必須是圖書管理里面已經(jīng)有的,而且銷售的數(shù)量不能超過當(dāng)前庫存的數(shù)量;銷售的同時修改庫存對應(yīng)書籍的存貨量。
5、可以查看庫存的明細(xì),可以按照條件進(jìn)行查找具體的圖書的庫存值。
6、權(quán)限方面進(jìn)行簡化,做固定的權(quán)限控制。把用戶按照模塊分成不同操作權(quán)限的人員,特設(shè)一個admin的用戶,可以操作全部的功能。

項目基本設(shè)計 :
★ 架構(gòu)設(shè)計
整體框架、模塊劃分
模塊劃分:用戶、圖書、進(jìn)貨、銷售和庫存5個模塊

★ 系統(tǒng)功能結(jié)構(gòu)設(shè)計
每個功能模塊的具體功能子模塊

★ 數(shù)據(jù)庫設(shè)計
項目框架實現(xiàn):分模塊、分層、分包、構(gòu)建應(yīng)用程序

1、用戶管理(User.txt)

 

說明:其中的type為int類型,用來表示操作用戶的類型。
1——表示為admin,可以進(jìn)行全部操作
2——表示為能操作圖書模塊的人員
3——表示為能操作進(jìn)貨模塊的人員
4——表示為能操作銷售模塊的人員
5——表示為能操作庫存模塊的人員

2、圖書管理(Book.txt)

3、進(jìn)貨管理(InMain.txt)

4、進(jìn)貨明細(xì)管理(InDetail.txt)

5、銷售管理(OutMain.txt)

6、銷售明細(xì)管理(OutDetail.txt)

7、庫存管理(Stock.txt)

項目分包

第一層:按照模塊分
用戶模塊(user)、
圖書(book)、
進(jìn)貨(in)、
銷售(out)、
庫存(store)

第二層:按照三層模式分
表現(xiàn)層(ui)、邏輯層(business) 和 數(shù)據(jù)層(dao)
通常還要增加一個值對象層(vo)

第三層:按照層內(nèi)劃分去分
視具體情況而定,如business和dao內(nèi)還要再采用鐵三角的形式建子包,而ui和vo則不需要再劃分子包)。

項目分層思想:

 

未完善,請繼續(xù)關(guān)注本系列(二)

下面為部分代碼:(util里面的一個公共類)

cn.hncu.bookStore.util
FileIoUtil.java:

package cn.hncu.bookStore.util;

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;
import javax.swing.JOptionPane;

/**
 * 用戶的公用數(shù)據(jù)讀取寫入類
 * @author 陳浩翔
 *
 * @version 1.0
 */
public class FileIoUtil {

 public FileIoUtil() {
 }

 /**
 * 從數(shù)據(jù)庫中讀取所有的數(shù)據(jù)并返回出來
 * 
 * @param fileName(數(shù)據(jù)表對應(yīng)的文件名字)
 * @param ee(傳遞過來的泛型的類型!)
 * @return 所有表的記錄!
 */
 @SuppressWarnings("unchecked")//壓警告
 public static<E> List<E> readFormFile(String fileName,E ee){
 List<E> list = new ArrayList<E>();
 final File file = new File(fileName);

 ObjectInputStream in =null;
 if(!file.exists()){
  JOptionPane.showMessageDialog(null, "數(shù)據(jù)表不存在!");
  return list;
 }
 try {
  in = new ObjectInputStream(new FileInputStream(fileName));
  try {
  list = (List<E>) in.readObject();

  } catch (ClassNotFoundException e) {
  e.printStackTrace();
  }
 } catch (FileNotFoundException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }finally{
  if(in!=null){
  try {
   in.close();
  } catch (IOException e) {
   throw new RuntimeException("數(shù)據(jù)庫關(guān)閉失敗");
  }
  }
 }
 return list;
 }


 /**
 * 寫入一個list集合進(jìn)入數(shù)據(jù)文件fileName
 * 
 * @param list(需要存儲的數(shù)據(jù)集合)
 * @param fileName(寫入到哪個文件的文件名字)
 */
 public static void write2file(List<Object> list, String fileName){
 ObjectOutputStream out = null;

 try {
  out = new ObjectOutputStream(new FileOutputStream(fileName));
  out.writeObject(list);
 } 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)閉失敗!");
  }
  }
 }
 }

}

封裝的用戶數(shù)據(jù):

cn.hncu.bookStore.user.vo;
UserModel.java


package cn.hncu.bookStore.user.vo;

/**
 * @author 陳浩翔
 * @version 1.0
 * 
 * <br/>
 * 用于保存用戶信息的值對象<br/>
 * 1、可序列化<br/>
 * 2、私有化所有變量成員,補setter-getters方法<br/>
 * 3、寫equals和hashCode方法----用主鍵(uuid)唯一標(biāo)識碼<br/>
 * 4、toString方法<br/>
 * 5,空參構(gòu)造方法<br/>
 */

public class UserModel {
 private String uuid;//用戶唯一標(biāo)識碼
 private String name;//用戶名
 private int type;//用戶類型
 private String pwd;//用戶密碼
 public UserModel() {
 }

 /**
 * 功能:得到uuid-用戶唯一的標(biāo)識碼
 * 
 * @return 返回uuid-用戶唯一的標(biāo)識碼
 */
 public String getUuid() {
 return uuid;
 }

 /**
 * 功能:設(shè)置uuid-用戶唯一的標(biāo)識碼
 * @param uuid-用戶唯一的標(biāo)識碼-String型參數(shù)
 */
 public void setUuid(String uuid) {
 this.uuid = uuid;
 }

 /**
 * 功能:得到用戶的用戶名
 * @return---name-用戶名
 */
 public String getName() {
 return name;
 }

 /**
 * 功能:設(shè)置用戶的用戶名
 * 
 * @param name--用戶設(shè)置的用戶名,String型參數(shù)
 */
 public void setName(String name) {
 this.name = name;
 }

 /**
 * 功能:得到用戶的類型:
 * 1——表示為admin,可以進(jìn)行全部操作
 * 2——表示為能操作圖書模塊的人員
 * 3——表示為能操作進(jìn)貨模塊的人員
 * 4——表示為能操作銷售模塊的人員
 * 5——表示為能操作庫存模塊的人員
 * @return 用戶的類型
 */
 public int getType() {
 return type;
 }

 /**
 * 功能:設(shè)置用戶的類型:
 * 1——表示為admin,可以進(jìn)行全部操作
 * 2——表示為能操作圖書模塊的人員
 * 3——表示為能操作進(jìn)貨模塊的人員
 * 4——表示為能操作銷售模塊的人員
 * 5——表示為能操作庫存模塊的人員
 * @param type--用戶的類型-int型參數(shù)
 */
 public void setType(int type) {
 this.type = type;
 }

 /**
 *功能:得到用戶的密碼
 * @return String型,用戶的密碼
 */
 public String getPwd() {
 return pwd;
 }

 /**
 * 功能:設(shè)置用戶的密碼
 * @param pwd--String型參數(shù)
 */
 public void setPwd(String pwd) {
 this.pwd = pwd;
 }


 @Override
 public int hashCode() {
 final int prime = 31;
 int result = 1;
 result = prime * result + ((uuid == null) ? 0 : uuid.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;
 UserModel other = (UserModel) obj;
 if (uuid == null) {
  if (other.uuid != null)
  return false;
 } else if (!uuid.equals(other.uuid))
  return false;
 return true;
 }
 @Override
 public String toString() {
 return "UserModel [uuid=" + uuid + ", name=" + name + ", type=" + type
  + ", pwd=" + pwd + "]";
 }

}

封裝的用戶查詢數(shù)據(jù):

cn.hncu.bookStore.user.vo;
UserQueryModel.java


package cn.hncu.bookStore.user.vo;

public class UserQueryModel extends UserModel{ 
}

雖然這個類什么都沒有,就只是繼承了UserModel,但還是必須寫,這是大家都遵守的java編寫規(guī)范!

用戶Dao(數(shù)據(jù)層):(接口)

cn.hncu.bookStore.user.dao.dao;
UserDao.java


package cn.hncu.bookStore.user.dao.dao;

import java.util.List;

import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.user.vo.UserQueryModel;

/**
 * 
 * @author 陳浩翔
 *
 * @version 1.0
 * 用戶模塊的數(shù)據(jù)層接口
 */
public interface UserDao {
 /**
 * 功能:創(chuàng)建一個用戶
 * 
 * @param userModel---將要創(chuàng)建的用戶數(shù)據(jù)
 * @return---true表示創(chuàng)建成功,false表示創(chuàng)建失敗
 */
 public boolean create(UserModel user);

 /**
 * 功能:刪除一個用戶
 * 
 * @param uuid---用戶唯一的標(biāo)識碼,每個用戶都不會相同
 * @return---true表示刪除成功,false表示刪除失敗
 */
 public boolean delete(String uuid);

 /**
 * 功能:修改用戶數(shù)據(jù)資料
 * 
 * @param user---需要修改的用戶數(shù)據(jù)參數(shù)名
 * @return 返回true-表示修改成功了,返回false-表示修改失敗
 */
 public boolean update(UserModel user);

 /**
 * 功能:得到所有的用戶數(shù)據(jù)
 * 
 * @return---一個UserModel集合,也就是用戶的數(shù)據(jù)
 */
 public List<UserModel> getAll();

 /**
 * 功能:按照一定的查找條件進(jìn)行查找,
 * <br/>
 * 把滿足查找條件的用戶數(shù)據(jù)返回。
 * 
 * @param uqm---被封裝的查找條件
 * @return---滿足查找條件的用戶數(shù)據(jù)集合
 */
 public List<UserModel> getbyCondition(UserQueryModel uqm);

 /**
 * 功能:得到一個確定的用戶的數(shù)據(jù)資料
 * 
 * @param uuid---用戶唯一標(biāo)識碼
 * @return ---返回按這個唯一標(biāo)識碼找到的用戶數(shù)據(jù)
 */
 public UserModel getSingle(String uuid);

}


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Jvm中時區(qū)設(shè)置方式

    詳解Jvm中時區(qū)設(shè)置方式

    這篇文章主要介紹了詳解Jvm中時區(qū)設(shè)置方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring boot動態(tài)修改日志級別的方法

    Spring boot動態(tài)修改日志級別的方法

    我們經(jīng)常會遇到業(yè)務(wù)想看debug日志的問題,但是debug日志頻繁打印會對日志查看有影響,且日志多對系統(tǒng)也會有一定的壓力,因此,如果可以在需要的時候動態(tài)臨時調(diào)整下日志的級別則是比較完美的,spring boot已經(jīng)支持這種功能,需要的朋友可以參考下
    2022-12-12
  • Java 高并發(fā)四:無鎖詳細(xì)介紹

    Java 高并發(fā)四:無鎖詳細(xì)介紹

    本文主要介紹Java 高并發(fā)無鎖的知識,這里整理了 1.無鎖類的原理詳解 2.無鎖類的使用的知識,并講解其原理,有需要的小伙伴可以參考下
    2016-09-09
  • JAVA基于Redis實現(xiàn)計數(shù)器限流的使用示例

    JAVA基于Redis實現(xiàn)計數(shù)器限流的使用示例

    計數(shù)器法是限流算法里最簡單也是最容易實現(xiàn)的一種算法,本文主要介紹了JAVA基于Redis實現(xiàn)計數(shù)器限流的使用示例,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • spring boot自帶圖片服務(wù)器使用詳解

    spring boot自帶圖片服務(wù)器使用詳解

    這篇文章主要為大家詳細(xì)介紹了spring boot自帶圖片服務(wù)器的使用 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • IDEA?database和datagrip無法下載驅(qū)動問題解決辦法

    IDEA?database和datagrip無法下載驅(qū)動問題解決辦法

    這篇文章主要給大家介紹了關(guān)于IDEA?database和datagrip無法下載驅(qū)動問題的解決辦法,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用idea具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-03-03
  • java selenium 常見web UI 元素操作及API使用

    java selenium 常見web UI 元素操作及API使用

    本文主要介紹java selenium 常見web UI 元素操作,這里幫大家整理了相關(guān)資料并附示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • @Value如何設(shè)置默認(rèn)值

    @Value如何設(shè)置默認(rèn)值

    這篇文章主要介紹了@Value如何設(shè)置默認(rèn)值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot Actuator未授權(quán)訪問漏洞解決方案

    SpringBoot Actuator未授權(quán)訪問漏洞解決方案

    工作的時候遇到過提示Spring Boot后端存在Actuator未授權(quán)訪問漏洞,網(wǎng)上有很多詳細(xì)的解釋文章,在這里做一個簡單的總結(jié)、介紹和分享,需要的朋友可以參考下
    2023-09-09
  • springboot自定義異常視圖過程解析

    springboot自定義異常視圖過程解析

    這篇文章主要介紹了springboot自定義異常視圖過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論

呼玛县| 错那县| 吉安县| 上栗县| 仁寿县| 鹤岗市| 海门市| 宁安市| 永修县| 宁都县| 庐江县| 武城县| 漳州市| 安达市| 平和县| 二连浩特市| 潜山县| 建昌县| 临潭县| 梧州市| 沙洋县| 朝阳市| 苗栗市| 措美县| 大渡口区| 云龙县| 成武县| 崇阳县| 徐汇区| 云林县| 蒙阴县| 西宁市| 江阴市| 西充县| 桦川县| 加查县| 大城县| 茌平县| 易门县| 武安市| 芜湖县|