上一部分讲的所有action的内容都是传递到docar的界面的,在这一个界面可以通过传递的不同的信息来判断要执行哪一个操作,save里面的代码我抠出来了,会在下面再慢慢讲一下,因为这一部分我做的不是很好,所以也不建议大家这么做,比较麻烦,但是也会贴出来
不一样的action做不一样的命令,其中有一个mycar的增加商品和移除商品我是单独写了一个java的代码,方便后续的调用,在action中只有调用的程序,这篇文章的后面会写到
<%
ArrayList buylist = myCar.getBuylist();
float total = 0;
request.setCharacterEncoding("utf-8");
String username =(String)session.getAttribute("username");
String action = request.getParameter("action");
if (action == null)
action = "";
if (action.equals("buy")) {
ArrayList goodslist = (ArrayList) session.getAttribute("goodslist");
int id = MyTools.strToint(request.getParameter("id"));
GoodsSingle single = (GoodsSingle) goodslist.get(id);
myCar.addItem(single);
response.sendRedirect("buyshow.jsp");
} else if (action.equals("remove")) {
String name = request.getParameter("name");
myCar.removelItem(name);
response.sendRedirect("buyshopcar.jsp");
} else if (action.equals("clear")) {
myCar.clearCar();
response.sendRedirect("buyshopcar.jsp");
} else if (action.equals("save")) {
} else {
response.sendRedirect("buyshow.jsp");
}
%>
这里是save的代码块,要配合登录时buyloginmessage的代码一起看,我觉得有点太麻烦了,这两部分的内容,是为了实现一个功能,就是退出后再次登录,购物车内的商品信息会重新显示在购物车中,为了实现这个功能我在数据库里面多创建了一个列testno,这两段很长的代码的意思就是,如果要退出的话,就把这个用户购买的所有商品的testno变成0,这样的话就能知道上一次我退出时购物车里有什么物品,在一下次登录的时候就把所有物品的tesno再改成1,方便进行别的操作,由于这两个代码实在是太麻烦了,当初我写代码的时候没有感觉到,但是由于时间过去比较久了,现在回头看实在是太麻烦了,所以单独列出,不建议大家也这样写
db dbcon = new db();
if (buylist == null || buylist.size() == 0) {
String sql = "selsect * from list where username=? and testno=0";
PreparedStatement pst = dbcon.PreparedStatement(sql);
pst.setString(1,username);
ResultSet rs=pst.executeQuery();
if(rs.next()){
String sq = "update list set testno=1 where username=?";
PreparedStatement ps = dbcon.PreparedStatement(sq);
ps.setString(1,username);
ResultSet r=ps.executeQuery();
}
} else {
for (int i = 0; i < buylist.size(); i++) {
GoodsSingle single = (GoodsSingle) buylist.get(i);
String no = single.getNo();
String name = single.getName();
float price = single.getPrice();
int num = single.getNum();
float money = ((int) ((price * num + 0.05f) * 10)) / 10f;
total += money;
try {
String sql = "insert into list values(?,?,?,?,?,?)";
PreparedStatement prestate = dbcon.PreparedStatement(sql);
prestate.setString(1, username);
prestate.setString(2, no);
prestate.setString(3, name);
prestate.setFloat(4,price);
prestate.setInt(5,num);
prestate.setInt(6,0);
prestate.executeQuery();}
catch(SQLException e) {
System.out.println(e.toString());
}
}
}
myCar.clearCar();
response.sendRedirect("allmain.html");
这里是buyloginmessage的代码
<%
int i = 0;
PreparedStatement pst, psttt;
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
db con = new db();
pst = con.PreparedStatement("select * from register where account=? and password=?");
pst.setString(1, username);
pst.setString(2, password);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
db connn = new db();
psttt = connn.PreparedStatement("select * from register where account=? and testno=1");
psttt.setString(1, username);
ResultSet rrrr = psttt.executeQuery();
if (rrrr.next()) {
db connnn = new db();
PreparedStatement t = connnn.PreparedStatement("select * from list where testno=0");
ResultSet s = t.executeQuery();
while (s.next()) {
ArrayList goods = new ArrayList();
GoodsSingle single = new GoodsSingle();
single.setNo(s.getString("no"));
single.setName(s.getString("username") + "购物车的" + s.getString("name"));
single.setPrice(s.getFloat("price"));
single.setNum(s.getInt("num"));
goods.add(i, single);
myCar.addItem(single);
}
response.sendRedirect("buyindex.jsp");
} else {
session.setAttribute("uname", username);
db dbcon = new db();
PreparedStatement ps = dbcon.PreparedStatement("select * from list where username=? and testno=0");
ps.setString(1, username);
ResultSet r = ps.executeQuery();
while (r.next()) {
ArrayList goodslist = new ArrayList();
GoodsSingle single = new GoodsSingle();
single.setNo(r.getString("no"));
single.setName(r.getString("name"));
single.setPrice(r.getFloat("price"));
single.setNum(r.getInt("num"));
goodslist.add(i, single);
myCar.addItem(single);
}
ps = dbcon.PreparedStatement("select * from list where username=? and testno=0");
ps.setString(1, username);
r = ps.executeQuery();
while (r.next()) {
db dbc = new db();
try {
PreparedStatement p = dbc.PreparedStatement("update list set testno=1 where username=? ");
p.setString(1, username);
ResultSet rr = p.executeQuery();
} catch (Exception e) {
e.getStackTrace();
}
}
response.sendRedirect("buyindex.jsp");
}
} else {
response.sendRedirect("buylogin.html");
}
session.setAttribute("username", username);
%>
把上面这个复杂的代码说完之后,接下来讲的是添加删除购物车里面内容这些操作的代码,相比于上面的代码,这一段还是比较简单易懂的,先判断要加入的商品信息是不是为空,不为空才能进行下面的操作,如果购物车是空的,那就直接添加商品信息,不需要考虑别的,但是,如果购物车不为空的话,就要去购物车里面找,来判断这一次要购买的物品是不是购物车里面已经有了,如果有了的话,就直接让购物车该商品的数量加一,如果没有,再进行一般操作,remove的操作和add的操作类似
public class ShopCar {
private ArrayList buylist=new ArrayList();
public ArrayList getBuylist(){
return buylist;
}
public void addItem(GoodsSingle single){
if(single!=null){
if(buylist.size()==0){
GoodsSingle temp=new GoodsSingle();
temp.setNo(single.getNo());
temp.setName(single.getName());
temp.setPrice(single.getPrice());
temp.setNum(single.getNum());
buylist.add(temp);
}
else{
int i=0;
for(;i<buylist.size();i++){
GoodsSingle temp=(GoodsSingle)buylist.get(i);
if(temp.getName().equals(single.getName())){
temp.setNum(temp.getNum()+1);
break;
}
}
if(i>=buylist.size()){
GoodsSingle temp=new GoodsSingle();
temp.setNo(single.getNo());
temp.setName(single.getName());
temp.setPrice(single.getPrice());
temp.setNum(single.getNum());
buylist.add(temp);
}
}
}
}
public void removelItem(String name){
for(int i=0;i<buylist.size();i++){
GoodsSingle temp=(GoodsSingle)buylist.get(i);
if(temp.getName().equals(name)){
if(temp.getNum()>1){
temp.setNum(temp.getNum()-1);
break;
}
else if(temp.getNum()==1){
buylist.remove(i);
}
}
}
}
public void clearCar(){
buylist.clear();
}
}
还有一个代码是工具代码,就不多详细说了,应该看得懂
public class MyTools {
public static int strToint(String str){
if(str==null||str.equals(""))
str="0";
int i=0;
try{
i=Integer.parseInt(str);
}catch(NumberFormatException e){
i=0;
e.printStackTrace();
}
return i;
}
public static String toChinese(String str){
if(str==null)
str="";
try{
str=new String(str.getBytes("ISO-8859-1"),"gb2312");
}catch(UnsupportedEncodingException e){
str="";
e.printStackTrace();
}
return str;
}
}