JavaDay14 JavaEE基礎綜合項目——管家婆家庭記賬軟件

 項目目標:
            * 綜合運用前面所學習的知識點
            * 熟練View層、Service層、Dao層之間的方法相互調用操作(視圖、業務功能、數據庫訪問)
            * 熟練dbutils操作數據庫表完成增刪改查
            * 瞭解公司項目開發的流程,充分的掌握項目需求分析、設計與功能的代碼實現。提高同學們獨立分析需求與功能實現的能力。

項目功能分析:賬務查詢 / 多條件組合查詢賬務 / 添加賬務 / 編輯賬務 / 刪除賬務    


1. 項目環境搭建

1.1 開發環境相關jar包:

            * commons-dbutils-1.4.jar:封裝並簡化了JDBC;
            * commons-dbcp-1.4.jar:apache commons提供的數據庫連接池組件,命名爲DBCP;
            * commons.pool-1.3.jar:DBCP連接池依賴該jar包;
            * mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驅動包,用JDBC連接MySQL數據庫必須使用該JAR包。

1.2 項目中的工具類:

            * 每個項目中都會有很多個工具類,不要求每個工具類對能獨立寫出來,但是要會使用工具類
            * 本項目僅使用JDBCUtils:用來創建數據庫連接池對象

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class JDBCUtils {
	// 創建出BasicDataSource類對象
	private static BasicDataSource datasource = new BasicDataSource();
	
	// 靜態代碼塊,對象BasicDataSource對象中的配置,自定義
	static {
		// 數據庫連接信息
		datasource.setDriverClassName("com.mysql.jdbc.Driver");
		datasource.setUrl("jdbc:mysql://localhost:3307/mysqldata");
		datasource.setUsername("root");
		datasource.setPassword("root");
		// 對象連接池中的連接數量配置
		datasource.setInitialSize(10);
		datasource.setMaxActive(8);
		datasource.setMaxIdle(5);
		datasource.setMinIdle(1);
	}
	
	// 定義靜態方法,返回BasicDataSource類的對象
	public static DataSource getDataSource() { //返回DataSource接口,要靈活與BasicDataSource實現類				
		return datasource;		
	}
}

1.3 數據表創建:

/*
  創建管家婆的數據庫
  名字 gjp
*/
CREATE DATABASE gjp;

USE gjp;

/*
  創建數據表,表名賬務
  字段,列
  主鍵
  分類名稱  可變字符
  金額  double
  賬戶  可變字符 (支付,收入方法)
  創建日期 date
  賬務描述 可變字符
*/

CREATE TABLE gjp_zhangwu(
   -- 主鍵
   zwid INT PRIMARY KEY AUTO_INCREMENT,
   -- 分類名稱   
   flname VARCHAR(200),
   -- 金額
   money DOUBLE,
   -- 賬戶
   zhanghu VARCHAR(100),
   -- 創建日期
   createtime DATE,
   -- 賬務描述
   description  VARCHAR(1000)
);
SELECT * FROM gjp_zhangwu

-- 寫入測試的數據
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (1,'吃飯支出',247,'交通銀行','2016-03-02','家庭聚餐');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (2,'工資收入',12345,'現金','2016-03-15','開工資了');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (3,'服裝支出',1998,'現金','2016-04-02','買衣服');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (4,'吃飯支出',325,'現金','2016-06-18','朋友聚餐');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (5,'股票收入',8000,'工商銀行','2016-10-28','股票大漲');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (6,'股票收入',5000,'工商銀行','2016-10-28','股票又大漲');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (7,'工資收入',5000,'交通銀行','2016-10-28','又開工資了');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (8,'禮金支出',5000,'現金','2016-10-28','朋友結婚');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (9,'其他支出',1560,'現金','2016-10-29','丟錢了');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (10,'交通支出',2300,'交通銀行','2016-10-29','油價還在漲啊');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (11,'吃飯支出',1000,'工商銀行','2016-10-29','又吃飯');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (12,'工資收入',1000,'現金','2016-10-30','開資');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (13,'交通支出',2000,'現金','2016-10-30','機票好貴');
INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description) VALUES (14,'工資收入',5000,'現金','2016-10-30','又開資');

