Java 實驗案例(類和對象篇)

實驗任務java

  • 任務一:手機類的封裝
  • 任務二:基於控制檯的購書系統
  • 任務三:簡單的投票程序

實驗內容數據庫

任務一:手機類的封裝編程

  • 任務目的
  1.  理解和掌握面向對象的設計過程
  2.  掌握類的結構和定義過程
  3.  掌握構造方法及其重載
  4.  掌握對象的建立和使用
  • 任務描述

    參考程序結果圖,使用面向對象的思想模擬手機類,編寫測試類,使用手機類建立對象,測試手機的各個屬性和功能架構

     

  • 實施步驟

      任務分析:測試

    經過對現實中手機的分析,手機類(Phone)具備一下屬性和功能this

    (1) 具備屬性:品牌(brand)、型號(type)、價格(price)、操做系統(os)和內存(memory)spa

    (2) 具備功能:查看手機信息(about())、打電話(call(String no))、玩遊戲(好比玩猜數字遊戲)操作系統

 

代碼實現:設計

手機類Phone.java參考以下代碼:code

 

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");
        
    }
}

 

任務二:基於控制檯的購書系統

  • 任務目的
  1. 理解和掌握面向對象的設計程序
  2. 會用類圖進行面向對象設計
  3. 掌握封裝的實現及好處
  4. 包和訪問控制修飾符的使用
  • 任務描述
  1. 輸出全部圖書的信息:包括每本書的編號、書名、單價、庫存
  2. 顧客購買書:根據提示輸入圖書編號來購買書,並根據提示輸入購買書的的數量
  3. 購買完畢後輸出顧客的訂單信息:包括訂單號、訂單明細、訂單總額

   

  • 實施步驟

    任務分析:

      該系統中必須包括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("----------------------------------------");
    }
    
}

 

任務三:簡單投票系統

  • 任務目的
  1. 掌握static關鍵字的使用
  2. 區分實例變量和類變量、實例方法和類方法的區別
  • 任務描述

  編程實現一個投票程序,實現選民投票,每一個選民只能投一次票,當投票總數達到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();
    }
    
}
相關文章
相關標籤/搜索