0.人员分工
共同工作:
进行前期调查以及框架设计的考量,对自己所设计的类进行编码规范检查,完成博客的书写
李蓉 | 完成购物车系统中商品管理功能类设计和用户登陆功能的实现 |
---|---|
郭楠 | 完成购物车系统中的cart类,菜单类,Main类的设计。以及部分商品管理功能完成 |
1.前期调查:淘宝网
1)打开淘宝网后,首先需要登录帐号密码或注册
2)成功登录后进入商城界面后可以看到不同类别的商品
3)在搜索框中搜索商品,商城会返回查询的所有结果并显示。例如搜索《java核心技术》,商城显示如下
4)淘宝商城对商品的展示,用户可以选择对价格进行排序后再显示
5)进入购物车后,可以看到当前购物车内的商品
6)选定商品后,可以选定数量放入购物车
7)用户可以对购物车内的商品进行操作,例如增加、减少商品数量、删除选定商品,清空购物车和结算
2.系统功能结构图:
3.系统描述
- 首先,本系统创建了一个购物商城的实例。
- 其次,本系统声明并创建了Commodity的抽象类,包括商品的名称、价格、数量、ID号(类型+编号);声明并创建了Users类,包括用户的帐号、密码。
- 为测试创建了三个Commodity对象,分别向购物车中和商城中传入了每种商品唯一的ID号,商品的名称,价格,数量;创建了两个Users对象,向userlist中传入了两组帐号和密码。
4 再然后我们调用用户登陆注册方法,只有登陆成功才能进入到商城主页面 - 进入商城主页面后,用户可以自由选择进入商城页面,购物车页面,商品管理页面或退出本系统
- 若进入商城页面,我们调用商品展示方法,商品价格排序方法,搜索商品方法,选购商品方法
- 若进入购物车页面,我们调用购物车展示方法,把商品添加进入购物车方法,减少购物车中商品数量方法,总计购物车商品数量方法,清空购物车商品的方法,结算购物车商品的方法
- 若进入商品管理页面,我们调用增加商城商品方法,减少商城商品方法,清空商城商品方法,删除商城商品方法,查找商城商品方法
另:若添加商品时,购物车或商城中已存在该商品,则不重复添加商品条目,而是在购物车或商城中添加此商品的数量
4.类设计说明
对于购物车的基本实现主要设计了几个大类以及登录类,如下所示:
- Commodity 商品类,主要用于存储各类商品信息
- Cart 主要用于完成购物车的基本操作,如添加购买条目等等
- Warehouse 主要用于管理商品,上架商品,下架商品,搜索商品等等
- Menu 主要是各项功能的页面显示,以及对功能的选择
类的属性与方法,类与类之间的关系如下所示:
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;
}
功能二:增加:包含两个方面:一是已存在商品则增加其数量,二是商品不在购物车列表内增加商品条目。
增加一:
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);
}
功能三:减少数量:基本与增加数量一致
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("删除完成!");
}
}
功能五:展示:遍历数组即可
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;
}
功能七:下单:
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();
商城主页的一些功能
功能八:排序:商品按价格升序降序
升序:
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());
}
});
}
功能九:搜索价格区间内的商品
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;
}
功能十:
注册
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;
两个功能的思维导图:
7.课堂派未解决的小问题
1)数据存储:内存存储
2)界面:控制台
3)开发工具:Eclipse