1.4 項目分層設計:

            * view層作用: 視圖層,即項目中的界面
            * controller層作用: 控制層, 獲取界面上的數據,爲界面設置數據; 將要實現的功能交給業務層處理
            * service層作用: 業務層, 功能的實現, 與controller控制層和數據訪問層DAO交互, 將對數據庫的操作交給DAO數據訪問層來處理
            * dao層作用: 數據訪問層, 用來操作數據庫表的數據
            * db數據庫: 這裏指MySQL
            * domain 實體包: 存放JavaBean
            * tools工具包:存放項目中使用到的工具類
            * test 測試包: 存放項目功能測試的代碼

2. 項目功能模塊

2.1 相關類的創建

1.複製已編寫好的工具類JDBCUtils.java 到 tools包中;
2.複製jar包到lib文件夾中,通過Build Path操作,添加到classPath路徑中,提供給JDBCUtils使用:
    mysql-connector-java-5.1.28-bin.jar[MySQL的JDBC驅動包,用JDBC連接MySQL數據庫必須使用該JAR包];
    commons-dbutils-1.4.jar[封裝並簡化了JDBC]、commons-dbcp-1.4.jar[apache commons提供的數據庫連接池組件,命名爲DBCP];
    commons-pool-1.3.jar[DBCP連接池依賴該jar包];
3.在app包中,創建類MainApp.java,編寫main主方法,用來完成本項目的啓動(Test)
4.在domain包中,創建類ZhangWu.java,它是用來封裝賬務信息的JavaBean。
5.在dao包中,創建類ZhangWuDao.java,給ZhangWuDao類添加一個成員變量QueryRunner對象,因爲我們使用dbutils來操作數據庫。
6.在service包中,創建類ZhangWuService.java,給ZhangWuService類添加一個類型爲ZhangWuDao的成員變量,因爲service依賴dao。
7.在controller包中,創建ZhangWuZhangController.java,給ZhangWuController類添加一個類型爲ZhangWuService的成員變量,因爲controller依賴service。
8.在view包中,創建類MainView.java,給MainView類添加一個類型爲ZhangWuController的成員變量,因爲本項目中view依賴controller。

 

2.1.1 創建Tools包中的類:JDBCUtils

package cn.itcast.gjp.tools;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

/*
 * 	獲取數據庫連接的工具類
 * 	實現DBCP連接池
 * */
public class JDBCUtils {
	// 創建出BasicDataSource類對象
	private static BasicDataSource datasource = new BasicDataSource();
	
	// 靜態代碼塊,對象BasicDataSource對象中的配置,自定義
	static {
		// 數據庫連接信息
		datasource.setDriverClassName("com.mysql.jdbc.Driver");
		datasource.setUrl("jdbc:mysql://localhost:3307/gjp");
		datasource.setUsername("root");
		datasource.setPassword("root");
		// 對象連接池中的連接數量配置
		datasource.setInitialSize(10);
		datasource.setMaxActive(10);
		datasource.setMaxIdle(5);
		datasource.setMinIdle(2);
	}
	
	// 定義靜態方法,返回BasicDataSource類的對象
	public static DataSource getDataSource() { //返回DataSource接口,要靈活與BasicDataSource實現類				
		return datasource;		
	}
}

2.1.3 創建app包中的類:MainApp

package cn.itcast.gjp.app;

/*
 * 	主程序類,開啓主要程序
 * */
public class MainApp {

	public static void main(String[] args) {
		
	}

}

2.1.4 創建domain包中的類:Zhangwu

package cn.itcast.gjp.domain;

public class Zhangwu {
	private int zwid;
	private String flname;
	private double money;
	private String zhangwu;
	private String createtime;
	private String description;
	/**
	 * @param zwid 賬務ID(主鍵)
	 * @param flname 分類名稱
	 * @param money 金額
	 * @param zhangwu 賬戶
	 * @param createtime 創建日期
	 * @param description 賬務描述
	 */
	public Zhangwu(int zwid, String flname, double money, String zhangwu, String createtime, String description) {
		super();
		this.zwid = zwid;
		this.flname = flname;
		this.money = money;
		this.zhangwu = zhangwu;
		this.createtime = createtime;
		this.description = description;
	}
	/**
	 * QueryRunner方法需要調用空參構造器
	 */
	public Zhangwu() {
		super();
	}
	
