📄 cart.java
字号:
/**************************************************************
*
*购物车,每个购物车的实例对应数据库中Order表中的一条纪录
*该购物车中每个同类产品对应数据库中OrderDetail表中的一条纪录
*
**************************************************************/
package mylib;
public class Cart {
//为客户生成一辆购物车
public Cart(int custId) {
this.customerId= custId;
details = new java.util.Hashtable();
}
//更新购物车
public void updateCart(String isdn,int qty) {
if(isdn!=null) {
//检查加入的商品是否存在或有库存
ConnectionDB condb = new ConnectionDB();
java.sql.ResultSet rs = condb.executeQuery("Select Stock from tb_Product where ISDN=\'"+isdn+"\'");
try {
if(rs.next()) {
int stock = rs.getInt("Stock");
if(stock>=qty) {
if(qty!=0) {
details.put(isdn,new Integer(qty));
this.checked = true;
}
//删除购物车中的商品
else {
details.remove(isdn);
this.checked = true;
}
}
else {
this.checked = false;
System.out.println("您选择的产品:"+isdn+"库存不够,现在库存数是:"+stock+"个。");
}
}
}
catch(Exception ex) {
this.checked = false;
ex.printStackTrace();
}
condb.close();
}
else {
this.checked = false;
System.out.println("错误,没有选中任何商品!");
}
}
//获取购物车属性
public int getCustomerId() {
return customerId;
}
public int getOrderId() {
return orderId;
}
public java.sql.Date getDate() {
return date;
}
public String getPayType() {
return payType;
}
public String getCarry() {
return carry;
}
//获取购物车中所有商品的ISDN
public String[] getProductsISDN() {
String[] products = new String[details.size()];
java.util.Enumeration e = details.keys();
int i = 0;
while(e.hasMoreElements()) {
products[i++] = (String)e.nextElement();
}
return products;
}
//查询购物车中商品的数量
public int getQuantity(String isdn) {
Integer i = (Integer)details.get(isdn);
return i.intValue();
}
//设置购物车属性
public void setPayType(String payType) {
this.payType = payType;
}
public void setCarry(String carry) {
this.carry = carry;
}
//埋单
public void payTheBill() {
if(this.checked) {
if(createOrder())//插入一条订单纪录
System.out.println("成功插入订单纪录");
else
System.out.println("插入订单纪录失败");
if(createDetails())//插入订单所有明细
System.out.println("成功插入订单明细纪录");
else
System.out.println("插入订单明细纪录失败");
}
else {
System.out.println("遇到错误,不能埋单。");
}
}
/******************************************
*数据库操作
*******************************************/
//生成一张订单
private boolean createOrder() {
ConnectionDB condb = new ConnectionDB();
//执行数据库中存储过程,返回一条新插入Order纪录的ResultSet
String sql = "execute CreateOrder ";
java.sql.ResultSet rs = condb.executeQuery(sql+this.customerId);
boolean successCreate = false;
try {
if(rs.next()) {
orderId = rs.getInt("Order_ID");
date = rs.getDate("Order_Date");
//rs.getInt("Customer_ID");
payType = rs.getString("PayType");
carry = rs.getString("Carry");
successCreate = true;
}
else
{
successCreate = false;
}
}
catch(Exception ex) {
ex.printStackTrace();
}
condb.close();
return successCreate;
}
//生成订单明细
private boolean createDetails() {
boolean successCreate = false;
ConnectionDB condb = new ConnectionDB();
String sql = "Insert into tb_OrderDetails values(?,?,?)";
String [] products = getProductsISDN();
int[] qty = new int[products.length];
int rows = 0;
for(int i=0;i<products.length;i++) {
Integer ii = (Integer)details.get(products[i]);
Object[] parameters = {orderId,products[i],ii};
rows = condb.executeUpdate(sql,parameters);
}
if(rows!=0)
successCreate = true;
else
successCreate = false;
condb.close();
return successCreate;
}
//购物车属性
private int orderId = 0; //订单ID
private int customerId= 0; //会员ID
private java.sql.Date date = null; //订单生成日期
private String payType = "邮局汇款"; //汇款方式
private String carry = "普通"; //订单紧急度
private boolean checked = false; //如果checked为false,则不能执行数据库操作,应该检查updateCart()
private java.util.Hashtable details = null; //明细
/**********************************************
*测试main()
**********************************************/
public static void main(String[] args) {
Cart c = new Cart(3);
c.updateCart("B002",1);
c.payTheBill();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -