类的设计应用:
计算机组装店有很多品牌的计算机配件,包括处理器(CPU)、主板(mainBoard)、内存(Ram)、……等。 每种配件都多个厂家(company)、型号(type)、价格(price)三个基本信息。
按下图所示的类的关系和要求编写适当的类,实现相关的功能。
1、假设每种配件有两个厂家,每个厂家产品有两个型号,每个型号价格不同
2、程序运行时逐个显示不同配件的型号,提供 配件型号选择菜单(如输入1,代表选择型号1,输入2,代码选择型号2)
3、根据选择的配件型号,创造出一个Computer实例,
4、 创建实例完成时,输出总价格
5、调用Conputer实例的showDetail()方法,输出输出配件的详细信息。
根据类图完成类的设置,并在Test类的main方法中测试你的程序
放一张我的效果图:
说一下题目,老师这题目错别字好多,描述也有些问题,有一丝强迫症的我看着真难受。
老师一直在强调:不要用面向对象的语言写面向过程风格的代码!因此在敲代码之前还是要思考一下:类的设计和关系!唉,敲这个题也是敲了好久,还是太菜了 (。•ˇ‸ˇ•。) 。另外,码风一定要正,除了自己看着舒服,还要别人看的清晰舒服!
package theme5_2;
public class Product {
private String name; //产品名称
private String factory; //厂家
private String type; //型号
private double price; //价格
public Product() {
super();
}
public Product(String name, String factory, String type, double price) {
super();
this.name = name;
this.factory = factory;
this.type = type;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFactory() {
return factory;
}
public void setFactory(String factory) {
this.factory = factory;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "[产品名称=" + name + ", 厂家=" + factory + ", 型号=" + type + ", 价格=" + price + "]";
}
}
package theme5_2;
public class CPU extends Product {
private String buffer; //CPU特有属性:缓存。以此参数作为属性举例,其他参数略
public CPU() {
super();
}
public CPU(String name, String factory, String type, double price, String buffer) {
super(name, factory, type, price);
this.buffer=buffer;
}
public String getBuffer() {
return buffer;
}
public void setBuffer(String buffer) {
this.buffer = buffer;
}
@Override
public String toString() {
String superStr=super.toString();
return "CPU "+superStr.substring(0, superStr.length()-1)+", 缓存=" + buffer + "]";
}
}
package theme5_2;
public class Rem extends Product {
private String capacity; //内存特有的属性:内存容量。以此参数作为属性举例,其他参数略
public Rem() {
super();
}
public Rem(String name, String factory, String type, double price, String capacity) {
super(name, factory, type, price);
this.capacity=capacity;
}
public String getCapacity() {
return capacity;
}
public void setCapacity(String capacity) {
this.capacity = capacity;
}
@Override
public String toString() {
String superStr=super.toString();
return "内存条 "+superStr.substring(0, superStr.length()-1)+", 容量=" + capacity + "]";
}
}
package theme5_2;
public class Screen extends Product {
private String size; //显示器特有属性:大小。以此参数作为属性举例,其他参数略
public Screen() {
super();
}
public Screen(String name, String factory, String type, double price, String size) {
super(name, factory, type, price);
this.size=size;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
@Override
public String toString() {
String superStr=super.toString();
return "显示器 "+superStr.substring(0, superStr.length()-1)+", 尺寸=" + size + "]";
}
}
package theme5_2;
public class Computer extends Product {
private CPU cpu;
private Screen screen;
private Rem rem;
public Computer() {
super();
}
public Computer(String name, String factory, String type, double price, CPU cpu, Screen screen, Rem rem) {
super(name, factory, type, price);
this.cpu=cpu;
this.screen=screen;
this.rem=rem;
}
public CPU getCpu() {
return cpu;
}
public void setCpu(CPU cpu) {
this.cpu = cpu;
}
public Screen getScreen() {
return screen;
}
public void setScreen(Screen screen) {
this.screen = screen;
}
public Rem getRem() {
return rem;
}
public void setRem(Rem rem) {
this.rem = rem;
}
@Override
public String toString() {
return "电脑 "+super.toString();
}
public void showDetail()
{
System.out.println("配件:");
if(cpu!=null)
System.out.println(cpu);
if(screen!=null)
System.out.println(screen);
if(rem!=null)
System.out.println(rem);
}
}
package theme5_2;
public class Customer {
private String name;
public Customer() {
super();
}
public Customer(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package theme5_2;
import java.util.Scanner;
public class Shop {
//商店中各个配件的存货。注意数组越界
private CPU[] cpus=new CPU[2];
private Screen[] screens=new Screen[2];
private Rem[] rems=new Rem[2];
//构造方法。相当于店铺进货
public Shop() {
super();
cpus[0]=new CPU("CPU", "Intel", "I7-7600", 1500, "2M");
cpus[1]=new CPU("CPU", "Intel", "I5-7600", 1000, "2M");
screens[0]=new Screen("显示器", "KTC", "KTC2400", 1500, "24英寸");
screens[1]=new Screen("显示器", "联想", "21英寸高清", 1700, "21英寸");
rems[0]=new Rem("内存条", "戴尔", "2133P-R", 1790, "32G");
rems[1]=new Rem("内存条", "戴尔", "DDR4", 1279, "16G");
}
public void service(Customer cust)
{
System.out.println("欢迎 "+cust.getName());
System.out.println("选择您喜欢的配件,组装适合您的电脑:");
System.out.println("说明:选择对应编号即可添加到购物车,0:不选择\n");
double cost=0;
showCpus();
int opt1=getOpt(cpus.length);
CPU cpu=null;
if(opt1!=0)
{
cost+=cpus[opt1-1].getPrice();
cpu=cpus[opt1-1];
}
showScreens();
int opt2=getOpt(screens.length);
Screen screen=null;
if(opt2!=0)
{
cost+=screens[opt2-1].getPrice();
screen=screens[opt2-1];
}
showRems();
int opt3=getOpt(rems.length);
Rem rem=null;
if(opt3!=0)
{
cost+=rems[opt3-1].getPrice();
rem=rems[opt3-1];
}
Computer com=new Computer("组装机", cust.getName(), null, cost, cpu, screen, rem);
System.out.println(com);
com.showDetail();
}
private int getOpt(int max)
{
Scanner sc=new Scanner(System.in);
int opt;
while((opt=sc.nextInt())>max || opt<0)
System.out.print("输入非法,请重现输入:");
System.out.println();
return opt;
}
private void showCpus()
{
for(int i=0;i
package theme5_2;
public class Test {
public static void main(String[] args) {
Shop shop=new Shop();
Customer cust=new Customer("ysq");
shop.service(cust);
}
}