小组成员
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127093630975-1581248273.png)
小组分工:
任务 |
姓名 |
前期调查和编码规范 |
徐雨欣 |
功能设计 |
林浈,罗咚琳 |
面向对象设计与UML制作 |
林浈,罗咚琳 |
PPT制作、演示 |
赵禹琛 |
前期调查:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201118165916369-143265200.png)
系统功能结构图:
流程图:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127015110834-2015589504.png)
UML类图:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127132706635-979041353.png)
运行结果:
1.按类别查找商品:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127013608003-2008686624.png)
2.显示商城中所有商品:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127013637559-571866779.png)
3.将选定的商品加入购物车:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127013722988-308620941.png)
4.增加购物车中指定商品的数目:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127013809499-1203308037.png)
5.减少购物车中指定商品的数目:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127013838809-1290790061.png)
6.移除商品
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127013904558-1300163838.png)
7.结算页面:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127013922064-417668658.png)
关键代码:
1.商品类:定义商品属性
/**
* 商品类
*/
public class Commodity {
private Integer id;//商品编号
private String name;//商品名称
private Double price;//商品价格
private String description;//商品类别
public Commodity() {
}
public Commodity(Integer id, String name,Double price,String description) {
this.id = id;
this.name = name;
this.price = price;
this.description=description;
}
public Integer 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 Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) { //只比较id,id相同则说明两个商品相同
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Commodity other = (Commodity) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Commodity [id=" + id + ", name=" + name + ", price=" + price + ", description=" + description + "]";
}
}
2.DAO接口:
MallDAO商城接口:
package shopping;
import java.util.Scanner;
public interface MallDao {
public void addMall(Commodity e);
public void showCommodityKinds(int choice);
public void showCommodity();
public Commodity findById(Integer id);
}
CartDAO购物车接口:
package shopping;
import java.util.Scanner;
public interface CartDao {
public void inputCommodity(CartDao shoppingCart, MallDao shoppingMall);
public boolean increaseAmount();
public boolean decreaseAmount();
public boolean remove();
public void diplayAll();
public double checkout();
}
3.MallDaoImpl商城类
对商城卖家进行进行商品的添加,查找商品以及展示货品。
/**
* 商城类
*/
public class MallDaoImpl implements MallDao {
private List<Commodity> MallList = new ArrayList<>();
public void addMall(Commodity e){
//添加商品至商城
if (e == null){
return ;
}
MallList.add(e);//加入商品到商城
}
public void showCommodityKinds(int choice) {
// 按类展示货架上的商品
switch(choice) {
case 1:
System.out.println("Food:");
for(Commodity x:MallList) {
if(x.getDescription()=="Food")
System.out.println(x);
}
break;
case 2:
System.out.println("Cosmetics:");
for(Commodity x:MallList) {
if(x.getDescription()=="Cosmetics")
System.out.println(x);
}
break;
case 3:
System.out.println("Dayarticles:");
for(Commodity x:MallList) {
if(x.getDescription()=="Dayarticles")
System.out.println(x);
break;
}
}
}
public void showCommodity() {
// 展示货架上所有的商品
for(Commodity x:MallList) {
System.out.println(x);
}
}
public Commodity findById(Integer id){
//查找在该商场中是否存在该商品
if(id<1||id>MallList.size())
{
System.out.println("商城中不存在该商品");
return null;
}
return MallList.get(id-1);
}
}
4.CartDaoImpl购物车类
对购物车内的商品进行增加,减少,移除,结算等操作,还可以展示购物车
/**
* 购物车类
*/
public class CartDaoImpl implements CartDao {
private List<ItemEntry> itemList=new ArrayList<>();
public CartDaoImpl(){
}
public void inputCommodity(CartDao shoppingCart, MallDao shoppingMall) {
//从商城中向购物车添加商品
Scanner sc = new Scanner(System.in);
Commodity e=new Commodity();
System.out.println("请输入你想要购买的商品编号的编号:");
int id = sc.nextInt();
e=shoppingMall.findById(id);
if (e == null)
{
return ;
}
int index = findById(e.getId());
System.out.print("请输入您所要购买的该商品的数目:");
Integer n=sc.nextInt();
if (index == -1)//如果购物车不包含该商品,添加
{
itemList.add(new ItemEntry(e,n));
}
else//否则,增加该商品数量
{
itemList.get(index).increase(n);
}
}
public boolean increaseAmount(){
//增加购物车原有商品数量
Scanner sc=new Scanner(System.in);
int id;
System.out.println("请输入你要增加的商品编号:");
id=sc.nextInt();
if (id<1||id>8)
{
return false;
}
int index = findById(id);
if (index == -1)//如果购物车不包含该商品,输入错误
{
return false;
}
else//否则,增加该商品在购物车中的数量
{
System.out.print("请输入您所要增加的该商品的数目:");
Integer n=sc.nextInt();
itemList.get(index).increase(n);
}
return true;
}
public boolean decreaseAmount(){
//从购物车减少商品数目
Scanner sc=new Scanner(System.in);
int id;
System.out.println("请输入你要减少的商品编号:");
id=sc.nextInt();
int index = findById(id);
if (index == -1)//未找到该商品编号
{
return false;
}
else//购物车存在该商品
{
ItemEntry entry = itemList.get(index);
if (entry.getAmount() <= 1)//若相关商品条目数量amount<=0,删除条目
{
itemList.remove(index);
}
else
{
System.out.print("请输入您所要减少的该商品的数目:");
Integer n=sc.nextInt();
entry.decrease(n);
}
}
return true;
}
public boolean remove(){
//从购物车移除商品相关条目
Scanner sc=new Scanner(System.in);
int id;
System.out.println("请输入你要移除的商品编号:");
id=sc.nextInt();
int index = findById(id);
if (index == -1)//未找到该商品编号
{
return false;
}
else//购物车存在该商品
{
itemList.remove(index);
}
return true;
}
public void diplayAll(){
//展示购物车
for (ItemEntry itemEntry : itemList)
{
System.out.println(itemEntry);
}
}
public double checkout() {
//结算金额
double x = 0;
for (ItemEntry item : itemList) {
x = x + item.getItem().getPrice() * item.getAmount();// 价格*数量
}
return x;
}
private int findById(int id){
//通过id在购物车中查找是否已存在相关条目。
for (int i = 0; i < itemList.size(); i++) {
if (itemList.get(i).getItem().getId().equals(id))
return i;
}
return -1;
}
/*
* 内部类:购物车商品条目类
*/
private class ItemEntry{
Commodity item;//商品
Integer amount;//商品数量
public ItemEntry(Commodity item,Integer amount) {
this.item = item;
this.amount = amount;
}
//数量增加
public void increase(Integer n){
amount+=n;
}
//商品数量减少
public void decrease(Integer n){
amount-=n;
}
public Commodity getItem() {
return item;
}
public Integer getAmount() {
return amount;
}
@Override
public String toString() {
return "ItemEntry [item=" + item + ", amount=" + amount + "]";
}
}
}
5.菜单类
商城主页面引导买家进行购物
/**
* 菜单类
*/
public class Menu {
public static void showMainFunction() {
System.out.println("①商品购买(加入购物车)");
System.out.println("②进入购物车");
System.out.println("③退出商城");
}
public static void showCartFunction() {
System.out.println("①增加购物车中指定商品的数目");
System.out.println("②减少购物车中指定商品的数目");
System.out.println("③移除商品");
System.out.println("④结算");
System.out.println("⑤退出购物车");
}
public static void showSearchFunction() {
System.out.println("①按类别查找商城内的物品");
System.out.println("②浏览商城中的所有物品");
System.out.println("③退出查找");
}
public static void showCommodityKinds() {
System.out.println("商城中含有以下类别的商品,请输入相应的序号进行查找");
System.out.println("1-Food");
System.out.println("2-Cosmetics");
System.out.println("3-Dayarticles");
}
}
GUI购物车登录界面:
登录界面
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201120003158729-2001334166.png)
点击注册跳转到注册界面:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201120003248219-485404732.png)
点击确定自动跳转到登录界面:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201120003315329-651845195.png)
商城购物车界面:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127022726223-2021901720.png)
按加入购物车按钮将商品加入购物车,数量可改变:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127022815369-990994087.png)
删除购物车中所选中的商品:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127022842078-1757748158.png)
清空购物车:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127022907818-70097030.png)
结算订单界面;
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127022932909-734430878.png)
确认购买后直接退出商城,取消订单可回到商城界面:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201127022958198-951335538.png)
GUI关键代码:
登录界面登录按钮代码:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201120003440129-1528300282.png)
文件处理登录用户名密码代码:
![](https://img2020.cnblogs.com/blog/1776748/202011/1776748-20201120003458974-1753746112.png)
商城购物车功能代码:
//商城表格按行读取
private void MallTableMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
int row=MallTable.getSelectedRow();
idTextField.setText(MallTable.getValueAt(row, 0).toString());
countTextField.setText("1");
nameTextField.setText(MallTable.getValueAt(row, 1).toString());
priceTextField.setText(MallTable.getValueAt(row, 2).toString());
countTextField.setEditable(true);//数量可写入
}
//添加商品到购物车
private void addCommodityButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
DefaultTableModel model=(DefaultTableModel)CartTable.getModel();
Vector v=new Vector();
int row=MallTable.getSelectedRow();
v.add(0,idTextField.getText());
v.add(1,nameTextField.getText());
v.add(2,countTextField.getText());
v.add(3,Double.valueOf(priceTextField.getText()));
Double totalPrice=(Double.valueOf(countTextField.getText())*Double.valueOf(priceTextField.getText()));
v.add(4,totalPrice);
model.addRow(v);
//总价修改
Double total=0.00;
for (int i = 0; i < CartTable.getRowCount(); i++) {
total+=Double.valueOf(CartTable.getValueAt(i, 4).toString());
}
totalPriceTextField.setText(String.valueOf(total));
}
//删除购物车中选中的商品
private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
DefaultTableModel model=(DefaultTableModel)CartTable.getModel();
int row=CartTable.getSelectedRow();
model.removeRow(row);
//总价修改
Double total=0.00;
for (int i = 0; i < CartTable.getRowCount(); i++) {
total+=Double.valueOf(CartTable.getValueAt(i, 4).toString());
}
totalPriceTextField.setText(String.valueOf(total));
}