黑馬day04

今天內(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文件并編寫代碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,586評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,147評論 4 61
  • 天灰蒙蒙的,壓的我喘不過氣來。心里莫名的煩躁,剛剛打開的書,翻不了幾頁,就又合上了。這次出差之后,心情一直不好。...
    生活只剩下詩和遠方閱讀 450評論 0 0
  • 2017年04月11日10:01:09 錯誤日志: 原因: 這個是因為本地設(shè)置了代理 localhost por...
    消沉沉閱讀 1,471評論 0 0
  • 大米飯你永遠都吃不膩,同一個菜讓你吃三天保證會不想吃。 你永遠不會嫌情人多,吃著碗里看著鍋里!
    龍鼎勻閱讀 449評論 0 0