java_jsp课程设计报告(网络购物车的实现) 2[1] (2)

       南阳理工学院

课  程  设  计

课程设计名称:    课程设计        

    数据库一班     

     张文瑞           

            1315925020          

                 

网络购物车

一:需求分析

    利用html、jsp、java、servlet、数据库等知识点,结合相关设计模式、以及软件工程的相关知识,设计一个网站购物车,用于记录不同客户的购物订单,并能对购物车中商品信息进行查询、修改、删除、清空、下载等操作,商品信息存储在数据库中。具体要实现的功能如下:1:显示商品展示界面、操作成功界面、购物车展示界面等界面。2:商品信息存储在数据库中。3:对商品信息能够进行查询、修改、删除、清空、下载等操作。4:使用MVC设计模式(View(jsp)、Model(javaBean)、Controller(servlet))。5:在浏览器中输入访问信息进行访问。6:购物车信息分页显示。

二:概要设计

本次课程设计中使用了MVC设计模式,jsp作为View,javaBean作为Model,servlet作为controller,实现界面与逻辑的分离,模块之间松耦合,通过传递参数进行调用。Jsp页面通过发送一个操作类型变量,从而使得controller获知应当进行的操作,并通过调用javabean进行实际的执行,这样页面与逻辑就得到了分离,互不干涉和影响。使用数据库存储购物信息,在数据库中对商品信息进行增、删、改、查等操作,此外控制器通过调用writeexcel类,在每次查看信息之前把当前的商品信息写入到xls文件中进行保存,并供用户下载。具体的设计模块及系统流程如下图所示:

 


三:运行环境、开发语言

运行环境:Windows XP 浏览器

开发语言:html、jsp、java

四:详细设计

1:程序清单

           Java课程设计网络购物车文件功能对应表

2:主要代码

1:显示商品信息界面

用jsp来显示主界面

<%@page contentType="text/html;charset=gb2312"%>

<html>

<head>

<title>登录主页面</title>

</head>

<body>

<br>

<h1 align="center">欢迎光临百味书屋!</h1><br><br><br></p>

<p align="center">

<table width="80%" align=center>//用表格来排列显示信息

<tr>

<td><form method="post" action="controloperate?operatetype=add&booknum=0001"><image src="./image/11.jpg" align=left>书名:货币战争<br>书号:0001

<br>作者:王一<br>价格:23<br><input type="submit" value="购买"><br></image></form></td>

<td><form method="post" action="controloperate?operatetype=add&booknum=0002"><image src="./image/12.jpg" align=left>书名:我的抗战<br>书号:0002

<br>作者:王二<br>价格:33<br><input type="submit" value="购买"><br></image></form></td>

<td><form method="post" action="controloperate?operatetype=add&booknum=0003"><image src="./image/13.jpg" align=left>书名:你猫叔了没<br>书号:0003

<br>作者:王三<br>价格:43<br><input type="submit" value="购买"><br></image></form></td>

</tr>

<tr>

<td><form method="post" action="controloperate?operatetype=add&booknum=0004"><image src="./image/21.jpg" align=left>书名:赞美你<br>书号:0004

<br>作者:王四<br>价格:53<br><input type="submit" value="购买"><br></image></form></td>

<td><form method="post" action="controloperate?operatetype=add&booknum=0005"><image src="./image/22.jpg" align=left>书名:刀尖<br>书号:0005

<br>作者:王五<br>价格:63<br><input type="submit" value="购买"><br></image></form></td>

<td><form method="post" action="controloperate?operatetype=add&booknum=0006"><image src="./image/23.jpg" align=left>书名:人脉是设计出来的<br>书号:0006

<br>作者:王六<br>价格:73<br><input type="submit" value="购买"><br></image></form></td>

</tr>

<tr>

<td><form method="post" action="controloperate?operatetype=add&booknum=0007"><image src="./image/31.jpg" align=left>书名:龙年运程<br>书号:0007

<br>作者:王七<br>价格:83<br><input type="submit" value="购买"><br></image></form></td>

<td><form method="post" action="controloperate?operatetype=add&booknum=0008"><image src="./image/32.jpg" align=left>书名:最好的时光在路上<br>书号:0008

<br>作者:王八<br>价格:93<br><input type="submit" value="购买"><br></image></form></td>

<td><form method="post" action="controloperate?operatetype=add&booknum=0009"><image src="./image/33.jpg" align=left>书名:七日谈<br>书号:0009

<br>作者:王九<br>价格:103<br><input type="submit" value="购买"><br></image></form></td>

</tr>

</table>

<br><br><br>

<h1 align="center"><form method="post" action="controloperate?operatetype=scan"><input type="submit" value="查看购物车"></form></h1>

</p></body>

</html>

2:显示购物车信息界面

用jsp分页显示购物车中的商品信息

<%@page import="java.sql.*" import="java.util.*" contentType="text/html;charset=gb2312"%>

<html>

<head>

<title>购物车界面</title>

</head>

<body>

<br><br>

<h2 align="center">您的购物车列表:</h2>

<br><br><br>

<%

   request.setCharacterEncoding("gb2312");

   ArrayList[] rs;

   rs=(ArrayList[])session.getAttribute("rs");//获取从数据库的查询结果集

   int onepagecount=3;int totalcount=0;int pagecount=0;

   if(rs[0]!=null)

   {

    totalcount=rs.length;//获取分页显示需要的相关变量

    if(totalcount%onepagecount==0)

    {

     pagecount=totalcount/onepagecount;

    }

    else

    {

     pagecount=totalcount/onepagecount+1;

    }

    if(request.getParameter("nowpage")!=null)//如果不是第一次登录查询界面的处理

    {

     request.setCharacterEncoding("gb2312");

     int nowpage=Integer.parseInt(request.getParameter("nowpage"));

     //rs.absolute(nowpage*onepagecount+1);

     %>

       <h2 align="center"><table align="center">

       <tr><td>书名</td><td></td><td>书号</td><td></td><td>作者</td>

       <td></td><td>价格</td><td></td><td>数量</td></tr>

     <%

     if((nowpage+1)*onepagecount>=totalcount)//当前页面为最后一页

     {

      for(int i=0;i<(totalcount-nowpage*onepagecount);i++)

      {

       %>

        <tr><td><%=rs[nowpage*onepagecount+i].get(0)%></td><td></td><td><%=rs[nowpage*onepagecount+i].get(1)%></td>

         <td></td><td><%=rs[nowpage*onepagecount+i].get(2)%></td><td></td><td><%=rs[nowpage*onepagecount+i].get(3)%></td>

         <td></td><td><%=rs[nowpage*onepagecount+i].get(4)%></td>

         <td></td><td><form method="post" action="alter.jsp?booknum=<%=rs[nowpage*onepagecount+i].get(1)%>">

         <input type="submit" value="修改"></form></td><td></td>

         <td><form method="post" action="controloperate?operatetype=delete&booknum=<%=rs[nowpage*onepagecount+i].get(1)%>">

         <input type="submit" value="删除"></form></td><td></td></tr>

       <%

      }

      %>

        </table><br></h2>

        <h2 align="center"><form method="post" action="controloperate?operatetype=deleteall"><input type="submit" value="清空购物车"></form><br>

        <h2 align="center"><a href="shoppingcarmessage.xls">下载购物信息</a><br>

        <a href="default.jsp">返回主页</a><br><br></h2>

        <h3 align="right"><a href="shoppingcarplay.jsp?nowpage=<%=nowpage-1%>">上一页</a>&nbsp 第<%=nowpage+1%>页 &nbsp 共<%=pagecount%>页</h3>

      <%

     }

     Else//不是最后一页

     {

      for(int i=0;i<onepagecount;i++)

      {

       %>

        <tr><td><%=rs[nowpage*onepagecount+i].get(0)%></td><td></td><td><%=rs[nowpage*onepagecount+i].get(1)%></td>

         <td></td><td><%=rs[nowpage*onepagecount+i].get(2)%></td><td></td><td><%=rs[nowpage*onepagecount+i].get(3)%></td>

         <td></td><td><%=rs[nowpage*onepagecount+i].get(4)%></td>

         <td></td><td><form method="post" action="alter.jsp?booknum=<%=rs[nowpage*onepagecount+i].get(1)%>">

         <input type="submit" value="修改"></form></td><td></td>

         <td><form method="post" action="controloperate?operatetype=delete&booknum=<%=rs[nowpage*onepagecount+i].get(1)%>">

         <input type="submit" value="删除"></form></td><td></td></tr>

       <%

       //rs.next();

      }

      if((nowpage-1)==-1)//第一页

      {

        %>

          </table><br></h2>

          <h2 align="center"><form method="post" action="controloperate?operatetype=deleteall"><input type="submit" value="清空购物车"></form><br>

          <h2 align="center"><a href="shoppingcarmessage.xls">下载购物信息</a><br>

          <a href="default.jsp">返回主页</a><br><br></h2>

          <h3 align="right"><a href="shoppingcarplay.jsp?nowpage=<%=nowpage+1%>">下一页</a>&nbsp 第<%=nowpage+1%>页 &nbsp 共<%=pagecount%>页</h3>

        <%

      }

      if((nowpage+1)==pagecount){ //最后一页     {

        %>

          </table><br></h2>

          <h2 align="center"><form method="post" action="controloperate?operatetype=deleteall"><input type="submit" value="清空购物车"></form><br>

          <h2 align="center"><a href="shoppingcarmessage.xls">下载购物信息</a><br>

          <a href="default.jsp">返回主页</a><br><br></h2>

          <h3 align="right"><a href="shoppingcarplay.jsp?nowpage=<%=nowpage-1%>">上一页</a>&nbsp 第<%=nowpage+1%>页 &nbsp 共<%=pagecount%>页</h3>

        <%

      }

      if(((nowpage-1)!=-1)&&((nowpage+1)!=pagecount))//中间页面

      {

        %>

          </table><br></h2>

          <h2 align="center"><form method="post" action="controloperate?operatetype=deleteall"><input type="submit" value="清空购物车"></form><br>

          <h2 align="center"><a href="shoppingcarmessage.xls">下载购物信息</a><br>

          <a href="default.jsp">返回主页</a><br><br></h2>

          <h3 align="right"><a href="shoppingcarplay.jsp?nowpage=<%=nowpage-1%>">上一页</a> &nbsp<a href="shoppingcarplay.jsp?nowpage=<%=nowpage+1%>">下一页</a>&nbsp 第<%=nowpage+1%>页 &nbsp 共<%=pagecount%>页</h3>

        <%

      }

     }

    }

    Else//第一次登录查询页面

    {

     %>

       <h2 align="center"><table align="center">

       <tr><td>书名</td><td></td><td>书号</td><td></td><td>作者</td>

       <td></td><td>价格</td><td></td><td>数量</td></tr>

     <%

     if(totalcount<=3)//总页面=1

     {

      for(int i=0;i<totalcount;i++)

      {

       %>

        <tr><td><%=rs[i].get(0)%></td><td></td><td><%=rs[i].get(1)%></td>

         <td></td><td><%=rs[i].get(2)%></td><td></td><td><%=rs[i].get(3)%></td>

         <td></td><td><%=rs[i].get(4)%></td>

         <td></td><td><form method="post" action="alter.jsp?booknum=<%=rs[i].get(1)%>">

         <input type="submit" value="修改"></form></td><td></td>

         <td><form method="post" action="controloperate?operatetype=delete&booknum=<%=rs[i].get(1)%>">

         <input type="submit" value="删除"></form></td><td></td></tr>

       <%

       //rs.next();

      }

      %></table><br></h2>

         <h2 align="center"><form method="post" action="controloperate?operatetype=deleteall"><input type="submit" value="清空购物车"></form><br>

         <h2 align="center"><a href="shoppingcarmessage.xls">下载购物信息</a><br>

         <a href="default.jsp">返回主页</a></h2>

      <%     

     }

     Else//总页面>1

     {

      for(int i=0;i<onepagecount;i++)

      {

       %>

        <tr><td><%=rs[i].get(0)%></td><td></td><td><%=rs[i].get(1)%></td>

         <td></td><td><%=rs[i].get(2)%></td><td></td><td><%=rs[i].get(3)%></td>

         <td></td><td><%=rs[i].get(4)%></td>

         <td></td><td><form method="post" action="alter.jsp?booknum=<%=rs[i].get(1)%>">

         <input type="submit" value="修改"></form></td><td></td>

         <td><form method="post" action="operate?operatetype=delete&booknum=<%=rs[i].get(1)%>">

         <input type="submit" value="删除"></form></td><td></td></tr>

       <%  

      }

      %></table><br></h2>

        <h2 align="center"><form method="post" action="controloperate?operatetype=deleteall"><input type="submit" value="清空购物车"></form><br>

        <h2 align="center"><a href="shoppingcarmessage.xls">下载购物信息</a><br>

        <a href="default.jsp">返回主页</a><br><br></h2>

        <h3 align="right"><a href="shoppingcarplay.jsp?nowpage=1">下一页</a>&nbsp 第一页 &nbsp 共<%=pagecount%>页</h3>

      <%

     }

    }

   }

   Else//结果集为空

   {

    %>

      <br><br>

      <h2 align="center">您的购物车是空的!</h2><br><br><br><br>

      <h2 align="center"><a href="default.jsp">返回主页</a></h2>

    <%

   }

