.功能测试图
输入商品的id,名称以及价格在点击添加就可以添加成功商品
添加商品:
修改商品:通过输入商品的名称以及要修改商品的价格就可以修改商品的价格
修改前
修改后点击刷新按钮
删除:输入商品的商品名称就可以删除所对应的商品
.1客户购买界面
输入对应的商品名称以及数量,点击放入购物车,就会在商品界面添加一条记录,以及自动算出总价
点击结账功能将自动生成商品订单!并且在数据库自动生成所对应的商品购买人的单号以及所对应的数据
设置的东西:
代码展示:
//Dao层
package Demo.java1.作业.商城管理系统.Dao;
import Demo.java1.作业.商城管理系统.Model.Item;
import Demo.java1.作业.商城管理系统.Model.Product;
import Demo.java1.作业.商城管理系统.unusual.UnusualRuntime;
import java.sql.*;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
public class ShppingDao {
static String user;
static String password;
static String jdbc;
static
{ //加载配置文件
ResourceBundle rb= ResourceBundle.getBundle("daoXML");
user=rb.getString("user");
password=rb.getString("password");
jdbc=rb.getString("jdbc");
}
private Connection daoConnection() {
try {
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
return DriverManager.getConnection(jdbc, user, password);//传输字符串语句 //传输过去我的值
} catch (SQLException e) {
throw new UnusualRuntime("SQLException");//连接异常
}
}
public List<Product> inquire(List<Product> products) {//查询的获取的数据
String sql="select csequence,cname,p_price from commodity; ";
products.clear(); //删除所有值
try
{
ResultSet dao = daoConnection().createStatement().executeQuery(sql);//获取数据库存储的值
while (dao.next())
{
products.add(new Product(dao.getString(1),dao.getString(2),dao.getDouble(3))); //存储物品和价格
}
}
catch (Exception e)
{
return null;//返回获取到的值
}
return products;
}
public void save(Map<String, Item> map,Double total) { //添加到数据库生成订单
try
{
Statement stmt=daoConnection().createStatement();
stmt.addBatch(
"INSERT INTO orders(onumber,oprice,otime) VALUES (REPLACE(UUID(),\"-\",\"\"),"+total+",NOW()) ;" //传输订单
);
stmt.addBatch(
"INSERT INTO orderitem (onumber) SELECT onumber FROM orders \n" +
" WHERE not exists (select * from orderitem where orderitem.onumber = orders.onumber);"
);
stmt.executeBatch(); //执行语句
ResultSet dao = daoConnection().createStatement().executeQuery("SELECT onumber from orders;");//获取数据库存储的值
String sjk=null;
if (dao.next()) {
sjk = dao.getString(1);
}
System.out.println(sjk);
for (String s : map.keySet()) {
Item item = map.get(s);
stmt.addBatch(
"INSERT INTO orderitem(csequence,cname,p_price,oprice,onumber) VALUES(\""+s+"\",\""+item.getP().getName()+"\","+item.getNum()+","+item.getPrice()+",\""+sjk+"\");"
);
}
stmt.executeBatch(); //执行语句
}
catch (Exception e)
{
throw new UnusualRuntime("printfException"); //打印异常
}
}
public boolean add_commodity(Product product) { //添加
String sql="INSERT commodity(csequence,cname,p_price) VALUES(\""+product.getCsequence()+"\",\""+product.getName()+"\",\""+product.getPrice()+"\")";
try
{
int i = daoConnection().createStatement().executeUpdate(sql);
if(i==-1) //判断是否失败
{
return false;
}
return true;
}catch (Exception e)
{
return false;
}
}
public boolean delete_commodity(String name) { //删除
String sql="DELETE FROM commodity WHERE cname=\""+name+"\";";
System.out.println(sql);
try
{
int i = daoConnection().createStatement().executeUpdate(sql);
if(i==-1)//判断是否失败
{
return false;
}
return true;
}catch (Exception e)
{
return false;
}
}
public boolean alter_commodity(String name,String price) { //修改通过名字改价格
String sql="UPDATE commodity SET p_price=\""+price+"\" WHERE cname=\""+name+"\"; ";
try
{
int i = daoConnection().createStatement().executeUpdate(sql);
if(i==-1)//判断是否失败
{
return false;
}
return true;
}catch (Exception e)
{
return false;
}
}
}
//工厂层
package Demo.java1.作业.商城管理系统.Factrey;
import Demo.java1.作业.商城管理系统.Dao.ShppingDao;
import Demo.java1.作业.商城管理系统.IXXXService.IShoppingServer;
import Demo.java1.作业.商城管理系统.Service.ShoppingCartServer;
public class GosuppyFactre {
public static IShoppingServer isHpp()
{
return new ShoppingCartServer();
}
public static ShppingDao spDao()
{
return new ShppingDao();
}
}
//接口层
package Demo.java1.作业.商城管理系统.IXXXService;
import Demo.java1.作业.商城管理系统.Model.Item;
import Demo.java1.作业.商城管理系统.Model.Product;
import java.util.List;
import java.util.Map;
public interface IShoppingServer {
Map<String, Item> printf();//获取购物车并且保存到数据库里面
Map<String, Item> printfGWC();//返回购物车里面的东西
boolean remove(Product p, int num); //减少商品数量
void add(Product p, int num); //添加商品数量
double count(); //执行计算价格数据
boolean add_commodity(Product product); //添加商品
boolean delete_commodity(String name) ; //删除商品
List<Product> printfE(); //查看商品
boolean alter_commodity(String name,String price); //修改商品
}
//模型层一
package Demo.java1.作业.商城管理系统.Model;
import java.util.Objects;
public class Item {
private Product p; //物品属性
private int num; //物品数量
private double price; //物品总价格
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNum() {
return num;
}
public Item(Product p, int num) {
this.p = p;
this.num = num;
}
public Product getP() {
return p;
}
public void increase(int n){ //数量加加
num+=n;
}
public void remove(int n){ //删除指定数量
num-=n;
}
}
//模型层2
package Demo.java1.作业.商城管理系统.Model;
import java.util.Objects;
public class Product { //物品属性
private String csequence; //商品单号
private String name ; //物品名称
private double price; //价格
public String getCsequence() {
return csequence;
}
public double getPrice() {
return price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Product(String name) {
this.name = name;
}
public Product(String csequence,String name, double price) { //构造器
this.csequence=csequence;
this.name = name;
this.price = price;
}
public boolean equals(String str) {
if(str.equals(this.name)) return true;
return false;
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
//业务实现层
package Demo.java1.作业.商城管理系统.Service;
import Demo.java1.作业.商城管理系统.Dao.ShppingDao;
import Demo.java1.作业.商城管理系统.Factrey.GosuppyFactre;
import Demo.java1.作业.商城管理系统.IXXXService.IShoppingServer;
import Demo.java1.作业.商城管理系统.Model.Item;
import Demo.java1.作业.商城管理系统.Model.Product;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;
public class ShoppingCartServer implements IShoppingServer {
ShppingDao sDao= GosuppyFactre.spDao(); //绑定数据库
private Map<String, Item> map=new HashMap<>();//购物车
private List<Product> li=new ArrayList<>(); //存储商品
public void add(Product p, int num){
for (String s : map.keySet()) {
if (map.get(s).getP().getName().equals(p.getName())) //查找他名字所对应的key 然后key对应的value里面的物品名字和他传输进来的名字比较
{
map.get(s).increase(num); //存储数量
return;
}
}
//如果没查找到
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); //获取自定义的
Date d = new Date();
String f1 = sdf1.format(d)+((int) (Math.random() * 899)+100)%999; //获取随机11位数
map.put(f1,new Item(p,num));// 如果没有则加入购物车
}
public boolean remove(Product p, int num){
for (String s : map.keySet()) {
if (map.get(s).getP().getName().equals(p.getName()))
{
Item item = map.get(s);
if(item.getNum()-num<0) return false; //如果两数相减小于0那么返回不超过
if(item.getNum()!=0) //如果此数不是数0
{
map.get(s).remove(num); //删除指定数量
if (item.getNum()==0){
map.remove(s);//如果数量为0了就把物品删除掉
}
return true;
}
}
}
return false ; //如果集合里面没有此数据
}
public List<Product> printfE() //商品
{
// List<Product> inquire = sDao.inquire(this.li);
return sDao.inquire(this.li); //数据库获取商品
}
public Map<String, Item> printf() //返回数据库
{
sDao.save(map,count()); //保存到数据库
return map;
}
public Map<String, Item> printfGWC() //返回数据库
{
return map;
}
public double count() //计算价格
{
double totalPrices=0; //总共价格
for (String s : map.keySet()) {
Item item = map.get(s);
item.setPrice(item.getNum() * item.getP().getPrice()); //计算当前物品价格并且存储回去
totalPrices+=item.getPrice();
}
return totalPrices; //返回总数
}
@Override
public boolean add_commodity(Product product) { //添加
return sDao.add_commodity(product); //添加商品
}
@Override
public boolean delete_commodity(String name) { //删除
return sDao.delete_commodity(name); //
}
@Override
public boolean alter_commodity(String name,String price) { //修改
return sDao.alter_commodity(name,price); //
}
}
//抛出的异常层
package Demo.java1.作业.商城管理系统.unusual;
public class UnusualRuntime extends RuntimeException{
String str;
public UnusualRuntime(String str)
{
this.str = str;
}
}
package Demo.java1.作业.商城管理系统.View;
//main方法所在的界面层
import Demo.java1.作业.商城管理系统.Factrey.GosuppyFactre;
import Demo.java1.作业.商城管理系统.IXXXService.IShoppingServer;
import Demo.java1.作业.商城管理系统.Model.Item;
import Demo.java1.作业.商城管理系统.Model.Product;
import Demo.java1.作业.商城管理系统.unusual.UnusualRuntime;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Text1 extends Frame implements ActionListener, WindowListener {
private static Scanner sc=new Scanner(System.in);
Label la1, la2, la3, la4, la5, la6, la7, la10 ,laa111,lax,lax1,lax2; //文字
TextField la1_ID, la1_mc, la3_jg,laa4,laa5,laa6; //写字
JButton but1_tj,but2_xg,but3_sc,but4_ck; //按钮
java.awt.List li; //选择控件
Panel pa;
Text1() {
//添加商品区
laa111=new Label(" 商品ID:");
la1_ID=new TextField(10);
la1 = new Label(" 商品名称:");
la1_mc=new TextField(10);
la2 = new Label(" 商品价格:");
la3_jg=new TextField(10);
but1_tj=new JButton("添加"); //按钮
la3=new Label("_______________________________________________________________________________________________________________________________________");
//修改商品区
la4=new Label(" 修改商品的商品名称:");
laa4=new TextField(10);
la5=new Label(" 修改商品的商品价格:");
laa6=new TextField(10);
but2_xg=new JButton("修改"); //按钮
lax=new Label("_______________________________________________________________________________________________________________________________________");
//删除区
la6=new Label(" 删除的商品名称:");
laa5=new TextField(10);
but3_sc=new JButton("删除"); //按钮
lax1=new Label("_______________________________________________________________________________________________________________________________________");
//查看区
la7=new Label("↓商品列表↓:");
but4_ck=new JButton("刷新");
li =new java.awt.List(8,true);
lax2=new Label("_______________________________________________________________________________________________________________________________________");
//放入区
pa=new Panel(); //设置布局
la10=new Label("商店添加界面");
pa.add(laa111); //添加
pa.add(la1_ID);
pa.add(la1);
pa.add(la1_mc);
pa.add(la2);
pa.add(la3_jg);
pa.add(but1_tj);
pa.add(la3);
pa.add(la4);
pa.add(laa4);
pa.add(la5);
pa.add(laa6);
pa.add(but2_xg);
pa.add(lax);
pa.add(la6);
pa.add(laa5);
pa.add(but3_sc);
pa.add(lax1);
pa.add(la7);
pa.add(but4_ck); //刷新
pa.add(lax2);
add(li,BorderLayout.SOUTH); //设置显示list的方式
//注册窗体区
addWindowListener(this); //注册窗体
add(la10, BorderLayout.NORTH);
add(la10, BorderLayout.NORTH);
add(pa, BorderLayout.CENTER); //设置布局
setTitle("商城管理系统");
setSize(904, 400);
setVisible(true); //启动图形化
}
public static void main(String[] args) {
IShoppingServer hpp = GosuppyFactre.isHpp(); //获取server
List<Product> list = hpp.printfE(); //获取物品
Text1 t1=new Text1(); //获取下面的方法
Text_JIEMING jm1=new Text_JIEMING(); //购买界面
for (Product product :list) { //开始界面
t1.li.add(" 物品ID:"+product.getCsequence()+" 物品名:"+product.getName()+" 物品价格:"+product.getPrice());
jm1.li.add(" 物品ID:"+product.getCsequence()+" 物品名:"+product.getName()+" 物品价格:"+product.getPrice());
}
//增删改查
t1.but1_tj.addActionListener(e -> new Thread(() -> { //添加按钮
Product p1=new Product(t1.la1_ID.getText(),t1.la1_mc.getText(),Double.parseDouble(t1.la3_jg.getText())); //添加id ,名称,价格
boolean b = hpp.add_commodity(p1);
if(b==true)
{
JOptionPane.showMessageDialog(null,"添加成功", "", JOptionPane.INFORMATION_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(null,"添加失败", "", JOptionPane.INFORMATION_MESSAGE);
}
}).start());
t1.but2_xg.addActionListener(e -> new Thread(() -> { //修改按钮
boolean b1 = hpp.alter_commodity(t1.laa4.getText(), t1.laa6.getText());
if(b1==true)
{
JOptionPane.showMessageDialog(null,"修改成功", "", JOptionPane.INFORMATION_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(null,"修改失败", "", JOptionPane.INFORMATION_MESSAGE);
}
}).start());
t1.but3_sc.addActionListener(e -> new Thread(() -> { //删除按钮
boolean b2 = hpp.delete_commodity(t1.laa5.getText());
if(b2==true)
{
JOptionPane.showMessageDialog(null,"删除成功", "", JOptionPane.INFORMATION_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(null,"删除失败", "", JOptionPane.INFORMATION_MESSAGE);
}
}).start());
t1.but4_ck.addActionListener(e -> new Thread(() -> { //查看按钮
t1.li.removeAll();//清理
jm1.li.removeAll();//清理
List<Product> lt = hpp.printfE();
for (Product product :lt) {
t1.li.add(" 物品ID:"+product.getCsequence()+" 物品名:"+product.getName()+" 物品价格:"+product.getPrice());
jm1.li.add(" 物品ID:"+product.getCsequence()+" 物品名:"+product.getName()+" 物品价格:"+product.getPrice());
}
}).start());
List<Product> finalList = list;
jm1.but1_GM.addActionListener(e -> new Thread(() -> { //购买按钮
boolean b = t1.add(hpp, finalList,jm1.text2.getText(),Integer.parseInt(jm1.text3.getText()));//添加
if(b==true)
{
Map<String, Item> map = hpp.printfGWC();
String lr="";
double count = hpp.count();//总价
for (String s : map.keySet()) {
Item item = map.get(s);
lr=lr+"单号为:"+s+" 物品:"+item.getP().getName()+" 价格为:"+item.getP().getPrice()+" 拥有数量::"+item.getNum()+" 该单价格:"+item.getPrice()+"\n";
}
lr=lr+"总价为:"+count+"元";
jm1.jt.setText(lr);
JOptionPane.showMessageDialog(null,"放入购物车成功", "", JOptionPane.INFORMATION_MESSAGE);
}
else
{
JOptionPane.showMessageDialog(null,"放入购物车失败", "", JOptionPane.INFORMATION_MESSAGE);
}
}).start());
jm1.but2_JZ.addActionListener(e -> new Thread(() -> { //结账按钮
t1.printfF(hpp.printf(),hpp.count(),jm1);
}).start());
// t1.but1_tj.addActionListener(e -> new Thread(() -> { //添加按钮
//
//
// }).start());
while (true) {
try
{
System.out.println("请输入需要的操作 1.add(添加文件数量) 2.remove(删除商品数量) 3.printfDao(确认购买并打印出单子)");
System.out.println("请输入需要的操作 4.添加商品 5.修改商品价格 6.删除商品 7.查看商品 ");
switch (sc.nextInt()) //输入操作
{
case 1 :t1.add(hpp,list,"可乐",12); //添加
break;
case 2 :t1.remove(hpp); //减少
break;
case 3:t1.printfF(hpp.printf(),hpp.count(),jm1); //打印订单 传输过去他集合的值 和总价
break;
// case 4:
// System.out.println("请输入需要添加的商品ID");
// String id=sc.next();//ID
// System.out.println("请输入需要添加的商品名称");
// String name=sc.next(); //商品名
// System.out.println("请输入需要添加的商品价格");
// double price=sc.nextDouble();//价格
//
// Product p1=new Product(id,name,price);
// boolean b = hpp.add_commodity(p1);
// if(b==true)
// {
// System.out.println("添加成功");
// }
// else
// {
// System.out.println("添加失败");
//
// }
// break;
// case 5:
// System.out.println("请输入需要修改价格的商品名称");
// String name1=sc.next(); //商品名
// System.out.println("请输入需要修改的商品价格");
// String price1=sc.next();//价格
// boolean b1 = hpp.alter_commodity(name1, price1);
// if(b1==true)
// {
// System.out.println("修改成功");
// }
// else
// {
// System.out.println("修改失败");
//
// }
// break;
// case 6:
// System.out.println("请输入需要删除的商品名称");
// String name2=sc.next(); //商品名
// boolean b2 = hpp.delete_commodity(name2);
// if(b2==true)
// {
// System.out.println("删除成功");
// }
// else
// {
// System.out.println("删除失败");
//
// }
// break;
case 7:
list = hpp.printfE();
System.out.println("当前拥有:");
for (Product product :list) {
System.out.println(" 物品ID:"+product.getCsequence()+" 物品名:"+product.getName()+" 物品价格:"+product.getPrice());
}
break;
default:
System.out.println("输入错误");
}
}catch (UnusualRuntime u)
{
u.printStackTrace();
}
}
}
private void printfF(Map<String,Item> map, double totalPrices,Text_JIEMING jm1) { //结账
String jz="";
jz=jz+"*****************商品单***************"+"\n";
jz=jz+" !当前订单! "+"\n";
for (String s : map.keySet()) {
Item item = map.get(s);
jz=jz+"单号为:"+s+" 物品:"+item.getP().getName()+" 价格为:"+item.getP().getPrice()+" 拥有数量::"+item.getNum()+" 该单价格:"+item.getPrice()+"\n";
}
jz=jz+"总共的价格为"+totalPrices+"\n";
jz=jz+"*****************商品单***************";
jm1.jt.setText(jz); //结账功能
}
public boolean add(IShoppingServer hpp,List<Product> list,String name,int sl) //添加商品操作
{
System.out.println("请输入购买的商品名字");
int i=-1,k=-1;
for (Product product : list) { //查找所对应的值的下标
if (product.equals(name))
{
i++; k++;
break;
}
else i++;
//如果最后一个都不为
}
if(k==-1){ //如果没有查询到此商品
System.out.println("没有查找到对应的商品!");
return false;
}
Product p1 = list.get(i); //调用此方法获取对象
System.out.println("请输入购买数量:");
hpp.add(p1, sl); //名字和数量
return true;
}
private void remove(IShoppingServer hpp) {//减少商品操作
System.out.println("请输入删除的商品名字");
String name = sc.next(); //输入名字
System.out.println("请输入需要减少数量:");
int quantity=sc.nextInt(); //输入数量
Product p1 = new Product(name);
if (hpp.remove(p1, quantity))//名字和数量
{
System.out.println("减少成功!");
}
else
{
System.out.println("当前数量不够/当前没有存储");
}
}
@Override
public void actionPerformed(ActionEvent e) {
}
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}
package Demo.java1.作业.商城管理系统.View;
//界面层2
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class Text_JIEMING extends Frame implements ActionListener, WindowListener { //购买界面
Label wz1,wz2,wz3,wz4,wz5,wz6,wz7,la10; //文字
TextField text1,text2,text3,text4,text5; //写字
JButton but1_GM,but2_JZ,but3,but4; //按钮
java.awt.List li; //选择控件
Panel pa;
JTextArea jt;
Text_JIEMING() {
wz1=new Label("当前购物车:");
text1=new TextField(); //物品
text1.setPreferredSize(new Dimension (600,400));
wz2=new Label(" 购买的商品名称:");
text2=new TextField(10);
wz3=new Label(" 购买数量:");
text3=new TextField(10);
but1_GM=new JButton("放入购物车");
but2_JZ=new JButton("结账");
jt=new JTextArea();
jt.setPreferredSize(new Dimension (600,400));
//放入区
pa=new Panel(); //设置布局
pa.add(wz1);
pa.add(jt);
pa.add(wz2);
pa.add(text2);
pa.add(wz3);
pa.add(text3);
pa.add(but1_GM);
pa.add(but2_JZ);//结
li=new List(8,true);
add(li,BorderLayout.SOUTH); //设置显示list的方式
//注册窗体区
addWindowListener(this); //注册窗体
// add(la10, BorderLayout.NORTH);
// add(la10, BorderLayout.NORTH);
add(pa, BorderLayout.CENTER); //设置布局
setTitle("商城管理系统<购买界面>");
setSize(1200, 600);
setVisible(true); //启动图形化
}
@Override
public void actionPerformed(ActionEvent e) {
}
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowIconified(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
}
//数据库的表
注*数据库名如果不一样调用的时候要修改数据库Dao层的连接字符串
/*
数据库代码层.直接运行就可以
Navicat Premium Data Transfer
Source Server : mysql
Source Server Type : MySQL
Source Server Version : 50729
Source Host : localhost:3306
Source Schema : javayzz
Target Server Type : MySQL
Target Server Version : 50729
File Encoding : 65001
Date: 29/12/2021 20:10:07
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for commodity
-- ----------------------------
DROP TABLE IF EXISTS `commodity`;
CREATE TABLE `commodity` (
`cid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`csequence` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`cname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`p_price` decimal(10, 2) NOT NULL,
PRIMARY KEY (`cid`) USING BTREE,
INDEX `csequence`(`csequence`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of commodity
-- ----------------------------
INSERT INTO `commodity` VALUES (3, '103', '香蕉', 4.50);
INSERT INTO `commodity` VALUES (18, '111', '柠檬', 12.40);
INSERT INTO `commodity` VALUES (22, '12312', '西瓜', 9999.00);
INSERT INTO `commodity` VALUES (24, '可乐', '23', 11.00);
INSERT INTO `commodity` VALUES (25, '1111', '口香糖', 111.20);
-- ----------------------------
-- Table structure for orderitem
-- ----------------------------
DROP TABLE IF EXISTS `orderitem`;
CREATE TABLE `orderitem` (
`oid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`csequence` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`cname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`p_price` int(10) NULL DEFAULT NULL,
`oprice` decimal(20, 2) NULL DEFAULT NULL,
`onumber` varchar(202) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`oid`) USING BTREE,
INDEX `onumber`(`onumber`) USING BTREE,
CONSTRAINT `orderitem_ibfk_1` FOREIGN KEY (`onumber`) REFERENCES `orders` (`onumber`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 111 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of orderitem
-- ----------------------------
-- ----------------------------
-- Table structure for orders
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`oid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`onumber` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`oprice` decimal(20, 2) NULL DEFAULT NULL,
`otime` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`oid`) USING BTREE,
INDEX `onumber`(`onumber`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 39 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of orders
-- ----------------------------
-- ----------------------------
-- Function structure for currval
-- ----------------------------
DROP FUNCTION IF EXISTS `currval`;
delimiter ;;
CREATE FUNCTION `currval`(seq_name VARCHAR(50))
RETURNS int(11)
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE VALUE INTEGER;
SET VALUE = 0;
SELECT current_value INTO VALUE FROM sequence WHERE NAME = seq_name;
RETURN VALUE;
END
;;
delimiter ;
SET FOREIGN_KEY_CHECKS = 1;
介绍二:
数据库表中实现了多对一的关联
数据表的插入采用了多表插入式
二.内存层面
通过使用集合Map实现在内存层面上的购物车类,
三.订单号生成
生成的订单号码采用了当前时间加4位随机数码
四.算法
通过对购物车的操作对购物车里面的数据进行内存方法的计算单个商品的和与多个商品的种和算法
五.接口层功能:
该软件拥有的功能全级
六业务层设计:
七.Dao层对数据的保存操作:
添加:
删除:
修改:
查询: