【案例3-1】基于控制台的购书系统

【案例介绍】

  1. 案例描述

​ 伴随互联网的蓬勃发展,网络购书系统作为电子商务的一种形式,正以其高效、低成本的优势逐步成为新兴的经营模式,人们已经不再满足互联网的用途仅仅局限于信息的浏览和发布,更渴望着能够充分享受互联网所带来的更多便利。网络购书系统正适应了当今社会快节奏地生活,使顾客足不出户便可以方便快捷轻松地选购自己喜欢的图书。

​ 本任务要求,使用所学知识编写一个基于控制台的购书系统,实现购书功能。输出所有图书的信息:包括每本书的编号、书名、单价、库存。

​ 顾客购买书时,根据提示输入图书编号来选购需要的书,并根据提示输入购买书的的数量。

​ 购买完毕后输出顾客的订单信息,包括:订单号、订单明细、订单总额。

  1. 运行结果

【案例目标】

  • 学会分析“基于控制台的购书系统”程序任务实现的逻辑思路。

  • 能独立完成“基于控制台的购书系统”程序的源代码编写、编译及运行。

  • 理解和掌握面向对象的设计程序。

  • 会用类图进行面向对象设计。

  • 掌握封装的实现及好处。

  • 包和访问控制修饰符的使用。

【案例分析】

(1)通过任务描述可知,该系统中必须包括3个实体类,类名及属性设置如下:

  1. 图书类(Book):

a) 图书编号(id)

b) 图书名称(name)

c) 图书单价(price)

d) 库存数量(storage)

  1. 订单项类(OrderItem):

a) 图书(book)

b) 购买数量(num)

  1. 订单类(Order):

a) 订单号(orderID)

b) 订单总额(total)

c) 订单项列表(items)

​ (2)由于购买图书时,需要选择图书的数量,所以需要在订单项类里定义获取图书对象以及图书数量的方法。

​ (3)由于需要指定订单项以及获取订单的订单列表、订单号、订单总额等信息,所以需要有订单列表、订单号、订单总额指定订单项等方法。

【案例实现】

定义图书类Book,其代码如下所示。

Book.java

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

​ 上述代码中,声明了图书标号id、书名name、价格price、库存storage,并提供了其getter和setter方法。

定义订单项类OrderItem,其代码如下所示。

OrderItem.java

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

上述代码中,声明了图书对象Book,购买数量num,并提供了其getter和setter方法。

定义订单类Order,其代码如下所示。

Order.java

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 tota* = 0;for (int i = 0; i < items.length; i ++) {tota* += items[i].getNum() * items[i].getBook().getPrice();}this.tota* = total;}
}

​ 上述代码中,声明了订单id、订单项数组,并声明了获取订单号方法getOrderId()、获取订单列表方法getItems()、获取订单总额方法getTotal()、指定一个订单项setItem()、计算订单总额的方法calTotal()。

PayBooks.java

import java.util.Scanner;
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("---------------------------------------");}
}

​ 上述代码中,输出了图书列表信息包括:图书编号、图书名称、图书单价、库存数量,用户根据图书列表信息,输入图书编号、购买数量等,系统根据用户输入的图书编号及购买数量计算总金额。

【案例3-2】银行存取款程序设计

【案例介绍】

  1. 案例描述

​ 银行存取款的流程是人们非常熟悉的事情,用户可在银行对自己的资金账户进行存款、取款、查询余额等操作,极大的便利了人民群众对资金的管理。

​ 本任务要求,使用所学知识编写一个银行存取款程序,实现存取款功能。编写一个帐户类实现银行帐户的概念,创建帐户类的对象ba,假设ba的账号为:123456,初始的存款余额为500元。首先向该账户存入1000元,再取出800元。

  1. 运行结果

【案例目标】

  • 学会分析“银行存取款”程序任务实现的逻辑思路。

  • 能够独立完成“银行存取款”程序的源代码编写、运行及编译。

  • 理解Java语言是如何体现面向对象编程基本思想的。

  • 掌握类的声明以及对象的创建。

  • 了解类的成员变量和成员方法的特性以及类的构造方法的使用。

【案例分析】

​ (1)通过任务描述可知,需要定义一个银行帐户类BankAccount实现银行帐户的概念。

​ (2)账户的属性包括账号和存款余额,所以还需要在BankAccount类中定义两个变量:“帐号” (account_number) 和“存款余额”(leftmoney)。

​ (3)对账户的操作包括存款、取款、查询余额,所以再定义四个方法:“存款”(savemoney)、“取款”(getmoney) 、“查询余额”(getleftmoney)以及构造方法(BankAccount)。

​ (4)最后,编写测试类,在main()方法中创建一个BankAccount类的对象ba,假设ba的账号为:123456,初始的存款余额为500元。首先向该账户存入1000元,再取出2000元。

【案例实现】

BankAccount.Java