	@Override
	public String toString() {
		return "Zhangwu [zwid=" + zwid + ", flname=" + flname + ", money=" + money + ", zhangwu=" + zhangwu
				+ ", createtime=" + createtime + ", description=" + description + "]";
	}
	
	public int getZwid() {
		return zwid;
	}
	public void setZwid(int zwid) {
		this.zwid = zwid;
	}
	public String getFlname() {
		return flname;
	}
	public void setFlname(String flname) {
		this.flname = flname;
	}
	public double getMoney() {
		return money;
	}
	public void setMoney(double money) {
		this.money = money;
	}
	public String getZhangwu() {
		return zhangwu;
	}
	public void setZhangwu(String zhangwu) {
		this.zhangwu = zhangwu;
	}
	public String getCreatetime() {
		return createtime;
	}
	public void setCreatetime(String createtime) {
		this.createtime = createtime;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	
}

2.1.5 創建dao包中的類:ZhangWuDao:

package cn.itcast.gjp.dao;

import org.apache.commons.dbutils.QueryRunner;
import cn.itcast.gjp.tools.JDBCUtils;

/*
 * 	實現對數據表中數據的增刪改查操作
 * 	利用工具類dbutils完成,類成員創建QueryRunner對象,關聯datasource
 * */
public class ZhangWuDao {
	QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
}

2.1.6 創建service包中的類:ZhangWuService

package cn.itcast.gjp.service;

import cn.itcast.gjp.dao.ZhangWuDao;

/*
 * 	業務層類:接受控制層controller的數據,經過計算,傳遞到dao層,操作數據庫
 * 	調用dao層中的類,類成員位置,創建Dao類的對象,
 * */
public class ZhangWuService {
	private ZhangWuDao dao = new ZhangWuDao(); 
}

2.1.7 創建controller包中的類:ZhangWuController

package cn.itcast.gjp.controller;

import cn.itcast.gjp.service.ZhangWuService;

/*
 * 	控制器層:接受視圖層的數據,數據傳遞給service層;
 * 	成員位置,創建service對象;
 * */

public class ZhangWuController {
	private ZhangWuService service = new ZhangWuService();
}

2.1.8 創建view包中的類:MainView

package cn.itcast.gjp.view;

import cn.itcast.gjp.controller.ZhangWuController;

/*
 * 	實現界面效果:接受用戶的信息輸入,根據輸入結果,調用不同的功能方法
 * */
public class MainView {
	private ZhangWuController controller = new ZhangWuController();
	
}

3. 項目功能實現

3.1 實現用戶的界面菜單

3.1.1 編寫MainView類run方法
a. 完成功能界面菜單顯示
b. 接收鍵盤輸入的功能選項
c. 根據選項值,調用對應的功能方法

package cn.itcast.gjp.view;

import java.util.Scanner;

import cn.itcast.gjp.controller.ZhangWuController;

/*
 * 	實現界面效果:接受用戶的信息輸入,根據輸入結果,調用不同的功能方法
 * */
public class MainView {
	private ZhangWuController controller = new ZhangWuController();
	// 創建Scanner類對象,反覆鍵盤輸入
	public void run() {
		Scanner sc = new Scanner(System.in);
		while(true){
			System.out.println("---------------管家婆家庭記賬軟件---------------");
			System.out.println("1.添加賬務 2.編輯賬務 3.刪除賬務 4.查詢賬務 5.退出系統");
			System.out.println("請輸入要操作的功能序號[1-5]:");
			//接收用戶的菜單選擇
			int choose = sc.nextInt();
			//對選擇的菜單判斷,調用不同的功能
			switch(choose){
			case 1:
			   // 選擇添加賬務,調用添加賬務的方法
				addZhangWu();
				break;
			case 2:
				// 選擇的編輯賬務,調用編輯賬務方法
				editZhangWu();
				break;
			case 3:
				// 選擇的刪除賬務,調用刪除賬務方法
				deleteZhangWu();
				break;
			case 4:
				// 選擇的是查詢賬務,調用查詢方法
				selectZhangWu();
				break;
			case 5:
				System.out.println("退出系統,再見!");
				System.exit(0);
				break;
			default:
				System.out.println("輸入錯誤,請重新輸入! ");
			}
		}
	}	
}

3.1.2 編寫MainApp類的main主方法
a. 調用MainView類中run方法,實現將程序執行起來,顯示功能界面菜單。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章