Java 程式設計()  第 五章 物件變數與物件陣列  上一頁   

 

5-5 專題製作真健康美食餐廳

內容:

  • 5-5-1 範例研討:建立『菜單價目表』

  • 5-5-2 範例研討:建立『點菜系統』

  • 5-5-3 自我挑戰:建立『餐廳管理系統』

公司接受『真健康美食餐廳』委託建立菜單管理系統。起初雙方溝通很困難,因此,公司希望一步一步的建立,每建立一個步驟後雙方達成共識後再繼續下一個步驟,以下是依照業者需求按步驟完成。

5-5-1 範例研討:建立『菜單價目表』

(A) 系統功能:Ex5_5_1.java

首先,請您幫他建立一套『菜單價目表』(Menu),並允許列印菜單或張貼於網路上。預計公布菜單如下所示:

  

   

卡洛里

蠔油香菇

300

800

蒜泥白肉

250

500

筍干扣肉

320

700

五味花枝

200

600

紅燒鮮魚

400

600

麻婆豆腐

100

200

白玉珍丸

150

300

快炒青菜

100

150

青菜豆腐湯

100

100

水晶蝦餃

200

300

紅油炒手

200

400

蜜汁叉燒酥

200

400

藕斷絲連

200

300

龍門炒米粉

300

500

瑤柱炒飯

300

500

龍蝦鮮麵

400

400

白飯

20

100

足料觀湯

500

800

香菜皮蛋湯

200

300

酸辣海鮮湯

200

300

清湯

20

10

南瓜西米露

150

200

期望製作出來的結果如下:

D:\Java2_book\chap5\Ex5_5>javac Ex5_5_1.java

 

D:\Java2_book\chap5\Ex5_5>java Ex5_5_1

  菜單          價格    卡路里

蠔油香菇        300     800

蒜泥白肉        250     500

筍干扣肉        320     700

五味花枝        200     600

紅燒鮮魚        400     600

麻婆豆腐        100     200

白玉珍丸        150     300

快炒青菜        100     150

青菜豆腐湯      100     100

水晶蝦餃        200     300

紅油炒手        200     400

蜜汁叉燒酥      200     400

藕斷絲連        200     300

龍門炒米粉      300     500

瑤柱炒飯        300     500

龍蝦鮮麵        400     400

            20      100

足料觀湯        500     800

香菜皮蛋湯      200     300

酸辣海鮮湯      200     300

            20      10

南瓜西米露      150     200

(B) 系統分析

首先我們針對菜單內項目做一個 Item 類別,在主類別內宣告一個以 Item 物件為元素的 Menu 陣列,並預留 100 個空間。其實 Menu 菜單是由後台輸入的,為了方便驗證系統的正確性,我們給予初值。系統將菜單初值(name[]price[]colary[]) 讀入後,再分項印出即可。

(C)程式範例

5-19 Ex5_5_1 程式架構

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

//Ex5_5_1.java

/* 請您幫他建立一套『菜單價目表』(Menu,

   請製作一個菜單項目 Item,再產生 Menu 物件陣列

   時立即並給予下列初值內容,再依照設計格式印出價目表)*/

 

class Item {

    String name;

    int price;

    int calory;

}

 

public class Ex5_5_1{

     static Item[] Menu = new Item[100];

     public static void main(String[] args){

          // 給予菜單初值

          String name[] = {"蠔油香菇","蒜泥白肉","筍干扣肉","五味花枝",

                       "紅燒鮮魚","麻婆豆腐","白玉珍丸","快炒青菜",

                       "青菜豆腐湯", "水晶蝦餃", "紅油炒手",

                       "蜜汁叉燒酥","藕斷絲連","龍門炒米粉",

                       "瑤柱炒飯", "龍蝦鮮麵","    ","足料觀湯",

                      "香菜皮蛋湯","酸辣海鮮湯", "    ",

                      "南瓜西米露"};

          int[] price = {300,250,320,200,400,100,150,100,100,

                     200, 200,200,200,300, 300,400,20,500,

                     200,200,20,150};

             int[] calory = {800,500,700,600,600,200,300,150, 100,

                     300,400,400,300,500, 500,400,100,800,

                     300,300,10,200};

 

          for (int i=0; i<name.length; i++) {

               Menu[i] = new Item();

               Menu[i].name = name[i];

               Menu[i].price = price[i];

               Menu[i].calory = calory[i];

          }

          System.out.printf("  菜單\t\t價格\t卡路里\n");

          for (int i=0; i<name.length; i++) {

              System.out.printf("%s\t", Menu[i].name);

              System.out.printf("%d\t", Menu[i].price);

              System.out.printf("%s\t", Menu[i].calory);

             System.out.printf("\n");

          }

     }

}

5-5-2 範例研討:建立『點菜系統』

(A) 系統功能:Ex5_5_2.java

 雙方對『菜單價目表』感到滿意之後,接下來需製作『顧客點菜系統』,可以由顧客自行點菜或由服務生經手。顧客點菜過程中,會隨時累計消費金額與卡洛里,完成後,除了會列印點菜清單給客戶之外,也會列印一張菜單給廚房準備上菜。期望操作介面如下:

D:\Java2_book\chap5\Ex5_5>java Ex5_5_2

請輸入桌次 =>5         【輸入顧客桌次】

(1)蠔油香菇  (2)蒜泥白肉  (3)筍干扣肉  (4)五味花枝  (5)紅燒鮮魚

(6)麻婆豆腐  (7)白玉珍丸  (8)快炒青菜  (9)青菜豆腐湯  (10)水晶蝦餃

(11)紅油炒手  (12)蜜汁叉燒酥  (13)藕斷絲連  (14)龍門炒米粉  (15)瑤柱炒飯

(16)龍蝦鮮麵  (17)      (18)足料觀湯  (19)香菜皮蛋湯  (20)酸辣海鮮湯

(21)      (22)南瓜西米露  (0) 結束點菜

請輸入菜名的編號 =>1      【輸入菜單】

累計300元,800 卡洛里、請輸入菜名的編號 =>5     【輸入菜單】

累計700元,1400 卡洛里、請輸入菜名的編號 =>3    【輸入菜單】

累計1020元,2100 卡洛里、請輸入菜名的編號 => 20   【輸入菜單】

累計1220元,2400 卡洛里、請輸入菜名的編號 =>0    【結束點菜】

5 桌顧客菜單如下:

  菜名          價格    熱量

蠔油香菇        300     800

紅燒鮮魚        400     600

筍干扣肉        320     700

酸辣海鮮湯      200     300

總計            總價格:1220     總熱量:2400

廚房增加菜單如下:

  5桌次  蠔油香菇

  5桌次  紅燒鮮魚

  5桌次  筍干扣肉

  5桌次  酸辣海鮮湯

(B) 系統分析

我們引用 Ex5_5_1.java 繼續擴充。我們類別 Fare_item 來宣告客戶每點一樣菜的物件,並利用 Fare[] 物件陣列來儲存所有顧客所點的菜單。並宣告 Item_No Fare_No 兩個類別變數來記錄目前菜單與客人點菜的數目有多寡。

(C) 程式範例

5-20 Ex5_5_2 程式架構

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

//Ex5_5_2.java

/* 延續上題,請建立一套點餐系統,系統允許客戶以選單方式,選擇所喜歡的菜色。客戶

 * 點餐之前需輸入所在桌次,再依序選擇菜單,完畢後系統會印出菜單、總價與本桌包含

 * 熱量多寡。*/

 

import java.util.*;

class Item {

    String name;          // 菜單項目名稱

    int price;             // 單價

    int calory;            // 熱量

}

class Fare_item{

       int No;                // 桌次號碼

       String name;            // 菜名

       int price;               // 價格

       int calory;              // 熱量

}

public class Ex5_5_2{

     static Item[] Menu = new Item[100];        // 菜單價目表

     static int Item_No = 0;                   // 菜單項目數量

     static Fare_item[] Fare = new Fare_item[20];  // 顧客點菜項目

     static int Fare_No = 0;                   // 顧客點菜項目數量

     public static void main(String[] args){

          Scanner keyin = new Scanner(System.in);

          // 給予菜單初值

          String name[] = {"蠔油香菇","蒜泥白肉","筍干扣肉","五味花枝",

                       "紅燒鮮魚","麻婆豆腐","白玉珍丸","快炒青菜",

                       "青菜豆腐湯", "水晶蝦餃","紅油炒手","蜜汁叉燒酥",

                       "藕斷絲連","龍門炒米粉","瑤柱炒飯","龍蝦鮮麵",

                       "    ","足料觀湯","香菜皮蛋湯","酸辣海鮮湯",

                       "    ","南瓜西米露"};

          int[] price = {300,250,320,200,400,100,150,100,100,200,200,

                     200,200,300,300,400,20,500,200,200,20,150};

             int[] calory = {800,500,700,600,600,200,300,150,100,300,400,  

                     400,300,500,500,400,100,800,300,300,10,200};

          for (int i=0; i<name.length; i++) {

               Menu[i] = new Item();

               Menu[i].name = name[i];

               Menu[i].price = price[i];

               Menu[i].calory = calory[i];

          }

          // 給予菜單初值結束、點菜作業開始

         int table_No, count, item, sel;

          int total_m=0, total_c=0;

          System.out.printf("請輸入桌次 =>");

          table_No = keyin.nextInt();

          for(int i=0; i<Item_No; i++){

                System.out.printf("(%d)%s  ", (i+1), Menu[i].name);

                if ((i+1)%5 == 0)

                    System.out.printf("\n");

          }

          System.out.printf("(0) 結束點菜 \n");

          System.out.printf("請輸入菜名的編號 =>");

          item = keyin.nextInt();

          count = 0;

          while(item != 0) {

                Fare[Fare_No] = new Fare_item();

                Fare[Fare_No].No = table_No;

                Fare[Fare_No].name = Menu[item-1].name;

                Fare[Fare_No].price = Menu[item-1].price;

                Fare[Fare_No].calory = Menu[item-1].calory;

                total_m = total_m + Fare[Fare_No].price;

                total_c = total_c + Fare[Fare_No].calory;

                Fare_No = Fare_No + 1;

                count = count + 1;

              System.out.printf("累計%d元,%d 卡洛里、請輸入菜名的編號 =>",

                              total_m, total_c);

                item = keyin.nextInt();

          }

          System.out.printf("%d 桌顧客菜單如下:\n", table_No);

          System.out.printf("  菜名\t\t價格\t熱量\n");

              for(int i=0;i< count;i++)

                   System.out.printf("%s\t%3d\t%3d\n",Fare[i].name,Fare[i].price,

                            Fare[i].calory);

              System.out.printf("總計\t\t總價格:%d\t總熱量:%d\n",total_m,total_c);

 

        System.out.printf("廚房增加菜單如下:\n");

              for(int i=0;i<count;i++)

                   System.out.printf("%3d桌次\t %s \n",Fare[i].No, Fare[i].name);

     }

}

5-5-3 自我挑戰:建立『餐廳管理系統』

(A) 系統功能:PM5_3

經過 Ex5_5_1 Ex5_5_2 討論後,雙方都能接受此運作模式,接下來必須將它整合一系統,我們希望具有 7 個功能選項。

(1) 進入系統後出現 7 個功能選項,如下

D:\Java2_book\chap5\PM5_3>javac PM5_3.java

 

D:\Java2_book\chap5\PM5_3>java PM5_3

** 真健康美食餐廳 管理系統 **

(1) 匯入菜單項目

(2) 新增菜單項目

(3) 列印所有菜單

(4) 顧客點菜作業

(5) 會計收款作業

(6) 列印所有點菜

(7)  

        請選擇輸入 =>

(2) 選擇匯入菜單並顯示其結果(選擇 1 再選 3)操作如下:

        請選擇輸入 =>1

** 真健康美食餐廳 管理系統 **

(1) 匯入菜單項目

(2) 新增菜單項目

(3) 列印所有菜單

(4) 顧客點菜作業

(5) 會計收款作業

(6) 列印所有點菜

(7)  

        請選擇輸入 =>3

目前有:22

  菜單          價格    卡路里

蠔油香菇        300     800

蒜泥白肉        250     500

筍干扣肉        320     700

五味花枝        200     600

紅燒鮮魚        400     600

麻婆豆腐        100     200

白玉珍丸        150     300

快炒青菜        100     150

青菜豆腐湯      100     100

水晶蝦餃        200     300

紅油炒手        200     400

蜜汁叉燒酥      200     400

藕斷絲連        200     300

龍門炒米粉      300     500

瑤柱炒飯        300     500

龍蝦鮮麵        400     400

            20      100

足料觀湯        500     800

香菜皮蛋湯      200     300

酸辣海鮮湯      200     300

            20      10

南瓜西米露      150     200

(3) 選擇『新增菜單項目』再觀察其結果(選擇 2 3)的操作如下:

        請選擇輸入 =>2

請輸入菜單名稱 =>炒青菜

請輸入價格 =>150

請輸入熱量 =>100

** 真健康美食餐廳 管理系統 **

(1) 匯入菜單項目

(2) 新增菜單項目

(3) 列印所有菜單

(4) 顧客點菜作業

(5) 會計收款作業

(6) 列印所有點菜

(7)  

        請選擇輸入 =>3

目前有:23

  菜單          價格    卡路里

蠔油香菇        300     800

蒜泥白肉        250     500

筍干扣肉        320     700

……….

南瓜西米露      150     200

炒青菜  150     100

(4) 選擇『顧客點菜作業』(選擇 4),結果會出線顧客點菜明細表,以及給廚房的增加菜單,操作如下:

        請選擇輸入 =>4

請輸入桌次 =>12

(1)蠔油香菇  (2)蒜泥白肉  (3)筍干扣肉  (4)五味花枝  (5)紅燒鮮魚

(6)麻婆豆腐  (7)白玉珍丸  (8)快炒青菜  (9)青菜豆腐湯  (10)水晶蝦餃

(11)紅油炒手  (12)蜜汁叉燒酥  (13)藕斷絲連  (14)龍門炒米粉  (15)瑤柱炒飯

(16)龍蝦鮮麵  (17)      (18)足料觀湯  (19)香菜皮蛋湯  (20)酸辣海鮮湯

(21)      (22)南瓜西米露  (23)炒青菜  (0) 結束點菜

請輸入菜名的編號 =>1

累計300元,800 卡洛里、請輸入菜名的編號 =>3

累計620元,1500 卡洛里、請輸入菜名的編號 =>5

累計1020元,2100 卡洛里、請輸入菜名的編號 =>7

累計1170元,2400 卡洛里、請輸入菜名的編號 =>15

累計1470元,2900 卡洛里、請輸入菜名的編號 =>0

12 桌顧客菜單如下:

  菜名          價格    熱量

蠔油香菇        300     800

筍干扣肉        320     700

紅燒鮮魚        400     600

白玉珍丸        150     300

瑤柱炒飯        300     500

總計            總價格:1470     總熱量:2900

 

廚房增加菜單如下:

 12桌次  蠔油香菇

 12桌次  筍干扣肉

 12桌次  紅燒鮮魚

 12桌次  白玉珍丸

 12桌次  瑤柱炒飯

