JAVA面向对象编程之购物车界面的设计与功能的实现

1、小组成员及分工

小组成员 负责工作
兰泽祥 负责总体界面、Git代码库
吴修恩 负责MVC模式、类名包名的规范化

2、Git 仓库地址

仓库地址https://gitee.com/lanzexiang/shopping_cart.git

3、界面展示

①登录界面

②菜单界面

③商城界面

④商品搜索界面

⑤购物车界面

⑥订单界面

4、几个亮点功能介绍

1、购物车界面与订单界面

购物车界面与订单节单界面总体采用BorderLayout()布局,在BorderLayout()的中部使用CardLayout布局方式,将空购物车(空订单)的界面放置于第一层,将购物车(订单)不为空的时候显示的放在第二层。通过判断购物车(订单)是否为空,来决定该显示哪一个界面。
动态展示:

代码:(这里只给出购物车中CardLayout布局的代码)
    CardLayout card = new CardLayout(); //新建CardLayout布局
    JPanel centerPanel=new JPanel(card);

    //卡片一  空购物车
    JPanel panel0 = new JPanel(new FlowLayout(FlowLayout.CENTER));
    ImageIcon icon = new ImageIcon("image/emptycar.png");
    JLabel label = new JLabel(icon);
    panel0.add(label);

    //卡片二  有东西的购物车
    JPanel panel2 = new JPanel(new FlowLayout(2));
    DefaultTableModel model = new DefaultTableModel() { // 表格数据不可改
        public boolean isCellEditable(int row, int column) {
            if( column == 3 ){
                return true;//返回true则表明单元格可编辑
            }
            else return false;
        }
    };
    ColumnNames.add("商品编号");ColumnNames.add("商品名");ColumnNames.add("单价(元)");ColumnNames.add("数量");ColumnNames.add("总价");
    model.setDataVector(date,ColumnNames);
    shoppingCartTable = new JTable(model);// 创建一个表格,指定 所有行数据 和 表头
    SettingWindow.setTable(shoppingCartTable); // 设置表格

    JScrollPane shoppingCarScrollPane = new JScrollPane(shoppingCartTable);
    shoppingCarScrollPane.setBorder(null);

    //共计
    JPanel p0 = new JPanel(new GridLayout(2, 0));
    JLabel jl00 = new JLabel(" ");
    jl0 = new JLabel("共计 " + shoppingCartTable.getRowCount() + " 元");
    jl0.setFont(new Font("微软雅黑", Font.PLAIN, 19)); // 设置字体、样式、大小

    JButton jb0 = new JButton("删除商品");
    jb0.setFont(new java.awt.Font("黑体", 1, 20));
    JButton jb1 = new JButton("结算");
    jb1.setFont(new java.awt.Font("黑体", 1, 20));

    p0.add(jl00);
    p0.add(jl0);
    p0.add(jb0);
    p0.add(jb1);

    panel2.add(shoppingCarScrollPane);
    panel2.add(p0);

    panel2.setBorder(new EmptyBorder(10, 10, 10, 10));

    centerPanel.add(panel0,"emptyShoppingCart");
    centerPanel.add(panel2,"ShoppingCart");
    if( shoppingCartTable.getRowCount() == 0 ) {
        setShoppingCartCenterPanel(0);
    }else {
        setShoppingCartCenterPanel(1);
    }
    ShoppingCarGui.add(centerPanel, BorderLayout.CENTER);

2、搜索商品功能

搜索商品实现的是模糊搜索,即当我们输入搜索内容后,给出的是商城列表中,商品名包含有该内容的,都将会显示给用户。
动态展示:

代码:(这里只给出搜索部分的代码)
public void searchProduct(Vector<Vector<Object>> vDate, String pro) {//搜索商品
    for(Product a: prolist) {
        if(a.getName().indexOf(pro)!=-1) {
            Vector<Object> row=new Vector<Object>();
            row.add(a.getId());
            row.add(a.getName());
            row.add(a.getPrice());
            vDate.add(row);
        }
    }
}

5、系统中体现出的MVC模式

1、什么是MVC模式?使用MVC模式有什么好处?

MVC模式的结构分为三部分,模型(Model),视图(View),以及控制器(Controller)
·模型(model):适合做一些业务逻辑处理,比如数据库存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。
·视图(View):其中View层其实就是程序的UI界面,用于向用户展示数据以及接收用户的输入,XML布局可以视为V层,显示Model层的数据结果。
·控制器(Controller):控制器用于更新UI界面和数据实例.在Android中,Activity处理用户交互问题,因此可以认为Activity是控制器,Activity读取V视图层的数据(eg.读取当前EditText控件的数据),控制用户输入(eg.EditText控件数据的输入),并向Model发送数据请求(eg.发起网络请求等)。

