标签:git 链表 The 网络 适合 返回 oid 需求 img
小组成员 | 负责工作 |
---|---|
兰泽祥 | 负责总体界面、Git代码库 |
吴修恩 | 负责MVC模式、类名包名的规范化 |
仓库地址:https://gitee.com/lanzexiang/shopping_cart.git
购物车界面与订单节单界面总体采用BorderLayout()布局,在BorderLayout()的中部使用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);
搜索商品实现的是模糊搜索,即当我们输入搜索内容后,给出的是商城列表中,商品名包含有该内容的,都将会显示给用户。
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);
}
}
}
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三个模块,利于代码的维护。
由上一题可知,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;
}
标签:git 链表 The 网络 适合 返回 oid 需求 img
原文地址:https://www.cnblogs.com/lanxiang/p/9888617.html