请利用内部类相关知识,编程实现:模拟手机专卖店发行内部购物券进行促销的案例。
文章目录
前言
一篇关于内部类的实验,主要用于熟练掌握内部类的使用
一、实验内容
为了促销自己的产品,某手机专卖店决定发行自己的内部购物券,其他商场不能发行该购物券。请利用内部类相关知识,编程实现:模拟手机专卖店发行内部购物券进行促销的案例。具体要求如下:
- 定义一个模拟手机专卖店的MobilePhoneShop类,该类有4个私有成员变量:表示手机库存量的mobilePhoneAmount(int型),表示手机市场价的mobilePhonePrice(double型),以及用内部类InHouseConpons[]声明的两个成员对象ihc1和ihc2,表示手机专卖店发行的两类内部购物券。
- MobilePhoneShop类提供如下的带参构造方法:
public MobilePhoneShop(int mobilePhoneAmount, double mobilePhonePrice) {
// 完成成员变量mobilePhoneAmount, mobilePhonePrice的初始化;
// 完成两个成员对象ihc1和ihc2的初始化,需要通过new运算符调用内部类
// InHouseConpons的带参构造方法。
}
(3)MobilePhoneShop类提供所有成员变量mobilePhoneAmount, mobilePhonePrice的setter方法和getter方法,以及两个成员对象ihc1和ihc2的getter方法。
(4)要求在内部类InHouseConpons中定义两个私有成员变量id(int型,表示内部购物券的编号)和moneyValue(double型,表示内部购物券的价值);提供全参构造方法,对这两个成员变量进行初始化;提供如下的成员方法:
public void buyMobilePhone() {
/* 根据内部购物券的价值和手机市场价计算可以购买的手机数量,根据计算
结果,输出有关信息,当内部购物券的价值足够时,输出如下格式的信息:
恭喜!您用价值为 xxx的内部购物券(编号:xxx )购买了xxx部手机!
当内部购物券的价值不足时,输出如下格式的信息:
对不起!您的购物券(编号:xxx)价值不足!
*/
}
(5)编写测试主类TestInHouseCoupons,提供如下的main方法:
public static void main(String[] args) {
/*
创建MobilePhoneShop类的对象mobileShop,对手机库存量及手机市场价进行
初始化(例如,分别赋初值100和 3500);
按照如下格式输出手机库存量和手机市场价:
现在手机专卖店有xxx部手机,每部手机市场价为xxx元。
调用mobileShop的有关方法获取内部购物券对象ihc1和ihc2,并调用它们的
buyMobilePhone方法模拟手机购买行为;
按照如下格式输出手机的现有库存量:
现在手机专卖店还有xxx部手机!
*/
}
- 运行程序,检查结果是否正确,并进行必要的程序调试。
- 扩展要求:编写IdGenerator类,用于自动生成内部购物券的编号,该类除了提供Random类声明的私有成员变量idGenerator和无参构造方法(使用当前已经逝去的时间作为默认种子来创建Random类的实例化对象,并用它来初始化成员变量idGenerator)外,还要提供如下的成员方法供外部调用:
public int getNextId() {
/*
调用idGenerator的nextInt方法向调用者返回内部购物券的一个随机编号
(0-10000000范围内的int型的随机数)。
*/
}
在此基础上,修改MobilePhoneShop类的构造方法,利用IdGenerator类的实例化对象,随机生成内部购物券的编号。完成程序的代码编写与测试。
(8)自由创作:结合你对市场上流行的各种促销手段的认识,在MobilePhoneShop类中增加更多的内部类(例如内部打折卡等),完成程序代码的修改,并进行相应的功能测试。
二、实验思路
如上文所述,运用内部类的知识,构造相关类,函数,进行调用完成实验要求
三、实验代码
public class mobilephoneshop {
private int mobilephoneamount;//手机库存量
private double mobliephoneprice;//价格
private inhousecoupon [] ihc1;
private inhousecoupon [] ihc2;
private dazhe [] ihc3;
//带参构造
public mobilephoneshop(int mobilephoneamount, double mobliephoneprice) {
this.mobilephoneamount = mobilephoneamount;
this.mobliephoneprice = mobliephoneprice;
}
public int getMobilephoneamount() {
return mobilephoneamount;
}
public void setMobilephoneamount(int mobilephoneamount) {
this.mobilephoneamount = mobilephoneamount;
}
public double getMobliephoneprice() {
return mobliephoneprice;
}
public void setMobliephoneprice(double mobliephoneprice) {
this.mobliephoneprice = mobliephoneprice;
}
public inhousecoupon[] getIhc1() {
return ihc1;
}
public void setIhc1(inhousecoupon[] ihc1) {
this.ihc1 = ihc1;
}
public inhousecoupon[] getIhc2() {
return ihc2;
}
public void setIhc2(inhousecoupon[] ihc2) {
this.ihc2 = ihc2;
}
public dazhe[] getIhc3() {
return ihc3;
}
public void setIhc3(dazhe[] ihc3) {
this.ihc3 = ihc3;
}
//提供内部类生成购物卡的方法,要求提供购物卡的数量和金额
public void madefirstcoupon(int num,double price){
ihc1=new inhousecoupon[num];
for(int i=0;i<num;i++){
ihc1[i]=new inhousecoupon(i,price);
}
}
public void madesecondcoupon(int num,double price){
ihc2=new inhousecoupon[num];
for(int i=0;i<num;i++){
ihc2[i]=new inhousecoupon(idgenertor.getid(num), price);
}
}
public void madethirdcoupon(int num,double price){
ihc3= new dazhe[num];
for(int i=0;i<num;i++){
ihc3[i]=new dazhe(idgenertor.getid(num),price);
}
}
public class inhousecoupon{
private int id;//购物券编号
private double moneyvalue;//购物券面值;
public inhousecoupon(int id,double moneyvalue){
super();
this.id=id;
this.moneyvalue=moneyvalue;
}
public void bugmobilephone(){
if(moneyvalue>=mobliephoneprice){
//恭喜!你使用价值为XXX的内部购物券(编号XXX)购买了XXX部手机!
System.out.println("恭喜!宁用价值为XXX的内部购物券("+id+"."+moneyvalue+"购买了手机,使用后还剩下"+(moneyvalue-mobliephoneprice)+"元。");
}else {
//对不起,宁的购物券不够购买手机,还需要支付XX元
System.out.println("对不起!宁的内部购物券("+id+":"+moneyvalue+"不够购买手机,还需要支付"+(mobliephoneprice-moneyvalue)+"元.");
}
mobilephoneamount--;
}
}
public class dazhe{
private int id;//购物券编号
private double discount;//购物券打折面值
public dazhe(int id,double discount){
//super();
this.id=id;
this.discount=((1-discount)*mobliephoneprice);
}
public void bugmobilephone(){
if(discount>=mobliephoneprice){
//恭喜!你使用价值为XXX的内部购物券(编号XXX)购买了XXX部手机!
System.out.println("恭喜!宁用价值为XXX的内部购物券("+id+"."+discount+"购买了手机,使用后还剩下"+(discount-mobliephoneprice)+"元。");
}else {
//对不起,宁的购物券不够购买手机,还需要支付XX元
System.out.println("对不起!宁的内部购物券("+id+":"+discount+"不够购买手机,还需要支付"+(mobliephoneprice-discount)+"元.");
}
mobilephoneamount--;
}
}
@Override
public String toString(){
return "现在手机专卖店有"+mobilephoneamount+",每部手机市场价为"+mobliephoneprice+"元。";
}
}
public class testmobilephoneshop {
public static void main(String[] args) {
mobilephoneshop mobileshop = new mobilephoneshop(100,3500);
System.out.println(mobileshop.toString());
//调用外部类内的方法去获取内部购物券
mobileshop.madefirstcoupon(1000,300);
mobileshop.madesecondcoupon(5,5000);
mobileshop.madethirdcoupon(10,0.7);
//模拟手机购买
mobileshop.getIhc1()[0].bugmobilephone();
mobileshop.getIhc2()[0].bugmobilephone();
//看一下商店剩余情况
System.out.println(mobileshop);
//第二种购物方法
mobilephoneshop.inhousecoupon ihc=mobileshop.new inhousecoupon(1,300);
ihc.bugmobilephone();
System.out.println(mobileshop);
//打折券
mobileshop.getIhc3()[0].bugmobilephone();
System.out.println(mobileshop);
}
}
import java.util.Random;
public class idgenertor {
public static int getid(int range){
Random r = new Random();
int id = r.nextInt(range);
return id;
}
}
四、实验结果截图
如上图所示,已经将实验所要求的手机购买模拟实现了出来,再加上自主创作的打折券(虽然好像还有很大的改动空间)
总结
以上,就是关于手机专卖店进行关于内部购物券的促销的全部内容了,对内部类的知识进行了练习和巩固。