(5) 選擇『會計收款作業』(選擇 5),要求輸入桌號後,會出現明細表與應收金額,操作如下:

        請選擇輸入 =>5

請輸入買單桌號 =>12

菜名:蠔油香菇  單價:300

菜名:筍干扣肉  單價:320

菜名:紅燒鮮魚  單價:400

菜名:白玉珍丸  單價:150

菜名:瑤柱炒飯  單價:300

   = 1470

(6) 選擇『列印所有點菜』(選擇 6),則會出現到目前所有出菜清單,與總營業額多寡,操作如下:

        請選擇輸入 =>6

桌次     菜單項目

12       蠔油香菇

12       筍干扣肉

12       紅燒鮮魚

12       白玉珍丸

12       瑤柱炒飯

9        筍干扣肉

9        紅燒鮮魚

9        白玉珍丸

9        快炒青菜

9        青菜豆腐湯

9        水晶蝦餃

9        瑤柱炒飯

9        南瓜西米露

總共收入:3190

(B) 系統分析

5-21 PM5_3 程式架構

(C)製作提示

Items.java 程式範例如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

//Items.java

/* 產生 Item Fare_item 兩類別,以供產生物件陣列

 * 經由 D:> javac Items.java 命令則產生

 * Item.class Fare_item.class 兩類別 */

 

//菜單 Menu 陣列內各元素的物件

class Item {

    String name;

    int price;

    int calory;

}

 

// 點菜 Fare 陣列內各元素的物件

class Fare_item{

       int No;

       String name;

       int price;

       int calory;

}

PM5_3.java 程式片段如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

96

87

88

89

90

91

92

93

94

……

…..

import java.util.*;

public class PM5_3{

     static Item[] Menu = new Item[100];

     static int Item_No = 0;

     static Fare_item[] Fare = new Fare_item[20];

     static int Fare_No = 0;

     public static void main(String[] args){

          Scanner keyin = new Scanner(System.in);

          int sel;

          dispSel();

          sel = keyin.nextInt();

          while (sel != 7) {

               switch (sel) {

                    case 1:

                         IniMenu();

                         break;

                    case 2:

                         addMenu();

                         break;

                    case 3:

                         printMenu();

                         break;

                    case 4:

                         addFare();

                         break;

                    case 5:

                         accWork();

                         break;

                    case 6:

                         printFare();

                         break;

                    default:

                         System.out.printf("錯誤輸入 !! 請重新選擇\n");

                         break;

                }

                dispSel();

                sel = keyin.nextInt();

          }

     }

     static void addMenu() {

          Scanner keyin = new Scanner(System.in);

          Menu[Item_No] = new Item();

          …..

          …..

          Item_No = Item_No + 1;

     }

     static void printMenu() {

          System.out.printf("目前有:%d\n", Item_No);

          …..

          …..

     }

     static void addFare() {

          Scanner keyin = new Scanner(System.in);

             int table_No, count, item, sel;

          int total_m=0, total_c=0;

          System.out.printf("請輸入桌次 =>");

          …..

          ……

     }

     static void accWork() {

          Scanner keyin = new Scanner(System.in);

          int table_No;

          System.out.printf("請輸入買單桌號 =>");

          ……

          ……

     }

     static void printFare() {

          int count=0;

          System.out.printf("桌次\t 菜單項目\n");

          ……

          ……

     }

     static void dispSel(){

         System.out.printf("** 真健康美食餐廳 管理系統 **\n");

         …..

         …..

     }

 

     // 給予菜單初值

     static void IniMenu() {

          …..

          …..

          for (int i=0; i<name.length; i++) {

               Menu[i] = new Item();

               Menu[i].name = name[i];

               Menu[i].price = price[i];

               Menu[i].calory = calory[i];

               Item_No = Item_No + 1;

          }

     }

}

 

翻轉工作室:粘添壽

 

Java 程式設計(二) 含物件導向

 

 

翻轉電子書系列: