第1次任务:购物车程序的面向对象设计
0 人员分工
|任务|姓名|
| ---- | ---- | ---- |
| Menu类、Product类、面向对象分析 、前期调查、博客编写 |陈佳桐 |
| Cart类、Item类、User类、编码规范 | 付峻霖 |
1 前期调查
本次购物车活动的前期调查主要以京东商城购物车为主要研究对象。
使用过程中,可得出整个流程需要:
1.商品搜索,在商品库中搜索出含有关键字的相关商品
2.点击选择商品,出现商品详情页介绍。
可以看到商品对应的图片,商品对应的价格,选择商品的数量添加进购物车
3.打开购物车,按后放入先显示购物车商品
商品的基础内容:
商品名称,商品单价,
商品数量(可随时调整,不低于0),
单条商品条目的价格
4.购物车中可进行的操作:
可清空整个购物车————通过全选商品清除完成
可增加删除购物车件数
可自由选择商品进行预结算
5.结算时,可选择支付方式,配送方式,可以进行修改,生成对应的商单。
注:用户还需要进行登录才可进行放入购物车操作,不然只能进行浏览商品操作
登录时需要账号、密码验证。
2.系统功能结构图
3.系统描述:一段用来描述系统功能与流程的文字,用红色字代表可能的对象(名词)或属性,用蓝色字代表可能的方法(动词)。
4.类设计说明
5.面向对象的封装性
在商品porduct部分,与商品相关的名称、价格、编号等属性均使用private关键字进行修饰,外部类要使用时,仅能通过getter方法与setter方法进行访问。
对此进行封装后,避免了商品信息由于用户的操作而发生变化。
6.项目包结构与关键代码
受当前水平限制,目前将所有的类均放置在shoppingCart包中,后期将分离出Product包、User包,即面对三个对象的不同包共同进行。
6.1 菜单类代码
package shoppingCart;
import java.util.Scanner;
public class Menu {
public static void showMenu() {
Scanner sc = new Scanner(System.in);
Scanner pause = new Scanner(System.in);
while (true) {
//菜单
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("**(0)退出购物系统");
System.out.println("您的选择是:");
int choose = sc.nextInt();
switch (choose) {
case 1:// 展示商品
Cart.showProduct();
System.out.println("<输入任意数字,按回车返回主界面>");
String Pause = pause.next();
break;
case 2:// 商品查询
System.out.println("请输入商品名称:");
String name = sc.next();
Cart.searchProduct(name);
System.out.println("<输入任意数字,按回车返回主界面>");
Pause = pause.next();
break;
case 3:// 查看购物车
Cart.showCart();
System.out.println("<输入任意数字,按回车返回主界面>");
Pause = pause.next();
break;
case 4:// 添加商品
Cart.addProduct();
System.out.println("<输入任意数字,按回车返回主界面>");
Pause = pause.next();
break;
case 5:// 删除商品
Cart.deleteProduct();
System.out.println("<输入任意数字,按回车返回主界面>");
Pause = pause.next();
break;
case 6:// 清空购物车
Cart.cleanCart();
System.out.println("<购物车已清空>");
System.out.println("<输入任意数字,按回车返回主界面>");
Pause = pause.next();
break;
case 0:// 退出
break;
default :
System.out.println("输入错误,拜拜了您咧");
break;
}
if (choose == 0)
break;
}
//结束菜单
System.out.println("***===================================***");
System.out.println("***欢迎您的下次光临 集美购物竭诚为您服务***");
System.out.println("***===================================***");
}
}
6.2 Cart购物车类
package shoppingCart;
import java.util.Scanner;
//对购物车的商品的增加、删除,整个购物车内容的清空
//这部分内容需要和item和product中的内容联动来看,item的内容炸了,后期放过去
public class Cart {
private static int[] number = new int[100];
// 记录商品的数量,数组编号就是对应商品id
// number[i]=3,即购物车中id=i的商品有3个
public static int[] getNumber() {
return number;
}
public static void setNumber(int[] number) {
Cart.number = number;
}
/**
* 1.显示数据库中的所有商品
*/
public static void showProduct() {
System.out.println("ID 商品名 价格"); //展示商品数据库
for (int i = 0; i < Product.getNumber(); i++) {
System.out.println(Product.getId()[i] + " " + Product.getName()[i] + " " + Product.getPrice()[i]);
}
}
/**
* 2.搜索商品功能
*/
public static int searchProduct(String Name) { //搜索商品
Scanner sc = new Scanner(System.in);
for (int i = 0; i < Product.getNumber(); i++) {
if (Name.equals(Product.getName()[i])) { //比较输入的值是否有对应的商品序号
System.out.println("查询结果:");
System.out.println("编号 商品名 价格");
System.out.println(Product.getId()[i] + " " + Product.getName()[i] + " " + Product.getPrice()[i]);
//判断是否存在此商品
int flag=0;//没有此商品
for(int j=0;j<Product.getNumber();j++)
if (Cart.getNumber()[j] != 0)//id为i的商品数量为0,代表购物车没有此商品
flag=1;
if(flag==0)
{
System.out.println("购物车没有此商品!");
System.out.print("是否将该商品添加到购物车(1/0)");
}
else
{
System.out.println("购物车已有此商品");
System.out.print("是否还要将该商品添加到购物车(1/0)");
}
int chioce = sc.nextInt();
if (chioce == 1) {
System.out.println("请输入您需要添加的商品的数量:");
int addNumber = sc.nextInt();
for (int j = 0; j < Product.getNumber(); j++) {
if (j == Product.getId()[i]) {//循环遍历商品ID,找到后累加数量
number[j] += addNumber; //number添加的数值就是添加在购物车中的值,可重新叠加购买
System.out.println("已加入购物车!");// 在购物车单中添加商品
}
}
}
return 1;
}
}
//循环结束都没有找到,说明数据库不存在此商品
System.out.println("查询结果:");
System.out.println("未搜索到此商品");
return 0;
}
/**
* 3.展示购物车
*/
public static void showCart() {// 显示购物车中的商品
double countCartPay = 0;
System.out.println("*******购物车全部商品*******");
System.out.println("商品ID" + " " + "商品名" + " " + "商品单价" + " " + "购买数量"+" " + "该商品总金额");
for (int i = 0; i < Product.getNumber(); i++) {
if (Cart.getNumber()[i] != 0) {
System.out.println(Product.getId()[i] + " " + Product.getName()[i] + " " + Product.getPrice()[i]
+ " " + Cart.getNumber()[i] +" "+Product.getPrice()[i]*Cart.getNumber()[i]);
}
countCartPay = countCartPay + (Cart.getNumber()[i] * Product.getPrice()[i]);//商品数量x商品单价,总和即为最终价钱
}
System.out.println();
System.out.println("您的当前购物车账单为: " + String.format("%.2f", countCartPay));//借用format,进行常规类型格式化
}
/**
* 4.实现添加商品功能
*/
public static void addProduct() { // 添加商品
showProduct();//展示商品数据库
Scanner sc = new Scanner(System.in);
System.out.println("请输入您需要添加的商品的对应ID:");
int addId = sc.nextInt();
//判断购物车是否存在此商品
int flag=0;//没有此商品
for(int i=0;i<Product.getNumber();i++)
if (Cart.getNumber()[i] != 0)//id为i的商品数量为0,代表购物车没有此商品
flag=1;
if(flag==0)
{
System.out.println("购物车没有此商品!");
}
else
{
System.out.println("购物车已有此商品");
}
System.out.println("请输入您需要添加的商品的数量:");
int addNumber = sc.nextInt();
for (int i = 0; i < Product.getNumber(); i++) {
if (i == addId) {
number[i] += addNumber; //number添加的数值就是添加在购物车中的值,可重新叠加购买
System.out.println("已加入购物车!");// 在购物车单中添加商品
}
}
}
/**
* 5.实现删除商品功能
*/
public static void deleteProduct() {//删除购物车商品
showCart();
System.out.println();
Scanner sc = new Scanner(System.in);
System.out.println("请输入您需要删除的商品的对应ID:");
int deleteId = sc.nextInt();
//判断是否存在此商品
int flag=0;//没有此商品
if (Cart.getNumber()[deleteId] != 0)//id为i的商品数量为0,代表购物车没有此商品
flag=1;
if(flag==0)
{
System.out.println("购物车没有此商品!");
}
else
{
System.out.println("请输入您需要减少的商品的数量:");
int deleteNumber = sc.nextInt();
for (int i = 0; i < Product.getNumber(); i++) {
if (i == deleteId) {//找到对应的商品
number[i] = number[i] - deleteNumber;//删除对应数量的商品
if (number[i] < 0)
number[i] = 0;// 商品数量不能小于0
}
}
System.out.println("已删除!");// 在购物车单中删除商品
}
}
/**
* 6.清空购物车
*/
public static void cleanCart() {// 清空购物车商品
// 令每一个商品的对应number均为0
for (int i = 0; i < Product.getNumber(); i++) {
number[i] = 0;// 商品数量不能小于0,使数量为0;
}
}
}
6.3 商品product类
package shoppingCart;
import java.util.Scanner;
public class Product { //用户搜索商品时
private static String[] name = new String[200] ;//商品名称
private static double[] price = new double [50];//商品价格
private static int number = 8;//展示商品数量
private static int[] id =new int [100];//商品编号
private String introduction;//商品介绍
public static String[] getName() {
return name;
}
public static void setName(String[] name) {
Product.name = name;
}
public static double[] getPrice() {
return price;
}
public static void setPrice(double[] price) {
Product.price = price;
}
public static int getNumber() {
return number;
}
public static void setNumber(int number) {
Product.number = number;
}
public static int[] getId() {
return id;
}
public static void setId(int[] id) {
Product.id = id;
}
public String getIntroduction() {
return introduction;
}
public void setIntroduction(String introduction) {
this.introduction = introduction;
}
public static void product() { //商品库里的商品全部内容的存放
for(int i=0;i<9;i++) {
Product.id[i]=i;
}
name[0] = "vivo X60 ";
price[0] = 2988.0;
name[1] = "唐诗三百首全集";
price[1] = 9.90;
name[2] = "宿有千香大闸蟹";
price[2] = 320.0;
name[3] = "惠威蓝牙音箱";
price[3] = 599.0;
name[4] = "山海经典藏版";
price[4] = 53.1;
name[5] = "中国电信流量卡";
price[5] = 9.6;
name[6] = "361炫酷跑鞋";
price[6] = 107.99;
name[7] = "小天才电话手表";
price[7] = 388.88;
}
}
6.4 用户User类
package shoppingCart;
public class User {
private String uid;//用户编号
private String name;//用户名
private String loginPwd;//登陆密码
private String addr;//收货地址
private String mobile;//电话号码
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLoginPwd() {
return loginPwd;
}
public void setLoginPwd(String loginPwd) {
this.loginPwd = loginPwd;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getUid() {
return uid;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
6.5 Item类
package shoppingCart;
public class Item { //用户放入购物车的一个商品的情况
private Product product; //放入商品
private int id;//放入商品的依次编号
private int quantity=1;//放入的商品数量,默认最低值为1
private Double totalMoney;//该商品总金额
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}