资源描述
电子商务网站制作说明书
73
2020年4月19日
文档仅供参考
一、背景
在互联网日益流行的今天,网络成为了人们获取信息的主要渠道,而在网络的大家庭中,电子商务则是一个热门,电子商务的一个最基本体现就是电子购物网站,从一定程度上讲它就是网上超市,也就是一种网上销售,人们利用网络购物,不需要再像传统的购物一样在街上东奔西跑,既能够节约时间,又能够节约精力,对于在网络上开店的企业来说,电子商务使得企业能直接面向最终客户,从而降低交易成本和客户售后咨询等服务费用,特别是对无形产品的服务,现阶段企业开展电子商务以加强与客户的沟通和促进产品销售,对于买卖双方来说都是有益的。
二、实验目的
1. 进一步熟悉和掌握Oracle的各种操作。
2. 能够在实际的事例中灵活运用学到的有关知识。
3. 能够编写满足某种要求的功能。
三、实验内容
1. 系统设计
2. 数据库设计
3. 公共类设计
4. 系统主界面与登录程序设计
5. 商品类别管理模块设计
四﹑实验步骤
1﹑ 系统设计
1.1、系统目标
对于典型的数据库管理系统,特别是电子商务平台这样的数据流比较大的网络管理系统,必须要满足使用方便、操作灵活等设计需求。本系统满足以下几个目标:
1. 界面设计美观有好,操作简便。
2. 全面、分类战士商城内所有商品。
3. 显示商品的详细信息,方便顾客了解商品信息。
4. 查看商城内的交易信息。
5. 设置灵活的打印功能。
6. 系统对用户输入的数据,进行严格的数据检验,尽可能的排除人为错误。
7. 提供新品上市公告,方便顾客及时了解相关信息。
8. 提供网上留言功能。
9. 系统最大限度的实现以维护性和易操作性。
10. 系统运行稳定、安全可靠。
1.2、系流程统图
电子商务平台系统流程图:
电子商务网站
在线支付
进行商品信息管理、订单管理、用户管理、系统管理等
网站访问者
网站管理员
查看订单
更改商品数量
购物车
浏览网站其它模块
选择商品
注册
购买
登录
登录
否
是
是
是
否
是
否
否
否
是
1.3、系统功能结构
电子商务平台前台管理系统功能设计:
电子商务平台前台管理系统
商品分类
购
物流
程
用
户
流
程
特
价商品
热门商品
我的留言
本站留言
1.4、构建开发环境
网站开发环境
网站开发环境:Microsoft Visual Studio 集成开发环境。
网站开发语言:ASP.NET+C#。
网站后台数据库:Oracle 10g
开发环境运行平台:Windows7。
2﹑ 数据库设计
2.1﹑ 数据库概要说明
所使用数据库为Oracle 10g 数据库。
2.2﹑ 数据库概念设计
经过对网站需求分析、网站流程设计以及功能结构的确定,规划出系统中使用的数据库实体对象分别是商品类型实体、商品信息实体、商品订单实体、商品订单明细实体和管理员实体。
商品类型实体:
商品类型
类型图片
类型名称
类型编号
商品信息实体:
商品信息
商品名称
是否打折
商品编号
商品简介
商品市场价
商品热销价
商品图片
进货如期
商品订单实体:
商品订单
商品订单编号
商品费用
订单总费用
接收人姓名
是否打折
是否发货
商品运输方式
商品市场价
商品订单明细实体:
商品订单明细
商品总金额
订单详细表号
备注
商品对应订单号
商品代号
商品数量
管理员实体:
管理员
管理员真实姓名
管理员密码
管理员登录名
管理员编号
创立时间
E-mail地址
2.3﹑ 数据库逻辑结构设计
公共信息表:
商品类别表:
商品信息表:
购物车表:
用户信息表:
管理员表
3﹑公共类的设计
1﹑ CommonClass类:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/// <summary>
/// CommonClass 的摘要说明
/// </summary>
public class CommonClass
{
public CommonClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 说明:MessageBox用来在客户端弹出对话框,关闭对话框返回指定页。
/// 参数:TxtMessage 对话框中显示的内容。
/// Url 对话框关闭后,跳转的页
/// </summary>
public string MessageBox(string TxtMessage,string Url)
{
string str;
str = "<script language=javascript>alert('" + TxtMessage + "');location='" + Url + "';</script>";
return str;
}
/// <summary>
/// 说明:MessageBox用来在客户端弹出对话框。
/// 参数:TxtMessage 对话框中显示的内容。
/// </summary>
public string MessageBox(string TxtMessage)
{
string str;
str = "<script language=javascript>alert('" + TxtMessage + "')</script>";
return str;
}
/// <summary>
/// 说明:MessageBoxPag用来在客户端弹出对话框,关闭对话框返回原页。
/// 参数:TxtMessage 对话框中显示的内容。
/// </summary>
public string MessageBoxPage(string TxtMessage)
{
string str;
str = "<script language=javascript>alert('" + TxtMessage + "');location='javascript:history.go(-1)';</script>";
return str;
}
/// <summary>
/// 实现随机验证码
/// </summary>
/// <param name="n">显示验证码的个数</param>
/// <returns>返回生成的随机数</returns>
public string RandomNum(int n) //
{
//定义一个包括数字、大写英文字母和小写英文字母的字符串
string strchar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
//将strchar字符串转化为数组
//String.Split 方法返回包含此实例中的子字符串(由指定Char数组的元素分隔)的 String 数组。
string[] VcArray = strchar.Split(',');
string VNum = "";
//记录上次随机数值,尽量避免产生几个一样的随机数
int temp = -1;
//采用一个简单的算法以保证生成随机数的不同
Random rand = new Random();
for (int i = 1; i < n + 1; i++)
{
if (temp != -1)
{
//unchecked 关键字用于取消整型算术运算和转换的溢出检查。
//DateTime.Ticks 属性获取表示此实例的日期和时间的刻度数。
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
}
//Random.Next 方法返回一个小于所指定最大值的非负随机数。
int t = rand.Next(61);
if (temp != -1 && temp == t)
{
return RandomNum(n);
}
temp = t;
VNum += VcArray[t];
}
return VNum;//返回生成的随机数
}
/// <summary>
/// 用来截取小数点后nleng位
/// </summary>
/// <param name="sString">sString原字符串。</param>
/// <param name="nLeng">nLeng长度。</param>
/// <returns>处理后的字符串。</returns>
public string VarStr(string sString, int nLeng)
{
int index = sString.IndexOf(".");
if (index == -1 || index + nLeng >= sString.Length)
return sString;
else
return sString.Substring(0, (index + nLeng + 1));
}
}
2﹑DBClass类;
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/// <summary>
/// DBClass 的摘要说明
/// </summary>
public class DBClass
{
public DBClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 连接数据库
/// </summary>
/// <returns>返回SqlConnection对象</returns>
public SqlConnection GetConnection()
{
string myStr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection myConn = new SqlConnection(myStr);
return myConn;
}
/// <summary>
/// 执行SQL语句,并返回受影响的行数
/// </summary>
/// <param name="myCmd">执行SQL语句命令的SqlCommand对象</param>
public void ExecNonQuery(SqlCommand myCmd)
{
try
{
if (myCmd.Connection.State != ConnectionState.Open)
{
myCmd.Connection.Open(); //打开与数据库的连接
}
//使用SqlCommand对象的ExecuteNonQuery方法执行SQL语句,并返回受影响的行数
myCmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
finally
{
if (myCmd.Connection.State == ConnectionState.Open)
{
myCmd.Connection.Close(); //关闭与数据库的连接
}
}
}
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。所有其它的列和行将被忽略。
/// </summary>
/// <param name="myCmd"></param>
/// <returns>执行SQL语句命令的SqlCommand对象</returns>
public string ExecScalar(SqlCommand myCmd)
{
string strSql;
try
{
if (myCmd.Connection.State != ConnectionState.Open)
{
myCmd.Connection.Open(); //打开与数据库的连接
}
//使用SqlCommand对象的ExecuteScalar方法执行查询,并返回查询所返回的结果集中第一行的第一列。所有其它的列和行将被忽略。
strSql=Convert.ToString(myCmd.ExecuteScalar());
return strSql ;
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
finally
{
if (myCmd.Connection.State == ConnectionState.Open)
{
myCmd.Connection.Close();//关闭与数据库的连接
}
}
}
/// <summary>
/// 说 明: 返回数据集的表的集合
/// 返回值: 数据源的数据表
/// 参 数: myCmd 执行SQL语句命令的SqlCommand对象,TableName 数据表名称
/// </summary>
public DataTable GetDataSet(SqlCommand myCmd, string TableName)
{
SqlDataAdapter adapt;
DataSet ds = new DataSet();
try
{
if (myCmd.Connection.State != ConnectionState.Open)
{
myCmd.Connection.Open();
}
adapt = new SqlDataAdapter(myCmd);
adapt.Fill(ds,TableName);
return ds.Tables[TableName];
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
finally
{
if (myCmd.Connection.State == ConnectionState.Open)
{
myCmd.Connection.Close();
}
}
}
/// <summary>
/// 执行存储过程语句,返回sqlCommand类对象
/// </summary>
/// <param name="strProcName">存储过程名</param>
/// <returns>返回sqlCommand类对象</returns>
public SqlCommand GetCommandProc(string strProcName)
{
SqlConnection myConn = GetConnection();
SqlCommand myCmd = new SqlCommand();
myCmd.Connection = myConn;
myCmd.CommandText = strProcName;
myCmd.CommandType = CommandType.StoredProcedure;
return myCmd;
}
/// <summary>
/// 执行查询语句,返回sqlCommand类对象
/// </summary>
/// <param name="strSql">查询语句</param>
/// <returns>返回sqlCommand类对象</returns>
public SqlCommand GetCommandStr(string strSql)
{
SqlConnection myConn = GetConnection();
SqlCommand myCmd = new SqlCommand();
myCmd.Connection = myConn;
myCmd.CommandText = strSql;
myCmd.CommandType = CommandType.Text;
return myCmd;
}
/// <summary>
/// 说 明: 执行SQL语句,返回数据源的数据表
/// 返回值: 数据源的数据表DataTable
/// 参 数: sqlStr执行的SQL语句,TableName 数据表名称
/// </summary>
public DataTable GetDataSetStr(string sqlStr, string TableName)
{
SqlConnection myConn = GetConnection();
myConn.Open();
DataSet ds = new DataSet();
SqlDataAdapter adapt = new SqlDataAdapter(sqlStr, myConn);
adapt.Fill(ds, TableName);
myConn.Close();
return ds.Tables[TableName];
}
}
3﹑GoodsClass类:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Collections;
/// <summary>
/// GoodsClass 的摘要说明
/// </summary>
public class GoodsClass
{
DBClass dbObj = new DBClass();
public GoodsClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 对DataList控件进行绑定
/// </summary>
/// <param name="dlName">DataList控件名</param>
/// <param name="dsTable">数据集DataSet的表的集合</param>
public void dlBind(DataList dlName,DataTable dsTable)
{
if (dsTable != null)
{
dlName.DataSource = dsTable.DefaultView;
dlName.DataKeyField = dsTable.Columns[0].ToString();
dlName.DataBind();
}
}
/// <summary>
/// 商品类别菜单栏
/// </summary>
/// <param name="dlName">绑定商品类别名的DataList控件</param>
public void DLClassBind(DataList dlName)
{
string sqlStr = "select Top 10 * from tb_Class";
DataTable dsTable = dbObj.GetDataSetStr(sqlStr, "tbClass");
dlBind(dlName, dsTable);
}
/// <summary>
/// 在首页面中,绑定商品信息
/// </summary>
/// <param name="IntDeplay">商品分类标志</param>
/// <param name="dlName">绑定商品的DataList控件</param>
/// <param name="TableName">数据集标志</param>
public void DLDeplayGI(int IntDeplay, DataList dlName, string TableName)
{
SqlCommand myCmd = dbObj.GetCommandProc("proc_DeplayGI");
//添加参数
SqlParameter Deplay = new SqlParameter("@Deplay", SqlDbType.Int, 4);
Deplay.Value = IntDeplay;
myCmd.Parameters.Add(Deplay);
dbObj.ExecNonQuery(myCmd);
DataTable dsTable = dbObj.GetDataSet(myCmd, TableName);
dlBind(dlName, dsTable);
}
/// <summary>
/// 最新商品菜单栏
/// </summary>
/// <param name="dlName">绑定最新商品的DataList控件</param>
public void DLNewGoods(DataList dlName)
{
SqlCommand myCmd = dbObj.GetCommandProc("proc_NewGoods");
dbObj.ExecNonQuery(myCmd);
DataTable dsTable = dbObj.GetDataSet(myCmd, "tbGoods");
dlBind(dlName, dsTable);
}
/// <summary>
/// 获取商品类别名
/// </summary>
/// <param name="IntClassID">商品类别号</param>
/// <returns>返回商品类别名</returns>
public string GetClass(int IntClassID)
{
SqlCommand myCmd = dbObj.GetCommandProc("proc_GCN");
//添加参数
SqlParameter classID = new SqlParameter("@ClassID", SqlDbType.Int, 4);
classID.Value = IntClassID;
myCmd.Parameters.Add(classID);
return dbObj.ExecScalar(myCmd).ToString();
}
/// <summary>
/// 对商品信息进行模糊查询
/// </summary>
/// <param name="strKeyWord">关键信息</param>
/// <returns>返回查询结果数据表DataTable</returns>
public DataTable search(string strKeyWord)
{
SqlCommand myCmd = dbObj.GetCommandProc("proc_SearchGI");
SqlParameter key = new SqlParameter("@keywords", SqlDbType.VarChar, 50);//添加参数
key.Value = strKeyWord;
myCmd.Parameters.Add(key);
//执行操作
dbObj.ExecNonQuery(myCmd);
DataTable dsTable = dbObj.GetDataSet(myCmd, "tbBI");
return dsTable;
}
}
4﹑ 网站首页设计与登录程序设计
ggggggg<%@ Page Language="C#" AutoEventWireup="true" CodeFile="wangyali.aspx.cs" Inherits="wangyali" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>
丽丽购物系统
</title><link href="css/css_page.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
body {
background-color: #D5E4EE;
}
.style1 {color: #FFFFFF}
-->
</style>
<script src="js/login.js" type="text/javascript">function IMG1_onclick() {
}
</script>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="IsIE()">
<form name="form1" method="post" action="wangyali.aspx" id="form1" runat =server>
<div></div>
<div></div>
<table width="1030" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2"><table width="100%" height="117" border="0" cellpadding="0" cellspacing="0" background="images/topbg.gif">
</table></td>
</tr>
<tr bgcolor="#E6E6E6" class="text09">
<td height="30" style="width: 1050px">
<asp:Image ID="Image1" runat="server" ImageUrl="~/image/图标.jpg" Style="position: static" DescriptionUrl="~/image/未命名-2_场景1.swf" Height="146px" Width="1020px" /><br />
<a href="image/未命名-1.swf"></a>
欢迎您访问丽丽购物系统 今天是年月日星期三</td>
<td height="30"> </td>
</tr>
<tr bgcolor="#B6C79B" class="text09">
<td height="2" colspan="2"><img src="images/transparence.gif" width="2" height="1"></td>
</tr>
</table>
<table width="1035" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr valign="top">
<td height="13" style="width: 257px"> <div style="tex
展开阅读全文