Java课程设计之 购物车管理系统

该程序是一个基于Java的控制台购物车管理应用,包括商品管理和购物车管理功能。它使用面向对象编程,涉及类如Goods、GoodsManage和ShoppingCart,支持商品信息导入、显示、添加到购物车、修改数量、结算等操作。代码结构清晰,遵循编码规范并包含异常处理,确保程序稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目作业:开发一个控制台版的“购物车管理”程序。

任务描述

一、项目准备

1、开发工具:JDK、Eclipse

2、需求分析:

包括商品管理和购物车管理。

1)商品管理主要功能

  • 商品信息导入

  • 显示所有商品信息

2)购物车主要功能

  • 添加商品到购物车

  • 修改购物车中的商品数量

  • 显示购物车中的所有商品信息

  • 结算

3、效果运行图

4、详细设计

包括如下类的设计:

  • 商品类(Goods)

  • 商品管理类(GoodsManage)

  • 购物车中的商品信息类(GoodsInCart)

  • 购物车类(ShoppingCart)

  • 测试类 (TestDemo)

下面分别对各个类进行介绍:

1)商品类(Goods),包括如下属性和方法

方法:

-构造方法

-getter和setter方法

-hashCode()和equals()方法

-toString()方法

2)商品管理类(GoodsManage)

属性:存放商品的容器(goodsSet):Set类型

方法:

-构造方法

-getter和setter方法

-商品信息导入:public void importGoods();

-显示所有商品信息:public void displayAllGoods();

3)购物车中的商品信息类(GoodsInCart)

属性:

- 商品信息(goods):Goods类型

 -  商品数量(num):int类型

方法:

-构造方法

-getter和setter方法

4)购物车类(ShoppingCart)

属性:

- 购物车(shoppingCart):Map类型,其中key为String类型,value为GoodsInCart类型

方法:

-添加商品到购物车:

   public void addGoodsToCart(GoodsManage gm);

-修改购物车中的商品数量:public void updateNumInCart();如果购物车中没有商品,需要给出提示信息

 - 显示购物车中的所有商品:public void displayAllInCart();如果购物车中没有商品,需要给出提示信息

 - 结算:public void settleAccounts();结算后购物车要清空。

 - 构造方法及getter和setter方法

5)测试类(TestDemo)

 - 根据需求设计完成主流程实现

二、整体要求:

1、完成需求分析和详细设计中所涉及到的所有功能。

2、代码结构要层次分明,代码编辑思路要清晰、整洁。

3、要求Java代码书写、命名符合规范,并在代码中添加必要的注释

4、程序运行效果与提供的页面效果图、结构保持一致

5、将作业项目导出(Export)成压缩文件

评分标准是什么?

规范【10分】   

  • 每个类都封装在自己独立的 ".java"文件中;

  • 文件、class、成员变量命名规范;                   

  • 代码结构要层次分明;  

  • Java代码规范及添加适量注释。

程序整体运行效果【10分】

  • 程序可以正常运行,无编译和运行错误

  • 程序执行结果的布局结构满足效果图要求

  • 程序显示的内容满足效果图要求

商品类【9分】

  • 正确设置属性描述商品编号、名称、价格和描述

  • 正确完成构造方法

  • 正确完成getter和setter方法

  • 正确完成hashCode和equals方法

  • 正确完成toString方法

商品管理类【14分】

  • 正确设置属性存放商品的容器

  • 正确完成构造方法

  • 正确完成getter和setter方法

  • 正确完成商品信息导入方法

  • 正确完成显示所有商品信息方法

购物车中的商品信息类【4分】

  • 正确设置属性描述商品信息和商品数量

  • 正确完成构造方法方法

  • 正确完成getter和setter方法

购物车类【29分】

  • 正确设置属性描述存放购物车的集合

  • 正确完成构造方法

  • 正确完成getter和setter方法

  • 正确完成添加商品到购物车的方法

  • 正确完成修改购物车中商品数量的方法

  • 正确完成显示购物车中所有商品的方法

测试类【24分】

  • 正确编写主菜单、商品管理和购物车管理的菜单方法

  • 正确编写主业务逻辑的方法,如果输入错误数字,要给出提示信息2

  • Goods类:

    package 购物车课程设计;
    public class Goods {
        private String goodsId;
        private String name;
        private double price;
        private String description;
    
        public Goods(String goodsId, String name, double price, String description) {
            this.goodsId = goodsId;
            this.name = name;
            this.price = price;
            this.description = description;
        }
    
        @Override
    	public String toString() {
    		return  goodsId +","+name + "," + price + "," + description;
    	}
    
    	public String getGoodsId() {
            return goodsId;
        }
    
        public void setGoodsId(String goodsId) {
            this.goodsId = goodsId;
        }
    
        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 + ((goodsId == null) ? 0 : goodsId.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Goods other = (Goods) obj;
            if (goodsId == null) {
                if (other.goodsId != null)
                    return false;
            } else if (!goodsId.equals(other.goodsId))
                return false;
            return true;
        }
    }
    

    GoodsManage类:

  • package 购物车课程设计;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    public class GoodsManage {
        private Map<String, Goods> goodsMap; // 用Map来存储商品对象,方便查找
    
        public GoodsManage() {
            goodsMap = new HashMap<>();
        }
        public void addGoods(Goods goods) {
            goodsMap.put(goods.getGoodsId(), goods);
        }
        public void removeGoods(String goodsId)
        {
        	 Goods removegoods= goodsMap.remove(goodsId);
        	 if (removegoods == null) {
        		    System.out.println("删除失败,该商品不存在");
        		} else {
        			System.out.println("已成功将"+removegoods.getName()+"删除");
        		}
        }
        public void displayAllGoods() {
            if (goodsMap.isEmpty()) {
                System.out.println("当前没有商品信息!");
            } else {
            	System.out.println("商品编号\t商品名\t商品价格\t商品描述\t");
                for (Goods goods : goodsMap.values()) {
                    System.out.println(goods.getGoodsId() + "\t" + goods.getName() + "\t" + goods.getPrice() + "\t" + goods.getDescription());
                }
            }
        }
        public Goods findGoods(String goodsId) {
        	if (goodsMap.containsKey(goodsId)) {
        	    System.out.println("查找成功");
        	    return goodsMap.get(goodsId);
        	} else {
        	    System.out.println("未找到商品编号为:"+goodsId+"的商品信息");
        	    return null;
        	}
        }
        
        public ArrayList<Goods> findGoodsByName(String goodsName) {
            ArrayList<Goods> goodsList = new ArrayList<>();
    
            if (goodsMap.isEmpty()) {
                System.out.println("当前没有商品信息!");
            } else {
                for (Goods goods : goodsMap.values()) {
                    if (goods.getName().contains(goodsName)) { 
                        goodsList.add(goods);
                    }
                }
    
                if (goodsList.isEmpty()) {
                    System.out.println("未找到名称包含 \"" + goodsName + "\" 的商品信息");
                } else {
                    System.out.printf("名称包含 \"%s\" 的商品有 %d 个:\n", goodsName, goodsList.size());
                    System.out.printf("商品编号:\t商品名:\t\t价格:\t\t商品信息:\t\n");
                    for (Goods goods : goodsList) {
                        System.out.printf("%-10s\t%-20s\t%-10.2f\t%-50s\n", goods.getGoodsId(), goods.getName(),
                                goods.getPrice(), goods.getDescription());
                    }
                }
            }
            return goodsList;
        }
        public void alterGoods(String alterGoodsId, Goods goods) {
            if (findGoods(alterGoodsId) == null) {  
                System.out.println("商品不存在!");
            } else {
                goodsMap.put(alterGoodsId, goods);  
                System.out.println("修改成功!");
            }
        }
    
    //    public ArrayList<Goods> findGoodsByPrice(double minPrice, double maxPrice) {
    //        ArrayList<Goods> goodsList = new ArrayList<>();
    //
    //        if (goodsMap.isEmpty()) {
    //            System.out.println("当前没有商品信息!");
    //        } else {
    //            for (Goods goods : goodsMap.values()) {
    //                if (goods.getPrice() >= minPrice && goods.getPrice() <= maxPrice) { 
    //                    goodsList.add(goods);
    //                }
    //            }
    //
    //            if (goodsList.isEmpty()) {
    //             
    //         }
    //        }
    //
    //        return goodsList;
    //    }
    }
    

    TestDemo类(测试类)

  • package 购物车课程设计;
    
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class TestDemo {
    	public static void Presentation() {
    		 Goods g1 = new Goods("001", "笔记本", 5499.0, "ThinkPad X1 Carbon");
    		    Goods g2 = new Goods("002", "手机", 3999.0, "小米10 Pro");
    		    Goods g3 = new Goods("003", "耳机", 1399.0, "Bose QuietComfort 35 II");
    		    try {
    		        FileWriter writer = new FileWriter("E://goods.txt");
    		        writer.write(g1.toString() + "\n");
    		        writer.write(g2.toString() + "\n");
    		        writer.write(g3.toString() + "\n");
    		        
    		        writer.close();
    		    } catch (IOException e) {
    		        e.printStackTrace();
    		        System.out.println("警告!文件写入异常!");
    		    }
    	}
        public static void main(String[] args) {
        	ShoppingSystem shoppingSystem=new ShoppingSystem();
        	Presentation();   //仅作为演示使用   For presentation only!
        	shoppingSystem.InitialSystem();
            shoppingSystem.DisplayofMainMenu();
            }
        }
    
    

    system类:

  • package 购物车课程设计;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Scanner;
    public class ShoppingSystem {
    	Scanner scanner=new Scanner(System.in);
        ShoppingCart sc = new ShoppingCart();
        GoodsManage gm = new GoodsManage();
    public void InitialSystem() {
    	try {
            
            FileReader reader = new FileReader("E://goods.txt");
            BufferedReader bufferedReader = new BufferedReader(reader);
    
            String line;
            while ((line = bufferedReader.readLine()) != null) {
               
                String[] values = line.split(",");
                Goods goods = new Goods(values[0], values[1], Double.parseDouble(values[2]), values[3]);
                gm.addGoods(goods);
            }
    
            bufferedReader.close();
            reader.close();
    
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件读取异常!请检查后重试!");
        }
       
    }
    public void writeIn() {
    	
    }
     public void DisplayofMainMenu() {
    	 while (true) {
         	System.out.println("***************************************");
         	System.out.println("请输入对应的数字进行操作:");
         	System.out.println("         ***主菜单***");
             System.out.println("         1. 商品管理\n         2. 购物车\n         0. 退出");
             System.out.println("***************************************");
             int choice = scanner.nextInt();
             switch (choice) {
    			case 1:
    				DisplayofGoodsMenu();
    				break;
    			case 2:
    				DisplayofCartMenu();
    				break;
    			case 0:
    				System.out.println("感谢您的使用!再见!");
    				return;
    			default:
    				System.out.println("您的输入有误,请重新输入");
    				break;
    			}
    	 }
      }
     public void DisplayofGoodsMenu() {
    	 while (true) {
    	     	System.out.println("***************************************");
    	     	System.out.println("请输入对应的数字进行操作:");
    	     	System.out.println("         ***商品管理***");
    	         System.out.println("         1. 商品信息导入\n         2. 显示所有商品信息\n         3.删除指定商品信息\n         4.修改指定商品信息\n         5.查找商品信息(以编号为索引)\n         6.查找商品信息(以名字为索引)\n         0. 返回上一级菜单(主菜单)");
    	         System.out.println("***************************************");
    	         int choice = scanner.nextInt();
    	         switch (choice) {
    				case 1:
    					System.out.println("请输入商品编号:");
    					String goodsId = scanner.next();
    					System.out.println("请输入商品名:");
    					String goodsName = scanner.next();
    					System.out.println("请输入商品价格:");
    					double goodsPrice=scanner.nextDouble();
    					System.out.println("请输入商品描述:");
    					String goodsDescription=scanner.next();
    					Goods newlyadded=new Goods(goodsId, goodsName, goodsPrice, goodsDescription);
    					gm.addGoods(newlyadded);
    					break;
    				case 2:
    					gm.displayAllGoods();
    					break;
    				case 3:
    					System.out.println("请输入需要删除的商品编号:");
    					String deletedgoodsId= scanner.next();
    					gm.removeGoods(deletedgoodsId);
    					break;
    				case 6:
    					System.out.println("请输入需要查询的商品名:");
    					String foundgoodsName=scanner.next();
    					gm.findGoodsByName(foundgoodsName);
    					break;
    				case 5:
    					System.out.println("请输入需要查询的商品编号:");
    					String foundgoodsId=scanner.next();
    					gm.findGoods(foundgoodsId);
    					break;
    				case 4:
    					System.out.println("请输入需要查询的商品编号:");
    					String alString=scanner.next();
    					System.out.println("请输入需要修改的商品名");
    					goodsName=scanner.next();
    					System.out.println("请输入需要修改的商品价格");
    					goodsPrice=scanner.nextDouble();
    					System.out.println("请输入需要修改的商品信息");
    					goodsDescription=scanner.next();
    					Goods goods=new Goods(alString, goodsName, goodsPrice,goodsDescription);
    					gm.alterGoods(alString, goods);
    					break;
    				case 0:
    					DisplayofMainMenu();
    					break;
    				default:
    					System.out.println("您的输入有误,请重新输入");
    					break;
    				}
    		 }
      }
     public void DisplayofCartMenu() {
    	 while (true) {
    	     	System.out.println("***************************************");
    	     	System.out.println("请输入对应的数字进行操作:");
    	     	System.out.println("         ***购物车管理***");
    	         System.out.println("         1. 添加商品到购物车\n         2. 修改购物车中商品的数量\n         3.显示购物车中所有的商品信息\n         4.结算\n         0. 返回上一级菜单(主菜单)");
    	         System.out.println("***************************************");
    	         int choice = scanner.nextInt();
    	         switch (choice) {
    				case 1:
    					System.out.println("请输入商品编号:");
                        String goodsId = scanner.next();
                        System.out.println("请输入购买数量:");
                        int numToAdd = scanner.nextInt();
                        sc.addGoods(gm, goodsId, numToAdd);
    					break;
    				case 2:
    					System.out.println("请输入商品编号:");
                        String goodsIdToUpdate = scanner.next();
                        System.out.println("请输入修改后的数量:");
                        int numToUpdate = scanner.nextInt();
                        sc.updateNum(goodsIdToUpdate, numToUpdate);
    					break;
    				case 3:
    					sc.displayAll();
    					break;
    				case 4:
    					sc.settleAccounts();
    					break;
    				case 0:
    					DisplayofMainMenu();
    					break;
    				default:
    					System.out.println("您的输入有误,请重新输入");
    					break;
    				}
    		 }
     }
    }
    

    购物车类:

  • package 购物车课程设计;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.time.LocalDateTime;
    import java.util.HashMap;
    import java.util.Map;
    import java.net.InetAddress;
    public class ShoppingCart {
        private Map<String, GoodsInCart> goodsInCartMap; // 用Map来存储购物车中的商品信息
    
        public ShoppingCart() {
            goodsInCartMap = new HashMap<>();
        }
    
        public void addGoods(GoodsManage gm, String goodsId, int num) {
            Goods goods = gm.findGoods(goodsId);
            if (goods == null) {
                System.out.println("该商品不存在!");
            } else {
                GoodsInCart goodsInCart = goodsInCartMap.get(goodsId);
                if (goodsInCart == null) {
                    goodsInCartMap.put(goodsId, new GoodsInCart(goods, num));
                } else {
                    goodsInCart.setNum(goodsInCart.getNum() + num);
                }
                System.out.println("成功添加到购物车!");
            }
        }
    
        public void updateNum(String goodsId, int num) {
            GoodsInCart goodsInCart = goodsInCartMap.get(goodsId);
            if (goodsInCart == null) {
                System.out.println("该商品不存在购物车中!");
            } else {
                goodsInCart.setNum(num);
                if (num == 0) {
                    goodsInCartMap.remove(goodsId);
                }
                System.out.println("修改成功!");
            }
        }
    
        public void displayAll() {
            if (goodsInCartMap.isEmpty()) {
                System.out.println("当前购物车为空!");
            } else {
            	System.out.println("商品编号:\t商品名:\t\t价格:\t购买数量:\t小计:\t");
            	
                for (GoodsInCart goodsInCart : goodsInCartMap.values()) {
                    System.out.println(goodsInCart.getGoods().getGoodsId() + "\t" +goodsInCart.getGoods().getName() + "\t" + goodsInCart.getGoods().getPrice() + "\t" +goodsInCart.getNum()+"\t"+goodsInCart.getGoods().getPrice()*goodsInCart.getNum());
                }
            }
        }
    
        public  void settleAccounts() {
        	LocalDateTime currentTime = LocalDateTime.now();
            if (goodsInCartMap.isEmpty()) {
                System.out.println("当前购物车为空!");
            } else {
                double totalPrice = 0.0;
                try {
                	File file=new File("E://receipt.txt");
    		        FileWriter writer = new FileWriter(file);//打印小票
    		        System.out.println("时间:"+currentTime.toString()+"\t"+"操作员:"+InetAddress.getLocalHost ().getHostName ().toString ());
    		        System.out.println("*************************************************");
    		        System.out.println("商品编号:\t商品名:\t\t价格:\t购买数量:\t小计:\t");
    		        writer.write("时间:"+currentTime.toString()+"\t"+"操作员:"+InetAddress.getLocalHost ().getHostName ().toString ()+"\t"+"\n");
    		        writer.write("*************************************************\n");
    		        writer.write("商品编号:\t商品名:\t\t价格:\t购买数量:\t小计:\t\n");
    		        for (GoodsInCart goodsInCart : goodsInCartMap.values()) 
    		        {
                    double price = goodsInCart.getGoods().getPrice() * goodsInCart.getNum();
                    System.out.println(goodsInCart.toString() + price);
                    totalPrice += price;
                    writer.write(goodsInCart.toString()+price+"\n");
    		        }
    		        
    		        System.out.println("总价:" + totalPrice);
    		        System.out.println("*************************************************");
    		        System.out.println("欢迎下次光临!购物小票已保存至:"+file.getAbsolutePath());
    		        writer.write("*************************************************\n欢迎下次光临!购物小票已保存至:"+file.getAbsolutePath());
    		        writer.close(); 
    		        goodsInCartMap.clear(); // 结算后清空购物车
    		    } catch (IOException e) {
    		        e.printStackTrace();
    		        System.out.println("警告!文件写入异常!");
    		    } 
               finally {
    			
    		}
            }
        }
    }
    

    这个购物车管理程序是一个基于Java语言开发的控制台应用程序,实现了商品管理和购物车管理功能。该程序具有以下技术性优势:

    1. 面向对象编程

    该程序采用面向对象编程思想进行开发,将不同功能的代码封装在不同的类中,并通过类之间的调用、继承、组合等关系实现功能的模块化组合。

    2. 基本数据类型、字符串、集合和文件操作

    通过对基本数据类型、字符串、集合等知识点的运用,实现了商品和购物车的信息存储、读取和修改,以及对文件的读写操作。同时,在程序执行过程中根据用户输入进行相应的处理,保证了程序的交互性和灵活性。

    3. 代码规范和注释

    在编写代码时,考虑到代码的可读性和可维护性,通过遵循Java编码规范、加入适量注释等方式使得代码结构清晰、易懂、容易维护和修改。

    4. 异常处理

    在程序中加入了异常处理机制,即当程序出现异常或错误时能够根据具体情况提示用户相应信息,从而避免程序崩溃或运行出错。

    总之,该程序通过对Java相关知识的学习和应用,成功地实现了购物车管理的基本功能,并且编写规范、注释清晰,运行效果良好,是一份具有理论和实践价值的程序设计作业。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值