CH3-面向对象上 (4个案例实现)

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

【案例介绍】

  1. 案例描述

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

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

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

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

  1. 运行结果

img

【案例目标】

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

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

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

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

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

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

【案例分析】

(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. 运行结果

img

【案例目标】

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

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

  • 理解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. 运行结果

img

【任务目标】

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

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

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

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

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

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

【实现思路】

​ (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. 运行结果

img

【任务目标】

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383246.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Java面向对象程序设计(OOP)

1、面向对象程序设计(OOP) 1.1、面向过程&面向对象 面向过程编程&#xff08;Procedure Oriented Programming&#xff0c;POP&#xff09; 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么…&#xff08;线性思维&#xff09;是以功能&#xff08;函数&a…

C++面向对象程序设计之字符串类的相关操作

C面向对象程序设计之字符串类的相关操作 1.实验任务与要求&#xff1a; 1&#xff09;编写一个表示字符串的类String。 2&#xff09;改写默认构造函数&#xff0c;生成一个空串&#xff0c;&#xff08;不分配内存&#xff09;。 3&#xff09;添加一个带参数的构造函数&…

CH4-面向对象下 (8个案例实现)

【案例4-1】打印不同的图形 【案例介绍】 1. 案例描述 ​ 本案例要求编写一个程序&#xff0c;可以根据用户要求在控制台打印出不同的图形。例如&#xff0c;用户自定义半径的圆形和用户自定义边长的正方形。 2. 运行结果 【案例目标】 学会“抽象类实现不同图形的打印程序…

22、Java面向对象——String类

目录 课前先导 一、String类 1、string类 2、字符串的特点 3、String类中的构造方法 4、String类对象的特点 5、字符串的比较 6、获取字符串中的字符 7、获取字符串的长度 二、字符串对象的练习 1、遍历字符串 2、统计字符串中的字符 3、拼接字符串 4、字符串反…

Java实验四 深入面向对象

实验四 深入面向对象 一、实验目的与要求 1、深刻理解面向对象的三大特征&#xff1b; 2、熟练掌握关键super、final的含义及用法&#xff1b; 3、理解什么是抽象类、抽象方法&#xff0c;以及两者间的关系&#xff1b; 4、深刻理解接口的概念、作用&#xff0c;以及与抽…

java面向对象编程实例讲解_Java面向对象编程实例详解

Java是一种面向对象的语言&#xff0c;是实现面向对象编程的强大工具。但如何在编程中实际运用并发挥其最大效能呢&#xff1f;本文通过一个实际Java程序的开发过程&#xff0c;详细说明了如何使用面向对象实现Java编程。 我们要实现的Java应用程序是&#xff1a;当用户输入一个…

高端百度地图开发2:自定义水滴头像(鼠标事件、API封装对接)

高端百度地图开发系列 高端百度地图开发1&#xff1a;自定义水滴头像&#xff08;自定义标注覆盖物、Overlay覆盖类&#xff09; 自定义水滴头像之鼠标事件、API封装对接 高端百度地图开发系列一、添加自定义覆盖物的方法二、对接API数据1.获取API数据(模拟)2.遍历数据3.添加自…

2023年中国智慧公安行业发展现况及发展趋势分析:数据化建设的覆盖范围不断扩大[图]

智慧公安基于互联网、物联网、云计算、智能引擎、视频技术、数据挖掘、知识管理为技术支撑&#xff0c;公安信息化为核心&#xff0c;通过互联互通、物联化、智能方式促进公安系统各功能模块的高度集成、协同作战实现警务信息化“强度整合、高度共享、深度应用”警察发展的新概…

写一个简单炫酷的app程序的打开动画

app也是有颜值&#xff0c;动画就是一种化妆术&#xff0c;他让你的app更加炫酷&#xff0c;首先给你看下图 首先呢&#xff0c;先普及下总体的框架知识&#xff0c;有三种动画 (1)Drawable Animation&#xff1a;逐帧动画&#xff0c;就像电影一样&#xff0c;一帧一帧&am…

安卓开机动画的制作

开机动画的存储位置&#xff1a; system/media/bootanimation.zip。 bootanimation.zip的文件结构&#xff1a;包含一个desc.txt和N个文件夹&#xff08;一般两个&#xff09;。desc.txt是用来指导如何执行动画页面。文件夹里存放要播放的照片&#xff08;支持png和jpg格式&am…

安卓基础动画

在开发的过程中&#xff0c;动画可以实现很好的效果&#xff0c;比如对于图片的旋转&#xff0c;电子罗盘的都可以利用动画来时实现。但是对于动画不太熟悉&#xff0c;经常想用却不会用&#xff0c;特地写这篇博客&#xff0c;记录一下对于动画的学习。 主要学习帧动画和Objec…

安卓动画:

Android的三种动画&#xff0c;即&#xff1a; •View Animation&#xff08;视图动画&#xff09; •Drawable Animation&#xff08;帧动画&#xff09; •Property Animation&#xff08;属性动画&#xff09; Drawable Animation&#xff08;帧动画&#xff09;&#xff1…

安卓手机开机动画制作原理教程

先说开机动画实现原理&#xff1a; Android的动画是由一系列的连续PNG图片作为帧组成的动画形式。 不是合成为一张GIF图片&#xff0c;而是一个文件包&#xff0c;将各帧PNG图片以压缩方式保存。 这个保存的文件名就是bootanimation.zip&#xff0c;这个文件是zip压缩文件&a…

安卓之动画制作

1.知识图谱 &#xff08;补间动画和帧动画&#xff09; 1.补间动画的效果图&#xff1a; &#xff08;alpha透明度&#xff09; &#xff08;ratate旋转&#xff09; XML代码&#xf…

Android BT

整个bluedroid可以分为两大模块&#xff1a;BTIF&#xff0c;BTE BTIF&#xff1a;提供bluedroid对外的接口;作为bluedroid与上层的framework提供interface。所以它处于bluedroid的顶层。 BTE&#xff1a;bluedroid的内部处理&#xff0c;又细分为BTA&#xff0c;BTU&#xf…

04.BT下载

04.BT下载 下载&#xff0c;是很多网络用户必备的需求之一。以往我们使用现成工具迅雷&#xff0c;我们必须保持开机&#xff0c;会员&#xff0c;合法等等要求&#xff0c;但是依托服务器&#xff0c;我们其实也可以搭建BT下载工具&#xff0c;只要你的硬盘够用&#xff0c;把…

BackTrack5(BT5)各版本下载

BT5R3(最新版本)http://www.nigesb.com/backtrack-5-r3-released.html BT5R2 KDE版32位&#xff1a; http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-KDE-32.iso GNOME32位&#xff1a;http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-GNOME-32.iso BT5R1 KDE版32位…

mysql 存储用户头像_node+vue用户头像处理上传并保存

2017年7月14日19:21:29 &#xff0c;最近做个网站&#xff0c;需要有用户头像裁剪上传功能&#xff0c;具体流程是用户在本地选择图片&#xff0c;前端将图片裁剪好发给后端&#xff0c;后端接收到图片将它保存起来&#xff0c;并将信息存入数据库。 先说一下环境后端是express…

java 根据用户名生成头像。

先上效果图 自行根据需求修改代码 package com.space; import java.awt.*; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import java.util.regex.Matcher; im…

支付宝小程序serverless---获取用户信息(头像)并保存到云数据库

支付宝小程序serverless—获取用户信息&#xff08;头像&#xff09;并保存到云数据库 博客说明 文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01; 我又回…