%>

</body>

</html>

3:显示修改商品界面

用jsp显示修改商品信息的界面

<%@page contentType="text/html;charset=gb2312"%>

<html>

<head>

<title>修改购物车界面</title>

</head>

<body>

<br><br><br><br><br><br><br>

<%

  request.setCharacterEncoding("gb2312");

  String booknum=(String)request.getParameter("booknum");

  %>

    <h2 align="center">//用form来提交修改的变量及书号

    <form action="controloperate?operatetype=alter&booknum=<%=booknum%>" method="post">

    您要订购的数量:<input type="text" name="count">

    <input type="submit" value="提交">

    </h2>

  <%

%>

</body>

</html>

4:显示成功添加商品

用jsp显示成功添加操作

<%@page contentType="text/html;charset=gb2312"%>

<html>

<head>

<title>添加成功界面</title>

</head>

<body>

<br><br>

<h3 align="center">已成功加入购物车!</h3>

<br><br><br><br><br>

<h1 align="center"><a href="default.jsp">返回主页</a></h1>

</body>

</html>

5:显示成功更新商品

用jsp显示成功更新操作

<%@page contentType="text/html;charset=gb2312"%>

<html>

<head>

<title>更新成功界面</title>

</head>

<body>

<br><br>

<h3 align="center">已成功更新您的购物车!</h3>

<br><br><br><br><br>

<h1 align="center"><form method="post" action="controloperate?operatetype=scan">

<input type="submit" value="返回购物车">

</form></h1>

</body>

</html>

6:控制进行各种操作功能

用java servlet实现控制器控制进行各种操作以及决定返回何种界面

package shoppingcar;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.sql.*;

public class controloperate extends HttpServlet

{//重写dopost方法对jsp请求进行处理

 public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException

 {

  request.setCharacterEncoding("gb2312");//获取相关变量

  String operatetype=(String)request.getParameter("operatetype");

  shoppingcar.operate ope=new shoppingcar.operate();

  shoppingcar.writeexcel we=new shoppingcar.writeexcel();

  HttpSession session = request.getSession();

  if(operatetype.equals("add"))//添加操作的处理

  {

   request.setCharacterEncoding("gb2312");

   String booknum= (String)request.getParameter("booknum");

   String ip=(String)request.getRemoteAddr();

   ope.addbook(booknum,ip);

   response.sendRedirect("addsuccess.jsp");

  }

  if(operatetype.equals("scan"))//查询操作的处理

  {

   ArrayList[] rs=ope.getbook();

   session.setAttribute("rs",rs);

   if(rs[0]!=null)

   {

    we.write(rs);

   }

   response.sendRedirect("shoppingcarplay.jsp");

  }

  if(operatetype.equals("alter"))//修改操作的处理

  {

   request.setCharacterEncoding("gb2312");

   String booknum= (String)request.getParameter("booknum");

   String count=(String)request.getParameter("count");

   ope.updatebook(booknum,count);

   response.sendRedirect("updatesuccess.jsp");

  }

  if(operatetype.equals("delete"))//删除操作的处理

  {

   request.setCharacterEncoding("gb2312");

   String booknum= (String)request.getParameter("booknum");

   ope.deletebook(booknum);

   response.sendRedirect("updatesuccess.jsp");

  }

  if(operatetype.equals("deleteall"))//清空购物车操作的处理

  {

   request.setCharacterEncoding("gb2312");

   ope.deleteallbook();

   response.sendRedirect("updatesuccess.jsp");

  }

 }

}

7:对数据库进行操作功能

       用javabean通过多个函数实现对数据库的多种操作

package shoppingcar;

import java.sql.*;

import java.util.*;

public class operate

{

 ArrayList[] a;

 public void addbook(String booknum,String ip)//对数据库进行添加记录操作

 {

  try

  {

   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //连接数据库

   Connection conn = DriverManager.getConnection("jdbc:odbc:shoppingcar","sa","111111");

   Statement stmt = conn.createStatement(); 

   String sql1="select * from 购物车 where 书号='"+booknum+"' and ip地址='"+ip+"'";

   ResultSet rs=stmt.executeQuery(sql1);

   String sql2="insert into 购物车(ip地址,书号,数量) values('"+ip+"','"+booknum+"',1)";

   if(!rs.next())//当前不存在该条记录直接插入

   {

    stmt.executeUpdate(sql2);

   }

   Else//否则进行更新操作

   {

    int newcount=rs.getInt("数量");newcount+=1;

    String sql3="update 购物车 set 数量="+newcount+" where 书号='"+booknum+"' and ip地址='"+ip+"'";

    stmt.executeUpdate(sql3);

   }

   stmt.close();conn.close();

  }catch(Exception e){}

 }

 public void get()

 {

  try

  {

   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

   Connection conn1 = DriverManager.getConnection("jdbc:odbc:shoppingcar","sa","111111");

   Statement stmt1 = conn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);//创建支持游标滚动的statement

   String sql="select 书名 , 书籍.书号 , 作者 , 价格 , 数量 from 书籍 , 购物车 where 书籍.书号=购物车.书号";//获取结果的sql语句

   ResultSet rs=stmt1.executeQuery(sql);

   if(rs.next())

   {

      rs.last();

      Integer rows = rs.getRow();

      rs.beforeFirst();

      this.a=new ArrayList[rows];

      int l =0;

      while (rs.next()) //将结果集转换为数组对象

      {

         this.a[l] = new ArrayList();

         this.a[l].add(0,rs.getString(1));

         this.a[l].add(1,rs.getString(2));

         this.a[l].add(2,rs.getString(3));

         this.a[l].add(3,rs.getString(4));

         this.a[l].add(4,rs.getInt(5));

         l++;

         //System.out.println("success5");//判断该语句是否执行成功

      }

   }

   else

   {

     this.a=new ArrayList[100];

   }

   stmt1.close();conn1.close();

  }catch(Exception e){}

 }

 public ArrayList[] getbook()

 {

  get();

  return this.a;//返回数组对象

 }

 public void updatebook(String booknum,String count)//对数据库执行修改操作作

 {

  try

  {

   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

   Connection conn1 = DriverManager.getConnection("jdbc:odbc:shoppingcar","sa","111111");

   Statement stmt1 = conn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);//创建支持游标滚动的statement

   int bookcount=Integer.parseInt(count);

   if(bookcount<=0)

   {

     deletebook(booknum);

   }

   else

   {

     String sql="update 购物车 set 数量="+bookcount+" where 书号='"+booknum+"'";

     stmt1.executeUpdate(sql);

     stmt1.close();conn1.close();

   }

  }catch(Exception e){}

 }

 public void deletebook(String booknum)//对数据库执行删除操作

 {

  try

  {

   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

   Connection conn1 = DriverManager.getConnection("jdbc:odbc:shoppingcar","sa","111111");

   Statement stmt1 = conn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);//创建支持游标滚动的statement

   String sql="delete 购物车 where 书号='"+booknum+"'";

   stmt1.executeUpdate(sql);

   stmt1.close();conn1.close();

  }catch(Exception e){}

 }

 public void deleteallbook()//清空购物车

 {

  try

  {

   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

   Connection conn1 = DriverManager.getConnection("jdbc:odbc:shoppingcar","sa","111111");

   Statement stmt1 = conn1.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);//创建支持游标滚动的statement

   String sql="truncate table 购物车";

   stmt1.executeUpdate(sql);

   stmt1.close();conn1.close();

  }catch(Exception e){}

 }

}

8:生成excel信息文件

