App下載

使用Java如何制作記賬軟件 詳細項目流程

猿友 2021-07-21 12:01:19 瀏覽數(shù) (2549)
反饋

1. 項目介紹

1.1. 項目安排

 1.1.1. 項目目標

本項目為JAVAEE基礎(chǔ)班綜合項目,包含了若干個知識點,達到將基礎(chǔ)班所學(xué)知識綜合使用,提高了我們對項目的理解與知識點的運用。

熟練View層、Service層、Dao層之間的方法相互調(diào)用操作、熟練dbutils操作數(shù)據(jù)庫表完成增刪改查通過本項目,讓我們了解公司項目開發(fā)的流程,充分的掌握項目需求分析、設(shè)計與功能的代碼實現(xiàn)。提高同學(xué)們獨立分析需求與功能實現(xiàn)的能力。

1.1.2. 項目時間

本項目通過1天課程時間完成。

1.2. 項目功能分析

1.2.1. 項目演示

1.2.2. 項目功能介紹

l 查詢賬務(wù)

l 多條件組合查詢賬務(wù)

l 添加賬務(wù)

l 編輯賬務(wù)

l 刪除賬務(wù) 

2. 項目環(huán)境搭建

2.1. 技術(shù)選型和jar包介紹

每個項目都要使用一些已經(jīng)成熟的技術(shù),它們通常是由一些專業(yè)組織或團隊所提供的開源免費技術(shù)。在今后的學(xué)習(xí)過程中,我們會逐漸對這些專業(yè)組織有所了解。本項目中使用的技術(shù)如下:l apache的commons組件:? commons-dbutils-1.4.jar:封裝并簡化了JDBC;? commons-dbcp-1.4.jar:apache commons提供的數(shù)據(jù)庫連接池組件,命名為DBCP;? commons.pool-1.3.jar:DBCP連接池依賴該jar包;l mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驅(qū)動包,用JDBC連接MySQL數(shù)據(jù)庫必須使用該JAR包。

2.2. 工具類介紹

每個項目都會用到一些工具類,本項目也不例外。我們不會教大家如何實現(xiàn)這些類,而是讓大家知道在項目我們?nèi)绾问褂眠@些工具類,下面是本項目中所使用的工具類以及介紹:l JDBCUtils:用來創(chuàng)建數(shù)據(jù)庫連接池對象;在項目的實現(xiàn)過程中,我們會說明工具類的使用,這里就不再過多介紹。

JDBCUtils.java

public class JDBCUtils {
public static final StringDRIVER_CLASS_NAME ="com.mysql.jdbc.Driver";

public static final StringURL = "jdbc:mysql://localhost:3306/gjp";

public static final StringUSERNAME = "root";

public static final StringPASSWORD = "root";

private static BasicDataSourcedataSource = new BasicDataSource();

static {
dataSource.setDriverClassName(DRIVER_CLASS_NAME);

dataSource.setUrl(URL);

dataSource.setUsername(USERNAME);

dataSource.setPassword(PASSWORD);

}

public static DataSource getDataSource() {
return dataSource;

}

}

2.3. 數(shù)據(jù)表創(chuàng)建

對一個項目而言,表設(shè)計是非常重要的,因為應(yīng)用程序中所有的操作都是基于數(shù)據(jù)庫表而進行的,所以我們第一步就是創(chuàng)建數(shù)據(jù)庫表。管家婆項目的數(shù)據(jù)庫設(shè)計很簡單,我們只需找到gjp.sql文件,然后執(zhí)行之即可。下面是創(chuàng)建庫及表的SQL語句:

2.3.1. 創(chuàng)建數(shù)據(jù)庫

創(chuàng)建管家婆數(shù)據(jù)庫 gjpCREATE DATABASE gjp; 

2.3.2. 創(chuàng)建數(shù)據(jù)庫表

創(chuàng)建賬務(wù)表gjp_zhangwu

CREATE TABLE gjp_zhangwu (

  zwid INT PRIMARY KEY AUTO_INCREMENT,

  flname VARCHAR(200),

  money DOUBLE,

  zhangHu VARCHAR(100),

  createtime DATE,

  description VARCHAR(1000) 

);

2.3.3. 添加表數(shù)據(jù)

添加賬務(wù)表數(shù)據(jù)

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,'現(xiàn)金','2016-03-15','開工資了');

INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (3,'服裝支出',1998,'現(xiàn)金','2016-04-02','買衣服');

INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (4,'吃飯支出',325,'現(xiàn)金','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,'現(xiàn)金','2016-10-28','朋友結(jié)婚');

INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (9,'其他支出',1560,'現(xiàn)金','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,'現(xiàn)金','2016-10-30','開資');

INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (13,'交通支出',2000,'現(xiàn)金','2016-10-30','機票好貴');

INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (14,'工資收入',5000,'現(xiàn)金','2016-10-30','又開資');

2.4. 項目分層(分包)的作用

程序為什么要分包分層?

以顧客去飯店吃飯案例分析一下:

小飯店: 一個服務(wù)員搞定(接待顧客點菜炒菜)

大飯店:

l 迎賓員(是否有預(yù)定詢問吃中餐還是西餐或者燒烤等幾位用餐 領(lǐng)路到指定的包間找點菜員為顧客點菜 )

l 點菜員(記錄顧客點餐內(nèi)容記錄是否有忌口等問題找廚師為顧客炒菜)

l 廚師(按照顧客菜肴清單,進行炒菜)

通過案例發(fā)現(xiàn),當程序規(guī)模小的時候,可以一個人全部完成;但程序規(guī)模大的時候,一個人難以完成,這時,要采用多人合作的方式來完成程序開發(fā)。

多人合作方式將會碰到工作任務(wù)分配問題,這時我們會想,每個人負責(zé)完成項目的一塊內(nèi)容就可以了。那么,這一塊塊內(nèi)容的劃分,就需要我們采用分層(分包)的方式完成了。

通過下圖(用戶注冊功能)來講解下,項目中常見的分層(分包)。

l view層作用:視圖層,即項目中的界面

l controller層作用:控制層,獲取界面上的數(shù)據(jù),為界面設(shè)置數(shù)據(jù);將要實現(xiàn)的功能交給業(yè)務(wù)層處理

l service層作用:業(yè)務(wù)層,功能的實現(xiàn),與controller控制層和數(shù)據(jù)訪問層DAO交互,將對數(shù)據(jù)庫的操作交給DAO數(shù)據(jù)訪問層來處理

l dao層作用:數(shù)據(jù)訪問層,用來操作數(shù)據(jù)庫表的數(shù)據(jù)

l db數(shù)據(jù)庫:這里指MySQL

l domain 實體包:存放JavaBean

l tools工具包:存放項目中使用到的工具類

l test 測試包:存放項目功能測試的代碼

2.5. 工程創(chuàng)建及包管理

1. 使用Eclipse創(chuàng)建Java工程,命名為gjp

2. 創(chuàng)建工程包

? cn.itcast.gjp.app:存放main方法類;

? cn.itcast.gjp.domain:存放JavaBean;

? cn.itcast.gjp.view:存放界面,及表現(xiàn)層類;

? cn.itcast.gjp.service:存放業(yè)務(wù)層類;

? cn.itcast.gjp.dao:存放數(shù)據(jù)訪問層類;

? cn.itcast.gjp.tools:存放工具類

3. 創(chuàng)建lib文件夾,用來存儲使用的jar包 

3. 功能模塊

 3.1. 相關(guān)類創(chuàng)建

完成本項目中類的創(chuàng)建,無需在類中添加代碼。

1. 復(fù)制已編寫好的工具類JDBCUtils.java 到 tools包中;

2. 復(fù)制jar包mysql-connector-java-5.1.28-bin.jar、commons-dbutils-1.4.jar、commons-dbcp-1.4.jar、commons-pool-1.3.jar,到lib文件夾中,通過Build Path操作,添加到classPath路徑中,提供給JDBCUtils使用;

3. 在app包中,創(chuàng)建類MainApp.java,編寫main主方法,用來完成本項目的啟動

4. 在domain包中,創(chuàng)建類ZhangWu.java,它是用來封裝賬務(wù)信息的JavaBean。

5. 在dao包中,創(chuàng)建類ZhangWuDao.java,給ZhangWuDao類添加一個成員變量QueryRunner對象,因為我們使用dbutils來操作數(shù)據(jù)庫。

6. 在service包中,創(chuàng)建類ZhangWuService.java,給ZhangWuService類添加一個類型為ZhangWuDao的成員變量,因為service依賴dao。

7. 在view包中,創(chuàng)建類MainView.java,給MainView類添加一個類型為ZhangWuService的成員變量,因為本項目中view依賴service。

 編寫app包中MainApp.java

/** 
* 主方法類 */
public class MainApp {
public static void main(String[]args) {
}
} 

編寫domain包中ZhangWu.java

/** 
* 賬務(wù)類 */
public class ZhangWu {} 

編寫Dao包中ZhangWuDao.java

/**
* 賬務(wù)數(shù)據(jù)層類 */
public class ZhangWuDao{
//獲取數(shù)據(jù)庫連接池,得到操作表數(shù)據(jù)的對象
QueryRunnerQueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
}

 編寫Service包,ZhangWuService.java

/**
* 賬務(wù)業(yè)務(wù)層類 */
public class ZhangWuService {
//service都依賴daoprivate
 ZhangWuDao zhangWuDao =new ZhangWuDao();
} 

編寫view包,

MainView.javapublic class MainView {
//本項目中view依賴serviceprivate 
ZhangWuServicezhangWuService = new ZhangWuService();
} 

3.2. 賬務(wù)JavaBean

JavaBean是指的是Java中的類,該類中的成員變量與數(shù)據(jù)庫表中的字段相對應(yīng)(變量名對應(yīng)數(shù)據(jù)庫表字段名、變量數(shù)據(jù)類型對應(yīng)數(shù)據(jù)庫表字段類型),并提供空參數(shù)構(gòu)造方法、set、get方法。我們現(xiàn)在來完成賬務(wù)類的代碼編寫,如下

/**
 * 賬務(wù)類 */
public class ZhangWu {private int zwid;// id
private String flname;// 分類名稱
private String zhangHu;// 賬戶名稱
private double money;//金額
private String createtime;// 創(chuàng)建時間
private String description;// 說明 
public String getFlname() {return flname;}public void setFlname(Stringflname) {this.flname =flname;}public String getZhangHu() {return zhangHu;}public void setZhangHu(StringzhangHu) {this.zhangHu =zhangHu;}
public int getZwid() {return zwid;}public void setZwid(int zwid) {this.zwid =zwid;}public double getMoney() {return money;}
public void setMoney(double money) {this.money =money;}public String getCreatetime() {return createtime;}
public void setCreatetime(Stringcreatetime) {this.createtime =createtime;}public String getDescription() {return description;}
public void setDescription(Stringdescription) {this.description =description;}} 

3.3. 功能界面菜單

 界面菜單的完成,是項目編寫的第一步。我們通過輸出語句,完成界面菜單的輸出,之后再根據(jù)輸入的功能序號,進行對應(yīng)功能的調(diào)用執(zhí)行。

3.3.1. 功能實現(xiàn)步驟

1 編寫MainView類run方法

1.1 完成功能界面菜單顯示

1.2 接收鍵盤輸入的功能選項

1.3 根據(jù)選項值,調(diào)用對應(yīng)的功能方法

2 編寫MainApp類的main主方法

2.1 調(diào)用MainView類中run方法,實現(xiàn)將程序執(zhí)行起來,顯示功能界面菜單。

3.3.2. 功能實現(xiàn)代碼

1.在view包MainView類中編寫run方法

3.4. 查詢所有賬務(wù)

3.4.1. 功能實現(xiàn)步驟

1 編寫MainView類中selectZhangWu方法

1.1 通過輸出語句,顯示出要查詢賬務(wù)的方式

1.2 接收鍵盤的輸入項,調(diào)用對應(yīng)的方法(1.查詢所有 2.按條件查詢)

2 編寫MainView類中selectAll查詢所有賬務(wù)方法

2.1 調(diào)用ZhangWuService類selectAll方法,返回包含所有賬務(wù)數(shù)據(jù)的List<ZhangWu>集合

2.2 調(diào)用MainView類中print方法,實現(xiàn)控制臺顯示所有賬務(wù)數(shù)據(jù)

3 編寫MainView類中print方法

3.1 使用輸出語句,打印出賬務(wù)表的表頭名稱 

3.2 遍歷賬務(wù)集合,將每個賬務(wù)信息輸出打印

4 編寫ZhangWuService類中selectAll方法

4.1 調(diào)用ZhangWuDao類中selectAll方法,返回包含所有賬務(wù)數(shù)據(jù)的List<ZhangWu>集合

5 編寫ZhangWuDao類中selectAll()方法

5.1 通過QueryRunner對象,調(diào)用query方法查詢數(shù)據(jù)庫表gjp_zhangwu,返回包含所有賬務(wù)數(shù)據(jù)的List<ZhangWu>集合

3.4.2. 功能實現(xiàn)代碼

1. 編寫MainView類中selectZhangWu方法

/** 
* 查詢賬務(wù)方法
 */
public void selectZhangWu() {
System.out.println("1.查詢所有 2.按條件查詢");
Scanner in = new Scanner(System.in);
int op =in.nextInt();
switch (op) {
case 1:selectAll();
break;
case 2:select();
break;
default:
System.out.println("輸入錯誤!");}} 

2. 編寫MainView類中selectAll方法

/** 
* 查詢所有賬務(wù)方法 
*/
public void selectAll() {
List<ZhangWu> zhangWuList = zhangWuService.selectAll();
print(zhangWuList);}

 3. 編寫MainView類中print方法

/* 
* 輸出賬務(wù)方法 
*/private void print(List<ZhangWu>zhangWuList) {
System.out.println("ID	類別		賬戶		金額		時間		說明");
for (ZhangWu zw : zhangWuList) {
System.out.println(zw.getZwid() +"	" + zw.getFlname() + "		"+ zw.getZhangHu() + "		" + zw.getMoney() + "		"+ zw.getCreatetime() + "	" + zw.getDescription());}} 

4. 編寫ZhangWuService類中selectAll方法

/**
 * 查詢所有
*/
public List<ZhangWu> selectAll() {
return zhangWuDao.selectAll();}

 5. 編寫ZhangWuDao類中selectAll()方法

/** 
* 查詢所有賬務(wù)
 */
public List<ZhangWu> selectAll() {
String sql = "select * from gjp_zhangwu";
try {
return qr.query(sql,new BeanListHandler<ZhangWu>(ZhangWu.class));} 
catch (SQLExceptione) {throw new RuntimeException(e);}} 

3.5. 多條件查詢賬務(wù)

3.5.1. 功能分析

1 編寫MainView類中select方法

1.1 通過鍵盤輸入查詢?nèi)掌诘姆秶?/p>

1.2 調(diào)用ZhangWuSerice類中select方法,返回查詢?nèi)掌诜秶鷥?nèi)的賬務(wù)信息集合List<ZhangWu>