public class BankAccount {int account_number;//账号double leftmoney;//存款余额public double getleftmoney () {     //查询余额return leftmoney;}public void savemoney(double money) {   //存款leftmoney+=money;}public void getmoney (double money){  //取款leftmoney-=money;}public BankAccount (int number, double money){ //构造方法,用来初始化变量account_number=number;leftmoney=money;}public static void main(String[] args) {BankAccount ba=new BankAccount(123456,500);ba.savemoney(1000);System.out.println("存入1000元后,您的余额为:"+ba.getleftmoney());ba.getmoney(2000);System.out.println("取款800元后,您的余额为:"+ba.getleftmoney());}
}

​ 上述代码中,声明了一个int类型的account_number属性设一个double类型的leftmoney属性,并编写了其存款方法savemoney()、取款方法getmoney()、查询余额方法getleftmoney()以及用来初始化变量的构造方法BankAccount()。最后,在main()方法中进行测试:创建了一个ba对象,账号为123456,初始余额为200元,首先向该账户存入了1000元,随后又取出800元。

【案例3-3】多功能手机

【案例介绍】

  1. 案例描述

​ 随着科技的发展,手机的使用已经普及到每个家庭甚至个人,手机的属性越来越强大,功能也越来越多,因此人们在生活中越来越依赖于手机。

​ 任务要求,使用所学知识编写一个手机属性及功能分析程序设计,测试各个手机的属性及功能。使用手机时,输出当前手机的各个属性参数以及正在使用的功能。

  1. 运行结果

【任务目标】

  • 学会分析“手机属性及功能分析” 程序任务实现的逻辑思路。

  • 能够独立完成“手机属性及功能分析”程序的源代码编写、编译及运行。

  • 理解和掌握面向对象的设计过程。

  • 掌握类的结构和定义过程。

  • 掌握构造方法及其重载。

  • 掌握对象的创建和使用。

【实现思路】

​ (1)通过任务描述可知,需要定义一个手机类Phone实现手机的概念。

​ (2)手机具有属性:品牌(brand)、型号(type)、价格(price)、操作系统(os)和内存 (memory)。因此,需要在手机类中定义品牌(brand)、型号(type)、价格(price)、操作系统(os)和内存(memory)的变量。

​ (3)手机具有功能:查看手机信息(about())、打电话(call(String no))、玩游戏(playGame())、下载音乐(downloadMusic())、播放音乐(playMusic())。所以,可以定义对应的方法about()、call()、playGame()、downloadMusic()、playMusic()。

【实现代码】

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, intmemorySize) {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);}
}

​ 上述代码中,定义了手机的品牌brand、型号type、价格price、操作系统os、内存memorySize等属性,并提供了手机类的无参和参构造,以及打电话call()、打游戏playGame()、下载音乐downloadMusic()、播放音乐playMusic()等方法。

PhoneTest.java

public class PhoneTest {public static void main(String[] args) {// 通过无参构造创建手机对象一Phone p1 = new Phone();p1.brand = "苹果";p1.type = "iphoneX";p1.os = "ios";p1.price = 8888;p1.memorySize = 16;// 测试p1的各项功能p1.about();p1.call(3);p1.playGame();p1.playMusic("我的中国心");System.out.println("********************");Phone p2 = new Phone("华为","华为荣耀20","Android",6666,16);// 测试p2 的各项功能p2.about();p2.call(4);p2.playGame();p2.playMusic("北京欢迎你");}
}

上述代码中,创建了两个手机对象,并输出了这两个手机对象的属性及功能。

【案例3-4】学生投票系统

【案例介绍】

  1. 案例描述

​ 某班级投票竞选班干部,班级学生人数为100人,每个学生只能投一票。

​ 本任务要求,编程实现一个投票程序,每个学生只能投一次票,投票成功提示“感谢你的投票”,若重复投票,提示“请勿重复投票”。当投票总数达到100时或者主观结束投票时,同时统计投票学生人数和投票结果。

  1. 运行结果

【任务目标】

  • 学会分析“学生投票系统”程序任务实现的逻辑思路。

  • 能够独立完成“学生投票系统”程序的源代码编写、编译、运行。

  • 掌握static关键字的使用。

  • 区分实例变量和类变量、实例方法和类方法的区别。

【实现思路】

​ (1)通过任务描述可知,需要定义一个参与投票的学生类Voter类,它具有姓名,最大投票数,当前投票总数,和投票意见。

​ (2)因为所有参与投票的学生都会改变同一个数据,即投票次数,一次把它定义成静态变量:private static int count;

​ (3)另外,为了防止学生重复投票,必须保存参与投票的学生信息,可采用一个集合来存放已经投票的学生对象。

private static Set<Voter> voters = new HashSet<Voter>();

​ (4)最后编写测试Voter类的投票和打印投票结果功能。

【实现代码】

Voter.java

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

CH3-面向对象上 (4个案例实现)相关推荐

  1. 【干货】java核心知识整理,阶段一:java基础之面向对象上

    面向对象概述 面向对象是一种符合人类思维习惯的编程思想.现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系.在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种 ...

