1. 程式人生 > >Java 實驗案例(類和物件篇)

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
版權宣告:本文為博主原創文章,轉載請附上博文連結!