第1次任务:购物车程序的面向对象设计
@
0. 人员分工
任务 | 人员 |
---|---|
编码规范、前期调查与功能设计 | 曹卉潼 |
面向对象设计、博客制作 | 汪月月 |
1. 前期调查
2. 系统功能结构图
3. 系统描述
用户在商城中可以搜索、查看,看到想买的商品可以将商品加入购物车,并且可以对购物车中的商品进行添加和删除。
购物车可以展示所有商品价格,名称,也可以清空购物车,最后选择结算。
商场通过从文件读取数据,得到商品数据,并存在数组中
- 菜单展示
4. UML类图
5. 本系统体现的面向对象的封装性
对商品的属性在程序开始时就是不能改变的为了防止被改变,采用private进行修饰,可以防止其他操作改变其值,使用时只能通过getter和setter方法进行访问。
对商城中的所有商品,也是固定不变的,不论购物车中怎么删除,商品都会在商场中,所以用private进行修饰,对原有数据进行保护。
6. 系统功能展示
-
查看商场的所有商品
-
按照名称搜索商品并询问是否加入购物车
-
按照类型搜索商品
-
查看购物车
-
删除购物车中某商品
-
显示当前购物车的总价格
-
清空购物车
7. 项目包结构与关键代码
设计了两个包结构分别是shopping和User,目的是在后面继续不从代码时,可以对用户信息进行保护,shopping包中有商城,商品,购物车以及Main类
shopping包中Cart类
package shopping;
/*
* Cart类
* 存放物品的items数组
* 加入购物车的方法:add()
* 从购物车中删除商品的方法:delete()
* 清空购物车的方法:clear()
* 展示购物车内容的方法:show()
*/
import java.util.ArrayList;
public class Cart {
private ArrayList<Commodity> items = new ArrayList<>();//存放商品的容器
public Cart(ArrayList<Commodity> items) {
this.items = items;
}
public ArrayList<Commodity> getItems() {
return items;
}
public void setItems(ArrayList<Commodity> items) {
this.items = items;
}
//加入购物车
public void addCommodity(Commodity item) {
this.items.add(item);
this.show();
}
//删除某商品
public boolean delete(String name) {
for(int i=0;i<this.items.size();i++) {
if(this.items.get(i).contain(name)){
this.items.remove(i);
return true;
}
}
return false;
}
//清空购物车
public void clear() {
this.items.clear();
}
//展示购物车内容
public void show() {
System.out.println("当前购物车共有"+this.items.size()+"件商品");
for (Commodity commodity : this.items) {
System.out.printf("name: %s, price: %.2f",commodity.getName(), commodity.getPrice());
System.out.println();
}
}
//购物车总价格
public void printSumPrice() {
double x = 0;
for (Commodity commodity : this.items) {
x += commodity.getPrice();
}
System.out.printf("当前购物车总价格为:%.2f ",x);
this.show();
}
}
shopping包中Mall类
package shopping;
/*
* Mall类
* 存储商场所有商品的容器 commodities
* 初始化加载商品的方法:
* 展示所有商品的方法:
* 搜索功能
* 1. 按名字搜索的方法:
* 2. 按类型搜索的方法:
*/
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;
public class Mall {
static Scanner in = new Scanner(System.in);
private static ArrayList<Commodity> commodities = new ArrayList<>();
public ArrayList<Commodity> getCommodities() {
return commodities;
}
public void setCommodities(ArrayList<Commodity> commodities) {
Mall.commodities = commodities;
}
//加载商品
public void sumCommodity() {
try (Scanner scanner = new Scanner(Paths.get("data.csv").toFile())) {
String DELIMITER = ",";// CSV文件分隔符
scanner.useDelimiter(DELIMITER);// 设置分隔符
@SuppressWarnings("unused")
String s = scanner.nextLine();// 读取
while (scanner.hasNext()) {
String line = scanner.nextLine();
String[] str = line.split(",");
int id = Integer.parseInt(str[0]);
String name = str[1];
double price = Double.parseDouble(str[2]);
String type = str[3];
String address = str[4];
commodities.add(new Commodity(id, name, price, type, address));
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
// 展示商场的所有商品
public void showAll() {
for (Commodity item : commodities) {
System.out.println(item.toString());
}
}
//按名称搜索商品
public Commodity searchName(String name) {
int flag=0;
for (int i = 0; i < commodities.size(); i++) {
if (commodities.get(i).getName().equals(name)) {
System.out.println("名称为"+name+"的商品是:");
System.out.println(commodities.get(i).toString());
System.out.println("请问您是否需要加入购物车1/0:");
int op=in.nextInt();
if(op==1) {
flag=1;
return commodities.get(i);
}
}
}
if(flag==0) System.out.println("没有找到该商品");
return null;
}
// 按类型搜索商品
public ArrayList<Commodity> searchType(String type) {
int i = 0;
ArrayList<Commodity> list = new ArrayList<>();
for (i = 0; i < commodities.size(); i++) {
if (commodities.get(i).getType().equals(type)) {
list.add(commodities.get(i));
}
}
return list;
}
}