类与对象(一)
[实验任务1]超市购物程序设计
[任务介绍]
1.任务描述
去超市购物时人们日常生活的重要事情之一。在超市中有很多日常生活的用品,如水果、蔬菜、洗衣机、电冰箱等。人们只能买到超市中的已有物品,如果所需要的商品在超市中没有或者已经卖完了,那么只能白跑一趟。
本任务要求,使用所学知识编写一个超市购物程序,实现超市购物功能。购物时,如果购物者所需要购买的商品在超市中有,则提示购物者买到了某商品;如果超市中没有购物者所需的商品,则提示购物者白跑了一趟,在超市中什么都没有买到。
备注:
(1)要求编写set和get方法给超市类中的成员变量货物二维数组赋值;
(2)编写两个类:超市类和测试类(二维数组定义如下:String[][] product={{"苹果","20"},{"手机","2000"},{"空调","4888"},{"笔","2"},{"娃娃菜","10"},{"洗衣机","2999"}, {"大米","18"},{"娃哈哈","30"},{"费列罗","88"},{"棉被四件套","518"}};)。超市类UML图如下:
2.运行结果
[任务目标]
- 学会分析“超市购物”程序的实现思路;
- 根据思路独立完成“超市购物”的源代码编写、编译和运行;
- 能够根据“超市购物”程序功能的不同,将功能封装到不同的方法中;
- 理解类与对象的概念以及两者的创建和使用;
- 掌握使用类来封装对象的属性和方法。
[实现思路]
首先设计两个类,分别是SuperMarket和Test。在SuperMarket类中获取get和set函数,根据UML图可知,sell函数用于查找用户输入的货物名称是否存在(用equals方法与二维数组product进行比较,如果字符串与数组中的数据相等,返回1,否则返回0)。getPrice函数用于获取货物名称相对于的价格(同样是for循环中用equals方法与数组进行比较,如果存在与之相等的货物名称,则输出相对于的货物价格,否则返回“0”)。在Test类中,通过调用SuperMarket中的函数实现。
[实现代码及运行结果]
实现代码如下:
package b;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner reader=new Scanner(System.in);
SuperMarket a=new SuperMarket();
String name,huowu;
String[][] product={{"苹果","20"},{"手机","2000"},{"空调","4888"},{"笔","2"},
{"娃娃菜","10"},{"洗衣机","2999"},{"大米","18"},
{"娃哈哈","30"},{"费列罗","88"},{"棉被四件套","518"}};
a.setProduct(product);
while (true){
System.out.print("顾客姓名:");
name=reader.next();
System.out.print("货物名称:");
huowu=reader.next();
if (a.sell(huowu)==1)
System.out.println(name+"买到了"+huowu+",花费"+a.getPrice(huowu)+"元。");
else
System.out.println(name+"白跑了一趟,什么也没有买到。");
}
}
}
package b;
public class SuperMarket {
String[][] product;
public String[][] getProduct() {
return product;
}
public void setProduct(String[][] product) {
this.product = product;
}
int sell(String name){
for (String[] i:product){
if (i[0].equals(name)) return 1;
}
return 0;
}
String getPrice(String name){
for (String[] i:product){
if (i[0].equals(name)) return i[1];
}
return "0";
}
}
运行结果如下:
UML图如下:
[实验任务2]银行新用户现金业务办理
[任务介绍]
1.任务描述
编写一个银行新用户现金业务办理程序,使其模拟新用户到银行办理现金存取业务时的场景。要求此场景中,要模拟出银行对用户到来的欢迎动作、对用户离开的提醒动作,以及用户的开户、存款和取款动作,在完成开户、存款和取款操作后,要提示用户的账户金额。例如:一个新用户来到招商银行,首先银行要表示欢迎,然后银行工作人员会为用户办理开户手续。开户后,用户先进行存款操作,之后又进行了取款操作,取款操作时需要用户输入正确的密码和取款金额,且取款金额需小于当前账户余额。当业务办理完,离开银行,银行提醒用户携带好随身财务。至此银行新用户现金业务办理结束。
备注:
(1)编写两个类:银行类和测试类。
(2)银行类的UML图如下所示。其中blankName为静态变量。
2.运行结果
图1 开户、存款和查询
图2 取款、查询和退出
[任务目标]
- 学会分析“银行新用户现金业务办理”程序的实现思路;
- 根据思路独立完成“银行新用户现金业务办理”的源代码编写、编译和运行;
- 学会构造方法以及this关键字的使用;
- 学会静态变量的使用。
[实现思路]
银行新用户现金业务办理主要有开户,存款,取款,查询,退出五个环节。根据UML图可知,deposit()用于存款(输入要存款的金额,然后将其加到账户余额中去,达到存款的目的)。withdrawal()用于取款(取款前需要输入密码,用equals()方法将输入的密码与正确密码进行字符串比较,如果不相等,显示密码错误退出取款,当密码输入正确,就可以输入要取款的金额,将账户余额与要取款金额进行比较,取款金额必须小于账户余额,然后将账户余额减去要取款金额,实现取款的操作)。Fun()用于查询账户余额。goodbye()用于退出系统。
在主函数中通过switch调用Bank类中的函数实现各个功能。
[实现代码及运行结果]
实现代码如下:
package b;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner reader=new Scanner(System.in);
String name,password="123456";
double balance=0.0;
System.out.print("请输入用户名:");
name=reader.next();
Bank bank=new Bank(name,password,balance);
System.out.println("欢迎"+name+"来到招商银行!");
System.out.println(name+" 开户成功,账户余额"+balance+"元");
while (true){
System.out.println("*************银行业务*************");
System.out.println("1、存款 2、取款 3、查询 4、退出");
System.out.println("********************************");
System.out.print("请选择:");
int op;
op=reader.nextInt();
switch(op){
case 1:
bank.deposit();
break;
case 2:
bank.witchdrawal();
break;
case 3:
bank.Fun();
break;
}
if (op==4){
bank.goodbye();
break;
}
}
}
}
package b;
import java.util.Scanner;
public class Bank {
static String bankName="招商银行";
Scanner reader=new Scanner(System.in);
String name,password;
double balance;
public Bank(String name, String password, double balance) {
super();
this.name = name;
this.password = password;
this.balance = balance;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
void deposit(){//存款
double balance;
System.out.print("请输入存款金额:");
balance=reader.nextDouble();
this.balance+=balance;
System.out.println(this.name+"您好!您的账户已存入"+balance+"元,当前账户余额"+this.balance+"元");
}
public void witchdrawal(){//取款
double balance;
String password;
System.out.print("请输入取款密码:");//取款密码为123456
password=reader.next();
if (password.equals(this.password)){
System.out.print("请输入取款金额:");
balance=reader.nextDouble();
this.balance-=balance;
System.out.println(this.name+"您好!您的账户已取出"+balance+"元,当前账户余额"+this.balance+"元");
}
else System.out.println("密码错误!");
}
public void Fun(){//查询
System.out.println(this.name+"您好!当前账户余额"+this.balance+"元");
}
public void goodbye(){//退出
System.out.println("请携带好随身财务,欢迎下次光临"+bankName+"!");
}
}
运行结果如下:
图1
图2
UML图如下: