记录自己关于web做过的一些实践(稍微有难度的购物车—第二部分)

上一部分讲的所有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;
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值