1.3 調(diào)用MainView類中的print方法,將賬務(wù)信息集合中的內(nèi)容顯示在控制臺中

2 編寫ZhangWuService類中select方法

2.1 調(diào)用ZhangWuDao 類中select方法,返回查詢?nèi)掌诜秶鷥?nèi)的賬務(wù)信息集合List<ZhangWu>

3 編寫ZhangWuDao類中select方法

3.1 通過QueryRunner對象,調(diào)用query方法查詢數(shù)據(jù)庫表gjp_zhangwu,返回包含查詢?nèi)掌诜秶鷥?nèi)的賬務(wù)數(shù)據(jù)List<ZhangWu>集合

3.5.2. 功能實現(xiàn)步驟

1. 編寫MainView類中select方法

/** 
* 按條件查詢賬務(wù)方法 
*/
public void select() {/* *
 1. 獲取用戶輸入查詢?nèi)掌诜秶?* 
2. 調(diào)用service的select()方法完成條件查詢功能 */
Scanner in = new Scanner(System.in);
System.out.print("請輸入查詢起始時間:");
String start = in.next();
System.out.print("請輸入查詢結(jié)束時間:");
String end = in.next();
List<ZhangWu> zhangWuList = zhangWuService.select(start, end);
print(zhangWuList);}

