Java大作业:购物车
1、小组成员以及任务分配
班级 | 姓名 | 任务 |
---|---|---|
网络2014 | 兰苏瑀 | 负责编写代码相关的工作:编码规范,面向对象设计,功能设计 |
网络2014 | 刘宇恒 | 负责编写博客相关的工作:前期调查,博客制作 |
2、前期调查(以京东商城界面为例)
2.1 主界面
2.2 商品界面
2.3购物车界面
由观察京东商城可知:主界面要有分类,使购买者更有目的性。商品展示时主要信息含商品的名称描述和单价。购物车显示的信息有:商品名称和单价,每种商品的预购数量和金额小计,所有商品的总金额。购物车的功能操作按键有:增加或者减少某种商品的预购数量,删除某种商品,清空购物车。
3、系统描述
用户进入到商城的主界面,可以看到搜索商品功能的框,以及商品的分类选项。然后点击商品,可以看到商品的名称、单价,可以选择将商品加入购物车。进入购物车,能看到商品的名称介绍、数量、某种商品的小计金额,可以进行增加或减少某种商品的数量、删除某种商品的操作,还可以直接清空购物车。
4、系统功能结构图和主要功能流程图
功能结构图
5、类的设计和UML类图
5.1类的设计
5.1.1商品
5.1.2菜单
5.1.3清单
5.1.4清单
5.2UML类图
6、关键代码
6.1主界面
package shoppingcart;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
public class Menu{
private static Map<Integer, Commodity> map = new LinkedHashMap<Integer, Commodity>();
static{//类别// 货物编号// 货物名称// 单价//属性
Commodity good1 = new Commodity(1, "苹果", 3.0,"水果");
Commodity good2 = new Commodity(2, "芒果", 7.0,"水果");
map.put(good1.getId(), good1);
map.put(good2.getId(), good2);
}
public static void showMenu(){
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(" [0]退出 ");
}
public static void inputOption(ShoppingCart cart) {
System.out.println("请输入你要添加的货物编号及个数:");
Scanner sc = new Scanner(System.in);
if (sc.hasNextLine()) {
String s = sc.nextLine();
String[] strings = s.split(" ");
int id = Integer.parseInt(strings[0]);
int count = Integer.parseInt(strings[1]);
Commodity p = map.get(id);
cart.addGood(p, count);
}
System.out.println("——————————————————————【用户总预购货物】——————————————————————");
cart.showAll();
System.out.println("货物总价钱为:" + cart.totalAllMoney()+"¥");
System.out.println("—————————————————————————————————————————————————————");
}
public static void deleteOption(ShoppingCart cart) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要删除的货物编号:");
if (sc.hasNextLine()) {
String s = sc.nextLine();
int id = Integer.parseInt(s);
boolean flag = cart.deleteGood(id);
if (flag) {
System.out.println("货物编号:" + id + "的货物删除成功!");
} else {
System.out.println("货物编号" + id + "删除失败,购物车没有该货物!!!");
}
}
System.out.println("——————————————————————【用户总预购货物】——————————————————————");
cart.showAll();
System.out.println("货物总价钱为:" + cart.totalAllMoney()+"¥");
System.out.println("—————————————————————————————————————————————————————");
}
public static void reduceOption(ShoppingCart cart) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要减少的货物编号及个数:");
if (sc.hasNextLine()) {
String s = sc.nextLine();
String[] strings = s.split(" ");
int id = Integer.parseInt(strings[0]);
int count = Integer.parseInt(strings[1]);
boolean flag = cart.reduceGood(id,count);
if (flag) {
System.out.println("货物编号:" + id + "的货物减少"+count+"个!");
} else {
System.out.println("减少失败!");
}
}
System.out.println("——————————————————————【用户总预购货物】——————————————————————");
cart.showAll();
System.out.println("货物总价钱为:" + cart.totalAllMoney()+"¥");
System.out.println("—————————————————————————————————————————————————————");
}
public static void clearOption(ShoppingCart cart) {
cart.clearCart();
System.out.println("——————————————————————【清空购物车】————————————————————————");
cart.showAll();
System.out.println("预购货物总价钱为:" + cart.totalAllMoney()+"¥");
System.out.println("—————————————————————————————————————————————————————");
}
}
6.2购物车
package shoppingcart;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class ShoppingCart {
public static final String add = null;
private Map<Integer, GoodItem> map = new LinkedHashMap<Integer, GoodItem>();
// 集合
public void addGood(Commodity p, int count) {// 添加货物
int goodID = p.getId();
if (map.containsKey(goodID)) {// 如果购物车已经存在同样的货物,则的数量增加
GoodItem goodItem = map.get(goodID);
goodItem.setCount(goodItem.getCount() + count);
} else {
map.put(goodID, new GoodItem(p, count));// 如果没有,则新建一个商品信息
}
}
public void showAll() {// 查看购物车所有信息
Collection<GoodItem> GoodItems = map.values();
Iterator<GoodItem> iterator = GoodItems.iterator();
while (iterator.hasNext()) {
GoodItem GoodItem = iterator.next();
Commodity Good = GoodItem.getGood();
System.out.println("货物编号" + ":" + Good.getId() + ", 货物名称:" + Good.getName() + ", 单价:"
+ Good.getPrice() + "¥, 数量:" + GoodItem.getCount() + ", 小计:" + GoodItem.totalMoney()+"¥");
}
}
public boolean deleteGood(int goodID) {// 删除货物
if (map.containsKey(goodID)) {
map.remove(goodID);
return true;
}
return false;
}
public boolean reduceGood(int goodId,int count) {// 减少货物
GoodItem goodItem = map.get(goodId);
if (map.containsKey(goodId)) {
if(count>goodItem.getCount()) {
System.out.println("不能把货物数量减少成负数哦");
return false;
}else if (count < goodItem.getCount()) {
goodItem.setCount(goodItem.getCount()-count);//数量设置成原数量-count
return true;
} else if (count == goodItem.getCount()) {// 删除该商品,数量减到0
deleteGood(goodId);
return true;
}
}
else System.out.println("购物车中没有该货物");
return false;
}
public void clearCart() {// 清空购物车
map.clear();
}
public double totalAllMoney() {// 货物总价格
double total = 0;
Collection<GoodItem> GoodItems = map.values();
Iterator<GoodItem> iterator = GoodItems.iterator();
while (iterator.hasNext()) {
GoodItem GoodItem = iterator.next();
double money = GoodItem.totalMoney();
total += money;
}
return total;
}
public Map<Integer, GoodItem> getMap() {
return map;
}
public void setMap(Map<Integer, GoodItem> map) {
this.map = map;
}
}
7、总结
- 这是第一次Java面向对象设计的大作业,购物车。我们小组进行了前期调查、类与对象的设计、代码结构的设计等等工作。由于较为生疏,对作业要求认真研究后,
- 编写代码时我们会注意变量名,函数名,类名,方法名的定义,也就是重视代码的规范性。做好代码命名规范,使得代码可读性更强,便于读者阅读。
- 在编写代码的过程中,我们不可避免的遇到各类问题,比如编写好的代码意外出现错误、对类中该包含的属性和方法不清楚等。我们通过向高手请教、百度借鉴相似的项目、一步一步尝试新思路等等方法解决问题。
- 本次的作业在多次修改以后依旧存在较多问题,我们将会在往后继续更新。