今天內(nèi)容安排:
1、隨機點名器
2、超市購物小票方法封裝
3、超市購物小票加入全天購物金額統(tǒng)計功能
簡易計算器的演示
超市購物小票之前代碼封裝成方法的演示
超市購物小票全天購物總收入?yún)R總的演示加入了角色的概念
今天開始使用Eclipse
01案例整體需求.avi
02方法定義.avi
03方法使用.avi
04數(shù)組簡介.avi
01案例整體需求
* A: 案例整體需求
* a: 隨機點名器需求
* 存儲所有同學姓名
* 總覽全班同學姓名
* 隨機點名其中一人,打印到控制臺
* b: 超市購物小票需求
* 將昨天的代碼封裝成方法
* c: 超市購物小票新需求
* 加入全天購物金額統(tǒng)計功能
* B: 知識點安排
* a: 數(shù)組
* b: 方法
02方法定義
* A: 隨機點名器需求需求分析
* a: 為什么要使用方法
隨機點名器明確地分為了三個功能。如果將多個獨立功能的代碼寫到一起,則代碼相對冗長,
我們可以針對不同的功能可以將其封裝到一個方法中,將完整獨立的功能分離出來。
* b: 為什么要使用數(shù)組
而在存儲同學姓名時,如果對每一個同學都定義一個變量進行姓名存儲,則會出現(xiàn)過多孤立的變量,
很一次性將全部數(shù)據(jù)持有。此時,我們可以使用數(shù)組解決多個數(shù)據(jù)的存儲問題。
* B: 方法的定義及使用
* a: 方法(函數(shù))的作用
* 將一個完整功能的代碼組織成一個方法,在再次完成相同的功能時,
便可以直接以整體的方式調(diào)用該功能,而不再將具體實現(xiàn)過程再完整重復(fù)一遍。
* 總結(jié)一句話:提高代碼的復(fù)用性
* b: 方法舉例(main方法)
* 就是一個特殊的方法。作為程序入口,供JVM調(diào)用。
* 將不同功能定義成不同方法。供其他方法調(diào)用。
* 最先接觸方法時,我們定義不同的方法,供main方法調(diào)用。
* c: 方法的定義格式
* 定義方法時明確: 需要的數(shù)據(jù) 回饋的數(shù)據(jù)
修飾符 返回值類型 方法名(類型 形式參數(shù)1,類型 形式參數(shù)1 ,…) {
執(zhí)行語句;
return 返回值;
}
? * 修飾符:目前一律使用public static
? * 返回值類型:回饋數(shù)據(jù)的類型,如果沒有用void代替
? * return:用于返回要回饋的數(shù)據(jù)
? * 方法名:方法的名稱
? * 參數(shù)類型:需要的數(shù)據(jù)的數(shù)據(jù)類型
? * 參數(shù):需要的數(shù)據(jù)
* d: 方法的使用
* 有回饋值:回饋值類型 回饋值 = 方法名(方法需要的數(shù)據(jù)) ;
* 無回饋值:方法名(方法需要的數(shù)據(jù));
* 注意:由于這里使用public static修飾,所以,這里所有的方法均直接調(diào)用即可。
后期沒有static則不可以如此調(diào)用
03方法使用
* A: 案例代碼
/*
方法:一個完整功能的封裝,即一個方法就是一個獨立的功能。
方法定義:
定義位置:類中與其他方法并列
修飾符 返回值類型 方法名(數(shù)據(jù)類型 參數(shù)1,數(shù)據(jù)類型 參數(shù)2) {
功能邏輯
return 返回值;
}
方法的使用:
現(xiàn)階段:在同一個類中,通過main方法,直接調(diào)用其他方法。
有返回值: 返回值類型 變量 = 方法名(實際參與計算的數(shù)據(jù)1,實際參與計算的數(shù)據(jù)1);
沒有返回值:方法名(實際參與計算的數(shù)據(jù)1,實際參與計算的數(shù)據(jù)1);
求兩個數(shù)的和
成員變量:定義在類中方法外,可以被類中所有方法所訪問
*/
public class Demo01Method{
static int x = 120;
public static void main(String[] args) {
//方法的調(diào)用
int i = getSum(10,20);
System.out.println(i);
System.out.println(x);
System.out.println(getSum(100,20));
}
//求兩個整數(shù)的和
public static int getSum(int a,int b) {
int sum = a+b;
System.out.println(x+"===============");
return sum;
}
}
04數(shù)組簡介
* A: 數(shù)組簡介
* a: 求多個數(shù)的和需求分析
*1: 求多個數(shù)的和時,需要一次性傳入多個數(shù)字,而幾個數(shù)字并不知道。
此時可以將方法所需參數(shù)設(shè)置為一個數(shù)組,只要接受一個數(shù)組即可,
將數(shù)組傳入后,再通過數(shù)組操作所有數(shù)字。
*2: 方法參數(shù):需要一個存放int值的數(shù)組
*3: 方法返回值:回饋的是求和結(jié)果,類型與數(shù)組中的數(shù)據(jù)相同
* b: 數(shù)組
*1: 作用
* 數(shù)組用來存儲多個數(shù)值,通過索引管理。可以存儲任意類型,但是一個數(shù)組中只能存儲一種類型的多個數(shù)值。
*2:定義格式
* 數(shù)據(jù)類型[] 變量名 = new 數(shù)據(jù)類型[數(shù)據(jù)個數(shù)];或者
* 數(shù)據(jù)類型[] 變量名 = {數(shù)據(jù), 數(shù)據(jù), 數(shù)據(jù), 數(shù)據(jù)};
* 如:int[] arr = new int[5];
String[] arr2 = {"我愛Java", "我喜歡Java", "我和Java在一起"};
*3: 使用格式
* 數(shù)組元素:數(shù)組變量名[索引]
* 獲取數(shù)組長度:數(shù)組變量名.length
* c: 案例代碼
/*
數(shù)組:用于存儲數(shù)據(jù)的容器,使用索引管理容器內(nèi)元素
數(shù)組也是一種數(shù)據(jù)類型,是一種引用數(shù)據(jù)類型
定義格式:
數(shù)據(jù)類型[] 變量名(數(shù)組名) = new 數(shù)據(jù)類型[數(shù)組長度];
數(shù)據(jù)類型[] 變量名(數(shù)組名) = {數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3,數(shù)據(jù)4};
使用格式:
訪問元素指獲取值、賦值
數(shù)組名[索引]
獲取數(shù)組長度:length屬性
*/
public class Demo02Array{
public static void main(String[] args) {
//定義數(shù)組:數(shù)組中存儲我班同學的就業(yè)薪資
int[] salaryArray = {20000,300,1024,521};
//使用數(shù)組:為元素賦值,取元素值
//賦值
salaryArray[3] = 500000;
//獲取值
int i = salaryArray[3];
System.out.println(i);
int i2 = salaryArray[1];
System.out.println(i2);
System.out.println(salaryArray[2]);
//獲取數(shù)組長度
int length = salaryArray.length;
System.out.println(length);
//使用格式1完成與上例相同的數(shù)組
int[] salaryArray2 = new int[4];
salaryArray2[0] = 20000;
salaryArray2[1] = 300;
salaryArray2[2] = 1024;
System.out.println(salaryArray2[3]);
//int[] arr = null;
//System.out.println(arr.[1]);
//int a = null; 基本類型不能賦值為null
}
}
===================================第一個階段=================================
05需要封裝的方法分析.avi
06存儲所有同學姓名方法實現(xiàn).avi
07打印所有同學姓名.avi
08隨機點名方法實現(xiàn).avi
05需要封裝的方法分析
* A: 需要封裝的方法分析
* a: 存儲所有同學姓名
* 方法參數(shù)類型:存儲姓名的數(shù)組
* 方法返回值:無
* 錄入所有同學姓名大致分為3步:
* 1 定義一個存放所有同學姓名的數(shù)組
* 2 方法中使用鍵盤錄入逐個同學姓名
* 3 調(diào)用方法時傳入數(shù)組,向數(shù)組中放入每次要存儲的姓名
* b: 總覽全班同學姓名
* 方法參數(shù)類型:存儲姓名的數(shù)組
* 方法返回值:無
* 在完成所有人員姓名數(shù)據(jù)持有后,打印數(shù)組中數(shù)據(jù),總覽所有人員姓名。
* c: 隨機點名
* 方法參數(shù)類型:存儲姓名的數(shù)組
* 方法返回值:由數(shù)組中隨機產(chǎn)生的姓名
* 使用隨機數(shù)產(chǎn)生隨機索引,使用隨機索引拿出對應(yīng)學生姓名。并返回該學生姓名。
06存儲所有同學姓名方法實現(xiàn)
* A: 存儲所有同學姓名方法實現(xiàn)
* 案例代碼
/*
隨機點名器:
隨機點名器具備以下3個內(nèi)容:
存儲所有同學姓名
總覽全班同學姓名
隨機點名其中一人,打印到控制臺
*/
import java.util.Scanner;
import java.util.Random;
public class RandomName{
public static void main(String[] args) {
//調(diào)用三個功能性方法
String[] students = new String[3];
System.out.println("開始為數(shù)組賦值");
//直接調(diào)用無返回值的方法
saveNames(students);
System.out.println("數(shù)組賦值結(jié)束");
}
//存儲所有同學姓名
public static void saveNames(String[] names) {
Scanner sc = new Scanner(System.in);
//獲取數(shù)組長度
int namesNumber = names.length;
//通過for循環(huán)依次訪問到每一個元素
for(int i=0; i<namesNumber; i++) {
names[i] = sc.next();
}
}
}
07打印所有同學姓名
* A: 打印所有同學姓名
* 案例代碼(方法)
//展示班級所有同學姓名
public static void printStudentNames(String[] names) {
//遍歷數(shù)組
for(int i=0; i<names.length; i++){
String name = names[i];
System.out.println(name);
}
}
08隨機點名方法實現(xiàn)
* A: 隨機點名方法實現(xiàn)
* a: 案例代碼(最終代碼)
public class RandomName{
public static void main(String[] args) {
//調(diào)用三個功能性方法
String[] students = new String[3];
System.out.println("開始為數(shù)組賦值");
//直接調(diào)用無返回值的方法
saveNames(students);
System.out.println("數(shù)組賦值結(jié)束");
System.out.println(students[1]);
System.out.println("============================");
//直接調(diào)用無返回值的方法
printStudentNames(students);
System.out.println("============================");
//調(diào)用方法,返回隨機人名,使用變量接收
String name = randomName(students);
System.out.println(name);
}
//存儲所有同學姓名
public static void saveNames(String[] names) {
Scanner sc = new Scanner(System.in);
//獲取數(shù)組長度
int namesNumber = names.length;
//通過for循環(huán)依次訪問到每一個元素
for(int i=0; i<namesNumber; i++) {
names[i] = sc.next();
}
}
//展示班級所有同學姓名
public static void printStudentNames(String[] names) {
//遍歷數(shù)組
for(int i=0; i<names.length; i++){
String name = names[i];
System.out.println(name);
}
}
//隨機點名
public static String randomName(String[] names) {
//產(chǎn)生隨機索引,范圍為0~(names.length-1)
//創(chuàng)建隨機數(shù)類對象
Random random = new Random();
//調(diào)用隨機數(shù)方法,產(chǎn)生隨機索引
int randomIndex = random.nextInt(names.length);
//從數(shù)組中獲取隨機索引對應(yīng)的元素值
String name = names[randomIndex];
//返回該隨機點名到的人名
return name;
}
}
=========================================第二階段=============================================
09方法的詳細介紹.avi
10數(shù)組的詳細解釋.avi
11數(shù)組的內(nèi)存解釋.avi
12超市購物小票代碼回顧.avi
09方法的詳細介紹
* A: 方法
* a: 定義
* 方法是對現(xiàn)實功能的一個抽象,便于對功能的復(fù)用。在一個類中可以有多個方法,多個方法是平等關(guān)系。main方法就是一個方法。
在C語言當中,相同的概念使用函數(shù)來命名。
* b: 定義格式
修飾符 返回值類型 方法名(類型 形式參數(shù)1,類型形式參數(shù)1 ,…) {
執(zhí)行語句;
return 返回值;
}
* 修飾符:目前一律使用public static
* 返回值類型:
方法運行后返回的運算結(jié)果的數(shù)據(jù)類型
可以返回任意類型,包含基本數(shù)據(jù)類型與引用數(shù)據(jù)數(shù)據(jù)類型
如果沒有返回值,則使用void
返回值類型是在方法定以前,設(shè)計這個方法時已經(jīng)想好的。是功能的一部分
* return:
用于結(jié)束方法。
結(jié)束方法的同時如果定義的返回值類型不是void,則同時將結(jié)果返回給調(diào)用者。
當返回值類型為void時,return后可以不跟返回值,直接寫return;也可以省略
* 返回值:
該方法運算的數(shù)值結(jié)果,該結(jié)果會通過return返回給調(diào)用者
有時結(jié)果運行后沒有返回值。(買東西與買服務(wù))
返回值的數(shù)據(jù)類型一定要與返回值類型統(tǒng)一
* 方法名:
方法的名稱,區(qū)分不同方法的依據(jù)
定義符合小駝峰式 wordWordWord
* 參數(shù)類型:
是形式參數(shù)的數(shù)據(jù)類型
* 形式參數(shù):
如數(shù)學計算,通過已知數(shù)計算結(jié)果。方法需要通過已知數(shù)組完成功能,形式參數(shù)就是接收”已知數(shù)據(jù)”的變量。
是一個變量,用于存儲調(diào)用方法時傳遞給方法的實際數(shù)值。
定義符合小駝峰式 wordWordWord
是方法想順利運行時,需要獲取的數(shù)據(jù)
用于變量進行方法計算使用。
* c: 使用
* 對象名.方法名(對應(yīng)參數(shù))
* 方法必須先定義再使用
* 方法的定義順序跟調(diào)用無關(guān)
* 方法不能嵌套定義,但是可以嵌套調(diào)用
* B: 方法重載
* a: 定義
* 在同一個類中,出現(xiàn)方法名相同而參數(shù)列表不同,這樣定義方法叫做方法重載。
這樣的設(shè)計優(yōu)化了程序設(shè)計
* b: 注意事項
* 重載與返回值無關(guān)
* 重載與具體的變量標識符無關(guān)
* 重載只與方法名與參數(shù)名相關(guān)
* 重載方法方法名必須相同
* 重載方法參數(shù)必須不同
* 參數(shù)個數(shù)不同
* 參數(shù)類型不同
* 參數(shù)順序不同
* c: 方法重載舉例
* 如:求3個數(shù),4個數(shù)的和
* 方法定義:與求兩數(shù)邏輯類似,求3、4個數(shù)和的方法中中只有參數(shù)不同。方法名與求兩數(shù)的方法名相同,三個方法互為重載關(guān)系
* public int add(int a,int b) {邏輯} //兩個數(shù)加法
* public int add(int a,int b,int c) {邏輯} //三個數(shù)加法
* public int add(int a,int b,int c,int d) {邏輯} //四個數(shù)加法
* c: 使用
* 三個數(shù)求和、四個數(shù)求和
* 三個數(shù)與四個數(shù)求和思想與求兩個數(shù)大致相同:
* 參數(shù):需要3個或4個整數(shù)
* 返回值:回饋的是求和結(jié)果,類型與給予的數(shù)相同
* 但是在方法命名時,無論求多少個數(shù)的和,均是求和功能,在起名時可以起相同名稱,這時便可以使用方法重載完成功能。
* d: 案例代碼
public class Demo02MathTool {
public static void main(String[] args) {
int x = 10;
int y = 20;
int add = add(x,y);
System.out.println(add);
System.out.println(add(10,20,30));
System.out.println(add(10,20,30,40));
System.out.println(subtract(x,y));
System.out.println(multiply(x,y));
System.out.println(divide(x,y));
}
//求兩個數(shù)的和
public static int add(int a,int b) {
// int sum = a + b;
// return sum;
return a + b;
}
//求三個數(shù)的和
public static int add(int a,int b,int c) {
int sum = a + b + c;
return sum;
}
//求四個數(shù)的和
public static int add(int a,int b,int c,int d) {
int sum = a + b + c + d;
return sum;
}
//求兩個數(shù)的差
public static int subtract(int a,int b) {
return a - b;
}
//求兩個數(shù)的積
public static int multiply(int a,int b) {
return a * b;
}
//求兩個數(shù)的整除商
public static int divide(int a,int b) {
return a / b;
}
}
10數(shù)組的詳細解釋
* A: 數(shù)組詳細解釋
* a: 容器
* 將程序中可以臨時存儲數(shù)據(jù)的部分叫做容器,ava當中具有持有數(shù)據(jù)功能的容器中,數(shù)組是最基本的
* b: 數(shù)組的特點
* 數(shù)組是Java當中效率最快的容器
* 數(shù)組的長度是固定的,數(shù)組一旦被創(chuàng)建,長度永遠不能被改變
* 數(shù)組中只能存儲一種類型的數(shù)據(jù)
* c:數(shù)組的定義
* 數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長度] ;
* 如:
int[] arr = new int[5];
int[] arr = new int[]{20,5,100,30,5}
int[] arr = {20,5,100,30,5}
int arr[] = new int[4];//c語言的定義格式
* d: 數(shù)組的使用
* 索引:數(shù)組底層是依次將數(shù)據(jù)進行編號后直接通過編號訪問(線性序列)的。這個編號叫做索引。從0開始最大值為數(shù)組長度減1
* 數(shù)組名:代表數(shù)組的內(nèi)存地址
* 數(shù)組元素:數(shù)組名[索引];
* e: 數(shù)組的注意事項
* 空指針異常(NullPointerException)
* 變量根本沒有值
* 如定義了int a; int[] b;這里直接使用變量a和b,編譯就報錯
* 變量有值,但值為null
* 如int a = null; 編譯失敗,因為null只能賦值給引用數(shù)據(jù)類型
* int[] arr = null; 正常賦值,但是之后使用數(shù)組的任何屬性和元素都會報出空指針異常
* 數(shù)組索引越界異常(ArrayIndexOutOfBoundsException)
* 當數(shù)組中不存在該索引卻訪問該索引時,出現(xiàn)數(shù)組索引越界異常
11數(shù)組的內(nèi)存解釋
* A: 引用數(shù)據(jù)類型數(shù)組內(nèi)存圖(詳見day04_source文件夾中的"數(shù)組內(nèi)存結(jié)構(gòu)圖_1.png"圖片)
* a: 內(nèi)存分區(qū)
* 寄存器:最快的存儲區(qū)域直接與CPU打交道,是程序員無法控制的計算區(qū)域
* 堆棧:又叫棧,僅次于寄存器。用于存儲局部變量
* 堆:通用內(nèi)存池,用于存放所有引用數(shù)據(jù)類型對象。存儲new出來的數(shù)組或?qū)ο螅總€對象均有地址,且有默認初始化值。
* 方法區(qū):面向?qū)ο蟛糠种v解
* 本地方法區(qū):和系統(tǒng)相關(guān)
* 常量存儲區(qū)域:用于存放永遠不會被改變的值
* b: 引用數(shù)據(jù)類型數(shù)組的內(nèi)存結(jié)構(gòu)圖(圖形見筆記目錄下的數(shù)組內(nèi)存結(jié)構(gòu)圖_1.png)
* int[] arr = new int[]{1,5,6,1,7};
* 引用變量:引用數(shù)據(jù)類型定義的變量(arr)存儲在棧內(nèi)存當中,這個arr變量叫做這個數(shù)組實例的引用變量。
* =:與數(shù)學當中的意義不同,是賦值的意思,并非相等。
* 真正的數(shù)組實例是通過new關(guān)鍵字創(chuàng)建出來,存儲于堆內(nèi)存中,并產(chǎn)生一個十六進制表示的內(nèi)存地址0x1A29。
* 在數(shù)組創(chuàng)建期間,會將所有值默認初始化,再進行賦值。對于int型的數(shù)值,其默認值為0。
* 這個引用變量會指向這個數(shù)組的內(nèi)存地址
換句話說:引用變量的值是這個數(shù)組實例的地址值
再換句話說:引用變量通過地址可以表示這個數(shù)組對象
12超市購物小票代碼回顧
* A: 超市購物小票代碼回顧
* a: 回顧之前的超市購物小票代碼(理清思路)
=====================================第三階段===================================
13成員變量簡介.avi
14鍵盤錄入數(shù)字方法封裝.avi
15購買方法與打印小票方法封裝.avi
16流水與總收入需求.avi
17流水與總收入方法實現(xiàn).avi
18方法調(diào)用圖及Eclipse簡介.avi
13成員變量簡介
* A: 購物小票封裝方法需求
* 將超市購物小票案例中完成獨立功能的代碼邏輯分別封裝成方法,比如:打印小票、購買流程、結(jié)賬流程
* B: 成員變量
* 什么時候使用成員變量
* 當我們希望變量不只屬于某個方法,而是屬于整個類,這時可以將被所有方法共享的數(shù)據(jù)定在成員位置
* 定義位置
* 直接定義在類中方法外的變量,叫做成員變量。
* 作用域
* 定義在方法內(nèi),變量只在方法內(nèi)起作用,而定義在類中,可以被本類中的所有方法訪問
* C: 成員變量知識補充
* 如果將變量定義在方法內(nèi)部的話,該變量的作用域只能在該方法內(nèi)部,
其它方法不能使用,如果很多方法都要訪問這些數(shù)據(jù),就需要將這些數(shù)據(jù)定義在成員位置
* 前面的代碼中所有變量都是用static修飾的為什么呢?因為main方法是static修飾的。這樣main方法調(diào)用其它方法時,其它方法也必須是靜態(tài)的,而靜態(tài)方法訪問屬性時,屬性也必須是靜態(tài)的
靜態(tài)的只能訪問靜態(tài)的
* 關(guān)于成員變量的其它知識在面向?qū)ο髸r會詳細講解
14鍵盤錄入數(shù)字方法封裝
* A: 鍵盤錄入數(shù)字方法封裝
* a: 錄入數(shù)字方法代碼
//鍵盤錄入數(shù)字方法
public static int enterNumber() {
Scanner sc = new Scanner(System.in);
int enterNubmer = sc.nextInt();
return enterNubmer;
}
* b: 將Supermarket案例中所有用到sc.nextInt();的地方替換為enterNumber();
15購買方法與打印小票方法封裝
* A: 購買方法與打印小票方法封裝
* a: 因為要在多個方法中使用變量,所以需要將main方法中定義每個商品變量信息的代碼提升到成員位置
//通過變量打印商品報價單
//定義每個商品的變量
static String slsName = "少林寺酥餅核桃"; //名稱
static String slsID = "090115"; //編號
static double slsPrice = 15.5; //單價
static String slsUnit = "個"; //單位
static int slsNumber = 0; //數(shù)量
static double slsMoney = 0; //金額
static String skName = "皇家特供尚康雜糧牡丹餅(復(fù)合營養(yǎng)型)";
static String skID = "090027";
static double skPrice = 14.5;
static String skUnit = "個";
static int skNumber = 0;
static double skMoney = 0;
* b: 因為購買的動作在原來代碼的case1之后,只需要將case1后的代碼抽取出一個買方法buy即可
//購買方法
public static void buy(){
//打印商品報價單
System.out.println(" 歡迎光臨");
System.out.println();
System.out.println("商品編號 商品名稱 商品單價 商品計價單位");
System.out.println(slsID+" "+slsName+" "+slsPrice+" "+slsUnit);
System.out.println(skID+" "+skName+" "+skPrice+" "+skUnit);
//讓用戶輸入每種貨物的購買數(shù)量
//提示用戶輸入
System.out.println();
System.out.println("請輸入您要購買的"+slsName+"數(shù)量:");
//使用用戶輸入的數(shù)量為已有的數(shù)量變量賦值
slsNumber = enterNumber();
slsMoney = slsPrice * slsNumber;
System.out.println("請輸入您要購買的"+skName+"數(shù)量:");
//使用用戶輸入的數(shù)量為已有的數(shù)量變量賦值
skNumber = enterNumber();
skMoney = skPrice * skNumber;
}
* c: 因為打印小票的動作在原來代碼的case2之后,只需要將case2后的代碼抽取出一個買方法printReceipt即可
//打印小票的方法(結(jié)賬方法)
public static void printReceipt(){
//票頭
//直接字符串常量打印
System.out.println(" 歡 迎 光 臨 ");
System.out.println(" 品名 售價 數(shù)量 金額");
System.out.println("-------------------------------------------------------");
//票體
//如果商品名稱超過7個字,就截取前7個字+...
//使用if替換掉三元運算符的實現(xiàn)
//slsName的名字是否超過了7個字
if(slsName.length() > 7) {
//截取前7個字,連接...賦值給slsName
slsName = slsName.substring(0,7) + "...";
}
if(skName.length() > 7) {
//截取前7個字,連接...賦值給skName
skName = skName.substring(0,7) + "...";
}
System.out.println(slsName+"("+slsID+") "+slsPrice+" * "+slsNumber+" = "+slsMoney);
System.out.println(skName+"("+skID+") "+skPrice+" * "+skNumber+" = "+skMoney);
System.out.println("-------------------------------------------------------");
//票腳
//計算匯總的變量
int totalItemsNumber = 2; //商品項數(shù)
int totalNumber = slsNumber+skNumber; //商品件數(shù)
double totalMoney = slsMoney+skMoney; //商品總金額
//判斷總金額和少林寺兩種數(shù)據(jù)是否滿足打折條件,滿足就打折
/*
如果商品總價超過300元,打95折
如果商品總價超過600元,打9折
如果商品總價超過1000元,總價打8折
如果商品總價超過1000元,并且少林寺酥餅核桃購買超過30份, 則總價打8折后,立減20
*/
double afterTotalMoney = totalMoney;
//滿300打95折
if(totalMoney>=300&&totalMoney<600) {
afterTotalMoney = totalMoney*0.95;
}else if(totalMoney>=600&&totalMoney<1000) {//滿600打9折
afterTotalMoney = totalMoney*0.9;
}else if(totalMoney>=1000) {//滿1000打8折
afterTotalMoney = totalMoney*0.8;
}
//滿1000且少林寺超過30,打8折再立減20
if(totalMoney>=1000&&slsNumber>=30) {
afterTotalMoney = totalMoney*0.8-20;
}
System.out.println(totalItemsNumber+"項商品 共計:"+totalNumber+"件");
//在打印總金額時,超市顯示四舍五入后的整數(shù),不包含小數(shù)點,需要用到Math類四舍五入方法,及強制類型轉(zhuǎn)換
afterTotalMoney = Math.round(afterTotalMoney);
System.out.println("總計:"+(int)afterTotalMoney+"元");
System.out.println("您真的太幸運了,本次打折活動為您節(jié)省了"+(totalMoney-(int)afterTotalMoney));
System.out.println("憑此小票換取發(fā)票");
//每次結(jié)賬后,將數(shù)據(jù)重置
slsNumber = 0;
slsMoney = 0;
skNumber = 0;
skMoney = 0;
}
16流水與總收入需求
* A: 老板查詢界面
* a: 這里將不再分老板和顧客角色,關(guān)于角色在就業(yè)班學習
* b: 在原有界面中增加查詢流水和查詢總收入的選擇
* 查詢流水
* 查詢總收入
* c: 案例代碼(這里只添加簡單的代碼,把架子搭起來,具體功能,下個視頻講)
將System.out.println("請選擇您的操作:1代表開始購物、2代表結(jié)賬(打印小票)、3直接退出"); 替換為
System.out.println("請選擇您的操作:1:客戶購買2:打印小票3:流水查詢4:總收入查詢5:退出查詢");
將switch語句中原有的case 3改為case 5,并添加以下代碼
case 3:
//調(diào)用流水查詢方法
showFlow();
break;
case 4:
//調(diào)用總收入查詢方法
showMoney4day();
break;
17流水與總收入方法實現(xiàn)
* A: 流水與總收入方法實現(xiàn)
* a: 流水實現(xiàn)
* 在成員位置定義數(shù)組記錄流水,并定義計數(shù)器記錄當前流水編號
//定義數(shù)組用來記錄流水
static double[] flowData = new double[100];
static int indexNow = 0;
* 添加流水,在結(jié)賬打印小票代碼中,在打印結(jié)賬信息代碼之后,數(shù)據(jù)清零代碼之前
//結(jié)賬之后將本次結(jié)賬的金額加入到流水數(shù)組中
flowData[indexNow] = afterTotalMoney;
indexNow++;
* 查詢流水的方法(在case 3后調(diào)用該方法)
//定義展示流水方法
public static void showFlow(){
//成員位置流水數(shù)組的遍歷
for(int i=0;i<indexNow; i++){
System.out.println(flowData[i]);
}
}
* 調(diào)用查詢流水的方法
case 3:
//調(diào)用流水查詢方法
showFlow();
break;
* b: 總收入方法實現(xiàn)
* 定義查詢總收入的方法
//查詢當日總收入
public static void showMoney4day() {
//將所有流水相加即可
//定義變量,記錄總收入
double sum = 0;
for(int i=0;i<indexNow; i++){
sum = sum+flowData[i];
}
System.out.println("今天的總收入為:"+sum+"¥");
}
* 在case 4后調(diào)用查詢總收入的方法
case 4:
//調(diào)用總收入查詢方法
showMoney4day();
break;
18方法調(diào)用圖及Eclipse簡介
* A: 超市購物小票邏輯流程圖
* a: 詳見day04_source文件夾中的"超市購物小票邏輯流程圖_3.png"圖片
* B: Eclipse簡介
* a: 安裝Eclipse時要和jdk相對應(yīng)
* 64位Eclipse->64位jdk
* 32位Eclipse->32位jdk
* b: 解壓縮后直接使用,不用安裝
* c: 使用步驟
* 開啟,選擇工作區(qū)
? * 創(chuàng)建Java項目
? * 在項目的src目錄下創(chuàng)建java文件并編寫代碼