2. 編寫ZhangWuService類中select方法

/**
 * 按條件查詢賬務(wù)方法
 * @param start * 
@param end * 
@return */
public List<ZhangWu> select(
Stringstart, String end) {
return zhangWuDao.select(start,end);}

3. 編寫ZhangWuDao類中select方法

/**
 * 按條件查詢賬務(wù)方法
 * 
@param start * 
@param end * 
@return */
public List<ZhangWu> select(
Stringstart, String end) {
String sql = "select * from gjp_zhangwu where createtime between ? and ?";
Object[] params = {start,end};
try {
return qr.query(sql,new BeanListHandler<ZhangWu>(ZhangWu.class),params);} 
catch (SQLExceptione) {throw new RuntimeException(e);}} 

3.6. 添加賬務(wù)

3.6.1. 功能分析

1 編寫MainView類中addZhangWu方法

1.1 鍵盤輸入新添加的賬務(wù)信息

1.2 調(diào)用ZhangWuService類中addZhangWu方法,用來指定賬務(wù)的添加

1.3 添加完畢后,使用輸出語句,提示“添加賬務(wù)成功!”

2 編寫ZhangWuService類中addZhangWu方法

2.1 調(diào)用ZhangWuDao類中addZhangWu方法,用來指定賬務(wù)的添加

3 編寫ZhangWuDao類中addZhangWu方法

3.1 通過QueryRunner對象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成指定賬務(wù)添加到數(shù)據(jù)庫表中

3.6.2. 功能實現(xiàn)步驟

1. 編寫MainView類中addZhangWu方法

/** 
* 添加賬務(wù)方法 
*/
public void addZhangWu() {
/* *
1. 獲取用戶輸入,封裝到bean中。 * 
2. 調(diào)用service的addZhangWu()方法完成添加功能 */
Scanner in = new Scanner(System.in);
ZhangWu zw = new ZhangWu();
System.out.print("請輸入類別:");
zw.setFlname(in.next());
System.out.print("請輸入賬戶:");
zw.setZhangHu(in.next());
System.out.print("請輸入金額:");
zw.setMoney(in.nextDouble());
System.out.print("請輸入時間:");
zw.setCreatetime(in.next());
System.out.print("請輸入說明:");
zw.setDescription(in.next());zhangWuService.addZhangWu(zw);
System.out.println("添加賬務(wù)成功!");}

 2. 編寫ZhangWuService類中addZhangWu方法

/** 
* 添加賬務(wù) * 
@param zw */
public void addZhangWu(ZhangWuzw) {zhangWuDao.addZhangWu(zw);} 

3. 編寫ZhangWuDao類中addZhangWu方法

/**
 * 添加賬務(wù) 
* 
@param zw */
public void addZhangWu(ZhangWuzw) {
String sql = "insert into gjp_zhangwu(flname,money,zhanghu,createtime,description) values(?,?,?,?,?)";
try {Object[] params = {
zw.getFlname(),
zw.getMoney(),
zw.getZhangHu(),
zw.getCreatetime(),
zw.getDescription()};
qr.update(sql,params);}
 catch (SQLExceptione) {
throw new RuntimeException(e);} } 

3.7. 編輯賬務(wù)

 3.7.1. 功能分析

1 編寫MainView類中editZhangWu方法

1.1 鍵盤輸入要編輯的賬務(wù)信息ID號

1.2 鍵盤輸入要修改的賬務(wù)信息內(nèi)容

1.3 調(diào)用ZhangWuService類中editZhangWu方法,用來將指定的賬務(wù)信息進行更新

1.4 更新完畢后,使用輸出語句,提示 “編輯賬務(wù)成功!”

2 編寫ZhangWuService類中editZhangWu方法

2.1 調(diào)用ZhangWuDao類中editZhangWu方法,用來將指定的賬務(wù)信息進行更新

3 編寫ZhangWuDao類中editZhangWu方法

3.1 通過QueryRunner對象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成數(shù)據(jù)庫表中指定賬務(wù)更新操作

3.7.2. 功能實現(xiàn)步驟

1. 編寫MainView類中editZhangWu方法

/** 
* 編輯賬務(wù)方法
 */
public void editZhangWu() {
/* 
*1. 獲取用戶輸入,封裝到bean中。
*2. 調(diào)用service的editZhangWu()方法完成添加功能

 */

Scanner in = new Scanner(System.in);

ZhangWu zw = new ZhangWu();

System.out.print("請輸入ID:");

zw.setZwid(in.nextInt());

System.out.print("請輸入新類別:");

zw.setFlname(in.next());

System.out.print("請輸入新賬戶:");

zw.setZhangHu(in.next());

System.out.print("請輸入新金額:");

zw.setMoney(in.nextDouble());

System.out.print("請輸入新時間:");

zw.setCreatetime(in.next());

System.out.print("請輸入新說明:");

zw.setDescription(in.next());

zhangWuService.editZhangWu(zw);

System.out.println("編輯賬務(wù)成功!");

}

 2. 編寫ZhangWuService類中editZhangWu方法

/**

 * 編輯賬務(wù)

 * @param zw

 */

public void editZhangWu(ZhangWuzw) {
zhangWuDao.editZhangWu(zw);

}

3. 編寫ZhangWuDao類中editZhangWu方法

/**

 * 編輯賬務(wù)

 * @param zw

 */

