Lab: Write classes to model a shopping list.
Make an Item class that represents a grocery item’s name and price, such as tissues for $3.
Also implement an ItemOrder class that represents a shopper’s desire to purchase a given item in a given quantity, such as five boxes of tissues.
You might wish to implement bulk-discounted items, such as two boxes of tissues for $4,
which would bring the cost of the given item order of
2 + 2 + 1 boxes of tissues to $4 + $4 + $3, or $11.00.
Lastly, implement a ShoppingCart class that stores ItemOrders in an ArrayList and
allows item orders to be added to, removed from, or searched for in the cart.
The cart should be able to report the total price of all item orders it currently carries.

实验: 创建一个程序模拟一个购物清单

  • 首先创建一个订单以货物名与价格为变识,例如一条毛巾$3。
  • 并创建一个订单表代表购物者的购物需要,以数量与货物名为变识。
  • 有条件添加量折产品,例如五盒毛巾,最后一盒打半折。
  • 创建一个购物车,将订单储存在数组列表中,并能够添加、移去订单,或是进行搜索订单,购物车同时要求能够结算所有的应付款项总额

进阶要求 *

  • 能够汇总重复货名,将重复的货名数量叠加,总结订单
  • 能够根据不同的货品进行特色打折
  • 结算时能够打印订单且实际价格
  • 使用for循环时,因为末项删除导致标号位跳出范围调整

分析:

我们需要建立三个不同的Class

First: ItemOrder 需要实现以下功能:

1) 以名字,价格为标识创建新ItemOrder
2) 获得ItemOrder的名字
3) 获得ItemOrder的价格
4) 以折扣为参数进行价格调整
5) 打印订单名及价格

Second: ShoppingCart 购物车 需要实现以下功能:

1) 储存购物清单为数组列表
2) 以购物订单数组列表,数量为标识创建新ShoppingCart
3) 添加购物订单
4) 删除购物订单,以及避免末项删除标号位跳出范围
5) 计算折扣
6) 清算总额

Third:进行实际实验,进行模拟购物,清算

1) 根据名字价格为标识创建 ItemOrder
2) 进行购买、下单
3) 进行移除订单
4) 结算

First ItemOrder 订单代码如下:

package Hollen;
public class ItemOrder{private String name;private double price;//以货名、价格为标识创建订单public ItemOrder(String name,double price) {this.name=name;this.price=price;}public ItemOrder() {this.name=" ";this.price=0.0;}//无参数时订单默认为“ ” 与0.0public String name(){return this.name;}//获取订单货名public double price() {return this.price;}//获取货名价格public void discount(double a) {this.price = this.price*a;}//以折扣为参数对价格进行调整public String toString() {return this.name+" * "+this.price;}//打印订单,以货名 * 价格为形式打印
}

Second: ShoppingCart 购物车代码如下:

package Hollen;
import java.util.*;
//调用数组列表包 java.util.*;
public class ShoppingCart{private ArrayList<ItemOrder> name = new ArrayList<ItemOrder>();//* 建立一个以ItemOrder为数据类型,及以订单为参数的数组列表private ArrayList<Integer> quantity = new ArrayList<Integer>();//* 建立一个以Integer为数据类型,及以订单数量为参数的数组列表public ShoppingCart(ItemOrder a,int quantity) {this.name.add(a);this.quantity.add(quantity);}//* 根据货物名,需求数量为标识建立购物车订单public void add(ItemOrder a,int quantity) {this.name.add(a);this.quantity.add(quantity);}//* 根据货物名,需求数量为标识添加购物车订单public void search(String name) {for (int i=0;i<=this.name.size()-1;i++) {if (this.name.get(i).name().equals(name)) {System.out.println("The price for "+name+" is "+this.name.get(i).price());}}}//逐项寻找货物名,并且汇报价格public void remove(String name) {boolean ifFind = false;for (int i=0;i<=this.name.size()-1;i++) {if (i==this.name.size()-1&&this.name.get(i).name().equals(name)) {//检查是否为末项ifFind = true;this.name.remove(i);this.quantity.remove(i);System.out.println("Remove "+name+" successfully!!");//汇报删除成功i--;//寻找货物名,并删除订单//* 防止调用for循环时,末项删除,标识跳出范围}else if(this.name.get(i).name().equals(name)) {ifFind = true;this.name.remove(i);this.quantity.remove(i);System.out.println("Remove "+name+" successfully!!");//汇报删除成功}}if (ifFind==false) {System.out.println("We couldn't find "+name+" in your shopping cart.");}//汇报无相应货名}public void report() {int firstIndex = -1;int duplicate = 0;double amount = 0.0;for(int b=0;b<=this.quantity.size()-1;b++) {if (b!=this.quantity.size()-1) {//检查是否为末项while(this.name.lastIndexOf(this.name.get(b))!=this.name.indexOf(this.name.get(b))) {//通过判断是否存在未项标识不等于标识,来辨别是否有重复项firstIndex = this.name.indexOf(this.name.get(b));//记录标识号,防止因为删除导致的数列表移动ItemOrder firstIntemOrder = this.name.get(b);//记录标识号下的订单,防止因为删除导致的数列表移动while (this.name.contains(firstIntemOrder)) {int lastIndex = this.name.lastIndexOf(this.name.get(firstIndex));duplicate+=this.quantity.get(lastIndex);//累积计算订单货物对应的数量this.name.remove(lastIndex);this.quantity.remove(lastIndex);//利用while循环语句,清除所有重复的项,直到没有这个订单为止}this.quantity.add(firstIndex,duplicate);this.name.add(firstIndex, firstIntemOrder);//根据货品数量,订单创建新购物订单}}else {while(this.name.lastIndexOf(this.name.get(b))!=this.name.indexOf(this.name.get(b))) {firstIndex = this.name.indexOf(this.name.get(b));ItemOrder firstIntemOrder = this.name.get(b);while (this.name.contains(firstIntemOrder)) {int lastIndex = this.name.lastIndexOf(this.name.get(firstIndex));duplicate+=this.quantity.get(lastIndex);this.name.remove(lastIndex);this.quantity.remove(lastIndex);}this.quantity.add(firstIndex,duplicate);this.name.add(firstIndex, firstIntemOrder);b--;//与前步骤一样,对b的标号进行编辑,避免删除末项导致标号跳出范围}}}for (int a=0;a<=this.quantity.size()-1;a++) {if(this.name.get(a).name().equals("napkin")&&this.quantity.get(a)>100) {this.name.get(a).discount(0.6);System.out.println("Congratulations! You can get 60% discount on napkin!");}}//对napkin进行特色打折,当a>100时,进行60%的折扣for (int i=0;i<=this.quantity.size()-1;i++) {amount +=this.quantity.get(i)*this.name.get(i).price();}//计算购物车订单总额System.out.println(this.name.toString());//打印订单名System.out.println(this.quantity.toString());//打印订单货物数量System.out.println("The total amount of your payment is: "+ (int)amount +" ¥");//汇报总额}
}

Third: Shopping 模拟购物环境试验代码

