Java 實驗案例(類和物件篇)
實驗任務
任務一:手機類的封裝
任務二:基於控制檯的購書系統
任務三:簡單的投票程式
實驗內容
任務一:手機類的封裝
任務目的
理解和掌握面向物件的設計過程
掌握類的結構和定義過程
掌握構造方法及其過載
掌握物件的建立和使用
任務描述
參考程式結果圖,使用面向物件的思想模擬手機類,編寫測試類,使用手機類建立物件,測試手機的各個屬性和功能
實施步驟
任務分析:
通過對現實中手機的分析,手機類(Phone)具有一下屬性和功能
(1) 具有屬性:品牌(brand)、型號(type)、價格(price)、作業系統(os)和記憶體(memory)
(2) 具有功能:檢視手機資訊(about())、打電話(call(String no))、玩遊戲(比如玩猜數字遊戲)
程式碼實現:
手機類Phone.java參考如下程式碼:
public class Phone {
String brand; // 品牌
String type; // 型號
String os; // 作業系統
int price; // 價格
int memorySize; // 記憶體
// 無參構造
public Phone(){
}
// 有參構造
public Phone(String brand, String type, String os, int price, int memorySize) {
this.brand = brand;
this.type = type;
this.os = os;
this.price = price;
this.memorySize = memorySize;
}
// 關於本機
public void about() {
System.out.println("品牌:"+brand+"\n"+"型號:"+type+"\n"+
"作業系統:"+os+"\n"+"價格:"+price+"\n"+"記憶體:"+memorySize+"\n");
}
// 打電話
public void call(int num) {
System.out.println("使用自動撥號功能:");
String phoneNo = "";
switch (num) {
case 1: phoneNo = "爺爺的號。";break;
case 2: phoneNo = "奶奶的號。";break;
case 3: phoneNo = "媽媽的號。";break;
case 4: phoneNo = "姐姐的號。";break;
}
System.out.println(phoneNo);
}
// 打遊戲
public void playGame() {
System.out.println("玩猜字遊戲。");
}
// 下載音樂
public void downloadMusic(String song) {
System.out.println("開始下載。。。。");
System.out.println("下載完成。。。。");
}
// 播放音樂
public void playMusic(String song) {
System.out.println(song+" begin play");
}
}
測試類PhoneTest.java類參考如下程式碼:
public class Test {
public static void main(String[] args) {
// 通過無參構造建立手機物件一
Phone p1 = new Phone();
p1.brand = "華為";
p1.type = "華為榮耀magic";
p1.os = "Android 7";
p1.price = 3888;
p1.memorySize = 8;
// 測試p1的各項功能
p1.about();
p1.call(3);
p1.playGame();
p1.playMusic("好漢歌");
System.out.println("********************");
Phone p2 = new Phone("小米","小米6s","mi_9",4999,6);
// 測試p2 的各項功能
p2.about();
p2.call(4);
p2.playGame();
p2.playMusic("Without you");
}
}
任務二:基於控制檯的購書系統
任務目的
理解和掌握面向物件的設計程式
會用類圖進行面向物件設計
掌握封裝的實現及好處
包和訪問控制修飾符的使用
任務描述
輸出所有圖書的資訊:包括每本書的編號、書名、單價、庫存
顧客購買書:根據提示輸入圖書編號來購買書,並根據提示輸入購買書的的數量
購買完畢後輸出顧客的訂單資訊:包括訂單號、訂單明細、訂單總額
實施步驟
任務分析:
該系統中必須包括3個實體類,類名及屬性設定如下:
圖書類(Book):
圖書編號(id)
圖書名稱(name)
圖書單價(price)
庫存數量(storage)
訂單項類(OrderItem):
圖書(book)
購買數量(num)
訂單類(Order):
訂單號(orderID)
訂單總額(total)
訂單項列表(items)
程式碼實現:
圖書類
/**
* 圖書類
* @author Administrator
*
*/
public class Book {
private int id; // 編號
private String name; // 書名
private double price; // 價格
private int storage; // 庫存
// 有參構造
public Book(int id, String name, double price, int storage) {
this.id = id;
this.name = name;
this.price = price;
this.storage = storage;
}
// 獲取書號
public int getId() {
return id;
}
// 獲取書名
public String getName() {
return name;
}
// 獲取價格
public double getPrice() {
return price;
}
// 獲取庫存
public int getStorage() {
return storage;
}
}
訂單項類:
public class OrderItem {
private Book book;
private int num;
// 有參構造方法
public OrderItem(Book book, int num) {
this.book = book;
this.num = num;
}
// 獲取圖書物件
public Book getBook() {
return book;
}
// 獲取訂購圖書數量
public int getNum() {
return num;
}
}
訂單類:
public class Order {
private String orderId;
private OrderItem items[];
private double total;
// 有參構造
public Order(String orderId) {
this.orderId = orderId;
this.items = new OrderItem[3];
}
// 獲取訂單號
public String getOrderId() {
return orderId;
}
// 獲取訂單列表
public OrderItem[] getItems() {
return items;
}
// 獲取訂單總額
public double getTotal() {
calTotal();
return total;
}
// 指定一個訂單項
public void setItem(OrderItem item, int i) {
this.items[i] = item;
}
// 計算訂單總額
public void calTotal() {
double total = 0;
for (int i = 0; i < items.length; i ++) {
total += items[i].getNum() * items[i].getBook().getPrice();
}
this.total = total;
}
}
主類參考程式碼如下:
import java.util.Scanner;
/**
* 圖書商店類(主類)
* @author Administrator
*
*/
public class PayBooks {
public static void main(String[] args) {
Book books[] = new Book[3];
//模擬從資料庫中讀取圖書資訊並輸出
outBooks(books);
// 顧客購買圖書
Order order = purchase(books);
// 輸出訂單資訊
outOrder(order);
}
// 顧客購買圖書
public static Order purchase(Book books[]) {
Order order = new Order("00001");
OrderItem item = null;
Scanner in = new Scanner(System.in);
for (int i = 0; i < 3; i ++) {
System.out.println("請輸入圖書編號選擇圖書:");
int cno = in.nextInt();
System.out.println("請輸入購買圖書數量:");
int pnum = in.nextInt();
item = new OrderItem(books[cno-1],pnum);
order.setItem(item, i);
System.out.println("請繼續購買圖書。");
}
in.close();
return order;
}
// 輸出訂單資訊
public static void outOrder(Order order) {
System.out.println("\n\t圖書訂單");
System.out.println("圖書訂單號:"+order.getOrderId());
System.out.println("圖書名稱\t購買數量\t圖書單價");
System.out.println("--------------------------------------");
OrderItem items[] = order.getItems();
for(int i = 0; i < items.length; i ++) {
System.out.println(items[i].getBook().getName()+"\t"+items[i].getNum()
+"\t"+items[i].getBook().getPrice());
//System.out.println("\n");
}
System.out.println("---------------------------------------");
System.out.println("訂單總額:\t\t"+order.getTotal());
}
// 模擬從資料庫中讀取圖書資訊並輸出
public static void outBooks(Book books[]) {
books[0] = new Book(1,"Java教程",30.6,30);
books[1] = new Book(2,"JSP教程",42.1,40);
books[2] = new Book(3,"SSH架構",47.3,15);
System.out.println("\t圖書列表");
System.out.println("圖書編號\t圖書名稱\t\t圖書單價\t庫存數量");
System.out.println("----------------------------------------");
for (int i = 0; i < books.length; i ++) {
System.out.println(i+1+"\t"+books[i].getName()+"\t"+
books[i].getPrice()+"\t"+books[i].getStorage());
}
System.out.println("----------------------------------------");
}
}
任務三:簡單投票系統
任務目的
掌握static關鍵字的使用
區分例項變數和類變數、例項方法和類方法的區別
任務描述
程式設計實現一個投票程式,實現選民投票,每個選民只能投一次票,當投票總數達到100時或者
主觀結束投票時,同時統計投票選民和投票結果。程式執行結構如下:
實施步驟
任務分析
從任務描述中的抽象出選民Voter類,它具有姓名,最大投票數,當前投票總數,和投票意見。
因為所有選民都會改變同一個資料,即投票次數,一次把它定義成靜態變數:
private static int count;
另外,為了防止選民重複投票,必須儲存參與投票的選民資訊,可採用一個集合來存放已經投票的選民物件。
private static Set<Voter> voters = new HashSet<Voter>();
最後編寫測試Voter類的投票和列印投票結果功能。
程式碼實現:
import java.util.HashSet;
import java.util.Set;
public class Voter {
// 屬性的定義
private static final int MAX_COUNT = 100; // 最大投票數
private static int count; // 投票數
// 靜態變數,存放已經投票的選民
private static Set<Voter> voters = new HashSet<Voter>();
private String name;
private String answer;
// 構造方法
public Voter(String name) {
this.name = name;
}
// 投票
public void voterFor(String answer) {
if (count == MAX_COUNT){
System.out.println("投票結束。");
return ;
}
if (voters.contains(this)){
System.out.println(name+" 你不允許重複投票。");
} else {
this.answer = answer;
count ++;
voters.add(this);
System.out.println(name+" 感謝你的投票。");
}
}
// 列印投票結果
public static void printVoterResult() {
System.out.println("當前投票數為:"+count);
System.out.println("參與投票的選民和結果如下:");
for (Voter voter: voters) {
System.out.println(voter.name+" 意見 "+voter.answer);
}
}
public static void main(String[] args) {
// 建立選民物件
Voter tom = new Voter("Tom");
Voter jack = new Voter("Jack");
Voter mike = new Voter("Mike");
// 選民開始投票
tom.voterFor("是");
tom.voterFor("否");
jack.voterFor("是");
mike.voterFor("是");
// 列印投票結果
Voter.printVoterResult();
}
}
---------------------
作者:omgleoo
來源:CSDN
原文:https://blog.csdn.net/badguy_gao/article/details/78638747
版權宣告:本文為博主原創文章,轉載請附上博文連結!