public void editZhangWu(ZhangWuzw) {
String sql = "update gjp_zhangwu set flname=?, money=?,zhanghu=?,createtime=?,description=? where zwid=?";

try {
Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhangHu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()};

qr.update(sql,params);

} catch (SQLExceptione) {
throw new RuntimeException(e);

}

}

3.8. 刪除賬務(wù)

3.8.1. 功能分析

1 編寫MainView類中deleteZhangWu方法

1.1 鍵盤輸入要刪除的賬務(wù)信息ID號

1.2 調(diào)用ZhangWuService類中deleteZhangWu方法,用來將指定的賬務(wù)信息刪除

1.3 刪除完畢后,使用輸出語句,提示 “刪除賬務(wù)成功!”

2 編寫ZhangWuService類中deleteZhangWu方法

2.1 調(diào)用ZhangWuDao類中deleteZhangWu方法,用來將指定的賬務(wù)信息刪除

3 編寫ZhangWuDao類中deleteZhangWu方法

3.1 通過QueryRunner對象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成數(shù)據(jù)庫表中指定賬務(wù)刪除操作

3.8.2. 功能實現(xiàn)步驟

1. 編寫MainView類中deleteZhangWu方法

/**

 * 刪除賬務(wù)方法

 */

public void deleteZhangWu() {
/*

 * 1. 獲取用戶輸入,封裝到bean中。

 * 2. 調(diào)用service的deleteZhangWu()方法完成添加功能

 */

Scanner in = new Scanner(System.in);

System.out.print("請輸入ID:");

zhangWuService.deleteZhangWu(in.nextInt());

System.out.println("刪除賬務(wù)成功!");

}

2. 編寫ZhangWuService類中deleteZhangWu方法

/**

 * 刪除賬務(wù)

 * @param zwid

 */

public void deleteZhangWu(int zwid) {
zhangWuDao.deleteZhangWu(zwid);

}

 3. 編寫ZhangWuDao類中deleteZhangWu方法

/**

 * 刪除賬務(wù)

 * @param zwid

 */

public void deleteZhangWu(int zwid) {
String sql = "delete from gjp_zhangwu where zwid=?";

try {
qr.update(sql,zwid);

} catch (SQLExceptione) {
throw new RuntimeException(e);

}

}

3.9. 功能模塊總結(jié)

恭喜大家,我們已經(jīng)完成了分類模塊所有功能。通過分類模塊功能的實現(xiàn),大家可能會發(fā)現(xiàn)如下幾個問題:

l 難度大的地方:自行功能分析的能力欠缺,需要講師來分析;

l 代碼實現(xiàn):

? View(Controller):代碼量最大;

? Service層:代碼量最??;

? DAO層:相似度高,難度不大; 

view層的作用是“界面”,用來完成數(shù)據(jù)顯示給用戶。當前項目view層中,包含了Controller層代碼。

Controller層的作用是“調(diào)度”,調(diào)度的是表現(xiàn)層view和業(yè)務(wù)層Service,主要功能分為:一是把表現(xiàn)層的數(shù)據(jù)交給業(yè)務(wù)層處理;二是把業(yè)務(wù)層返回的數(shù)據(jù)交給表現(xiàn)層顯示。至于為什么這一層View(Controller)的代碼量大,這里我要說明一下,其實不是View(Controller)層的代碼量大,而是其他層代碼量少,所以你會感覺View(Controller)層代碼量大。

Service層的作用是“業(yè)務(wù)”,我們也可以把“業(yè)務(wù)”當成是“功能”。那為什么Service層代碼量少呢?原因是現(xiàn)在我們寫的項目很小,沒有什么復(fù)雜的業(yè)務(wù),而今后大家要寫的大型項目代碼量最大的就是Service層。

DAO層是操作數(shù)據(jù)庫,現(xiàn)在我們使用的是commons-dbutils工具來簡化JDBC,所以我們發(fā)現(xiàn)代碼不多,比較簡單。

最后我們還會學(xué)習(xí)其他DAO層的工具,例如:hibernate和mybatis,他們都是JDBC的封裝,用來簡化JDBC。

到此這篇關(guān)于 Java 實戰(zhàn)項目之記賬軟件的文章就介紹到這了,希望能對大家的學(xué)習(xí)有所幫助。想要料及更多相關(guān) Java 其他的實戰(zhàn)項目內(nèi)容請搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持!


0 人點贊