當前位置:
首頁 > 知識 > JAVA基礎——編程練習(二)

JAVA基礎——編程練習(二)


JAVA編程練習(二)

今天我為了鞏固之前的java基礎知識的學習,再次進行實戰演習,編寫了一個小小的java控制台程序,主要是運用java面向對象的思想來完成這個小項目。

一、項目背景介紹

根據所學知識,編寫一個控制台板的"答答租車系統"

功能:

1.展示所有可租車輛

2.可以選擇車型和租車量

3.展示租車清單,包含:總金額、總載貨量及其車型、總人量及車型

二、項目分析(1)數據模型分析

1、通過對現實世界的事與物主要特徵的分析、抽象,為信息系統的實施提供數據存取的數據結構以及相應的約束。

2、這個數據結構組成:操作(方法)、屬性

在這個答答租車系統中呢,車可以分為三大類,客車(載客量)、貨車(載貨量)、皮卡(載客量、載貨量),如下圖所示:

由於皮卡既有載客量又有載貨量,這個類型與另外兩種車型都不一樣,那麼我們該如何解決這個問題呢?

我通過創建兩個介面,一個是關於載客的,另一個是關於載貨的來解決。這樣,就可以每種類型的車連接不同的介面來實現載客、載貨的功能。

我再創建一個抽象類Car來表示這三種車型的父類,其中租金和車名每種車型都是具備的,所以直接在父類Car中定義租金和車名。

然後,分別將三種類型的車轉化為三個類,Coach(客車)、Truck(貨車)、Pika(皮卡車)。其中Coach定義載客量,Truck定義載貨量,而Pika則定義了載客量和載貨量。

最後創建一個Main主類來調用各個類,來完成整個項目的控制流。

(2)業務模型分析

1、在設計應用程序之前,應該明確該應用程序必須執行哪些任務。

分析業務需求是應用程序開發中最重要的步驟之一。

確認業務需求的目的在於創建一個同時滿足零售商和消費者需要的解決方案。

2、答答租車系統中,只需要考慮消費者業務需求即可。

JAVA基礎——編程練習(二)

可以看出,在這個答答租車系統中,我們只需要考慮考慮消費者業務需求,因為只是一個小系統,用戶需求也非常簡單:我們要考慮如何選車,租車天數是多少,租車的統計金額是多少,租車的載客量和載貨量是多少。

(3)顯示和流程分析

1、顯示:用戶可以看到的信息提示界面。

2、流程:顯示信息的執行過程、步驟。

3、答答租車系統中,要以命令行的方式顯示提示信息,要考慮其樣式,用戶輸入的數據不同,信息該如何提示、如何處理並顯示出結果,等等。

我在這個系統的顯示流程設定為:

是否租車?--->列出可租車輛信息--->租車數量--->租車序號--->租車天數--->輸計程車信息

三、項目源代碼

根據上述的對答答租車系統的分析,我用java代碼實現了此項目,並且已經測試完畢。以下將給大家分享我的源代碼,如果有錯誤的地方請指出來告訴我,O(∩_∩)O謝謝

註:由於這個系統是以本人目前的學習進度來編寫的,主要是用來鞏固之前的學習知識,肯定有很多需要改進的地方(以後我自己也會對這個程序進行改進),大牛們請勿噴!

1、Car抽象類

1 /*
2 * 所有汽車的抽象父類
3 */
4 public abstract class Car {
5 public String name;//汽車名稱
6 public int rent;//租金
7
8
9 //各個屬性的get和set方法
10 public String getName {
11 return name;
12 }
13 public void setName(String name) {
14 this.name = name;
15 }
16 public int getRent {
17 return rent;
18 }
19 public void setRent(int rent) {
20 this.rent = rent;
21 }
22
23 }

2、Coach(客車)、Truck(貨車)、Pika(皮卡)三個類

1 /*
2 * 客車類,只能載客
3 */
4 public class Coach extends Car implements ICarryPer{
5 private int per;//封裝載客量
6
7 //含參構造函數
8 public Coach(String name,int rent,int per){
9 super;//調用父類構造函數
10 this.name=name;
11 this.rent=rent;
12 this.per=per;
13 }
14
15 @Override
16 public int GetPer {
17 // TODO Auto-generated method stub
18 return per;
19 }
20
21 @Override
22 public void SetPer(int per) {
23 // TODO Auto-generated method stub
24 this.per=per;
25 }
26 //重寫,方便輸出對象信息
27 @Override
28 public String toString {
29 return name+" "+rent+"/天"+" "+"載人:"+per+"人";
30 }
31
32 }

1 /*
2 * 貨車,只能載貨
3 */
4 public class Truck extends Car implements ICargo{
5 private float cargo;//封裝載貨量
6
7 //含參構造函數
8 public Truck(String name,int rent,float cargo){
9 super;//調用父類構造函數
10 this.name=name;
11 this.rent=rent;
12 this.cargo=cargo;
13 }
14 @Override
15 public float GetCargo {
16 // TODO Auto-generated method stub
17 return cargo;
18 }
19
20 @Override
21 public void SetCargo(float cargo) {
22 // TODO Auto-generated method stub
23 this.cargo=cargo;
24 }
25
26
27 //重寫,方便輸出對象信息
28 @Override
29 public String toString {
30 return name+" "+rent+"/天"+" "+"載貨:"+cargo+"噸";
31 }
32
33 }