package Hollen;public class Shopping {public static void main(String[] args) {// TODO Auto-generated method stub//ItemOrder chopsticks = new ItemOrder("chopsticks", 8);ItemOrder KFC = new ItemOrder("KFC", 60);ItemOrder bowl = new ItemOrder("bowl", 20);ItemOrder napkin = new ItemOrder("napkin", 2);ShoppingCart Hollen = new ShoppingCart(bowl,1);Hollen.add(KFC, 2);Hollen.add(bowl,1);Hollen.remove("bowl");Hollen.add(napkin, 200);Hollen.add(napkin, 2);Hollen.report();}}

试验完成示意图:

实验完成

Java面向对象静态方法数组列表参数应用以购物订单实验为例(进阶)相关推荐

  1. C语言和Java 在用数组作为参数时有点不一样

    C语言和Java 在用数组作为参数时有点不一样. C中` void jh(int n[2]) {/注意这里参数是写了大小 int temp; temp = n[0]; n[0] = n[1]; n[1 ...

  2. float数组 java_如何在Java中将Float数组列表转换为float数组?

    让我们首先创建一个浮点数组列表-ArrayList  arrList = new ArrayList  (); arrList.add(5.2 f); arrList.add(10.3 f); arr ...

  3. 泛型数组列表ArrayList

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理清 java 中的 数组列表 ArrayList: [2]数组列表 ArrayList 2.1)A ...

  4. java面向对象程序设计 习题答案_Java面向对象程序设计习题解答与实验 张桂珠.pdf...

    Java 面 向对 象 程 序 设 计 习题 解 答 与 实验 张桂珠 姚晓峰 陈爱国 主编 北 京 邮 电 大 学 出 版 社 ·北 京· 内 容 简 介 Java 面向对象程序设计需要做大量的练习 ...

  5. Java基础2面向对象和数组

    第四章 Java面向对象基础 4.1 面向过程和面向对象 面向过程(Procedure Oriented)和面向对象(Object Oriented,OO)都是对软件分析.设计和开发的一种思想,它指导 ...

  6. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

  7. java 数组 参数 ppt,Java自学课件-数组.ppt

    <Java自学课件-数组.ppt>由会员分享,可在线阅读,更多相关<Java自学课件-数组.ppt(23页珍藏版)>请在人人文库网上搜索. 1.Java程序设计,第6章 数组, ...

  8. java 11:数组作为函数参数,数组做为函数返回值

    1 数组作为参数 我们可以将数组作为参数,传入到函数中,其实就像我们main函数中 public void main(String [] args){};就是用数组作为函数参数: 又如, [java] ...

  9. java中调用数组参数_java中如何调用带有数组类型参数的存储过程

    java中如何调用带有数组类型参数的存储过程 关注:95  答案:3  mip版 解决时间 2021-01-28 00:39 提问者万丈深渊 2021-01-27 14:00 不知道java中java ...

最新文章

  1. python inspect模块
  2. SpringBoot处理JSON数据
  3. 我的第一篇学术论文发表出来啦啦啦啊!!!
  4. Java 代码的基本知识
  5. qt.targets(66,3):元素<Import>中的“Project”特性的值无效
  6. gradle项目搭建
  7. liquibase mysql_Liquibase MySQL:语法错误附近'????????????????'
  8. 火星首座NFT虚拟房屋以超过50万美元价格售出
  9. PMOS做固态继电器,PMOS做高侧双向开关电路,PMOS防电流倒灌电路,PMOS电源防反接电路
  10. 使用yo -v查看yeoman版本号
  11. [Python3网络爬虫开发实战] Appium 爬取微信朋友圈
  12. js创建a标签下载文件
  13. Android 模拟吹气实现吹风车效果
  14. 学习继电器的工作原理及作用
  15. Java:闹钟程序源代码,再也不用担心不能起床了
  16. Linux简介和各发行版介绍
  17. IDL读取ASCII文件
  18. Ajax同步获取数据
  19. 高级数据操作--连接查询
  20. 如何清除电脑里的服务项和系统服务列表中的残留服务

热门文章

  1. MySQL - 关于 False、True、0、1、tinyint(1) 的说明
  2. 名帖134 黄自元 楷书《陶先生墓表》
  3. 计算机数据存储单位及换算
  4. java不定义数组长度_在JAVA中定义数组时,可不可以一开始不设定数组的长度?...
  5. android 服务 结束,android – onDestroy被调用但服务没有结束
  6. 卫星红外波段英文简称及范围
  7. 人月神话(8,9)胸有成竹与削足适履
  8. slf4j Failed to load class “org.slf4j.impl.StaticLoggerBinder“ 错误 源码解析
  9. Git的使用:本地有新改动如何提交到远程服务器,仅做参考!
  10. python3 安装Scapy windouws平台