首页 > 编程语言 >购物车程序的面向对象设计

购物车程序的面向对象设计

时间:2022-09-28 16:22:38浏览次数:86  
标签:Commodity get int 程序 购物车 commodities 面向对象 getNum

1.人员分工

类1、类2、类3、类4,罗晨珊

2.前期调查

先在商城(Mall)中,浏览所有商品或查找某一商品,然后将商品加入购物车(Cart)中,可以在购物车内进行商品数量的增加、减少、清空购物车及商品结算。

 

编辑

 

编辑

 

 

3.系统功能结构图。

编辑

 

4.系统描述:一段用来描述系统功能与流程的文字,用红色字代表可能的对象(名词)或属性,用蓝色字代表可能的方法(动词)。

用户可在商城(Mall)中,浏览所有商品或查找某一商品,然后可以在购物车内进行商品的增加、减少、清空购物车及商品结算。

5.类设计说明:类概述(有什么用)、类的属性与方法、类与类之间的关系。可选:类与类之间的关系可使用UML类图描述。建议使用ProcessOn回值。。

Mall类:初始化商城商品,展示商城商品,搜索商城商品

Commodity类:String name,double price,int num

Cart类:增加商品,删除商品,清空购物车,展示购物车,结算

6.本系统哪里体现了面向对象的封装性?可选:哪里体现了继承与多态?

封装性:

编辑

 继承:

编辑

 方便在购物车内加入、删除商品是对商城内商品余量进行增减

7.项目包结构(package的划分)与关键代码:项目的包结构(为什么要这样设计包结构),主要功能(如网购物车添加、删除商品)的流程图与关键代码。

class Commodity {
	private String name;
	private double price;
	private int num;

	public Commodity() {
	}

	public Commodity(String name, double price, int num) {
		this.setName(name);
		this.setPrice(price);
		this.setNum(num);
	}

	public Commodity(String name, int num) {
		this.setName(name);
		this.setNum(num);
	}

	@Override
	public String toString() {// 方法的功能越单一越好
		return "Commodity [name=" + getName() + ", price=" + getPrice() + ", num=" + getNum() + "]";
	}
}

功能:存储商品信息,名称、价格、数量 

class Mall {
	public ArrayList<Commodity> commodities = new ArrayList<>();
	{// 初始化商场物品
		commodities.add(new Commodity("Apple", 5.8, 50));
		commodities.add(new Commodity("Dress", 210, 20));
		commodities.add(new Commodity("Computer", 5299, 35));
		commodities.add(new Commodity("Car", 16999, 10));
		commodities.add(new Commodity("Shoe", 169, 100));
		commodities.add(new Commodity("Earphone", 129, 80));
		commodities.add(new Commodity("Schoolbag", 99, 200));
		commodities.add(new Commodity("Cup", 29, 12));
		commodities.add(new Commodity("Soap", 16.9, 37));
	}

	public void search(String name) {
		int flag = 1;
		for (int i = 0; i < commodities.size(); i++) {
			if (commodities.get(i).getName().equals(name)) {
				System.out.println("找到该商品");
				System.out.println("name=" + commodities.get(i).getName() + " price=" + commodities.get(i).getPrice()
						+ " num=" + commodities.get(i).getNum());
				flag = 0;
			}
		}
		if (flag == 1) {
			System.out.println("未找到该商品");
		}
	}

	public void disp() {
		for (Commodity e : commodities) {
			System.out.println("name=" + e.getName() + " price=" + e.getPrice() + " num=" + e.getNum());
		}
	}
}

功能:初始化商城内商品数据; 通过商品名称,搜索商城内商品;展示商城内所有商品

class Cart extends Mall {
	private ArrayList<Commodity> shopList = new ArrayList<>();

	public void addToCart(Commodity c) {
		// 改进:唯一性判断
		int flag1 = 1;
		for (int j = 0; j < super.commodities.size(); j++) {
			// 减去商城中物品的数量
			if (super.commodities.get(j).getName().contentEquals(c.getName())) {
				if (super.commodities.get(j).getNum() >= c.getNum()) {
					int flag = 1;// 控制条件,唯一性判断,如果flag==1则添加新商品
					for (int i = 0; i < shopList.size(); i++) {
						if (shopList.get(i).getName().contentEquals(c.getName())) {
							c.setNum(shopList.get(i).getNum() + c.getNum());
							shopList.set(i, c);
							flag = 0;
						}
					}
					if (flag == 1) {
						shopList.add(c);
					}
					super.commodities.get(j).setNum(super.commodities.get(j).getNum() - c.getNum());
				} else {
					System.out.print("该商品余量不足,当前余量为:");
					System.out.println(super.commodities.get(j).getNum());
				}

				flag1 = 0;
			}
		}
		if (flag1 == 1) {
			System.out.println("对不起,该商场中暂无此商品");
		}

	}

	public void delete(String name, int num) {
		int flag = 1;
		for (int i = 0; i < shopList.size(); i++) {
			if (shopList.get(i).getName().contentEquals(name)) {
				if (shopList.get(i).getNum() >= num) {
					shopList.get(i).setNum(shopList.get(i).getNum() - num);
					for (int j = 0; j < super.commodities.size(); j++) {
						if (super.commodities.get(j).getName().contentEquals(name)) {
							super.commodities.get(j).setNum(super.commodities.get(j).getNum() + num);
						}
					}
					if (shopList.get(i).getNum() == 0) {
						shopList.remove(i);
					}
				} else {
					System.out.println("购物车内该商品数量不足");
				}
				flag = 0;
			}
		}
		if (flag == 1) {
			System.out.println("未在购物车内找到该商品");
		}
	}

	public void disp() {
		int flag = 1;
		for (Commodity e : shopList) {
			flag = 0;
			System.out.println("name=" + e.getName() + " num=" + e.getNum());
		}
		if (flag == 1) {
			System.out.println("当前购物车为空");
		}
	}

	public void clear() {
		shopList.clear();
	}

	public double calc() {
		double x = 0;
		for (Commodity e : shopList) {
			for (int i = 0; i < super.commodities.size(); i++) {
				if (super.commodities.get(i).getName().contentEquals(e.getName())) {
					x += super.commodities.get(i).getPrice() * e.getNum();
				}
			}

		}
		return x;
	}

}

 功能:添加删除购物车内商品,并对商城内商品余量进行修改;展示购物车;清空购物车;结算

public class Main {
	public static void main(String[] args) {
		Cart cart = new Cart();
		Mall mall = new Mall();
		Scanner sc = new Scanner(System.in);
		System.out.println("欢迎来到购物商城");
		Menu();
		int n = sc.nextInt();
		while (n >= 1 && n <= 8) {
			switch (n) {
			case 1:
				mall.disp();
				break;
			case 2:
				System.out.println("输入待查找商品名称");
				mall.search(sc.next());
				break;
			case 3:
				System.out.println("您需要添加几件商品?");
				int num = sc.nextInt();
				System.out.println("接下来请输入待添加的商品名称及数量");
				for (int i = 0; i < num; i++) {
					Commodity goods = new Commodity(sc.next(), sc.nextInt());
					cart.addToCart(goods);
				}
				break;
			case 4:
				System.out.println("请输入待删除的商品名称及数量");
				cart.delete(sc.next(), sc.nextInt());
				break;
			case 5:
				cart.disp();
				break;
			case 6:
				cart.clear();
				System.out.println("购物车已清空");
				break;
			case 7:
				double x = cart.calc();
				System.out.println("总价=" + x);
				break;
			case 8:
				System.exit(0);
				break;
			default:
				System.out.println("暂无此功能,请重新检查您的输入");
				break;
			}
			Menu();
			n = sc.nextInt();
		}
	}

	private static void Menu() {
		System.out.println("输入1查看商城商品");
		System.out.println("输入2查找商品");
		System.out.println("输入3添加购物车");
		System.out.println("输入4删除购物车内某件商品");
		System.out.println("输入5展示购物车内所有商品");
		System.out.println("输入6清空购物车");
		System.out.println("输入7结算");
		System.out.println("输入8退出商城");
	}

}

功能:展示该商城所具有的功能并调用


标签:Commodity,get,int,程序,购物车,commodities,面向对象,getNum
From: https://www.cnblogs.com/luocs/p/16738488.html

相关文章

  • Painter 画板,用于小程序的海报生成
    <l-painterref="painter"><l-painter-viewcss="width:568rpx;box-sizing:border-box;background:#ffffff;align-items:center;padding:24rpx;border-radius:......
  • 程序员要不要考研?有什么优势?
    为什么要考研呢?原因大概有三点: 1.目前IT市场上的软件开发岗位大多是属于应用开发,工作中获取的经验比理论知识更有用;2.工作中可以更好培养出自己的实践能力、沟通能力、......
  • Java面向对象基础
    Java面向对象基础一、类和对象1、什么是对象:万物皆对象,客观存在的事物皆可为对象2、面向对象:关注事物的信息,对事物的属性和行为有一定了解3、什么是类:对生活......
  • 程序员必备的6个好习惯,成为更优秀的自己
    如果你有机会跟一些技术大牛接触的话,你会发现别人不仅是技术上比一般人强很多,而且在做事方面也有许多不一样的习惯,在职场卷了这么多年依然保持的习惯,往往是值得我们借鉴和......
  • Python自动化办公:让程序自动分析数据制作报表,并发送邮箱
    序言作为数据分析师,我们需要经常制作统计分析图表。但是报表太多的时候往往需要花费我们大部分时间去制作报表。这耽误了我们利用大量的时间去进行数据分析。但是作为......
  • java面向对象程序设计
    一:面向对象的优点1.与人类的思维习惯一致2.信息隐藏,提高了程序的可维护性和安全性3.提高了程序的可重要性定义:抽象是从众多的事务中抽取出共同的、本质性的特征,而舍弃......
  • aardio + PHP 可视化快速开发独立 EXE 桌面程序
    aardio支持与很多编程语言混合开发。网络上大家分享的aardio+Python混合开发的文章很多,aardio+PHP的文章却很少。其实aardio与PHP混合开发是真的简单!▶CGI......
  • C++源程序的压缩和解压
    C++源程序的压缩和解压实验1:C++源程序的压缩和解压一、必做内容:(一)压缩器1.为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设你想......
  • 开发程序思路
    1)分析需求    明白开发需求,是完成程序的大前提,因此,分析需求至关重要,一切不以需求为主的程序开发,都是耍流氓的!(2)设计思路设计思路就是根据需求,把需求进行拆解,分模块逐......
  • JavaScript面向对象详解
    JavaScript面向对象面向对象是一种编程思想(oop)。很多个具有相同属性和行为的对象就可以抽象为类,对象是类的一个实例。JavaScript在ECMAScript6中引入了类的概念。面向......