15管家婆小项目
1項(xiàng)目介紹
1.1項(xiàng)目目標(biāo)
本項(xiàng)目為JAVAEE基礎(chǔ)班綜合項(xiàng)目,包含了若干個(gè)知識(shí)點(diǎn),達(dá)到將基礎(chǔ)班所學(xué)知識(shí)綜合使用,提高了我們對(duì)項(xiàng)目的理解與知識(shí)點(diǎn)的運(yùn)用。
熟練View層、Service層、Dao層之間的方法相互調(diào)用操作、
熟練dbutils操作數(shù)據(jù)庫表完成增刪改查
通過本項(xiàng)目,讓我們了解公司項(xiàng)目開發(fā)的流程,充分的掌握項(xiàng)目需求分析、設(shè)計(jì)與功能的代碼實(shí)現(xiàn)。提高同學(xué)們獨(dú)立分析需求與功能實(shí)現(xiàn)的能力。
1.2項(xiàng)目功能介紹
- 查詢賬務(wù)
- 多條件組合查詢賬務(wù)
- 添加賬務(wù)
- 編輯賬務(wù)
- 刪除賬務(wù)
2.項(xiàng)目環(huán)境搭建
2.1技術(shù)選型和jar包介紹
每個(gè)項(xiàng)目都要使用一些已經(jīng)成熟的技術(shù),它們通常是由一些專業(yè)組織或團(tuán)隊(duì)所提供的開源免費(fèi)技術(shù)。在今后的學(xué)習(xí)過程中,我們會(huì)逐漸對(duì)這些專業(yè)組織有所了解。本項(xiàng)目中使用的技術(shù)如下:
- 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包;
- mysql-connector-java-5.1.28-bin.jar:MySQL的JDBC驅(qū)動(dòng)包,用JDBC連接MySQL數(shù)據(jù)庫必須使用該JAR包。
2.2工具類介紹
JDBCUtils:用來創(chuàng)建數(shù)據(jù)庫連接池對(duì)象;
package cn.jxufe.java.chapter12.demo02;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;/** 使用DBCP實(shí)現(xiàn)數(shù)據(jù)庫的連接池* 連接池配置,自定義類,* 最基本四項(xiàng)完整* 對(duì)于數(shù)據(jù)庫連接池其他配置,自定義*/public class JDBCUtils {// 創(chuàng)建出BasicDataSource類對(duì)象private static BasicDataSource datasource = new BasicDataSource();// 靜態(tài)代碼塊,對(duì)象BasicDataSource對(duì)象中的配置,自定義static {// 數(shù)據(jù)庫連接信息,必須的datasource.setDriverClassName("com.mysql.jdbc.Driver");datasource.setUrl("jdbc:mysql://localhost:3306/gjp");datasource.setUsername("root");datasource.setPassword("123456");// 對(duì)象連接池中的連接數(shù)量配置,可選的datasource.setInitialSize(10);// 初始化的連接數(shù)datasource.setMaxActive(8);// 最大連接數(shù)量datasource.setMaxIdle(5);// 最大空閑數(shù)datasource.setMinIdle(1);// 最小空閑 }// 定義靜態(tài)方法,返回BasicDataSource類的對(duì)象public static DataSource getDataSource() {return datasource;}}2.3數(shù)據(jù)表創(chuàng)建
對(duì)一個(gè)項(xiàng)目而言,表設(shè)計(jì)是非常重要的,因?yàn)閼?yīng)用程序中所有的操作都是基于數(shù)據(jù)庫表而進(jìn)行的,所以我們第一步就是創(chuàng)建數(shù)據(jù)庫表。
- 創(chuàng)建數(shù)據(jù)庫
- 創(chuàng)建數(shù)據(jù)庫表
2.4項(xiàng)目分層(分包)的作用
程序?yàn)槭裁匆职謱?
以顧客去飯店吃飯案例分析一下:
小飯店: 一個(gè)服務(wù)員搞定(接待顧客\點(diǎn)菜\炒菜)
大飯店:
- 迎賓員(是否有預(yù)定\ 詢問吃中餐還是西餐或者燒烤等\ 幾位用餐 \ 領(lǐng)路到指定的包間\ 找點(diǎn)菜員為顧客點(diǎn)菜 )
- 點(diǎn)菜員(記錄顧客點(diǎn)餐內(nèi)容\ 記錄是否有忌口等問題\ 找廚師為顧客炒菜)
- 廚師(按照顧客菜肴清單,進(jìn)行炒菜)
通過案例發(fā)現(xiàn),當(dāng)程序規(guī)模小的時(shí)候,可以一個(gè)人全部完成;但程序規(guī)模大的時(shí)候,一個(gè)人難以完成,這時(shí),要采用多人合作的方式來完成程序開發(fā)。
???????? 多人合作方式將會(huì)碰到工作任務(wù)分配問題,這時(shí)我們會(huì)想,每個(gè)人負(fù)責(zé)完成項(xiàng)目的一塊內(nèi)容就可以了。那么,這一塊塊內(nèi)容的劃分,就需要我們采用分層(分包)的方式完成了。
- view層作用: 視圖層,即項(xiàng)目中的界面
- controller層作用: 控制層, 獲取界面上的數(shù)據(jù),為界面設(shè)置數(shù)據(jù); 將要實(shí)現(xiàn)的功能交給業(yè)務(wù)層處理
- service層作用: 業(yè)務(wù)層, 功能的實(shí)現(xiàn), 與controller控制層和數(shù)據(jù)訪問層DAO交互, 將對(duì)數(shù)據(jù)庫的操作交給DAO數(shù)據(jù)訪問層來處理
- dao層作用: 數(shù)據(jù)訪問層, 用來操作數(shù)據(jù)庫表的數(shù)據(jù)
- db數(shù)據(jù)庫: 這里指MySQL
- domain 實(shí)體包: 存放JavaBean
- tools工具包:存放項(xiàng)目中使用到的工具類
- test 測(cè)試包: 存放項(xiàng)目功能測(cè)試的代碼
?
2.5?工程創(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.功能模塊
3.1相關(guān)類創(chuàng)建
完成本項(xiàng)目中類的創(chuàng)建,無需在類中添加代碼。
編寫app包中MainApp.java
package cn.jxufe.gjp.app; /** 主程序類,作用,開啟軟件程序*/ public class MainApp {public static void main(String[] args) {// TODO Auto-generated method stub }}?
編寫domain包中ZhangWu.java
package cn.jxufe.gjp.domain;public class ZhangWu {}?
編寫Dao包中ZhangWuDao.java
package cn.jxufe.gjp.dao;import org.apache.commons.dbutils.QueryRunner;import cn.jxufe.gjp.tools.JDBCUtils;/** 賬務(wù)數(shù)據(jù)層類* 實(shí)現(xiàn)對(duì)數(shù)據(jù)表gjp_zhangwu 數(shù)據(jù)增刪改查操作 * 使用dbutils工具類完成,類成員創(chuàng)建QueryRunner對(duì)象,指定數(shù)據(jù)源*/ public class ZhangWuDao {private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); }?
編寫Service包,ZhangWuService.java
package cn.jxufe.gjp.service; /** 業(yè)務(wù)層類* 接收上一層,控制層controller的數(shù)據(jù)* 經(jīng)過計(jì)算,傳遞給dao層,操作數(shù)據(jù)庫* 調(diào)用dao層中的類,類成員位置,創(chuàng)建Dao類的對(duì)象*/import cn.jxufe.gjp.dao.ZhangWuDao;public class ZhangWuService {private ZhangWuDao dao = new ZhangWuDao(); }?
編寫controller包,ZhangWuController.java
package cn.jxufe.gjp.controller; /** 控制器層* 接收視圖層的數(shù)據(jù),將數(shù)據(jù)傳遞給service層* 成員位置創(chuàng)建service對(duì)象*/import cn.jxufe.gjp.service.ZhangWuService;public class ZhangWuController {private ZhangWuService service = new ZhangWuService(); }?
編寫view包,MainView.java
package cn.jxufe.gjp.view; /** 視圖層,用戶控制和操作的界面* 數(shù)據(jù)傳遞給controller層實(shí)現(xiàn)* 成員位置,創(chuàng)建一個(gè)controller對(duì)象*/import cn.jxufe.gjp.controller.ZhangWuController;public class MainView {private ZhangWuController controller = new ZhangWuController(); }3.2賬務(wù)JavaBean
JavaBean是指的是Java中的類,該類中的成員變量與數(shù)據(jù)庫表中的字段相對(duì)應(yīng)(變量名對(duì)應(yīng)數(shù)據(jù)庫表字段名、變量數(shù)據(jù)類型對(duì)應(yīng)數(shù)據(jù)庫表字段類型),并提供空參數(shù)構(gòu)造方法、set、get方法。
package cn.jxufe.gjp.domain;public class ZhangWu {private int zwid;private String flname;private double money;private String zhanghu;private String createtime;private String description;public ZhangWu() {// TODO Auto-generated constructor stub }public ZhangWu(int zwid, String flname, double money, String zhanghu, String createtime, String description) {this.zwid = zwid;this.flname = flname;this.money = money;this.zhanghu = zhanghu;this.createtime = createtime;this.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 getZhanghu() {return zhanghu;}public void setZhanghu(String zhanghu) {this.zhanghu = zhanghu;}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;}@Overridepublic String toString() {return "ZhangWu [zwid=" + zwid + ", flname=" + flname + ", money=" + money + ", zhanghu=" + zhanghu+ ", createtime=" + createtime + ", description=" + description + "]";}}3.3功能界面菜單
?
界面菜單的完成,是項(xiàng)目編寫的第一步。
我們通過輸出語句,完成界面菜單的輸出,之后再根據(jù)輸入的功能序號(hào),進(jìn)行對(duì)應(yīng)功能的調(diào)用執(zhí)行。
- 編寫MainView類run方法
- 完成功能界面菜單顯示
- 接收鍵盤輸入的功能選項(xiàng)
- 根據(jù)選項(xiàng)值,調(diào)用對(duì)應(yīng)的功能方法
- 編寫MainApp類的main主方法
- 調(diào)用MainView類中run方法,實(shí)現(xiàn)將程序執(zhí)行起來,顯示功能界面菜單。
2.功能實(shí)現(xiàn)代碼
package cn.jxufe.gjp.view; /** 視圖層,用戶控制和操作的界面* 數(shù)據(jù)傳遞給controller層實(shí)現(xiàn)* 成員位置,創(chuàng)建一個(gè)controller對(duì)象*/import java.util.Scanner;import cn.jxufe.gjp.controller.ZhangWuController;public class MainView {private ZhangWuController controller = new ZhangWuController();/** 實(shí)現(xiàn)界面效果* 接收用戶的輸入* 根據(jù)輸入調(diào)用不同的功能方法*/public void run() {// 創(chuàng)建Scanner對(duì)象,可以反復(fù)的鍵盤輸入Scanner scanner = new Scanner(System.in);while (true) {System.out.println("---------------管家婆家庭記賬軟件---------------");System.out.println("1.添加賬務(wù) 2.編輯賬務(wù) 3.刪除賬務(wù) 4.查詢賬務(wù) 5.退出系統(tǒng)");System.out.println("請(qǐng)輸入要操作的功能序號(hào)[1-5]:");// 接收用戶的菜單選擇int choose = scanner.nextInt();// 對(duì)選擇的菜單判斷,調(diào)用不同的功能switch (choose) {// 選擇添加賬務(wù),調(diào)用添加賬務(wù)的方法case 1:break;// 選擇的編輯賬務(wù),調(diào)用編輯賬務(wù)方法case 2:break;// 選擇的刪除賬務(wù),調(diào)用刪除賬務(wù)方法case 3:break;// 選擇的是查詢賬務(wù),調(diào)用查詢方法case 4:break;//退出系統(tǒng)case 5:System.out.println("再見");System.exit(0);default:System.out.println("輸入錯(cuò)誤,請(qǐng)重新輸入");;}}} }3.4查詢所有賬務(wù)
1.功能實(shí)現(xiàn)步驟
- 編寫MainView類中selectZhangWu方法
- 通過輸出語句,顯示出要查詢賬務(wù)的方式
- 接收鍵盤的輸入項(xiàng),調(diào)用對(duì)應(yīng)的方法(1.查詢所有 2.按條件查詢)
- 編寫MainView類中selectAll查詢所有賬務(wù)方法
- 調(diào)用ZhangWuContrler類selectAll方法,返回包含所有賬務(wù)數(shù)據(jù)的List<ZhangWu>集合
- 調(diào)用MainView類中print方法,實(shí)現(xiàn)控制臺(tái)顯示所有賬務(wù)數(shù)據(jù)
- 編寫MainView類中print方法
- 使用輸出語句,打印出賬務(wù)表的表頭名稱
- 遍歷賬務(wù)集合,將每個(gè)賬務(wù)信息輸出打印
- 編寫ZhangWuController類中selectAll方法
- 調(diào)用ZhangWuService類中selectAll方法,返回包含所有賬務(wù)數(shù)據(jù)的List<ZhangWu>集合
- 編寫ZhangWuService類中selectAll方法
- 調(diào)用ZhangWuDao類中selectAll方法,返回包含所有賬務(wù)數(shù)據(jù)的List<ZhangWu>集合
- 編寫ZhangWuDao類中selectAll()方法
- 通過QueryRunner對(duì)象,調(diào)用query方法查詢數(shù)據(jù)庫表gjp_zhangwu,返回包含所有賬務(wù)數(shù)據(jù)的List<ZhangWu>集合
2.功能實(shí)現(xiàn)代碼
- 編寫MainView類中selectZhangWu方法
?
- 編寫MainView類中selectAll方法
?
- 編寫ZhangWuController類中selectAll方法
?
- 編寫ZhangWuService類中selectAll方法
?
- 編寫ZhangWuDao類中selectAll()方法
3.5多條件查詢賬務(wù)
1)功能分析
- 編寫MainView類中select方法
- 通過鍵盤輸入查詢?nèi)掌诘姆秶?/li>
- 調(diào)用ZhangWuController類中select方法,返回查詢?nèi)掌诜秶鷥?nèi)的賬務(wù)信息集合List<ZhangWu>
- 調(diào)用MainView類中的print方法,將賬務(wù)信息集合中的內(nèi)容顯示在控制臺(tái)中
- 編寫ZhangWuController類中select方法
- 編寫ZhangWuController類中select方法
- 調(diào)用ZhangWuService類中select方法,返回查詢?nèi)掌诜秶鷥?nèi)的賬務(wù)信息集合List<ZhangWu>
- 編寫ZhangWuService類中select方法
- 調(diào)用ZhangWuDao 類中select方法,返回查詢?nèi)掌诜秶鷥?nèi)的賬務(wù)信息集合List<ZhangWu>
- 編寫ZhangWuDao類中select方法
- 通過QueryRunner對(duì)象,調(diào)用query方法查詢數(shù)據(jù)庫表gjp_zhangwu,返回包含查詢?nèi)掌诜秶鷥?nèi)的賬務(wù)數(shù)據(jù)List<ZhangWu>集合
2)功能實(shí)現(xiàn)步驟
1. 編寫MainView類中select方法
/** 定義方法,實(shí)現(xiàn)條件查詢賬務(wù)數(shù)據(jù)* 提供用戶的輸入日期,開始日期結(jié)束日期* 就2個(gè)日期,傳遞到controller層* 調(diào)用controller的方法,傳遞2個(gè)日期參數(shù)* 獲取到controller查詢的結(jié)果集,打印出來*/public void select() {System.out.println("選擇條件查詢,輸入日期格式XXXX-XX-XX");Scanner sc = new Scanner(System.in);System.out.print("請(qǐng)輸入開始日期:");String startDate = sc.nextLine();System.out.print("請(qǐng)輸入結(jié)果日期:");String endDate = sc.nextLine();// 調(diào)用controller層的方法,傳遞日期,獲取查詢結(jié)果集List<ZhangWu> list = controller.select(startDate, endDate);if (list.size() != 0)print(list);elseSystem.out.println("沒有查詢到數(shù)據(jù)");}?
2. 編寫ZhuangWuController類中select方法
/** 定義方法,實(shí)現(xiàn)條件查詢賬務(wù)* 方法由試圖層調(diào)用,傳遞兩個(gè)日期的字符串* 調(diào)用service層的方法,傳遞兩個(gè)日期字符串,獲取結(jié)果集* 結(jié)果集返回給試圖*/public List<ZhangWu> select(String startDate, String endDate) {return service.select(startDate, endDate);}?
3.編寫ZhangWuService類中select方法
/** 定義方法,實(shí)現(xiàn)條件查詢賬務(wù)* 方法由控制層調(diào)用,傳遞2個(gè)日期字符串* 調(diào)用dao層的方法,傳遞2個(gè)日期字符串* 獲取到查詢結(jié)果集*/public List<ZhangWu> select(String startDate, String endDate) {return dao.select(startDate, endDate);}?
4. 編寫ZhangWuDao類中select方法
/** 定義方法,查詢數(shù)據(jù)庫,帶有條件去查詢賬務(wù)表* 由業(yè)務(wù)層調(diào)用,查詢結(jié)果集存儲(chǔ)到Bean對(duì)象,存儲(chǔ)到List集合* 調(diào)用者傳遞2個(gè)日期字符串*/public List<ZhangWu> select(String startDate, String endDate) {try {// 拼寫條件查詢的SQL語句String sql = "SELECT * FROM gjp_zhangwu WHERE createtime BETWEEN ? AND ?";// 定義對(duì)象數(shù)組,存儲(chǔ)?占位符Object[] params = { startDate, endDate };// 調(diào)用qr對(duì)象的方法query查詢數(shù)據(jù)表,獲取結(jié)果集return qr.query(sql, new BeanListHandler<>(ZhangWu.class), params);} catch (SQLException ex) {System.out.println(ex);throw new RuntimeException("條件查詢失敗");}}3.6添加賬務(wù)
1)功能分析
編寫MainView類中addZhangWu方法
- 鍵盤輸入新添加的賬務(wù)信息
- 調(diào)用ZhangWuController類中addZhangWu方法,用來指定賬務(wù)的添加
- 添加完畢后,使用輸出語句,提示“添加賬務(wù)成功!”
編寫ZhangWuController類中addZhangWu方法
- 調(diào)用ZhangWuService類中addZhangWu方法,用來指定賬務(wù)的添加
編寫ZhangWuService類中addZhangWu方法
- 調(diào)用ZhangWuDao類中addZhangWu方法,用來指定賬務(wù)的添加
?編寫ZhangWuDao類中addZhangWu方法
- 通過QueryRunner對(duì)象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成指定賬務(wù)添加到數(shù)據(jù)庫表中
2)功能實(shí)現(xiàn)步驟
1. 編寫MainView類中addZhangWu方法
/** 定義方法addZhangWu* 添加賬務(wù)的方法,用戶在界面中選擇菜單1的時(shí)候調(diào)用、* 實(shí)現(xiàn)思想:* 接收鍵盤輸入,5項(xiàng)輸入,調(diào)用controller層方法*/public void addZhangWu() {System.out.println("選擇的添加賬務(wù)功能,請(qǐng)輸入以下內(nèi)容");Scanner sc = new Scanner(System.in);System.out.println("輸入分類名稱");String flname = sc.next();System.out.println("輸入金額");double money = sc.nextDouble();System.out.println("輸入賬戶");String zhanghu = sc.next();System.out.println("輸入日期:格式XXXX-XX-xx");String createtime = sc.next();System.out.println("輸入具體描述");String description = sc.next();// 將接收到的數(shù)據(jù),調(diào)用controller層的方法,傳遞參數(shù),實(shí)現(xiàn)數(shù)據(jù)添加// 將用戶輸入的所有參數(shù),封裝成ZhangWu對(duì)象ZhangWu zw = new ZhangWu(0, flname, money, zhanghu, createtime, description);controller.addZhangWu(zw);System.out.println("恭喜添加賬務(wù)成功");}?
2. 編寫ZhangWuController類中addZhangWu方法
/** 定義方法,實(shí)現(xiàn)賬務(wù)添加功能* 由視圖層調(diào)用,傳遞參數(shù)(傳遞過來的參數(shù)不能是5個(gè)數(shù)據(jù),傳遞的是一個(gè)ZhangWu類型的對(duì)象)* 本方法調(diào)用service層的方法,傳遞ZhangWu對(duì)象,獲取到添加后的結(jié)果集(添加成功影響的行數(shù),int)*/public void addZhangWu(ZhangWu zw) {service.addZhangWu(zw);}?
3.編寫ZhangWuService類中addZhangWu方法
/** 定義方法,實(shí)現(xiàn)添加賬務(wù)* 是由控制層調(diào)用,傳遞ZhangWu對(duì)象*/public void addZhangWu(ZhangWu zw) {dao.addZhangWu(zw);}?
4.編寫ZhangWuDao類中addZhangWu方法
/** 定義方法,實(shí)現(xiàn)添加賬務(wù)功能* 由業(yè)務(wù)層調(diào)用,傳遞ZhangWu對(duì)象* 將ZhangWu對(duì)象中的數(shù)據(jù),添加到數(shù)據(jù)庫*/public void addZhangWu(ZhangWu zw) {try {// 拼接添加數(shù)據(jù)的sqlString sql = "INSERT INTO gjp_zhangwu (flname,money,zhanghu,createtime,description) VALUES(?,?,?,?,?)";// 創(chuàng)建對(duì)象數(shù)組,處處5個(gè)占位符的實(shí)際參數(shù)// 實(shí)際參數(shù)來源是傳遞過來的對(duì)象ZhangWuObject[] params = { zw.getFlname(), zw.getMoney(), zw.getZhanghu(), zw.getCreatetime(),zw.getDescription() };// 調(diào)用qr對(duì)象中的方法update執(zhí)行添加 qr.update(sql, params);} catch (SQLException ex) {System.out.println(ex);throw new RuntimeException("賬務(wù)添加失敗");}}?
3.7編輯賬務(wù)
1)功能分析
- 編寫MainView類中editZhangWu方法
- 鍵盤輸入要編輯的賬務(wù)信息ID號(hào)
- 鍵盤輸入要修改的賬務(wù)信息內(nèi)容
- 調(diào)用ZhangWuController類中editZhangWu方法,用來將指定的賬務(wù)信息進(jìn)行更新
- 更新完畢后,使用輸出語句,提示 “編輯賬務(wù)成功!”
- 編寫ZhangWuController類中editZhangWu方法
- 調(diào)用ZhangWuService類中ZhangWuService方法,用來將指定的賬務(wù)信息進(jìn)行更新
?
- 編寫ZhangWuService類中editZhangWu方法
- 調(diào)用ZhangWuDao類中editZhangWu方法,用來將指定的賬務(wù)信息進(jìn)行更新
?
- 編寫ZhangWuDao類中editZhangWu方法
- 通過QueryRunner對(duì)象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成數(shù)據(jù)庫表中指定賬務(wù)更新操作
2)功能實(shí)現(xiàn)步驟
1. 編寫MainView類中editZhangWu方法
/** 定義方法,實(shí)現(xiàn)對(duì)賬務(wù)的編輯功能* 實(shí)現(xiàn)思想:* 接收用戶的輸入的信息* 封裝成ZhangWu對(duì)象* 調(diào)用控制層的方法,傳遞ZhangWu對(duì)象,實(shí)現(xiàn)編輯* */public void editZhangWu() {// 調(diào)用查詢所有賬務(wù)數(shù)據(jù)的功能,顯示出來// 看到所有數(shù)據(jù),從中選擇一項(xiàng),進(jìn)行修改 selectAll();System.out.println("選擇的是編輯功能,請(qǐng)輸入數(shù)據(jù)");Scanner sc = new Scanner(System.in);System.out.print("請(qǐng)輸入ID");int zwid = sc.nextInt();System.out.println("輸入分類名稱");String flname = sc.next();System.out.println("輸入金額");double money = sc.nextDouble();System.out.println("輸入賬戶");String zhanghu = sc.next();System.out.println("輸入日期:格式XXXX-XX-xx");String createtime = sc.next();System.out.println("輸入具體描述");String description = sc.next();// 將用戶輸入的數(shù)據(jù),封裝到ZhangWu對(duì)象中// 用戶輸入的ID,必須封裝到到對(duì)象中ZhangWu zw = new ZhangWu(zwid, flname, money, zhanghu, createtime, description);// 調(diào)用controller層中的方法,實(shí)現(xiàn)編輯賬務(wù) controller.editZhangWu(zw);System.out.println("賬務(wù)編輯成功");}?
2. 編寫ZhuangWuController類中editZhangWu方法
/** 定義方法,實(shí)現(xiàn)編輯賬務(wù)功能* 由視圖層調(diào)用,傳遞參數(shù),也是ZhangWu對(duì)象* 調(diào)用service層的方法,也是ZhangWu對(duì)象*/public void editZhangWu(ZhangWu zw) {service.editZhangWu(zw);}?
?
3.編寫ZhangWuService類中editZhangWu方法
/** 定義方法,實(shí)現(xiàn)編輯賬務(wù)* 由控制層調(diào)用,傳遞ZhangWu對(duì)象* 調(diào)用dao層的方法,傳遞ZhangWu對(duì)象*/public void editZhangWu(ZhangWu zw) {dao.editZhangWu(zw);} }?
4.編寫ZhangWuDao類中editZhangWu方法
/** 定義方法,實(shí)現(xiàn)編輯功能* 由業(yè)務(wù)層調(diào)用,傳遞ZhangWu對(duì)象* 將對(duì)象中的數(shù)據(jù),更新到數(shù)據(jù)表*/public void editZhangWu(ZhangWu zw) {try {// 更新數(shù)據(jù)的SQLString sql = "UPDATE gjp_zhangwu SET flname=?,money=?,zhanghu=?,createtime=?,description=? WHERE zwid=?";// 定義對(duì)象數(shù)組,封裝所有數(shù)據(jù)Object[] params = { zw.getFlname(), zw.getMoney(), zw.getZhanghu(), zw.getCreatetime(), zw.getDescription(),zw.getZwid() };// 調(diào)用qr對(duì)象方法update執(zhí)行更新 qr.update(sql, params);} catch (SQLException ex) {System.out.println(ex);throw new RuntimeException("編輯賬務(wù)失敗");}}3.8.刪除賬務(wù)
?
1)功能分析
- 編寫MainView類中deleteZhangWu方法
- 鍵盤輸入要?jiǎng)h除的賬務(wù)信息ID號(hào)
- 調(diào)用ZhangWuService類中deleteZhangWu方法,用來將指定的賬務(wù)信息刪除
- 刪除完畢后,使用輸出語句,提示 “刪除賬務(wù)成功!”
- 編寫ZhangWuController類中deleteZhangWu方法
- 調(diào)用ZhangWuService類中deleteZhangWu方法,用來將指定的賬務(wù)信息刪除
- 編寫ZhangWuService類中deleteZhangWu方法
- 調(diào)用ZhangWuDao類中deleteZhangWu方法,用來將指定的賬務(wù)信息刪除
- 編寫ZhangWuDao類中deleteZhangWu方法
- 通過QueryRunner對(duì)象,調(diào)用update方法更新數(shù)據(jù)庫表gjp_zhangwu,完成數(shù)據(jù)庫表中指定賬務(wù)刪除操作
2)功能實(shí)現(xiàn)步驟
1. 編寫MainView類中deleteZhangWu方法
/** 定義方法,實(shí)現(xiàn)賬務(wù)刪除* 實(shí)現(xiàn)思想:* 接收用戶的輸入,輸入一個(gè)主鍵數(shù)據(jù)* 調(diào)用控制層方法,傳遞一個(gè)主鍵*/public void deleteZhangWu() {//調(diào)用查詢所有賬務(wù)數(shù)據(jù)的功能,顯示出來//看到所有數(shù)據(jù),從中選擇一項(xiàng),進(jìn)行修改 selectAll();System.out.println("選擇的是刪除功能,請(qǐng)輸入序號(hào)即可");int zwid = new Scanner(System.in).nextInt();//調(diào)用控制層方法,傳遞主鍵id即可 controller.deleteZhangWu(zwid);System.out.println("刪除賬務(wù)成功");}?
2.編寫ZhangWuController類中deleteZhangWu方法
/** 定義方法,實(shí)現(xiàn)刪除功能* 視圖層調(diào)用,傳遞int類型主鍵* 調(diào)用service層方法,傳遞int主鍵*/public void deleteZhangWu(int zwid) {service.deleteZhangWu(zwid);}?
3.編寫ZhangWuService類中deleteZhangWu方法
/** 定義方法,實(shí)現(xiàn)刪除賬務(wù)功能* 由控制層調(diào)用,傳遞主鍵id* 調(diào)用dao層方法,傳遞主鍵id*/public void deleteZhangWu(int zwid) {dao.deleteZhangWu(zwid);}?
4.編寫ZhangWuDao類中deleteZhangWu方法
/** 定義方法,實(shí)現(xiàn)刪除業(yè)務(wù)* 業(yè)務(wù)層調(diào)用,傳遞主鍵id*/public void deleteZhangWu(int zwid) {try {// 拼寫刪除數(shù)據(jù)SQLString sql = "DELETE FROM gjp_zhangwu WHERE zwid=?";qr.update(sql, zwid);} catch (SQLException ex) {System.out.println(ex);throw new RuntimeException("刪除賬務(wù)失敗");}}?
轉(zhuǎn)載于:https://www.cnblogs.com/xinmomoyan/p/11061272.html
總結(jié)
- 上一篇: C++--day06
- 下一篇: Java NIO之Channel(通道)