Java面向对象课程设计——购物车
1.人员分工
任务 | 姓名 |
---|---|
编码规范、前期调查与功能设计 | 郑署滨 |
面向对象设计、博客制作 | 涂睿哲 |
2.前期调查
1.先通过搜索商品来进行对商品的浏览
2.点进去商品可以看到商品的价格和具体内容
3.将所要购买的商品加入购物车后可以看到每个商品的价格和总的价格
4.也可以在购物车中讲商品进行删除
3.系统描述:
登录京东,然后在搜索栏中输入商品名称,搜索后可以看见商品的编号,名称,价格,然后将心仪的一定数量的商品添加至购物车,在购物车中可见看见所展示的商品,可以对一定数量的商品进行删除或者清空购物车,最后得出商品的总价后结账
4.系统功能结构图
5.UML类图
6.本系统哪里体现了面向对象的封装性
例如,Commodity.java中:
public class Commodity {
private Integer id;
private String name;
private String details;
private int unitprice;
private String type;
public Commodity(Integer id,String name,String details,int unitprice,String type)
{
this.id=id;
this.name=name;
this.details=details;
this.unitprice=unitprice;
this.type=type;
}//商品的基本信息
@Override
public String toString() {
return "Commodity [id=" + id + ", name=" + name + ", details=" + details + ", unitprice=" + unitprice + ", type="
+ type + "]";
}
public int getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getUnitprice() {
return unitprice;
}
public void setUnitprice(int unitprice) {
this.unitprice = unitprice;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
- pubilc、private体现了面向对象的封装性:
- 展示商品,通过分类找商品,通过id找商品,把物品添加到购物车,存储商品信息,购物车商品删除以及修改都可以体现面向对象的封装性
7.项目包结构与关键代码:
1.ShoppingMall
package ShoopingCar;
import java.util.ArrayList;
import java.util.List;
public class ShoppingMall {
List<Commodity> commodities=new ArrayList<>();
{
commodities.add(new Commodity(0,"羽毛球拍","5UG5,速度型",688,"sport"));
commodities.add(new Commodity(1,"香梨","清甜可口",25,"fruit"));
commodities.add(new Commodity(2,"剃须刀","(PHILIPS)飞利浦,三面刀头",188,"electrical"));
commodities.add(new Commodity(3,"手表","运动型机械手表,防水",488,"watch"));
commodities.add(new Commodity(4,"老干妈","辣子鸡味,好吃好吃",10,"flavouring"));
}
public List<Commodity> showCommodities(){
return this.commodities;
}
public Commodity searchById(Integer id) {
int i=0;
int flag=1;
for(i=0;i<commodities.size();i++) {
if(commodities.get(i).getId()==(id)) {
return commodities.get(i);
}
}
if(flag==1)
System.out.println("抱歉,没有找到搜索的商品");
return null;
}//按id搜索商品
public List<Commodity> searchByType(String type) {
int i=0;
List<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;
}
}
- 功能:
- 展示商城的所有商品
- 通过商品的分类寻找商品;否则无法输出
- 输入商品的id,将该类商品招出并输出;id不存在则无法输出
2.Commodity
package ShoopingCar;
public class Commodity {
private Integer id;
private String name;
private String details;
private int unitprice;
private String type;
public Commodity(Integer id,String name,String details,int unitprice,String type)
{
this.id=id;
this.name=name;
this.details=details;
this.unitprice=unitprice;
this.type=type;
}//商品的基本信息
@Override
public String toString() {
return "Commodity [id=" + id + ", name=" + name + ", details=" + details + ", unitprice=" + unitprice + ", type="
+ type + "]";
}
public int getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getUnitprice() {
return unitprice;
}
public void setUnitprice(int unitprice) {
this.unitprice = unitprice;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
- 功能
- 储存所有商品的信息:商品名称,编号,商品价格,种类
3.ShoppingCart
package ShoopingCar;
import java.util.ArrayList;
import java.util.List;
public class ShoppingCart {
private List<ItemEntry> itemList = new ArrayList<>();
public void addToCart(Commodity e) {
int index = findById(e.getId());
if (index == -1) {
itemList.add(new ItemEntry(e));
} else {
itemList.get(index).increase();
}
}
public List<ItemEntry> getItemList() {
return itemList;
}
public List<ItemEntry> emptyCart(){
itemList.clear();
return itemList;
}
public List<ItemEntry> seeMyCart() {
return itemList;
}
public boolean remove(Integer id) {
if (id == null)
return false;
int index = findById(id);
if (index == -1) {// 未找到
return false;
} else {
ItemEntry entry = this.itemList.get(index);
if (entry.getPiece() <= 1) {
this.itemList.remove(index);
}
}
return true;
}
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;
}
}
4.ShoppingCart的内部类ItemEntry
package ShoopingCar;
public class ItemEntry {
Commodity item;
int piece;
public ItemEntry(Commodity item) {
this.item = item;
piece = 1;
}
public void increase() {
piece++;
}
public Commodity getItem() {
return item;
}
public void setItem(Commodity item) {
this.item = item;
}
public int getPiece() {
return piece;
}
public void setPiece(int piece) {
this.piece = piece;
}
public void decrease() {
piece--;
}
public String toString() {
return "ItemEntry [item=" + item + ", piece=" + piece + "]";
}
}
- 功能
- 将商品添加到购物车
- 查看购物车现有的商品
- 清空购物车
- 移除商品
- 内置类ItemEntry
- 储存购物车的商品和商品数量
- 将新加入的商品数量定为1
- 操作商品数量
- 输出商品信息
5.Menu
package ShoppingCar;
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)商品查询(id)");
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(" **************************************");
}
}
6.Main
package ShoppingCar;
import java.util.List;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner c = new Scanner(System.in);
Scanner pause = new Scanner(System.in);
ShoppingMall test = new ShoppingMall();
ShoppingCart test1 = new ShoppingCart();
List<Commodity> list = test.showCommodities();
while(true) {
Menu.beginMenu();
System.out.println("请输入你的功能选择");
int choose = c.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 name = c.next();
System.out.println(test.searchByType(name));
System.out.println("输入任意数字,按回车返回主界面");
Pause = pause.next();
break;
case 3://按id查询商品
System.out.println("请输入你要查询的id");
System.out.println(test.searchById(c.nextInt()));
System.out.println("输入任意数字,按回车返回主界面");
Pause = pause.next();
break;
case 4://添加商品到购物车
System.out.println("请输入你要添加的商品的id,如果输入-1则结束添加商品");
while(true) {
int flag = c.nextInt();
if(flag==-1) {
System.out.println("输入任意数字,按回车返回主界面");
Pause = pause.next();
break;
}
else {
test1.addToCart(list.get(flag));
}
}
break;
case 5://减少购物车商品的数量
System.out.println("请输入你要减少的商品的id");
test1.remove(c.nextInt());
System.out.println("输入任意数字,按回车返回主界面");
Pause = pause.next();
break;
case 6://查看购物车
List<ItemEntry> list1 = test1.seeMyCart();
for (ItemEntry temp1 : list1) {
System.out.println(temp1);
}
System.out.println("输入任意数字,按回车返回主界面");
Pause = pause.next();
break;
case 7://清空购物车
test1.emptyCart();
System.out.println("输入任意数字,按回车返回主界面");
Pause = pause.next();
break;
case 8://购物车预结算
List<ItemEntry> list2 = test1.seeMyCart();
list2.get(0).getItem().getUnitprice();
int temp=0;
for (ItemEntry temp1 : list2) {
temp=temp1.getPiece()*temp1.getItem().getUnitprice()+temp;
}
System.out.println("总价为:"+temp);
System.out.println("输入任意数字,按回车返回主界面");
Pause = pause.next();
break;
}
}
}
}