一、代码仓库地址
https://github.com/SE17/Order-food-on-the-Internet
二、Quick Start(简易快速使用指南)
1.注册功能 |
2.登录功能 |
3.浏览商品 |
3.1查看商品详情 |
3.2搜索商品 |
4.个人订单 |
5.我的收藏 |
三、代码实现:阐述是如何实现产品的,文字内容用于辅助阅读源代码(比如代码目录结构),可以粘一些核心代码,不要大段大段代码地贴。
.net代码目录 |
数据库代码目录 |
举例说明:商品浏览模块 |
.net代码视图层 |
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="goodlist.aspx.cs" Inherits="OnlineOrder.goodlist" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> </head> <body> <form id="form1" runat="server"> <div> <center> <asp:HyperLink ID="HyperLink7" runat="server" NavigateUrl="Index.aspx">首页</asp:HyperLink> <asp:HyperLink ID="HyperLink1" runat="server">注册</asp:HyperLink> <asp:HyperLink ID="HyperLink2" runat="server">登录</asp:HyperLink> </center> </div> <div> <center > <asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="搜索" onclick="Button1_Click" /> </center> </div> <div> <center> <asp:Label ID="Label3" runat="server" Text="排序"></asp:Label> <asp:DropDownList ID="DropDownList1" runat="server" onselectedindexchanged="DropDownList1_SelectedIndexChanged"> <asp:ListItem Value="pro_price" Selected="True">价格</asp:ListItem> <asp:ListItem Value="pro_amount">商品库存数</asp:ListItem> </asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server" onselectedindexchanged="DropDownList2_SelectedIndexChanged"> <asp:ListItem Value="ASC" Selected="True">升序</asp:ListItem> <asp:ListItem Value="DESC">降序</asp:ListItem> </asp:DropDownList>
</center> </div> <div> <center> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" AllowPaging="True" EmptyDataText="暂无记录" > <FooterStyle BackColor="#99CCCC" ForeColor="#003399" /> <Columns>
<asp:TemplateField HeaderText="商品名称" SortExpression="商品名称"> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("商品名称") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:ImageField AlternateText="123" DataImageUrlField = "商品图片" >
</asp:ImageField> <asp:TemplateField HeaderText="商品价格" SortExpression="商品价格"> <ItemTemplate> <asp:Label ID="Label2" runat="server" Text='<%# Bind("商品价格") %>' ></asp:Label> </ItemTemplate> </asp:TemplateField>
<asp:HyperLinkField DataNavigateUrlFields="pro_id" Text="查看详情" HeaderText="查看详情" DataNavigateUrlFormatString="GoodDetail.aspx?pro_id={0}" /> </Columns> <RowStyle BackColor="White" ForeColor="#003399" /> <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" /> <PagerStyle BackColor="#C0C0FF" ForeColor="#003399" HorizontalAlign="Left" /> <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" /> </asp:GridView> </center>
</div> </form> <p>
</p> </body> </html> |
.net代码控制层(调用数据库接口) |
using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Data.SqlClient;
namespace OnlineOrder { public partial class goodlist : System.Web.UI.Page { SqlConnection con; String ConnectionString = "Data Source=localhost;Persist Security Info=True;User ID=sa;Password=root; Initial Catalog=OnlineOrderVegetable;"; SqlCommand com; SqlDataAdapter da; DataTable table; protected void Page_Load(object sender, EventArgs e) { if (Session["webuser_id"] != null) { HyperLink1.Text = Session["account"].ToString(); HyperLink1.NavigateUrl = "UserInfo.aspx"; HyperLink2.Text = "购物车"; HyperLink2.NavigateUrl = "Cart.aspx"; } //搜索框搜索 if (Request.QueryString["key"] != null) { String key = Request.QueryString["key"];
produceSearch(key);
} //类别搜索 else { produceSelect();
} } //关键字模糊查询 protected void produceSearch(string key) { String sql = "proc_ProduceNameSelect"; con = new SqlConnection(ConnectionString); //打开连接 con.Open(); //生成SqlCommand对象 com = new SqlCommand(sql, con); //选择执行命令,存储过程 com.CommandType = CommandType.StoredProcedure; //添加参数 com.Parameters.AddWithValue("@key", key); //执行存储过程 com.ExecuteNonQuery(); //生成Adapter对象 da = new SqlDataAdapter(); //生成table table = new DataTable(); //Adapter对象获取数据 da.SelectCommand = com; //Adapter对象填充数据 da.Fill(table); //释放对象 con.Close(); //数据绑定 GridView1.DataSource = table; GridView1.DataBind(); } //商品类别检索 protected void produceSelect() { String sql = "proc_ProduceSelect"; String protype_id = Request.QueryString["protype_id"]; con = new SqlConnection(ConnectionString); //打开连接 con.Open(); //生成SqlCommand对象 com = new SqlCommand(sql,con);
//选择执行命令,存储过程 com.CommandType = CommandType.StoredProcedure; //添加参数 com.Parameters.AddWithValue("@protype_id", protype_id); //调用数据库接口存储过程proc_ProduceSelect com.ExecuteNonQuery(); //生成Adapter对象 da = new SqlDataAdapter(); //生成table table = new DataTable(); //Adapter对象获取数据 da.SelectCommand = com; //Adapter对象填充数据 da.Fill(table); //释放对象 con.Close(); //数据绑定 GridView1.DataSource = table; GridView1.DataBind(); }
//响应用户搜索请求 protected void Button1_Click(object sender, EventArgs e) { string key; string url; key = TextBox1.Text; //弹出对话框? if (key == null || key == "") {
} else { url = "goodlist.aspx?key=" + key; Response.Redirect(url); } }
} } |
Sql 存储过程接口proc_ProduceSelect |
--存储过程:proc_ProduceSelect --功能:分类浏览商品 --输入参数:商品类别编号、排序字段、排序类别 ALTER PROC proc_ProduceSelect @protype_id char(10)=NULL, @order_name varchar(10)=NULL, @order_type varchar(10)='ASC' AS BEGIN DECLARE @sql varchar(255) IF(@order_name IS NULL) BEGIN SELECT pro_id ,pro_name 商品名称,protype_name 商品类别,pro_icon 商品图片,pro_price 商品价格,pro_disprice 促销价,pro_amount 商品数量,collect_num 收藏次数 FROM produce INNER JOIN protype ON produce.protype_id = protype.protype_id WHERE (@protype_id = produce.protype_id OR @protype_id IS NULL) END ELSE BEGIN SET @sql = 'SELECT pro_id 商品编号,pro_name 商品名称,protype_name 商品类别,pro_icon 商品图片,pro_price 商品价格,pro_amount 商品数量 FROM produce INNER JOIN protype '+ 'ON produce.protype_id = protype.protype_id '+ 'WHERE ( produce.protype_id '+'LIKE '+@protype_id +' )' +' ORDER BY '+@order_name+' '+@order_type EXEC(@sql) END END GO |
四、 软件测试:阐述如何测试所开发的软件。
由于本产品还没有正式发布,无法让测试人员进行黑盒测试。
此处选择让开发人员一边开发一边进行白盒测试:测试存储过程能否正常执行功能。
举例模块:用户下订单模块
--①生成用户2的一条订单,返回订单编号给用户
DECLARE @order_id int
EXEC proc_OrdersInsert 2,4,@order_id OUTPUT
PRINT '订单编号:'+CAST(@order_id AS VArchar(4))
GO
(1 行受影响)
订单编号:24
--②根据订单编号和订单中的商品系统自动生成订单明细
--若其中某种商品库存不足,则删除该订单。
--a.若其中某种商品库存不足,则删除该订单。
EXEC proc_OrdersInfoInsert 20,1,3
GO
--查看该订单20,已被删除。
EXEC proc_OrdersInfoOrderIdSelect 20
GO
没有该订单!
--b. 给24号订单添加1件1号商品,4件2号商品
EXEC proc_OrdersInfoInsert 24,1,1
GO
EXEC proc_OrdersInfoInsert 24,2,4
GO
--③生成给用户的订单,订单状态默认为‘待付款’
EXEC proc_OrdersInfoOrderIdSelect 24
GO
--④用户给24号订单付款,扣除用户余额
--付款前
EXEC proc_WebuserSelect '15985700852'
GO
--付款结果,成功之后系统根据用户最近下单情况,自动推荐两种类别的随机产品给用户。
DECLARE @result varchar(20)
EXEC proc_OrderStateUpdatePay 24,2,@result OUTPUT
PRINT @result
GO
(1 行受影响)
付款成功
--付款后,用户账号余额情况
EXEC proc_WebuserSelect '15985700852'
GO
--⑤用户确认收货订单24号
EXEC proc_OrderStateUpdateReceive 24
GO
成功收到24号订单,该订单等待您的评价~
(1 行受影响)
--⑥2号用户对刚才收到的24号订单的商品做出评价
--对2号商品的评价
exec proc_OrderStateUpdateComment 2,24,"食材新鲜美味!还会回购的。"
GO
--对1号商品的评价
exec proc_OrderStateUpdateComment 1,24,"味道一般吧。"
GO
--⑦若用户喜欢哪一件商品,可以对商品进行收藏
--2号用户对2号商品进行了收藏
exec proc_CollectInsert 2,2
成功收藏2号商品!