  2. python图片识别拉框_python目标检测给图画框,bbox画到图上并保存案例

    我就废话不多说了,还是直接上代码吧! import os import xml.dom.minidom import cv2 as cv ImgPath = 'C:/Users/49691/Deskt ...

  3. 概要设计说明书案例_逆向前行,趁势而为外贸学院线上教学优秀案例展(七)...

    学生居家学习,教师远程授课.在这种情况下,如何调动学生的学习积极性提升线上教学质量?如何实现班级教学管理的实效性?信息工程系谢粤芳老师在<Android 项目开发>课程教学中,基于&quo ...

  4. 由对称性知定点一定在x轴上_线上优秀教学案例(九)|计算机科学与工程学院刘钊:“延期不延教”之“1+X课堂”...

    [编者按]受新冠肺炎疫情影响,按照教育部和河北省教育厅统一部署,学校延迟春季开学时间.为最大程度减少疫情和延期开学对我校教育教学工作的影响,本学期,我校以线上教学的形式拉开序幕.面对新的教学模式,各学 ...

  5. 从零开始学前端:上节课案例+break,continue以及while和do while --- 今天你学习了吗?(JS:Day5)

    从零开始学前端:程序猿小白也可以完全掌握!-今天你学习了吗?(JS) 复习:从零开始学前端:if判断,for循环,switch判断 - 今天你学习了吗?(JS:Day4) 文章目录 从零开始学前端:程 ...

  6. Spark在集群上执行代码案例(中文切词)

    Spark在集群上执行代码案例 java的切词使用案例(Demo) Spark中文切词代码 需求:利用jieba进行中文分词,并打包上传到集群进行执行 java的切词使用案例(Demo) @Test ...

  7. python可以写什么视觉特效_Python实现视觉特效:一行命令给头像自动戴上口罩的案例...

    Python实现视觉特效:一行命令给头像自动戴上口罩的案例 发布时间:2020-07-23 16:22:40 来源:亿速云 阅读:90 作者:清晨 小编给大家分享一下Python实现视觉特效:一行命令 ...

  8. 你们要的线上GC问题案例来啦

    点击↑上方↑蓝色"编了个程"关注我~ 这是Yasin的第 45 篇原创文章 Y说 今天上午被阿里罚款的消息刷屏了.这个事情也发酵很长一段时间了,今天算是尘埃落定吧.听说因为这事股价 ...

  9. 计算机网络教学优秀教案,线上教学优秀案例:计算机网络基础公开课

    线上教学优秀案例:计算机网络基础公开课 教师姓名:赵志城 姓名:赵志城 毕业院校:天津职业技术师范大学 所学专业:计算机科学与技术 学历:本科 所教专业:计算机 教育理念:细节见精神,习惯成命运. 教 ...

  10. 一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(下)

    内容介绍了一体化低压伺服Ethercat通信的电机在汇川H5UPLC上的使用,一体化Ethercat通信伺服电机在汇川H5U PLC上的应用案例介绍(上)主要讲解环境的搭建以及使用AutoShop软件 ...

最新文章

  1. 多线程_yield()和sleep()方法比较
  2. 用命令行连接到远程计算机
  3. maven2学习总结(3,maven2在淘宝项目的应用)
  4. 如何搭建socks5和ss节点_以太坊区块链搭建与使用(三)-联盟链
  5. Python 将视频 截取 成图片 附cv2处理教程
  6. kafka在zk中的目录
  7. Boost:bind绑定转发2个参数的测试
  8. 嵌入式实时系统程序开发一:按键程序编写
  9. mysql open-files-limit_在mysql 5.5中更改open-files-limit
  10. 企业实战_20_MyCat使用HAPpoxy对Mycat负载均衡
  11. GIS笔记-使用Geoserver搭建MWTS服务(构建离线GIS服务)
  12. win7上面的ie8和chrome90简直是两个时代的产物
  13. 了解java虚拟机—非堆相关参数设置(4)
  14. 运用ffmpeg SDK解264码流(来源FFmpeg工程组)
  15. 微信小程序page禁止页面上下滑动
  16. Android使用adb命令
  17. 使用微软原生工具,反编译DLL并修改后再生成DLL
  18. Ubuntu文件目录结构详解
  19. 安卓手机怎么投屏台式计算机,怎么将手机投屏到台式电脑上
  20. CAN bus 基础知识

热门文章

  1. 什么是SPOOLing技术?
  2. 惠斯登电桥传感器电路设计技巧
  3. 时间戳转化时间,解决总是1970年
  4. 中国家庭的七大饮食问题
  5. 英语学习(10个句子练到极致)
  6. Android性能优化之图片压缩综合解决方案
  7. 一个失败创业者的告白
  8. Pie Chart(nvd3)
  9. 网易裁员,让保安把身患绝症的员工赶出公司!前网易员工亲述经历的噩梦!...
  10. 高赞回答:为什么高级程序员不必担心自己的技术过时?