用java application引入poi包后,生成exceel文件,生成表格,循     环添加行数据,最终生成购物车信息。

    package shoppingcar;

    import java.io.*; 

    import java.text.NumberFormat; 

    import java.util.*;

    import org.apache.poi.hssf.usermodel.HSSFCell;  //引入poi工具包

    import org.apache.poi.hssf.usermodel.HSSFRow; 

    import org.apache.poi.hssf.usermodel.HSSFSheet; 

    import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

     

     

    public class writeexcel//<b style="color:black;background-color:#ff9999">Excel</b>

    { 

        public void write(ArrayList[] rs)

        { 

            HSSFWorkbook wb = new HSSFWorkbook(); //相当于writeexcel整个文件 

            FileOutputStream fos = null;              

            try

         { 

                //创建一个文件 

                fos = new FileOutputStream("D:/apache-tomcat-6.0.33/webapps/shoppingcar/shoppingcarmessage.xls"); 

            } catch (FileNotFoundException e) { 

                // TODO Auto-generated catch block 

                e.printStackTrace(); 

            } 

            HSSFSheet sheet = wb.createSheet("sheet1"); //生成writeexcel中的sheet     

            HSSFRow row = sheet.createRow(0); //创建第一行      

            HSSFCell cell = row.createCell((short) 0); //创建第一个单元格 

            cell.setEncoding(HSSFCell.ENCODING_UTF_16); //设定单元格的字符编码 

            cell.setCellValue("书名"); //设定单元格的名字       

            cell = row.createCell((short) 1); //创建第二个单元格 

            cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

            cell.setCellValue("书号"); 

            cell = row.createCell((short) 2); 

            cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

            cell.setCellValue("作者"); 

            cell = row.createCell((short) 3); 

            cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

            cell.setCellValue("价格"); 

            cell = row.createCell((short) 4); 

            cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

            cell.setCellValue("数量"); 

            int totalcount=rs.length;

            for (int i = 0; i <totalcount; ++i) //循环添加结果记录

              { 

                String bookname=(String)rs[i].get(0);String booknum=(String)rs[i].get(1);

              String bookauthor=(String)rs[i].get(2);String bookprice=(String)rs[i].get(3);

              int bookcount=Integer.parseInt(rs[i].get(4).toString());

                row = sheet.createRow(i +1); //创建行 

                cell = row.createCell((short) 0); 

                cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

                cell.setCellValue(bookname); //设定序号 

                cell = row.createCell((short) 1); 

                cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

                cell.setCellValue(booknum);       

                cell = row.createCell((short) 2); 

                cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

                cell.setCellValue(bookauthor); 

                cell = row.createCell((short) 3); 

                cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

                cell.setCellValue(bookprice);       

                cell = row.createCell((short) 4); 

                cell.setEncoding(HSSFCell.ENCODING_UTF_16); 

                cell.setCellValue(bookcount); 

            } 

            try

           { 

                //将这个文件交给HSSFWorkbook类 由它负责<b style="color:black;background-color:#99ff99">写入</b> 

                wb.write(fos); 

                //关闭输出流 

                fos.close(); 

            } catch (IOException e1) { 

                // TODO Auto-generated catch block 

                e1.printStackTrace(); 

            } 

        } 

    } 

五:调试与分析

本次设计中主要遇到了三点困难:(1)采用MVC设计模式,由于是第一次使用该模式,所以构思了很长时间才确定下来程序的模块结构及功能。(2)使用了java servlet,servlet也是第一次使用,中间还要用到配置XML文件,我在网上搜了很多资料才实现了servlet的应用。(3)使用了数据库,也是由于使用的不多,sql语句以及连接数据库都不太熟悉,花费了一番功夫才得到解决。

六:功能测试

登陆界面显示如图1:

1:

添加商品如图2:

2:

查看购物车如图3:

3:

修改商品如图4、5:

4:

5:

删除商品以及清空购物车如图6:

6:

下载购物车信息如图7:

7:

七:结论与心得

在本次课程设计中,除了html、jsp、javaapplication以外,我首次使用了MVC设计模式,首次使用了servlet,并巩固了连接数据库、使用数据库的能力,尽管遇到了很多困难,但我通过查找大量的资料,最终这些问题都得到了解决。通过本次课程设计,我不仅学习和巩固了很多知识,更重要的是我增强了解决问题的能力,主要表现在网上搜索信息的能力,获益匪浅。如果时间充足的话,我想能更进一步的增加功能,完善代码,使得功能更加强大、代码更加符合软件工程的要求,做得更好。

   八:参考资料

【1】(美)Cay S. Horstmann、Gary Cornell. Java核心技术卷I:基础知识(第8版)(英文影印版).人民邮电出版社, 2008.11

【2】耿祥义、张跃平. JAVA2实用教程(修订). 清华大学出版社,2001.10

【3】杨小平 java项目案例导航 科学出版社,2003.7

【4】傅进勇、邓少烽、李波 jsp网络编程 电子工业出版社  2008.5

相关推荐