商城购物车设计要求
10.21
购物车设计:
某电商平台,为方便商品展示,需要将商品分类。
在购物时,可将不同类别的商品加入购物车,并自动计价。
假设购买如下商品:U盘2个(每只100元);显示器1个(2000元);音箱一对(300元)。
请设计购物车,能添加、移除商品,并自动计算出总价格。
发票类:
发票打印:假设需要打印发票
发票中包含如下内容:抬头、订单号、货物名称、规格型号、数量、单价、金额、总金额等。
其中,货物名称由商家自定义,如音箱,货物名称:创新小音箱,规格型号:Inspire T12。
请模拟打印上述发票信息。
提示:基于商品中约定发票格式;具体商品的toString()中填入个性化信息。
购物车类设计思路
首先分析设计要求,设计商品类,设置不同种类的商品类继承商品类,购物车类,和打印机类
商品类:
1.这是一个商品类,放置所有商品的共同属性,如名称、数量、单价,以及get、set方法,在后面设置和读取会用到。
2.定义show方法,在不同种类的商品类中重写。
class goods{
private String name;
private int nums;
private double price;
public String getName() {
return name;
}
public int getNums() {
return nums;
}
public void setNums(int nums) {
this.nums = nums;
}
public double getPrice() {
return price;
}
public goods(String name, int nums, double price){
this.name=name;
this.nums=nums;
this.price=price;
}
public void show(){ }
}
数码产品类:
1.数码产品类,放置数码产品,及不一些特有属性,如型号、尺寸等。
2.定义构造方法,共有属性调用super。
3.重写show方法(不同类别的商品show方法不一样)
class shuma extends goods{
private String species="数码产品";
private String pname;
private String model;
public shuma(String na, int nu, double pri,String p,String mo){
super(na,nu,pri);
this.pname=p;
this.model=mo;
}
public String getSpecies() {
return species;
}
public String getPname() {
return pname;
}
public String getModel() {
return model;
}
@Override
public void show(){
System.out.println("类型: \t"+getSpecies()+" 名称: \t"+getPname()+getName()+" 单价: \t"+getPrice()+" 数量: \t"+getNums()+" 型号: \t"+getModel());
}
}
食品类:
1.食品类,具体同数码类一样(一些不同属性,及重写show方法)
2.之后可以写更多的类,如图书,衣服等。
class food extends goods{
private String species="食物";
private String production;
private String overdue;
public food(String na, int nu, double pri, String pro,String over){
super(na,nu,pri);
this.production=pro;
this.overdue=over;
}
public String getSpecies() {
return species;
}
public String getProduction() {
return production;
}
public String getOverdue() {
return overdue;
}
@Override
public void show(){
System.out.println("类型: \t"+getSpecies()+" 名称: \t"+getName()+" 单价: \t"+getPrice()+" 数量: \t"+getNums()+" 生产日期: \t"+getProduction()+" 保质期:\t"+getOverdue());
}
}
购物车类:
1.购物车类,主要有商品数组,商品数量,故定义前两个私有属性。
2.包含add、delete、show、sum方法。(后面具体描述)
class shopcar{
private goods[] good;
private int sums=0;
public void Shopcar(goods[] good1) {
this.good = good1;
}
public goods getGood(int i) {
return good[i];
}
public void setGood(goods[] good) {
this.good = good;
}
public int getSums() {
return sums;
}
public void add(goods good1)
{
for(int i=0;i<this.good.length;i++)
{
if(this.good[i]==null)
{
this.good[i] = good1;
sums++;
break;
}
}
}
//这里传入的是要删除商品的名称和数量,先找到位置,如果数量没删除完,就减少数量,如果删除完了就删除商品类
public void delete(String name,int j){
for(int i=0;i<sums;i++){
if(this.good[i].getName()==name){
if(this.good[i].getNums()-j>0)
this.good[i].setNums(this.good[i].getNums()-j);
else{
for(int k=i;k<sums;k++)
this.good[k]=this.good[k+1];
sums--;}
}
}
}
//sum求和:商品数量*商品单价的累加
public void sum(){
int sum=0;
for (int i=0;i<sums;i++){
sum+=this.good[i].getPrice()*this.good[i].getNums();
}
System.out.println("商品总价是:"+sum);
}
//show方法:展示购物车
public void show(){
System.out.println("xx用户的购物车信息:");
for(int i=0;i<sums;i++){
good[i].show();
}
}
}
打印机类:
1.打印机类:主要有抬头,公司,及传入的购物车类(重点)
class invoiceprinter{
private String username;
private shopcar shopcar;
private String company;
public void setShopcar(shopcar shopcar) {
this.shopcar = shopcar;
}
public void setUsername(String username) {
this.username = username;
}
public void setCompany(String company) {
this.company = company;
}
//这是获取uuid(唯一订单号)方法
public static String getUUID() {
String replaceUUID = UUID.randomUUID().toString().replace("-", "");
String currentTimeMillis = String.valueOf(System.currentTimeMillis());
return replaceUUID + currentTimeMillis;
}
//获取当前时间方法
public static String newDateTime(){
SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String datetime = tempDate.format(new java.util.Date());
return datetime;
}
//打印方法:先打印固定格式,然后调用shopcar中商品类的show方法展示内容。
public void ToString(){
System.out.println("* * * * * * * * * * * * * * * * * * * *发票 * * * * * * * * * * * * * * * * * * * * * *");
System.out.println("抬头 :"+username+" \t"+"订单号: "+getUUID());
for(int i=0;i<shopcar.getSums();i++){
shopcar.getGood(i).show();
}
shopcar.sum();
System.out.println("打印时间:"+newDateTime());
System.out.println(company);
}
}
mian方法:
public class shop {
public static void main(String[] args) {
//先new一个商品数组放到购物车类中
goods[] good = new goods[100];
shopcar sc = new shopcar();
sc.setGood(good);
//这里是add方法(即你想要买的东西)、这里没有设置商品的储存(即你想买什么商店里就有什么,要多少有多少)
goods good1 = new shuma("u盘", 2, 100, "闪迪", "8G");
goods good2 = new shuma("显示器", 1, 2000, "夏普", "56寸");
goods good3 = new shuma("音响", 2, 300, "小米", "hifi音质");
goods good4 = new food("面包", 2, 6, "2021.10.21", "2021.10.29");
goods good5 = new food("薯片", 1, 7, "2021.10.21", "2021.12.1");
sc.add(good1);
sc.add(good2);
sc.add(good3);
sc.add(good4);
sc.add(good5);
//删除方法:上面买了两个面包,这里数量删除一个;如果删除两个,这个面包类就被删除了。
sc.delete("面包", 1);
sc.show();
sc.sum();
//打印机区,先new,然后传入shopcar,抬头姓名,公司名称等,可定制
System.out.println();
invoiceprinter invoiceprinter = new invoiceprinter();
invoiceprinter.setShopcar(sc);
invoiceprinter.setUsername("my");
invoiceprinter.setCompany("xx商店");
invoiceprinter.ToString();
}
}
测试截图
整体代码
import java.text.SimpleDateFormat;
import java.util.UUID;
/**
* 10.21
* 购物车设计:某电商平台,为方便商品展示,需要将商品分类。
* 在购物时,可将不同类别的商品加入购物车,并自动计价。
* 假设购买如下商品:U盘2个(每只100元);显示器1个(2000元);音箱一对(300元)。
* 请设计购物车,能添加、移除商品,并自动计算出总价格。
* 集成发票打印。
*/
/*
1.这是一个商品类,放置所有商品的共同属性,如名称、数量、单价,以及get、set方法,在后面设置和读取会用到。
2.定义show方法,在不同种类的商品类中重写。
*/
class goods{
private String name;
private int nums;
private double price;
public String getName() {
return name;
}
public int getNums() {
return nums;
}
public void setNums(int nums) {
this.nums = nums;
}
public double getPrice() {
return price;
}
public goods(String name, int nums, double price){
this.name=name;
this.nums=nums;
this.price=price;
}
public void show(){ }
}
/*
1.数码产品类,放置数码产品,及不一些特有属性,如型号、尺寸等。
2.定义构造方法,共有属性调用super。
3.重写show方法(不同类别的商品show方法不一样)
*/
class shuma extends goods{
private String species="数码产品";
private String pname;
private String model;
public shuma(String na, int nu, double pri,String p,String mo){
super(na,nu,pri);
this.pname=p;
this.model=mo;
}
public String getSpecies() {
return species;
}
public String getPname() {
return pname;
}
public String getModel() {
return model;
}
@Override
public void show(){
System.out.println("类型: \t"+getSpecies()+" 名称: \t"+getPname()+getName()+" 单价: \t"+getPrice()+" 数量: \t"+getNums()+" 型号: \t"+getModel());
}
}
/*
1.食品类,具体同数码类一样(一些不同属性,及重写show方法)
2.之后可以写更多的类,如图书,衣服等。
*/
class food extends goods{
private String species="食物";
private String production;
private String overdue;
public food(String na, int nu, double pri, String pro,String over){
super(na,nu,pri);
this.production=pro;
this.overdue=over;
}
public String getSpecies() {
return species;
}
public String getProduction() {
return production;
}
public String getOverdue() {
return overdue;
}
@Override
public void show(){
System.out.println("类型: \t"+getSpecies()+" 名称: \t"+getName()+" 单价: \t"+getPrice()+" 数量: \t"+getNums()+" 生产日期: \t"+getProduction()+" 保质期:\t"+getOverdue());
}
}
/*
1.购物车类,主要有商品数组,商品数量,故定义前两个私有属性。
2.包含add、delete、show、sum方法。(后面具体描述)
*/
class shopcar{
private goods[] good;
private int sums=0;
public void Shopcar(goods[] good1) {
this.good = good1;
}
public goods getGood(int i) {
return good[i];
}
public void setGood(goods[] good) {
this.good = good;
}
public int getSums() {
return sums;
}
public void add(goods good1)
{
for(int i=0;i<this.good.length;i++)
{
if(this.good[i]==null)
{
this.good[i] = good1;
sums++;
break;
}
}
}
//这里传入的是要删除商品的名称和数量,先找到位置,如果数量没删除完,就减少数量,如果删除完了就删除商品类
public void delete(String name,int j){
for(int i=0;i<sums;i++){
if(this.good[i].getName()==name){
if(this.good[i].getNums()-j>0)
this.good[i].setNums(this.good[i].getNums()-j);
else{
for(int k=i;k<sums;k++)
this.good[k]=this.good[k+1];
sums--;}
}
}
}
//sum求和:商品数量*商品单价的累加
public void sum(){
int sum=0;
for (int i=0;i<sums;i++){
sum+=this.good[i].getPrice()*this.good[i].getNums();
}
System.out.println("商品总价是:"+sum);
}
//show方法:展示购物车
public void show(){
System.out.println("xx用户的购物车信息:");
for(int i=0;i<sums;i++){
good[i].show();
}
}
}
/*
1.打印机类:主要有抬头,公司,及传入的购物车类(重点)
*/
class invoiceprinter{
private String username;
private shopcar shopcar;
private String company;
public void setShopcar(shopcar shopcar) {
this.shopcar = shopcar;
}
public void setUsername(String username) {
this.username = username;
}
public void setCompany(String company) {
this.company = company;
}
//这是获取uuid(唯一订单号)方法
public static String getUUID() {
String replaceUUID = UUID.randomUUID().toString().replace("-", "");
String currentTimeMillis = String.valueOf(System.currentTimeMillis());
return replaceUUID + currentTimeMillis;
}
//获取当前时间方法
public static String newDateTime(){
SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String datetime = tempDate.format(new java.util.Date());
return datetime;
}
//打印方法:先打印固定格式,然后调用shopcar中商品类的show方法展示内容。
public void ToString(){
System.out.println("* * * * * * * * * * * * * * * * * * * *发票 * * * * * * * * * * * * * * * * * * * * * *");
System.out.println("抬头 :"+username+" \t"+"订单号: "+getUUID());
for(int i=0;i<shopcar.getSums();i++){
shopcar.getGood(i).show();
}
shopcar.sum();
System.out.println("打印时间:"+newDateTime());
System.out.println(company);
}
}
public class shop {
public static void main(String[] args) {
//先new一个商品数组放到购物车类中
goods[] good = new goods[100];
shopcar sc = new shopcar();
sc.setGood(good);
//这里是add方法(即你想要买的东西)、这里没有设置商品的储存(即你想买什么商店里就有什么,要多少有多少)
goods good1 = new shuma("u盘", 2, 100, "闪迪", "8G");
goods good2 = new shuma("显示器", 1, 2000, "夏普", "56寸");
goods good3 = new shuma("音响", 2, 300, "小米", "hifi音质");
goods good4 = new food("面包", 2, 6, "2021.10.21", "2021.10.29");
goods good5 = new food("薯片", 1, 7, "2021.10.21", "2021.12.1");
sc.add(good1);
sc.add(good2);
sc.add(good3);
sc.add(good4);
sc.add(good5);
//删除方法:上面买了两个面包,这里数量删除一个;如果删除两个,这个面包类就被删除了。
sc.delete("面包", 1);
sc.show();
sc.sum();
//打印机区,先new,然后传入shopcar,抬头姓名,公司名称等,可定制
System.out.println();
invoiceprinter invoiceprinter = new invoiceprinter();
invoiceprinter.setShopcar(sc);
invoiceprinter.setUsername("my");
invoiceprinter.setCompany("xx商店");
invoiceprinter.ToString();
}
}
转载请附本文博客地址
你的文章充满了智慧,让人敬佩。 https://www.4006400989.com/qyvideo/55231.html