好处:
    (1)耦合性低。所谓耦合性就是模块代码之间的关联程度。利用MVC结构使得View(视图)层和Model(模型)层可以很好的分离,这样就达到了解耦的目的,所以耦合性低,减少模块代码之间的相互影响。
    (2)可扩展性好。由于耦合性低,添加需求,扩展代码就可以减少修改之前的代码,降低bug的出现率。
    (3)模块职责划分明确。主要划分层M,V,C三个模块,利于代码的维护。

2、该代码如何实现MVC模式

由上一题可知,mvc模式分为,模型(Model),视图(View),以及控制器(Controller)。那就拿添加商品这一功能的实现来讲解。
添加商品需要以下的操作:
    (1)从购物车列表中获取用户所选的商品
    (2)将该商品以及用户输入的所需商品传入后台的购物车链表中
    (3)更新窗体显示的信息
而视图层(View)已经在前面体现了。模型层(Model)在这里则体现在添加商品的操作中的第二步。控制器(Controller)则体现为在当用户点击添加到购物车后,进行的各项操作,并将更新后的视图展示给用户。
控制器部分代码:
jb1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        //AddProduct();
        String inputValue = JOptionPane.showInputDialog("请输入添加的商品数量");
        int a=Integer.parseInt(inputValue);
        DefaultTableModel dtm=(javax.swing.table.DefaultTableModel)ProductList.getModel();
        int row=ProductList.getSelectedRow();

         Vector<Object> v=new Vector<Object>();
               v.add(dtm.getValueAt(row, 0));
               v.add(dtm.getValueAt(row, 1));
               v.add(dtm.getValueAt(row, 2));
               v.add(a);
               double b=(double) dtm.getValueAt(row, 2);
               double vSum=a*b;
               v.add(vSum);

               int i=shoppingcar.getShoppingCart().addProduct(v);

               if(i!=-1) {//添加购物车已有商品
                DefaultTableModel dd=(DefaultTableModel)shoppingcar.shoppingCartTable.getModel();
                        dd.setValueAt(shoppingcar.getShoppingCart().getProlist().get(i).getNum(), i, 3);
                double total=shoppingcar.getShoppingCart().getProlist().get(i).getNum() *
                            shoppingcar.getShoppingCart().getProlist().get(i).getPrice();
                dd.setValueAt(total, i, 4);
           }
           else {//添加一行新商品
                shoppingcar.getDate().add(v);
                shoppingcar.getShoppingCartTable().updateUI();
                shoppingcar.getJl2().setText("共 " + shoppingcar.getShoppingCartTable().getRowCount() + " 件宝贝");
                shoppingcar.getJl0().setText("共计 " + shoppingcar.getShoppingCart().getTotal() + " 元");
            }
            ShoppingCartGui.setShoppingCartCenterPanel(1);
        }
    });
模型层部分代码:
public int addProduct(Vector<Object> v) {//添加商品
    int i=0;
    for(Product e: prolist) {
        if(e.getId().equals(v.get(0))) {
            int n=e.getNum()+Integer.parseInt(v.get(3).toString());
            e.setNum(n);
            return i;
        }
        i++;
    }
    String id=(String) v.get(0);
    String name=(String) v.get(1);
    double price=Double.parseDouble(v.get(2).toString());
    int num = Integer.parseInt(v.get(3).toString());
    Product pro=new Product(id, name, price, num);
    prolist.add(pro);
    total=price*num+total;
        return -1;
}

原文地址:https://www.cnblogs.com/lanxiang/p/9888617.html

时间: 2024-08-01 08:33:42

JAVA面向对象编程之购物车界面的设计与功能的实现的相关文章

Java面向对象编程之异常处理机制

