首页 > 其他分享 >购物车系统的面向对象设计(Version1.0)

购物车系统的面向对象设计(Version1.0)

时间:2022-09-28 19:46:01浏览次数:45  
标签:Version1.0 面向对象 int System 购物车 商品 println public

0.人员分工

共同工作:
进行前期调查以及框架设计的考量,对自己所设计的类进行编码规范检查,完成博客的书写

李蓉 完成购物车系统中商品管理功能类设计和用户登陆功能的实现
郭楠 完成购物车系统中的cart类,菜单类,Main类的设计。以及部分商品管理功能完成

1.前期调查:淘宝网

1)打开淘宝网后,首先需要登录帐号密码或注册
image
2)成功登录后进入商城界面后可以看到不同类别的商品
image
3)在搜索框中搜索商品,商城会返回查询的所有结果并显示。例如搜索《java核心技术》,商城显示如下
image
4)淘宝商城对商品的展示,用户可以选择对价格进行排序后再显示
image
5)进入购物车后,可以看到当前购物车内的商品
image
6)选定商品后,可以选定数量放入购物车
image
7)用户可以对购物车内的商品进行操作,例如增加、减少商品数量、删除选定商品,清空购物车和结算
image
image

2.系统功能结构图:

image

3.系统描述

image

  1. 首先,本系统创建了一个购物商城的实例。
  2. 其次,本系统声明并创建了Commodity的抽象类,包括商品的名称、价格、数量、ID号(类型+编号);声明并创建了Users类,包括用户的帐号、密码。
  3. 为测试创建了三个Commodity对象,分别向购物车中和商城中传入了每种商品唯一的ID号,商品的名称,价格,数量;创建了两个Users对象,向userlist中传入了两组帐号和密码。
    4 再然后我们调用用户登陆注册方法,只有登陆成功才能进入到商城主页面
  4. 进入商城主页面后,用户可以自由选择进入商城页面,购物车页面,商品管理页面或退出本系统
  5. 若进入商城页面,我们调用商品展示方法,商品价格排序方法,搜索商品方法,选购商品方法
  6. 若进入购物车页面,我们调用购物车展示方法,把商品添加进入购物车方法,减少购物车中商品数量方法,总计购物车商品数量方法,清空购物车商品的方法,结算购物车商品的方法
  7. 若进入商品管理页面,我们调用增加商城商品方法,减少商城商品方法,清空商城商品方法,删除商城商品方法,查找商城商品方法
    另:若添加商品时,购物车或商城中已存在该商品,则不重复添加商品条目,而是在购物车或商城中添加此商品的数量

4.类设计说明

对于购物车的基本实现主要设计了几个大类以及登录类,如下所示:

  1. Commodity 商品类,主要用于存储各类商品信息
  2. Cart 主要用于完成购物车的基本操作,如添加购买条目等等
  3. Warehouse 主要用于管理商品,上架商品,下架商品,搜索商品等等
  4. Menu 主要是各项功能的页面显示,以及对功能的选择
    类的属性与方法,类与类之间的关系如下所示:
    image
    image
    image

5. 本系统哪里体现了面向对象的封装性?

含义:封装性是面向对象编程中的三大特征之一,封装性就是把对象的成员属性和成员方法结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节。
在本系统中,将属性常使用private修饰属性保证了保证内部数据的可靠性读写控制,保护了数据的安全和可靠。。方法常使用public与protected修饰,提供了与外部接口的有效交互。例如我们这里的商品类,name等属性用private修饰,setter,getter方法使用public修饰,既可以达到保护数据,又有良好的交互。较好得达到了封装的目的。(其他类也是如此)

6.主要功能(如网购物车添加、删除商品)的流程图与关键代码。

主要功能:仓库管理与购物车的增删差改几乎一致。这里以购物车为例。
功能一:查找

public int search(String str){
		int sign=-1;
		for(int i=0;i<shopList.size();i++) {
			if(shopList.get(i).getName().equals(str)||shopList.get(i).getId().equals(str))
				sign=i;
		}
		return sign;
	}

image
功能二:增加:包含两个方面:一是已存在商品则增加其数量,二是商品不在购物车列表内增加商品条目。
增加一:

public void addToCartInNum(int flag,int number){
		shopList.get(flag).setNum(shopList.get(flag).getNum() + number);
	}

增加二:

public  void addToCart(Commodity c) {
		shopList.add(c);
		Collections.sort((ArrayList<Commodity>)shopList);
	}

image
功能三:减少数量:基本与增加数量一致

public void decreaseToCart(int flag,int number) {
			shopList.get(flag).setNum(shopList.get(flag).getNum()-number);
	}

功能四:删除:

public void delete(String str) {
		int flag=0;
		for(int i=0;i<shopList.size();i++) {
			if(shopList.get(i).getName().equals(str)||shopList.get(i).getId().equals(str))
				flag=i;
		}
		if(flag==-1)
			System.out.println("不存在此商品!请检查是否输入错误");
		else
		{
			shopList.remove(flag);
			System.out.println("删除完成!");
			
		}
	}

image
功能五:展示:遍历数组即可

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

一些其他不一样的主要功能:
功能六:结算:

public double calculate() {
		double sum=0;
		for (Commodity e : shopList) {
			sum+=e.getPrice()*e.getNum();
		}
		return sum;
	}

image
功能七:下单:

