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 : phoneNo = "爷爷的号。";break;
case : phoneNo = "奶奶的号。";break;
case : phoneNo = "妈妈的号。";break;
case : 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 = ;
p1.memorySize = ;
// 测试p1的各项功能
p1.about();
p1.call();
p1.playGame();
p1.playMusic("好汉歌");
System.out.println("********************");
Phone p2 = new Phone("小米","小米6s","mi_9",,);
// 测试p2 的各项功能
p2.about();
p2.call();
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[];
}
// 获取订单号
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 = ;
for (int i = ; 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[]; //模拟从数据库中读取图书信息并输出
outBooks(books);
// 顾客购买图书
Order order = purchase(books);
// 输出订单信息
outOrder(order);
}
// 顾客购买图书
public static Order purchase(Book books[]) {
Order order = new Order("");
OrderItem item = null;
Scanner in = new Scanner(System.in);
for (int i = ; i < ; i ++) {
System.out.println("请输入图书编号选择图书:");
int cno = in.nextInt();
System.out.println("请输入购买图书数量:");
int pnum = in.nextInt();
item = new OrderItem(books[cno-],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 = ; 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[] = new Book(,"Java教程",30.6,);
books[] = new Book(,"JSP教程",42.1,);
books[] = new Book(,"SSH架构",47.3,);
System.out.println("\t图书列表");
System.out.println("图书编号\t图书名称\t\t图书单价\t库存数量");
System.out.println("----------------------------------------");
for (int i = ; i < books.length; i ++) {
System.out.println(i++"\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 = ; // 最大投票数
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();
} }
Java 实验案例(类和对象篇)的更多相关文章
- Java 实验案例(多态)
实验任务 任务一:图形面积周长计算小程序 任务二:饲养员喂养动物程序 实验内容: 任务一: 图形面积周长计算 任务目的: 掌握多态的含义及应用场合 掌握上转型对象和多态的实现 掌握abstract关键 ...
- Java 反射 分析类和对象
Java 反射 分析类和对象 @author ixenos 摘要:优化程序启动策略.在运行时使用反射分析类的结构和对象 优化程序启动策略 在启动时,包含main方法的类被加载.它会加载所有它需要的类. ...
- 【JAVA零基础入门系列】Day11 Java中的类和对象
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
- Java学习笔记十三:Java中的类和对象
Java中的类和对象 一:什么是对象: 总的来说就是"万物皆对象",客观存在的事物皆为对象.是计算机所关注的具体信息. 对象(object)是一件事.一个物体.一个名词,或可以获得 ...
- Java自学-面向对象 类和对象
Java中的类和对象 引入面向对象的基本概念 假设,我们要设计一个LOL这样的游戏,使用面向对象的思想来设计,应该怎么做? 步骤 1 : 设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必 ...
- Java程序设计基础笔记 • 【第7章 Java中的类和对象】
全部章节 >>>> 本章目录 7.1 理解类和对象 7.1.1 对象 7.1.2 抽象与类 7.1.3 类与对象的关系: 7.2 Java中的类和对象 7.2.1 类的定义 ...
- Java核心基础第5篇-Java面向对象_类和对象
Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...
- java中的类和对象
Java中的类是一个模板,它用于描述一类对象的行为和状态. 对象则是类中的一个实例,对象有状态(属性)和行为(方法).例如一条狗就是一个对象,他的状态就是他的颜色,名字,品种:他的行为就是叫,摇尾巴, ...
- Java反射获取类和对象信息全解析
反射可以解决在编译时无法预知对象和类是属于那个类的,要根据程序运行时的信息才能知道该对象和类的信息的问题. 在两个人协作开发时,你只要知道对方的类名就可以进行初步的开发了. 获取类对象 Class.f ...
- java面向对象之 类和对象
OOP:Object Oriented Programming(面向对象编程) 面向对象: 1:将复杂的事情简单化. 2:面向对象将以前的过程中的执行者,变成了指挥者. 3:面向对象这种思想是符合现在 ...
随机推荐
- (转)python学习笔记5--decimal
原文:https://blog.csdn.net/lemonwyc/article/details/37583125 上一节提到了除了基本类型之外的decimal,这节就学习下.查看python3.4 ...
- Java之集合(二)ArrayDeque
转载请注明源出处:http://www.cnblogs.com/lighten/p/7283928.html 1.前言 上章讲解了Java中的集合接口和相关实现抽象类,本章开始介绍一些具体的实现类,第 ...
- 通过Groovy来消除代码噪声
通过Groovy来消除代码噪声 Java是在JVM上运行的最广泛使用的编程语言.不过,还有很多其他基于JVM的语言,比如Groovy,Scala,JRuby,Jython,Kotlin等等.其中,Gr ...
- Android 开发工具类 08_SDCardUtils
SD 卡相关的辅助类: 1.判断 SDCard 是否可用: 2.获取 SD 卡路径: 3.获取 SD 卡的剩余容量,单位 byte: 4.获取指定路径所在空间的剩余可用容量字节数,单位byte: 5. ...
- IntelliJ IDEA使用心得之问题篇;
在使用IDEA的时候,难免会遇到一些问题,总结下来,一是备忘,而是分享. 1.IDEA代码编辑区无法编辑? 当系统时间被调整到当前时间以前时会导致IDEA无法编辑,有3中解决方案:1)重启IDEA:( ...
- Python的Mysql操作
网上好多的帖子感觉比较老了,而且千篇一律.我到mysql看了一下官网上python驱动的操作,发现与大部分网站说的都不一样. 首先安装的驱动是: pip install mysql-connector ...
- 【.Net】水晶报表CrystalReport粗浅入门
VB6代码大概是这样的: crystalreport1.Connect:='dsn=xxx;uid=yyy;pwd=zzz;dsq=aaa'; crystalreport1.DiscardSavedD ...
- 使用update_attribute和validation
在使用update_attribute方法时,不走validation 走validation的方法: create create! save save! update update_attribut ...
- JAVA项目将 Oracle 转 MySQL 数据库转换(Hibernate 持久层)
项目开发时用的是Oracle数据库,但为了更好的做分布式,做集群,我们要将数据库转成 MySQL! 在数据库迁移中首先要做的事是将 Oracle 的表结构以及数据 克隆到 MySQL 数据库. 这点不 ...
- linux下mysql安装报错及修改密码登录等等
1:下载 [root@localhost soft]# wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.19-linux-glibc ...