• Java大作业————面向对象设计(购物车)


    团队介绍

    成员姓名 负责任务
    杨涛 编码规范、GUI设计及代码编写
    吴执涛 DAO接口及文件读写方法编写
    蔡锦涛 前期调查与功能设计、货物操作类、博客制作

    Git地址

    Gitee仓库

    前期调查



    用户首先通过输入账号密码登录账号,随后在商场中浏览商品,并将心仪的商品添加到购物车中,在购物车中可以将商品的数量增加或减少,且可以删除商品。

    由以上可知,购物车应大概拥有这些功能:
    1.设计一个小商城,为了更加灵活,我们将商城设置成自由添加商品。
    2.购物车可以随意添加或删除商品,增加或减少商品数量
    3.可以清空或结算购物车

    程序运行效果

    登录注册:

    商品栏添加商品:

    商品栏删除商品:

    在购物车中添加商品:

    删除购物车中的商品:

    在购物车中增加商品数量:

    在购物车中减少商品数量:

    清空购物车:

    结算购物车:

    系统功能结构图

    系统描述

    点击运行购物车软件,输入账号密码,或者直接注册一个账号。登录成功后进入主界面,主界面包含商城和购物车两个模块。在商城中,可以自行填入商品名称单价并把商品添加进商城,也可以从商城中删除商品,遇到心仪的商品可以加入购物车。在购物车中,可以修改商品数量,也可以直接删除商品,或者清空购物车将商品全都删除,最后可以结算购物车,计算总价格

    UML类图

    MVC模式

    MVC模式简述

    MVC模式中,M指Model(业务模型),V指View(视图),C指Controller(控制器),其中Controller也就是事件监听器。就让我们拿
    MVC模式的好处:
    1.代码耦合度低。每个模块各司其职,M、V、C分别负责不同的功能,对界面的操作代码和业务逻辑代码之间分离。
    2.可以做到分层开发。编写业务逻辑代码的程序员不用考虑界面操作,编写控制器的只需要处理与view交互的数据,并选择合适的业务逻辑代码处理数据即可。
    3.扩展性和可维护性高。由于各功能模块之间代码分离,修改某部分代码时只要处理好接口,就不会影响到其他代码。

    MVC模式在程序中的体现

    就让我们拿在 商品栏添加商品 来举例。

    MVC分为Model, View, Controller。其中Controller即为监听器,即上图中的addActionPerformed,当用户输入完商品名称和单价,并点击添加按钮,就会触发Controller,Controller就会从nameTextpriceText获取信息,即从视图层获取信息,创建DefaultTableModel对象存放goods模型,然后将获取到的信息添加到模型里,并更新视图,同时存放到本地文档里。

    DAO模式

    DAO模式,是将业务逻辑与数据的具体访问相分离的一种模式,它可以根据后台数据存储方式的不同,定义不同的实现方法。例如,编写GUI相关代码时,无需考虑数据操作的具体实现方法,只需要调用相应DAO方法。如果底层数据存储方式需要改变,只要增加DAO接口的新实现类即可,有利于不同人员的分工合作,提高效率。

    项目包结构和关键代码

    包结构

    将对界面操作的代码和业务逻辑代码相分离,分成两个包,分别为gui和shopping

    关键代码

    把商品添加到购物车中:

     public int putIn(Product p) {
            Entry e = new Entry(p);
            int flag = 0;
            int index = -1;
            if (this.list.size() == 0) {
                this.list.add(e);
            } else {
                for (int i = 0; i < this.list.size(); i++) {
                    Entry x = this.list.get(i);
                    if (p.equals(x.getP())) {
                        x.setCount(x.getCount() + 1);
                        x.setTotalPrice(x.getTotalPrice() + p.getPrice());
                        this.list.set(i, x);
                        index = i;
                        flag = 1;
                    }
                }
                if (flag == 0) {
                    this.list.add(e);
                }
            }
            return index;
        }
    

    在商品栏中删除商品:

     private void deleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteActionPerformed
            // TODO add your handling code here:
            DefaultTableModel model = (DefaultTableModel) goods.getModel();
            int[] selectRows = goods.getSelectedRows();
            for (int i = selectRows.length - 1; i >= 0; i--) {
                int selectRow = selectRows[i];
                if (selectRow != -1) {
                    model.removeRow(selectRow);
                }
            }
            String[] name=new String[goods.getRowCount()];
            Double[] price=new Double[goods.getRowCount()];
            TableModel model1 = goods.getModel();
            for (int i = 0; i <goods.getRowCount() ; i++) {
                name[i]=(String)model1.getValueAt(i,0);
                price[i]=(Double)model1.getValueAt(i,1);
            }
            try {
                deleteGoods(name,price);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    读取本地文件到商品栏:

    private boolean readGoods() throws FileNotFoundException, IOException {
            DefaultTableModel model = (DefaultTableModel) goods.getModel();
    
            String pathName = ".\goods.txt";
            if (System.getProperty("os.name").equals("Mac OS X")) {
                pathName = "./goods.txt";
            }
            File f = new File(pathName);
            if (!f.exists()) {
                try {
                    f.createNewFile();
                } catch (IOException e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }
            try (FileReader reader = new FileReader(pathName);
                    BufferedReader br = new BufferedReader(reader) ){
    
                String line1, line2;
                while ((line1 = br.readLine()) != null) {
                    if(line1.equals(""))
                        break;
                    line2 = br.readLine();
                    String name = line1;
                    Double price = Double.parseDouble(line2);
                    Object[] o = {name, price};
                    model.addRow(o);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return true;
        }
    
  • 相关阅读:
    Java hibernate 遇到的问题:could not read a hi value
    Java 小知识
    Java 在使用@Select遇到的问题:拼接字符串将数组拼为了字符串
    飞逝的光阴
    终于回来了
    再说创客
    离开一段时间
    抛弃QP
    关于创客
    对DTU系统结构的重新思考
  • 原文地址:https://www.cnblogs.com/cjt0722/p/13977592.html
Copyright © 2020-2023  润新知