ArrayList<Commodity> goodsOne = new ArrayList<>();
				goodsOne = cart.getShopList();
				for (int i = 0; i < goodsOne.size(); i++) {
					if (goodsTwo.get(i).getNum() < goodsOne.get(i).getNum()) {
						System.out.println(goodsTwo.get(i).getName() + "该商品存货不足,继续清算其他商品");
					}
					goodsTwo.get(i).setNum(goodsTwo.get(i).getNum() - goodsOne.get(i).getNum());
				}
				System.out.println("下单成功!");
				System.out.println("您本次消费"+cart.calculate()+"元");
				cart.clear();
				warehouse.display();

image

商城主页的一些功能
功能八:排序:商品按价格升序降序
升序:

	public void sortUp() {
		Collections.sort(wareList, new Comparator<Commodity>() {
			@Override
			public int compare(Commodity c1, Commodity c2) {
				return (int) (c1.getPrice() - c2.getPrice());
			}
		});
	}

降序:

	public void sortDown() {
		Collections.sort(wareList, new Comparator<Commodity>()  {
			@Override
			public int compare(Commodity c1, Commodity c2) {
				return (int) (c2.getPrice() - c1.getPrice());
			}
		});
	}

image

功能九:搜索价格区间内的商品

	public ArrayList<Commodity> findByPrice(double price1, double price2) {
		ArrayList<Commodity> goods = new ArrayList<>();
		if (price1 > price2) {
			double temp = price1;
			price1 = price2;
			price2 = temp;
		}
		for (Commodity e : wareList) {
			if (price1 <= e.getPrice() && e.getPrice() <= price2) {
				goods.add(e);
			}
		}
		return goods;
	}

image
功能十:
注册

System.out.println("请输入用户名:");
				String inputaccount = sc.next();
				System.out.println("请输入密码:");
				String inputpassword = sc.next();
				for (int i = 0; i < userList.size(); i++) {
					if ((inputaccount.equals(a1.getAccount()) || (inputaccount.equals(a2.getAccount())))) {
						System.out.println("用户名已被占用!请重试!");
						break;
					} else {
						Users a3 = new Users();
						a3.setAccount(inputaccount);
						a3.setPassword(inputpassword);
						userList.add(a3);
						System.out.println("注册成功!");
						break;
					}
				}
				break;

功能十一:
登录

System.out.println("请输帐号:");
				String name = sc.next();
				System.out.println("请输入密码:");
				String password = sc.next();
				for (int i = 0; i < userList.size(); i++) {
					if (name.equals(userList.get(i).getAccount())) {
						if (password.equals(userList.get(i).getPassword())) {
							System.out.println("登陆成功!");
							menu.MainMenu();
							break;
						} else {
							System.out.println("密码错误");
							break;
						}
					}
					if(i==userList.size()-1) {
						System.out.println("查无用户");
					}
				}
				break;

两个功能的思维导图:
image

7.课堂派未解决的小问题

1)数据存储:内存存储
2)界面:控制台
3)开发工具:Eclipse

标签:Version1.0,面向对象,int,System,购物车,商品,println,public
From: https://www.cnblogs.com/GoodNanmu/p/16736096.html

相关文章

  • python-面向对象属性的访问与self的理解
    属性访问类属性与对象属性在类中定义的名字,都是类的属性,细说的话,类有两种属性:数据属性和函数属性,可以通过__dict__访问属性的值,比如Person1.__dict__['student'],但Python......
  • 购物车程序的面向对象设计
    ​1.人员分工类1、类2、类3、类4,罗晨珊2.前期调查先在商城(Mall)中,浏览所有商品或查找某一商品,然后将商品加入购物车(Cart)中,可以在购物车内进行商品数量的增加、减少、清......
  • Java面向对象基础
    Java面向对象基础一、类和对象1、什么是对象:万物皆对象,客观存在的事物皆可为对象2、面向对象:关注事物的信息,对事物的属性和行为有一定了解3、什么是类:对生活......
  • java面向对象程序设计
    一:面向对象的优点1.与人类的思维习惯一致2.信息隐藏,提高了程序的可维护性和安全性3.提高了程序的可重要性定义:抽象是从众多的事务中抽取出共同的、本质性的特征,而舍弃......
  • JavaScript面向对象详解
    JavaScript面向对象面向对象是一种编程思想(oop)。很多个具有相同属性和行为的对象就可以抽象为类,对象是类的一个实例。JavaScript在ECMAScript6中引入了类的概念。面向......
  • 面向对象编程中级部分习题
    1.作业1定义一个Person类{name,age,job},初始化Person对象数组,有3个person对象,并按照age从大到小进行排序,提示:使用冒泡排序.packagecom.yt.homwork.homework01;pub......
  • 路飞学城五: 动态价格策略&购物车模块开发
    五:动态价格策略&购物车模块开发课程动态价格策略实现动态价格策略设计商城往往为了提高销量都会出现活动内容,商品因为参加了活动所以会产生价格的变动。价格优惠活动......
  • java面向对象--内部类
    java面向对象--内部类packagecharpter5.Demo12;​//1个java文件内,可以有多个class,但只能有一个Public类。​publicclassOuter{  privateintid;  publicvoi......
  • java面向对象--接口
    java面向对象--接口普通类:只有具体实现抽象类:具体实现和规范(抽象方法)都有接口:只有规范,面向接口编程。关键词:声明类class声明接口interfacepackagecharpter......
  • java面向对象--抽象类
    java面向对象--抽象类关键词abstractpackagecharpter5.Demo10;​//abstract抽象类:类extends单继承 (接口可以多继承)publicabstractclassAbstract{  /**......