Java實(shí)戰(zhàn)之網(wǎng)上書(shū)店管理系統(tǒng)的實(shí)現(xiàn)
1.效果展示


2.需求功能
用戶可以進(jìn)行注冊(cè)登陸系統(tǒng),在用戶的界面上,其可以進(jìn)行查看網(wǎng)上書(shū)店里的圖書(shū)類別和所在類別下的圖書(shū),根據(jù)自己的需求可在訂單項(xiàng)目里添加訂單購(gòu)買(mǎi)自己喜歡的圖書(shū);
管理員可以通過(guò)自己的賬號(hào)登錄到管理員系統(tǒng)對(duì)書(shū)店進(jìn)行管理,其可實(shí)現(xiàn)對(duì)圖書(shū)的添加,修改,查詢,和刪除功能,可以查看用戶的訂單,修改和維護(hù)訂單。添家客戶的信息用以統(tǒng)計(jì)數(shù)據(jù)。
在構(gòu)造系統(tǒng)時(shí),首先從需求出發(fā)構(gòu)造數(shù)據(jù)庫(kù),然后再由數(shù)據(jù)庫(kù)表結(jié)合需求劃分系統(tǒng)功能模塊。這樣,就把一個(gè)大的系統(tǒng)解成了幾個(gè)小系統(tǒng)。這里把系統(tǒng)劃分為了三個(gè)模塊:用戶登錄模塊,管理員模塊,用戶購(gòu)買(mǎi)模塊。模塊分別能夠?qū)崿F(xiàn)以下功能:
- 登錄模塊:實(shí)現(xiàn)登錄,注冊(cè)功能。
- 管理員模塊:實(shí)現(xiàn)對(duì)圖書(shū)的添加修改和刪除以及對(duì)訂單的添加修改和刪除功能。
- 用戶購(gòu)買(mǎi)模塊:實(shí)現(xiàn)對(duì)圖書(shū)的查找以及對(duì)所需圖書(shū)的下單功能。
3.系統(tǒng)總體設(shè)計(jì)及部分代碼

3.1登錄模塊設(shè)計(jì)
用戶正確輸入用戶名和密碼,連接到數(shù)據(jù)庫(kù),登錄成功!
private void loginActionPerformed(ActionEvent evt) {
String userName=this.userNameTxt.getText();
String password=new String(this.passwordTxt.getPassword());
if(StringUtil.isEmpty(userName)){
JOptionPane.showMessageDialog(null, "用戶名不能為空!");
return;
}
if(StringUtil.isEmpty(password)){
JOptionPane.showMessageDialog(null, "密碼不能為空!");
return;
}
CUser cuser=new CUser(userName,password);
Connection con=null;
try {
con=dbUtil.getCon();
CUser currentCUser =cuserDao.login(con,cuser);
if(currentCUser!=null){
dispose();
new CMainFrm().setVisible(true);
}else{
JOptionPane.showMessageDialog(null, "用戶名或者密碼錯(cuò)誤!");
}
} catch (Exception e) {
// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();
}
3.2新用戶的注冊(cè)
此模塊的核心是創(chuàng)建實(shí)例化對(duì)象。
private void registrationActionPerformed(ActionEvent evt) {
String userName=this.userNameTxt.getText();
String password=this.passwordTxt.getText();
if(StringUtil.isEmpty(userName)){
JOptionPane.showMessageDialog(null, "用戶名不能為空!");
return;
}
if(StringUtil.isEmpty(password)){
JOptionPane.showMessageDialog(null, "密碼不能為空!");
return;
}
Registration registration= new Registration(userName,password);
Connection con= null;
try {
con=dbUtil.getCon();
int n= registrationDao.add(con, registration);
if(n==1){
JOptionPane.showMessageDialog(null, "注冊(cè)成功!");
resetValue();
}else{
JOptionPane.showMessageDialog(null, "注冊(cè)失?。?);
}
}catch(Exception e) {
}finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();
JOptionPane.showMessageDialog(null, "注冊(cè)失??!");
}
}
}
3.3圖書(shū)添加模塊
管理員在此界面上可對(duì)系統(tǒng)里的圖書(shū)進(jìn)行查詢修改和刪除。
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
BookAddInterFrm frame = new BookAddInterFrm();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
3.4圖書(shū)添加事件
此界面主要實(shí)現(xiàn)圖書(shū)的添加功能。
/**
*圖書(shū)添加事件
*/
private void bookAddActionPerformed(ActionEvent evt) {
String bookName=this.bookNameTxt.getText();
String author=this.authorTxt.getText();
String price=this.priceTxt.getText();
String bookDesc=this.bookDescTxt.getText();
if(StringUtil.isEmpty(bookName)){
JOptionPane.showMessageDialog(null, "圖書(shū)名稱不能為空!");
return;
}
if(StringUtil.isEmpty(author)){
JOptionPane.showMessageDialog(null, "圖書(shū)作者不能為空!");
return;
}
if(StringUtil.isEmpty(price)){
JOptionPane.showMessageDialog(null, "圖書(shū)價(jià)格不能為空!");
return;
}
String sex="";
if(manJrb.isSelected()){
sex="男";
}else if(femaleJrb.isSelected()){
sex="女";
}
BookType bookType=(BookType) bookTypeJcb.getSelectedItem();
int bookTypeId=bookType.getId();
Book book=new Book(bookName,author, sex, Float.parseFloat(price) , bookTypeId, bookDesc);
Connection con=null;
try{
con=dbUtil.getCon();
int addNum=bookDao.add(con, book);
if(addNum==1){
JOptionPane.showMessageDialog(null, "圖書(shū)添加成功!");
resetValue();
}else{
JOptionPane.showMessageDialog(null, "圖書(shū)添加失??!");
}
}catch(Exception e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "圖書(shū)添加失敗!");
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 重置表單
*/
private void resetValue(){
this.bookNameTxt.setText("");
this.authorTxt.setText("");
this.priceTxt.setText("");
this.manJrb.setSelected(true);
this.bookDescTxt.setText("");
if(this.bookTypeJcb.getItemCount()>0){
this.bookTypeJcb.setSelectedIndex(0);
}
}
/**
* 初始化圖書(shū)類別下拉框
*/
private void fillBookType(){
Connection con=null;
BookType bookType=null;
try{
con=dbUtil.getCon();
ResultSet rs=bookTypeDao.list(con, new BookType());
while(rs.next()){
bookType=new BookType();
bookType.setId(rs.getInt("id"));
bookType.setBookTypeName(rs.getString("bookTypeName"));
this.bookTypeJcb.addItem(bookType);
}
}catch(Exception e){
e.printStackTrace();
}finally{
}
}
}
3.5買(mǎi)家信息維護(hù)
此模塊主要用于對(duì)買(mǎi)家信息的查找和維護(hù)。
/**
* 買(mǎi)家信息搜索事件處理
*/
protected void consumerSerachActionPerformed(ActionEvent evt) {
String s_consumerName= this.s_consumerNameTxt.getText();
Consumer consumer=new Consumer();
consumer.setConsumerName(s_consumerName);
this.fillTable(consumer);
}
private void fillTable(Consumer consumer){
DefaultTableModel dtm=(DefaultTableModel) consumerTable.getModel();
dtm.setRowCount(0); // 設(shè)置成0行
Connection con=null;
try{
con=dbUtil.getCon();
ResultSet rs=consumerDao.list(con, consumer);
while(rs.next()){
Vector v=new Vector();
v.add(rs.getString("id"));
v.add(rs.getString("consumerName"));
v.add(rs.getString("sex"));
v.add(rs.getString("age"));
v.add(rs.getString("number"));
v.add(rs.getString("bookName"));
dtm.addRow(v);
}
}catch(Exception e){
e.printStackTrace();
}finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();
}
}
}
/**
* 買(mǎi)家信息修改
*/
private void consumerUpdateActionEvet(ActionEvent evt) {
String id=idTxt.getText();
String consumerName=consumerNameTxt.getText();
String sex=sexTxt.getText();
String age=ageTxt.getText();
String number=numberTxt.getText();
String bookName=bookNameTxt.getText();
if(StringUtil.isEmpty(id)){
JOptionPane.showMessageDialog(null, "請(qǐng)選擇要修改的記錄");
return;
}
if(StringUtil.isEmpty(consumerName)){
JOptionPane.showMessageDialog(null, "購(gòu)書(shū)者名稱不能為空");
return;
}
if(StringUtil.isEmpty(age)){
JOptionPane.showMessageDialog(null, "年齡不能為空");
return;
}
if(StringUtil.isEmpty(number)){
JOptionPane.showMessageDialog(null, "聯(lián)系方式不能為空");
return;
}
if(StringUtil.isEmpty(bookName)){
JOptionPane.showMessageDialog(null, "圖書(shū)名稱不能為空");
return;
}
if(StringUtil.isEmpty(sex)){
JOptionPane.showMessageDialog(null, "性別不能為空");
return;
}
Consumer consumer=new Consumer(Integer.parseInt(id),consumerName,sex,age,number,bookName);
Connection con=null;
try {
con=dbUtil.getCon();
con=dbUtil.getCon();
int modifyNum=consumerDao.update(con, consumer);
if(modifyNum==1){
JOptionPane.showMessageDialog(null, "修改成功");
this.resetValue();
this.fillTable(new Consumer());
}else{
JOptionPane.showMessageDialog(null, "修改失敗");
}
}catch(Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "修改失敗");
}finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();
}
}
}
3.6訂單管理模塊
此模塊用于圖書(shū)訂單管理,查找,修改,刪除等功能的實(shí)現(xiàn)。
/**
* 訂單修改事件
*/
protected void orderUpdateActionPerformed(ActionEvent evt) {
String id=this.idTxt.getText();
if(StringUtil.isEmpty(id)){
JOptionPane.showMessageDialog(null, "請(qǐng)選擇要修改的記錄");
return;
}
String addressee=this.addresseeTxt.getText();
String number=this.numberTxt.getText();
String deliveryMent=this.deliveryMentTxt.getText();
String paymentMethod=this.paymentMethodTxt.getText();
String shippingAddress=this.shippingAddressTxt.getText();
if(StringUtil.isEmpty(addressee)){
JOptionPane.showMessageDialog(null, "收件人不能為空!");
return;
}
if(StringUtil.isEmpty(number)){
JOptionPane.showMessageDialog(null, "購(gòu)買(mǎi)數(shù)量不能為空!");
return;
}
if(StringUtil.isEmpty(deliveryMent)){
JOptionPane.showMessageDialog(null, "運(yùn)送方式不能為空!");
return;
}
if(StringUtil.isEmpty(paymentMethod)){
JOptionPane.showMessageDialog(null, "支付方式不能為空!");
return;
}
if(StringUtil.isEmpty(paymentMethod)){
JOptionPane.showMessageDialog(null, "收件地址不能為空!");
return;
}
Book book=(Book) this.bookNameJcb.getSelectedItem();
int bookId=book.getId();
Order order =new Order(Integer.parseInt(id), addressee, number, deliveryMent, paymentMethod, shippingAddress,
bookId);
Connection con =null;
try {
con=dbUtil.getCon();
int addNum=orderDao.update(con, order);
if(addNum==1) {
JOptionPane.showMessageDialog(null, "訂單修改成功!");
resetValue();
this.fillTable(new Order());
}else {
JOptionPane.showMessageDialog(null, "訂單修改失?。?);
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();
JOptionPane.showMessageDialog(null, "訂單添加失??!");
}
}
}
4.數(shù)據(jù)庫(kù)設(shè)計(jì)
4.1系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
使用sql語(yǔ)句查詢項(xiàng)目存儲(chǔ)數(shù)據(jù)用到的數(shù)據(jù)庫(kù)表格:

1.管理員信息表
| 列名 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 主鍵 | 非空 | 自增 |
|---|---|---|---|---|---|
| Id | Int | 11 | √ | √ | √ |
| usename | varchar | 20 | |||
| password | varchar | 20 |
2.圖書(shū)類型信息表
| 列名 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 主鍵 | 非空 | 自增 |
|---|---|---|---|---|---|
| id | Int | 11 | √ | √ | √ |
| BookTypeName | Varchar | 20 | |||
| bookTypeDes | Varchar | 20 |
3.圖書(shū)信息表
| 列名 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 主鍵 | 非空 | 自增 |
|---|---|---|---|---|---|
| Bookname | Int | 11 | √ | √ | √ |
| Author | Varchar | 20 | |||
| Sex | Varchar | 10 | |||
| Price | Float | 10 | |||
| bookTypeId | Int | 11 | |||
| bookDesc | Varchar | 1000 |
4.訂單信息表
| 列名 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 主鍵 | 非空 | 自增 |
|---|---|---|---|---|---|
| Buyid | Int | 11 | √ | √ | √ |
| Name | Varchar | 20 | |||
| Sex | Varchar | 20 | |||
| Buybooknamtel | Varchar | 20 | |||
| Way | Varchar | 20 | |||
| Address | Varchar | 20 |
5.買(mǎi)家信息表
| 列名 | 數(shù)據(jù)類型 | 長(zhǎng)度 | 主鍵 | 非空 | 自增 |
|---|---|---|---|---|---|
| Id | Int | 11 | √ | √ | √ |
| Consumername | Varchar | 50 | |||
| Sex | Varchar | 50 | |||
| Age | Varchar | 50 | |||
| Number | Varchar | 50 | |||
| Bookname | Varchar | 50 |
4.2系統(tǒng)E-R圖設(shè)計(jì)

5.JDBC連接數(shù)據(jù)庫(kù)

一定要安裝數(shù)據(jù)庫(kù)jdbc驅(qū)動(dòng)包!
代碼展示:
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
/**
* 數(shù)據(jù)庫(kù)工具類
*/
public class DbUtil {
private String jdbcName="com.mysql.cj.jdbc.Driver"; // 驅(qū)動(dòng)名稱
數(shù)據(jù)庫(kù)連接地址 由于數(shù)據(jù)庫(kù)為最新版本 導(dǎo)致驅(qū)動(dòng)名稱已改為com.mysql.cj.jdbc.Driver
//由于時(shí)區(qū)錯(cuò)亂 執(zhí)行命令給MySQL服務(wù)器設(shè)置時(shí)區(qū)為東八區(qū) serverTimezone=GMT%2B8
private String dbUrl="jdbc:mysql://localhost:3306/db_book?serverTimezone=GMT%2B8";// 數(shù)據(jù)庫(kù)連接地址
private String dbuserName = "root"; // 用戶名
private String dbpassWord = "abc123"; // 密碼
/**
* 獲取數(shù)據(jù)庫(kù)連接
*/
public Connection getCon()throws Exception{
Class.forName(jdbcName);
Connection con=DriverManager.getConnection(dbUrl, dbuserName, dbpassWord);
return con;
}
/**
* 關(guān)閉數(shù)據(jù)庫(kù)連接
*/
public void closeCon(Connection con)throws Exception{
if(con!=null){
con.close();
}
}
public static void main(String[] args) {
DbUtil dbUtil=new DbUtil();
try {
dbUtil.getCon();
System.out.println("數(shù)據(jù)庫(kù)連接成功!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("數(shù)據(jù)庫(kù)連接失敗");
}
}
}以上就是Java實(shí)戰(zhàn)之網(wǎng)上書(shū)店管理系統(tǒng)的實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Java書(shū)店管理系統(tǒng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JAVA8如何妙用Optional解決NPE問(wèn)題詳解
在Java中,null代表一個(gè)不存在的對(duì)象,如果對(duì)它進(jìn)行操作就會(huì)拋出java.lang.NullPointerException異常,下面這篇文章主要給大家介紹了關(guān)于JAVA8如何妙用Optional解決NPE問(wèn)題的相關(guān)資料,需要的朋友可以參考下2018-06-06
Java反射(JDK)與動(dòng)態(tài)代理(CGLIB)詳解
下面小編就為大家?guī)?lái)一篇淺談Java反射與動(dòng)態(tài)代理。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-08-08
Java實(shí)現(xiàn)直接插入排序與折半插入排序的示例詳解
這篇文章主要為大家詳細(xì)介紹了插入排序中兩個(gè)常見(jiàn)的排序:直接插入排序與折半插入排序。本文用Java語(yǔ)言實(shí)現(xiàn)了這兩個(gè)排序算法,感興趣的可以學(xué)習(xí)一下2022-06-06
Spring整合多數(shù)據(jù)源實(shí)現(xiàn)動(dòng)態(tài)切換的實(shí)例講解
下面小編就為大家?guī)?lái)一篇Spring整合多數(shù)據(jù)源實(shí)現(xiàn)動(dòng)態(tài)切換的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
Spring框架花式創(chuàng)建Bean的n種方法(小結(jié))
這篇文章主要介紹了Spring框架花式創(chuàng)建Bean的n種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
macbook中springboot的jmeter壓測(cè)示例
這篇文章主要介紹了macbook中springboot的jmeter壓測(cè)示例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
spring boot springjpa 支持多個(gè)數(shù)據(jù)源的實(shí)例代碼
這篇文章主要介紹了spring boot springjpa 支持多個(gè)數(shù)據(jù)源的實(shí)例代碼,需要的朋友可以參考下2018-04-04
MyBatis CodeHelperPro激活方法詳細(xì)教程
MyBatisCodeHelper-Pro是IDEA下的一個(gè)插件,功能類似mybatis plugin,今天小編給大家分享MyBatis CodeHelperPro激活方法,需要的朋友跟隨小編一起看看吧2021-07-07

