目标及任务
目标:
- 学会使用讲故事的方式找到系统中可能包含的类、属性、方法。
- 思考方法、属性应放在哪个类中,哪些属性与方法可以设置为static或非static。
- 理解类、封装、模块化之间的关系。
步骤:
- 前期调查与功能设计:调查京东商城或者亚马逊商城中的购物车,体验从搜索商品、加入购物车、操作购物车、下单全过程,思考该过程可能包含的类。演示中要求图多字少。
- 面向对象设计:以面向对象的方法编写购物车代码。先考虑有什么类,再考虑哪些功能、哪些数据、功能放到哪个类中合适。具体的,可完善课件中的中购物车代码。并增加商城类、菜单类等你需要的类。。注意学习类与类之间的关系(先重点掌握关联关系与依赖关系)。类的设计详见参考资料2、3。
- 编码规范检查:使用英文对类、方法、包进行命名(查英文词典,不得出现拼音)。参考JAVA编码规范,进行类命名,方法命名、包命名,合适的缩进,有意义的变量名。见参考资料1中的1.1-1.4。
- PPT制作或博客制作并上台演示:演示前,请务必自己在同学面前预演一遍。
小组人员及分工
人员 | 分工 |
---|---|
聂闽鹭 | 购物车的增删及总价格,博客的编写 |
郑钧 | 商品展示和查询,类的构造,购物车删除改进,前期调查 |
前期调查
1.商品界面
如图商品界面有商品名称,价格及介绍
2.购物车界面
如图购物车界面,有所选商品,价格,购买数量,总价
3.流程
浏览商品,查询商品,往购物车中添加所想商品,删去你不需要的商品或减少数量,查看购物车,清空购物车或结算,退出程序
功能设计
类
Commodity商品类
public class Commodity {
private String name;
private int price;
private int number;
private int no;
private Integer id;
public Commodity(String name, int price, Integer id) {
this.name = name;
this.price = price;
//this.number = number;
this.id = id;
}
public Integer getId() {
return id;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
@Override
public String toString() {
return "Commodity [name=" + name + ", price=" + price + ", id=" + id + "]";
}
}
ShoppingMall商场货物清单
public class shoppingMall {
List<Commodity> commodities = new ArrayList<>();
{
commodities.add(new Commodity("苹果", 100, 0));
commodities.add(new Commodity("电脑", 10000, 1));
commodities.add(new Commodity("书", 50, 2));
commodities.add(new Commodity("耐克臭鞋", 3999, 3));
commodities.add(new Commodity("非洲棉花", 3599, 4));
commodities.add(new Commodity("苹果iPhone 14", 8699, 5));
commodities.add(new Commodity("联想拯救者Y9000", 7499, 6));
}
public List<Commodity> showCommodities() {
return this.commodities;
}
public List<Commodity> searchCommodities(String searchName) {
int flag = 1;
List<Commodity> list = new ArrayList<>();
for (int i = 0; i < commodities.size(); i++) {
if (commodities.get(i).getName().equals(searchName)) {
list.add(commodities.get(i));
flag = 0;
}
}
return list;
}
}
shoppingCart购物车
package shopping;
import java.util.ArrayList;
import java.util.List;
public class ShoppingCart {
private List<ItemEntry> itemList = new ArrayList<>();
public void addList(Commodity e) {
int index = findById(e.getId());
if (index == -1) {
itemList.add(new ItemEntry(e));
} else {
itemList.get(index).increase();
}
}
public void decreaseList(Commodity e) {
int index = findById(e.getId());
if (index == -1) {
return;
} else {
itemList.get(index).decrease();
}
}
@Override
public String toString() {
return "ShoppingCart [itemList=" + itemList + "]";
}
public List<ItemEntry> getItemList() {
return itemList;
}
public List<ItemEntry> emptyCart() {
itemList.clear();
return itemList;
}
public List<ItemEntry> seeMyCart() {
return itemList;
}
public void myRemove(Integer id) {
if (id == null)
System.out.println("没找到该id");
int index = findById(id);
if (index == -1) {// 未找到
System.out.println("购物车中无此物品");
} else {
ItemEntry entry = this.itemList.get(index);
if (entry.getnum() <= 1) {
this.itemList.remove(index);
System.out.println("删除成功");
} else {
entry.decrease();
System.out.println("商品数量减一");
}
}
}
public double getprice(Integer id) {
return itemList.get(id).num * itemList.get(id).item.getPrice();
}
private int findById(Integer id) {
int index = -1;
if (itemList.size() > 0) {
for (int i = 0; i < itemList.size(); i++) {
if (itemList.get(i).getitem().getId() == id)
index = i;
}
}
return index;
}
}
ItemEntry购物车内置类
class ItemEntry {
Commodity item;
Integer num;
public ItemEntry(Commodity item) {
this.item = item;
num = 1;
}
public int getnum() {
// TODO Auto-generated method stub
return num;
}
public Commodity getitem() {
// TODO Auto-generated method stub
return item;
}
public void increase() {
num++;
}
public void decrease() {
if(num<=0)
{
return;
}
else num--;
}
/*......*/
public String toString() {
return "ItemEntry [item=" + item + ", num=" + num + "]";
}
}
Main主函数
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Scanner pause = new Scanner(System.in);
ShoppingMall str = new ShoppingMall();
ShoppingCart str1 = new ShoppingCart();
List<Commodity> list = str.showCommodities();
while (true) {
Menu.beginMenu();
System.out.println("输入你的选择");
int choose = sc.nextInt();
switch (choose) {
case 1:// 商品展示
for (Commodity temp : list) {
System.out.println(temp);
}
System.out.println("输入任意数字,按回车返回主界面");
String Pause = pause.next();
break;
case 2:// 商品查询
System.out.println("输入你要查询商品名字");
String searchName = sc.next();
System.out.println(str.searchCommodities(searchName));
Pause = pause.next();
break;
case 3:
System.out.println("输入你想要添加到购物车的商品id,输入0则结束添加产品");
int count = sc.nextInt();
//while (true) {
if (count == -1) {
System.out.println("返回界面");
Pause = pause.next();
}
else if(count<=6&&count>=0){
str1.addList((Commodity)list.get(count));
System.out.println(str1);
Pause = pause.next();
}
else
{
System.out.println("没有这件商品,请重新选择");
}
//}
break;
case 4:
System.out.println("输入你想要删去到购物车的商品id,输入0则结束删去产品");
int count2=sc.nextInt();
if(count2==-1)
{
System.out.println("返回界面");
Pause = pause.next();
}
else if(count2<=6&&count2>=0)
{
str1.decreaseList((Commodity)list.get(count2));
System.out.println(str1);
Pause = pause.next();
}
else
{
System.out.println("没有这件商品,请重新选择");
}
break;
case 5:
if(str1.getItemList().isEmpty())
{
System.out.println("购物车为空");
}
else
{System.out.println(str1.getItemList());}
Pause = pause.next();
break;
case 6:
str1.emptyCart();
System.out.println("购物车已经清空");
Pause = pause.next();
break;
case 7:
int a,b;
double money=0;
System.out.println("选择需要购买的商品类型数量及id:");
a=sc.nextInt();
for(int j=0;j<a;j++)
{
b=sc.nextInt();
}
for(int i=0;i<a;i++)
{
money+=str1.getItemList().get(i).num*str1.getItemList().get(i).item.getPrice();
}
System.out.println(money);
Pause = pause.next();
break;
case 8:
System.out.println("欢迎下次光临!");
System.exit (0);
}
}
}
}
Menu选择菜单
package shopping;
public class Menu {
public static void beginMenu() {
System.out.println(" **********************************");
System.out.println(" ****** 欢迎光临! *****");
System.out.println(" **********************************");
System.out.println("您有什么需要?");
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)退出");
}
public static void endMenu() {
System.out.println(" **************************************");
System.out.println(" **** 谢谢惠顾,欢迎下次光临! ****");
System.out.println(" **************************************");
}
}
业务流程图
功能结构图
UML图
运行结果
-
界面
-
商品展览
-
商品查询
-
购物车添加商品
-
购物车删除
-
查看购物车
-
结算
-
清空购物车