一:Java的异常处理机制的优点: 1:把各种不同情况的异常情况分类,使用JAVA类来表示异常情况,这种类被称为异常类.把各种异常情况表示成异常类,可以充分的发挥类的可扩展性和可重用性. 2:异常流程的代码和正常流程的代码分离,提高了代码的可读性,简化了代码的结构. 3:可以灵活的处理异常,如果发生了异常程序员可以手动抛出异常,也可以交给调用者来处理异常. 二:Java虚拟机的方法调用栈 Java虚拟机用方法来调用栈来跟踪每个线程一系列的方法调用过程,该堆栈保存了每个调用方法的本地信息(比如说方

Java面向对象编程之继承(二)

在上一篇博客中,我们已经了解继承的基本概念和语法,那么今天我们就来聊一聊有关于继承的其他东西. 让我们来了解一下什么是方法重载(overload)和方法覆盖(override) 方法重载(overload) 对于类的的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法. 重载方法必须满足以下条件: 方法名相同 方法的参数类型.个数.顺序至少有一项不相同 方法的返回类型可以不相同 方法的修饰符可以不相同 其中,参数的类型.个数和顺序

java面向对象编程之反射

一 java中类的加载 1 jvm使用一个类的时候,是通过一个ClassLoader,把类加载到内存中,获得该类的Class对象: 2 ClassLoader加载一个类的时候,会检查上级的ClassLoader是否没有加载过该类,若已加载过,不再加载: 二 程序块 静态程序块,在类加载的时候就会被执行,A加载的时候,会将static程序块部分执行: 若去掉static,变成非静态程序块,在A类加载的时候,非静态程序块不会被执行,只有创建实例的时候才会被执行,创建一个实例执行一次: package

Java面向对象编程之Java语言中的修饰符

近日,读了孙卫琴老师的<Java面向对象编程>一书,心中颇有些感悟,想着将其记录下来. Java中的修饰符 在Java语言中,有这样一些单词(说得再准确点儿,应该是形容词):abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的)和final(不可改变的),它们被成为修饰符,这些修饰符可以修饰类.变量和

Java面向对象编程之____类与对象

重要的事情说三遍 我们认为面向对象编程是对现实世界的模拟,而程序中一个个的类组成了我们的程序,就好比现实世界中的人类.车类.建筑类.动物类等等这些类组成了世界一样. 我们认为面向对象编程是对现实世界的模拟,而程序中一个个的类组成了我们的程序,就好比现实世界中的人类.车类.建筑类.动物类等等这些类组成了世界一样. 我们认为面向对象编程是对现实世界的模拟,而程序中一个个的类组成了我们的程序,就好比现实世界中的人类.车类.建筑类.动物类等等这些类组成了世界一样. 一.在Java中创建一个类 语法 cl

Java面向对象编程之继承(一)

前言 Java语言有三大重要的特性,分别是继承.多态和封装.今天我们就来聊聊继承,继承是复用程序代码的有力手段,使用继承我们会少写许多代码,也可以让我们在写代码的时候逻辑变得更加清楚. 继承的基本语法 在Java语言中,用"extends"关键字来表示一个类继承了另一个类,例如:  public class Sub extends Base{ ... } ,以上代码表明Sub类继承了Base类,我们说Sub类是Base类的子类,Base类是Sub类的父类. 那么Sub类到底继承了Bas

OOP面向对象编程之俄罗斯方块项目实现过程

这是用纯java编译的俄罗斯方块,讲这个游戏的是达内的刘苍松老师,苍老师讲课我们学生都比较喜欢,下面我把当时的做这个游戏学习笔记分享给大家,先看下游戏截图: 重点学习笔记: Tetris 俄罗斯方块 Tetromino 四格方块 业务需求(清晰明确) -> 业务对象模型(理清对象关系)-> 数据建模(用数据表达对象,和对象的关系)-> 类的设计-> 概要编码(语法知识)-> 详细功能设计(语法知识)-> 1 明确业务需求 用自然语言,将业务功能描述清楚 俄罗斯方块的基本

OOP面向对象编程之java打飞机游戏

#写在前面 继上一篇OOP面向对象编程之俄罗斯方块项目实现过程,OOP面向对象编程之java打飞机游戏,其实写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习(顺便做50个深蹲,嘿嘿,平时干嘛去了),看图:   #完整代码   敌飞机 package com.tarena.fly; import java.util.Random; /** * 敌飞机: 是飞行物,也是敌人 */ public class Airplane extends FlyingObject imp

漫谈vfp程序界面及设计观

软件业发展到今天,我们的用户早已不满足简单的界面.于是,一部分软件设计师便以UI设计师的身份从开发人员的队伍里分化出来,他们借鉴消费心理学的经验,就像走在夜都市的绚烂街道上,就像陶醉在超市里花花绿绿的货架前,通过精心设计,使软件产品在展示屏幕前,带给人们瞳孔放大的强烈视觉冲击力. 对于VFP无法支持基于子窗体设计原理来实现的流行Skin的情形,使得不少程序员伤透了脑筋,伴随过无数个失眠的夜晚.原因是VFP的控件是"自绘"的,而不是象其它的开发工具那样从MicroSoft Common