zoukankan      html  css  js  c++  java
  • Java 实验案例(类和对象篇)

    实验任务

    • 任务一:手机类的封装
    • 任务二:基于控制台的购书系统
    • 任务三:简单的投票程序

    实验内容

    任务一:手机类的封装

    • 任务目的
    1.  理解和掌握面向对象的设计过程
    2.  掌握类的结构和定义过程
    3.  掌握构造方法及其重载
    4.  掌握对象的创建和使用
    • 任务描述

        参考程序结果图,使用面向对象的思想模拟手机类,编写测试类,使用手机类创建对象,测试手机的各个属性和功能

         

    • 实施步骤

          任务分析:

        通过对现实中手机的分析,手机类(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+"
    "+"型号:"+type+"
    "+
                                "操作系统:"+os+"
    "+"价格:"+price+"
    "+"内存:"+memorySize+"
    ");
        }
        
        // 打电话
        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("
    	图书订单");
            System.out.println("图书订单号:"+order.getOrderId());
            System.out.println("图书名称	购买数量	图书单价");
            System.out.println("--------------------------------------");
            
            OrderItem items[] = order.getItems();
            for(int i = 0; i < items.length; i ++) {
                System.out.println(items[i].getBook().getName()+"	"+items[i].getNum()
                                +"	"+items[i].getBook().getPrice());
                //System.out.println("
    ");
            }
            System.out.println("---------------------------------------");
            System.out.println("订单总额:		"+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("	图书列表");
            System.out.println("图书编号	图书名称		图书单价	库存数量");
            System.out.println("----------------------------------------");
            for (int i = 0; i < books.length; i ++) {
                System.out.println(i+1+"	"+books[i].getName()+"	"+
                            books[i].getPrice()+"	"+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();
        }
        
    }
  • 相关阅读:
    Python记录12:迭代器+生成器+生成式
    Python记录11:叠加多个装饰器+有参装饰器
    Python记录10:模块
    Day7
    Day7
    Day7
    Day7
    Day7
    Day7
    Day7
  • 原文地址:https://www.cnblogs.com/yoke/p/7491030.html
Copyright © 2011-2022 走看看