1 /*
2 * 皮卡車,既能載貨又能載車
3 */
4 public class Pika extends Car implements ICargo,ICarryPer{
5 private int per;//封裝載客量
6 private float cargo;//封裝載貨量
7
8
9 //含參構造函數
10 public Pika(String name,int rent,int per,float cargo){
11 super;//調用父類構造函數
12 this.name=name;
13 this.rent=rent;
14 this.cargo=cargo;
15 this.per=per;
16 }
17 @Override
18 public int GetPer {
19 // TODO Auto-generated method stub
20 return per;
21 }
22
23 @Override
24 public void SetPer(int per) {
25 // TODO Auto-generated method stub
26 this.per=per;
27 }
28
29 @Override
30 public float GetCargo {
31 // TODO Auto-generated method stub
32 return cargo;
33 }
34
35 @Override
36 public void SetCargo(float cargo) {
37 // TODO Auto-generated method stub
38 this.cargo=cargo;
39 }
40
41 //重寫,方便輸出對象信息
42 @Override
43 public String toString {
44 return name+" "+rent+"/天"+" "+"載人:"+per+"人"+"|載貨:"+cargo+"噸";
45 }
46
47 }

3、ICargo(載貨量)和 ICarryPer(載客量)介面

1 /*
2 * 載貨的介面
3 */
4 public interface ICargo {
5 public float GetCargo;//獲得載貨量
6 public void SetCargo(float cargo);//設置載貨量
7 }

1 /*
2 * 載客的介面
3 */
4 public interface ICarryPer {
5 public int GetPer;//獲得載客量
6 public void SetPer(int per);//設置載客量
7 }

4、Main(主類)

1 import java.util.Scanner;
2
3 /**
4 * 項目說明: 編寫一個控制台板的"答答租車系統" 功能: 1.展示所有可租車輛 2.可以選擇車型和租車量
5 * 3.展示租車清單,包含:總金額、總載貨量及其車型、總人量及車型
6 *
7 * @author hysum
8 *
9 */
10 public class Main {
11 static Scanner in = new Scanner(System.in);// 獲取用戶鍵盤輸入
12
13 /*
14 * 用於輸出所有車信息的函數
15 */
16 private static Car ArraysCar {
17 // 創建一個數組來保存車輛信息
18 Car Acar = { (Coach) new Coach("奧迪A4", 500, 4), (Coach) new Coach("馬自達6", 400, 4),
19 (Coach) new Coach("金龍5", 800, 20), (Truck) new Truck("松花江", 400, 4.0f),
20 (Truck) new Truck("依維柯", 1000, 20.0f), (Pika) new Pika("皮卡雪6", 450, 4, 2.0f) };
21 System.out.println("序號 汽車名稱 租金 容量");
22 // 用for循環輸出數組
23 for (int i = 0; i < Acar.length; i++) { 24 System.out.println((i + 1) + ". " + Acar[i].toString); 25 } 26 return Acar; 27 } 28 29 /* 30 * 用於列印賬單 31 */ 32 private static void PrintCash(Car[] car, int[] array, int day) { 33 System.out.println("您的賬單:"); 34 System.out.println("***可載人的車有:"); 35 int rent = 0;// 用於保存租金總數 36 // for循環遍歷輸出 37 int num = 0;// 用於保存載人總數 38 for (int i = 0; i < array.length; i++) { 39 40 // if判斷類型是否能載人 41 if (car[array[i]] instanceof Coach) { 42 Coach c = (Coach) car[array[i] - 1]; 43 System.out.print(c.getName + " "); 44 num += c.GetPer; 45 46 } else if (car[array[i]] instanceof Pika) { 47 Pika p = (Pika) car[array[i] - 1]; 48 System.out.print(p.getName + " "); 49 num += p.GetPer; 50 51 } 52 rent += car[array[i] - 1].getRent * day; 53 } 54 if (num > 0) {
55 System.out.println("共載人:" + num + "人");
56 } else {
57 System.out.println("您沒有選擇可以載人的車型");
58 }
59 System.out.println("***可載貨的車有:");
60 // for循環遍歷輸出
61 int sum = 0;// 用於保存載貨總數
62 for (int i = 0; i < array.length; i++) { 63 64 // if判斷類型是否能載貨 65 if (car[array[i]] instanceof Truck) { 66 Truck t = (Truck) car[array[i] - 1]; 67 System.out.print(t.getName + " "); 68 sum += t.GetCargo; 69 70 } else if (car[array[i]] instanceof Pika) { 71 Pika p = (Pika) car[array[i] - 1]; 72 System.out.print(p.getName + " "); 73 sum += p.GetCargo; 74 } 75 76 } 77 if (sum > 0) {
78 System.out.println("共載貨:" + num + "噸");
79 } else {
80 System.out.println("您沒有選擇可以載貨的車型");
81 }
82 System.out.println("***租車總價格:" + rent + "元");
83 }
84
85 /*
86 * 用來判斷輸入字元的合法性(是否是數值)
87 */
88 private static int JudeInter(String s) {
89 try {
90 return Integer.parseInt(s);
91 } catch (NumberFormatException e) {
92
93 return 0;
94 }
95
96 }
97
98 /*
99 * 主函數,用於整個流程控制
100 */
101 public static void main(String[] args) {
102 // TODO Auto-generated method stub
103 System.out.println("歡迎使用答答租車系統:");
104 ok: // 使用一個標號方便用break跳出循環
105 while (true) {
106 System.out.println("您是否要租車:1是 0否");
107 // 判斷是否租車
108 String select = in.next;
109 if (select.equals("1")) {// 如果選擇是,進入系統
110 System.out.println("您可租車的類型及其價目表:");
111 Car Acar = ArraysCar;// 輸出所有車的信息的函數,並返回一個數組
112 while (true) {
113 System.out.println("請輸入您要租車的數量:");
114 String s = in.next;// i變數用來接收序號
115 try {
116 int j = Integer.parseInt(s);// 將字元串轉化為數值類型
117 // 判斷j是否合理
118 if (j >= 1 && j <= 6) { 119 int Array = new int[j];// 創建一個數組用來保存序號 120 for (int i = 1; i <= j; i++) { 121 System.out.println("請輸入第" + i + "輛車的序號:"); 122 String order = in.next; 123 // 判斷輸入序號的合法性 124 if (JudeInter(order) >= 1 && JudeInter(order) <= 6) {// 如果合法 125 Array[i - 1] = JudeInter(order); 126 127 } else {// 不合法 128 System.out.println("異常:您輸入的不是整數或者不合法!請重新輸入!"); 129 i--; 130 } 131 132 } 133 while (true) { 134 System.out.println("請輸入您要租車的天數:"); 135 // 判斷輸入合法性 136 String day = in.next; 137 if (JudeInter(day) > 0) {
138 PrintCash(Acar, Array, JudeInter(day));// 列印賬單
139 System.out.println("謝謝您的惠顧,歡迎下次光臨!!");
140 in.close;
141 break ok;// 跳出多重循環
142 } else {
143 System.out.println("異常:您輸入的不是整數或者不合法!請重新輸入!");
144 continue;
145 }
146
147 }
148 } else {
149 System.out.println("異常:您輸入的序列號超出範圍!請重新輸入!");
150 continue;
151 }
152
153 } catch (NumberFormatException e) {
154 System.out.println("異常:您輸入的不是整數!請重新輸入!");
155 continue;
156 }
157
158 }
159
160 }
161 if (select.equals("0")) {// 如果選擇否,退出循環
162 System.out.println("退出系統!");
163 in.close;
164 break;
165 } else {// 如果輸入以外的字元時
166 System.out.println("您輸入的格式不對,請重新輸入!");
167 }
168 }
169
170 }
171
172 }

四、運行結果

JAVA基礎——編程練習(二)

JAVA基礎——編程練習(二)

這個程序會隨今後學習的深入來一步步改進的(需要改進的地方歡迎指出),我自己測試沒有問題,如果有我沒有注意到的錯誤,請在下面留言~~謝謝(>ω?* )?

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

Backbone中父子view之間的值傳遞
Socket實現-Socket I/O
C++基礎之引用與指針的區別與聯繫、常引用使用時應注意的問題
Hugo快速搭建Blog
設計模式解密(3)-策略模式

TAG:科技優家 |

您可能感興趣

練習課 GIVE ME FIVE
TOPIK寫作範文練習:概述類小作文的練習
TOPIK寫作範文練習:材料類小作文的練習
TOPIK寫作範文練習:圖表題的寫作練習2
CAD繪圖練習-參數化約束
「MD PHOTO」IVY崔靜媛等藝人參加 音樂劇《芝加哥》公開練習
台灣CG插畫師「Evan Lee」近期新作以及材質練習
PS新手教程:美女模特照片合成練習
TFBOYS與《偶像練習生》終於合作新綜藝節目了?綜藝節目名字陣容超大!
BLACKPINK出席新專發行會 稱YG梁社長親自指導新曲舞蹈練習
TRAINEE18二期練習生總決選落定
劉在石討薪成功?PSY招募練習生?WANNA ONE共享版權?田柾國帶貨
ACL術後練習是OKC(開鏈),還是CKC(閉鏈)?
偶像練習生PICK
PICK《偶像練習生》的九個理由
《偶像練習生》超越TFBOYS?
推薦三款英語口語練習APP
盤點偶像練習生NINE PERCENT組合近期巡演信息
JYP再辦《SIXTEEN2》今年播出?女練習生隨時成TWICE二代女團
WANNA ONE的他們,曾是SM和JYP練習生!