Java實戰之網上書店管理系統的實現

1.效果展示

2.需求功能

用戶可以進行註冊登陸系統,在用戶的界面上,其可以進行查看網上書店裡的圖書類別和所在類別下的圖書,根據自己的需求可在訂單項目裡添加訂單購買自己喜歡的圖書;

管理員可以通過自己的賬號登錄到管理員系統對書店進行管理,其可實現對圖書的添加,修改,查詢,和刪除功能,可以查看用戶的訂單,修改和維護訂單。添傢客戶的信息用以統計數據。

在構造系統時,首先從需求出發構造數據庫,然後再由數據庫表結合需求劃分系統功能模塊。這樣,就把一個大的系統解成瞭幾個小系統。這裡把系統劃分為瞭三個模塊:用戶登錄模塊,管理員模塊,用戶購買模塊。模塊分別能夠實現以下功能:

  • 登錄模塊:實現登錄,註冊功能。
  • 管理員模塊:實現對圖書的添加修改和刪除以及對訂單的添加修改和刪除功能。
  • 用戶購買模塊:實現對圖書的查找以及對所需圖書的下單功能。

3.系統總體設計及部分代碼

3.1登錄模塊設計

用戶正確輸入用戶名和密碼,連接到數據庫,登錄成功!

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, "用戶名或者密碼錯誤!");
			}
 		
		} catch (Exception e) {
			// TODO 自動生成的 catch 塊
			e.printStackTrace();
		}

3.2新用戶的註冊

此模塊的核心是創建實例化對象。

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, "註冊成功!");
				resetValue();
			}else{
				JOptionPane.showMessageDialog(null, "註冊失敗!");
			}

		}catch(Exception e) {

		}finally {
			try {
				dbUtil.closeCon(con);
			} catch (Exception e) {
				// TODO 自動生成的 catch 塊
				e.printStackTrace();
				JOptionPane.showMessageDialog(null, "註冊失敗!");
			}
		}
	}

3.3圖書添加模塊

管理員在此界面上可對系統裡的圖書進行查詢修改和刪除。

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圖書添加事件

此界面主要實現圖書的添加功能。

/**
*圖書添加事件
*/
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, "圖書名稱不能為空!");
			return;
		}

		if(StringUtil.isEmpty(author)){
			JOptionPane.showMessageDialog(null, "圖書作者不能為空!");
			return;
		}

		if(StringUtil.isEmpty(price)){
			JOptionPane.showMessageDialog(null, "圖書價格不能為空!");
			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, "圖書添加成功!");
				resetValue();
			}else{
				JOptionPane.showMessageDialog(null, "圖書添加失敗!");
			}
		}catch(Exception e){
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "圖書添加失敗!");
		}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);
		}
	}

	/**
	 * 初始化圖書類別下拉框
	 */
	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買傢信息維護

此模塊主要用於對買傢信息的查找和維護。

	/**
	 * 買傢信息搜索事件處理
	 */
	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); // 設置成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 自動生成的 catch 塊
				e.printStackTrace();
			}
		}
	}
	/**
	 * 買傢信息修改
	 */
	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, "請選擇要修改的記錄");
			return;
		}
		if(StringUtil.isEmpty(consumerName)){
			JOptionPane.showMessageDialog(null, "購書者名稱不能為空");
			return;
		}
		if(StringUtil.isEmpty(age)){
			JOptionPane.showMessageDialog(null, "年齡不能為空");
			return;
		}
		if(StringUtil.isEmpty(number)){
			JOptionPane.showMessageDialog(null, "聯系方式不能為空");
			return;
		}
		if(StringUtil.isEmpty(bookName)){
			JOptionPane.showMessageDialog(null, "圖書名稱不能為空");
			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 自動生成的 catch 塊
				e.printStackTrace();

			}
		}
	}

3.6訂單管理模塊

此模塊用於圖書訂單管理,查找,修改,刪除等功能的實現。

     /**
	 * 訂單修改事件
	 */
	protected void orderUpdateActionPerformed(ActionEvent evt) {
		String id=this.idTxt.getText();
		if(StringUtil.isEmpty(id)){
			JOptionPane.showMessageDialog(null, "請選擇要修改的記錄");
			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, "購買數量不能為空!");
			return;
		}

		if(StringUtil.isEmpty(deliveryMent)){
			JOptionPane.showMessageDialog(null, "運送方式不能為空!");
			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 自動生成的 catch 塊
				e.printStackTrace();
				JOptionPane.showMessageDialog(null, "訂單添加失敗!");
			}
		}
	}

4.數據庫設計

4.1系統數據庫設計

使用sql語句查詢項目存儲數據用到的數據庫表格:

1.管理員信息表

列名 數據類型 長度 主鍵 非空 自增
Id Int 11
usename varchar 20      
password varchar 20      

2.圖書類型信息表

列名 數據類型 長度 主鍵 非空 自增
id Int 11
BookTypeName Varchar 20      
bookTypeDes Varchar 20      

3.圖書信息表

列名 數據類型 長度 主鍵 非空 自增
Bookname Int 11
Author Varchar 20      
Sex Varchar 10      
Price Float 10      
bookTypeId Int 11      
bookDesc Varchar 1000      

4.訂單信息表

列名 數據類型 長度 主鍵 非空 自增
Buyid Int 11
Name Varchar 20      
Sex Varchar 20      
Buybooknamtel Varchar 20      
Way Varchar 20      
Address Varchar 20      

5.買傢信息表

列名 數據類型 長度 主鍵 非空 自增
Id Int 11
Consumername Varchar 50      
Sex Varchar 50      
Age Varchar 50      
Number Varchar 50      
Bookname Varchar 50      

4.2系統E-R圖設計

5.JDBC連接數據庫

一定要安裝數據庫jdbc驅動包!

代碼展示:

package com.util;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * 數據庫工具類
 */
public class DbUtil {

	private String jdbcName="com.mysql.cj.jdbc.Driver";      // 驅動名稱
	數據庫連接地址   由於數據庫為最新版本  導致驅動名稱已改為com.mysql.cj.jdbc.Driver
	//由於時區錯亂  執行命令給MySQL服務器設置時區為東八區    serverTimezone=GMT%2B8
	private String dbUrl="jdbc:mysql://localhost:3306/db_book?serverTimezone=GMT%2B8";// 數據庫連接地址
	private String dbuserName = "root";                         // 用戶名
	private String dbpassWord = "abc123";                         // 密碼


	/**
	 * 獲取數據庫連接
	 */
	public Connection getCon()throws Exception{
		Class.forName(jdbcName);
		Connection con=DriverManager.getConnection(dbUrl, dbuserName, dbpassWord);
		return con;
	}

	/**
	 * 關閉數據庫連接
	 */
	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("數據庫連接成功!");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("數據庫連接失敗");
		}
	}
}

以上就是Java實戰之網上書店管理系統的實現的詳細內容,更多關於Java書店管理系統的資料請關註WalkonNet其它相關文章!

推薦閱讀: