ASP.NET 动态网页设计大作业报告
第 16 组
计算机二班
李明亮
2015011453
ASP.NET 动态网页设计大作业报告
第 16 组 李明亮 学号:2015011453 计算机二班
1、 课题选择:ASP.NET 购物网站设计。
2、 个人完成部分:网站首页,商品详情页,登录,注册界面部分(页面背景橙
黄色部分)。
3、 实现的功能:
网站首页从数据库导入数据,并展示。
网站首页左上角一个 logo,属于 Imagesbutton,右上角两个 button,正
中一个 gridview 控件展示商品信息,并可跳转到商品详情页。右侧是一个个
人账户详细信息。
商品详情页通过网站首页传过的参数展示商品详细信息。
详情页左上角一个 logo,属于 ImageButton,右上角两个 button,左边
是商品缩略图展示,正中是商品详细信息,右侧是猜你喜欢,由于数据库不
健全,所以并没有数据展示。
登录通过与数据库连接验证已有帐号并且保持登录状态。
注册通过对数据库表增加行来实现账号增加并且保持登录。
注册页面用户上传头像部分由于数据库原因未完成。
4、 具体实现方法:
a、数据库连接并读写数据:
连接数据库用了两种方法。一种是用现有的控件 SqlDataSource 与数据库
建立连接,但这种方法比较局限,只能对数据库中一个表或者表的某一部
分进行操作。另一种方法是利用对象与数据库建立动态链接。代码如下:
string constr =
WebConfigurationManager.ConnectionStrings["goodsConnectionStrin
g"].ConnectionString;
SqlConnection con = new SqlConnection(constr);
using (con)
{
con.Open();
SqlCommand cmd = new SqlCommand("select * from users where
name='"+id+"'and password='"+psw+"'", con);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
flag = true;
con.Close();
}
这段代码是用于登陆时从数据库中查询账户信息的一段代码。Constr 是连
接字符串,con 是用于与连接字符串相匹配的数据库连接的对象,cmd 是
执行 sql 语句的对象。就此段代码来讲,cmd 执行的 sql 语句就是 select *
from users where name='id'and password='psw'。Reader 是读取执行
cmd 命令之后的数据,hasrows 是判断有无数据的属性,返回值是 true
或 false。
b、 页面之间保持登录:
具体代码:
Session["name"] = TextBoxLogin_account.Text;
Response.Redirect("index_login.aspx");
String name = Session["name"].ToString();
在登录页面中,当登陆成功时,设置一个 session 值,保存该账户的登录
信息。当打开需要身份信息的页面时可以直接获得 session 的值,查询到
该账户的登录信息,获得权限查询数据库中的相关数据。
c、数据库数据的改写:
con.ConnectionString = constr;
con.Open();
SqlCommand cmd = new SqlCommand("insert into users
values ('"+id+"','"+psw+"','"+ma+"','"+icon+"','"+levels+"')",
con);
cmd.ExecuteNonQuery();
cmd.CommandText = "select ID from users where name='"
+ id+"'";
int identify=0;
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
identify = dr.GetInt32(dr.GetOrdinal("ID"));
}
con.Close();
con.ConnectionString = constr;
con.Open();
cmd.CommandText = "insert into user_detail values ('"
+ Convert.ToString(identify) + "','" + id +
"','0','0','0','"+""+"','"+""+"','"+""+"','"+""+"','"+""+"','"+""+
"','"+""+"','"+""+"','0','"+""+"','0','"+""+"','0','"+""+"','0','"
+""+"','0','"+""+"')";
cmd.ExecuteNonQuery();
Session["name"] = id;
Response.Redirect("index_login.aspx");
该段代码前半部分是读取数据,同 a,后半部分是写入注册信息,与前面
不同的是 cmd 的命令语句有所改变(即 sql 语句改变),由 select 语句换
为 insert into,delete,update 语句。执行该类语句并不需要数据,所以直
接调用 cmd 的 ExecuteNonQuery 方法,该类语句即得到执行。
5、 各页面详细构成:
(1)、index 页面。
页面主要分为三大部分,最上面包括左上角的 logo 和搜索商品的入口;
中间分为两个部分,左面是商品,右面是用户的详细信息;最下面就是中国
石油大学(北京)的标签。
由于 index 分为登陆前和登陆后,所以 index 页面我设计了两个,区别就
是一个带有登录信息,另一个是以游客身份访问。在两个页面展示详细信息
的时候也是有区别的,未登录的时候头像是默认的头像,对应数据库存储
blank.jpeg,该文件在 Images 文件夹下 UserIcon 内,剩下的两个 button 就是
登录和注册的接口。登陆后的 index 界面在用户详细信息的地方就有具体的
用户头像,两个 button 也变成了退出登录和购物车的入口。
(2)、商品详情页(detail.aspx)
页面主要分为三大部分,最上面包括左上角的 logo 和右上角的两个
button 和一个 HyperLink;中间也分为三个部分,左边是商品的缩略图,中间
是商品的详细信息(Gridview),在这个 gridview 下面还有两个 button,一个
是立即购买,直接连接到支付界面,另一个是加入购物车,直接连接到购物
车界面,右边是猜你喜欢,也是一个 gridview,由于数据库数据不足,所以
这个 gridview 并没有绑定数据源。
同样的,detail 页面也分为未登录和登录后的页面。未登录时右上角的
HyperLink 控件和账户详细信息连接到登陆界面,加入购物车和立即购买也是
连接到登陆界面。登陆后所有控件正常。
(3)、登录界面(login.aspx)
除图片所示外,左上角有一个 logo,右上角有个 button 用于返回首页。
登录的实现:
if (TextBoxLogin_account.Text == "")
{
Label1.Text = "用户名不能为空!";
return;
}
if (TextBox1.Text == "")
{
}
string tem = Label1.Text + "密码不能为空!";
Label1.Text = tem;
return;
string id = TextBoxLogin_account.Text;//得到用户输入的用户名
string psw = TextBox1.Text;//得到用户输入的密码
Boolean flag=false;//默认登录失败
string constr =
WebConfigurationManager.ConnectionStrings["goodsConnectionString"].ConnectionString;//
连接字符串
SqlConnection con = new SqlConnection(constr);//利用连接字符串定义连接对象
using (con)
{
con.Open();//建立连接
SqlCommand cmd = new SqlCommand("select * from users where name='"+id+"'and
password='"+psw+"'", con);//从数据库中查询用户名为id,密码为psw 的数据
SqlDataReader reader = cmd.ExecuteReader();//读取数据
if (reader.HasRows)//如果存在数据说明登录成功
flag = true;
con.Close();
}
if (flag==false)
{
}
Label1.Text = "账号或密码错误!";
return;
Session["name"] = TextBoxLogin_account.Text;//确定登录状态
Response.Redirect("index_login.aspx");
主要思路是通过从数据库中查询用户输入的 id 和密码,如果能够查询到
数据则登录成功,如果查询不到则登录失败。
(4)、注册界面(regist.aspx)
除了图片所示外,左上角还有一个 logo,右上角还有一个返回首页的 button。
注册的实现:
if (TextBox_regist.Text != TextBox2_regist.Text)
{
}
Label2.Text = "两次密码不一致!";
return;
else
{
string id = TextBox1_regist.Text;
string psw = TextBox2_regist.Text;
float ma = 0;//初始金额为0
string icon=@"Images\UserIcons\blank.jpeg";//默认头像为blank.jpeg
int levels = 0;
Boolean flag = true;
string constr =
WebConfigurationManager.ConnectionStrings["goodsConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(constr);
using (con)
{
con.Open();//建立连接
SqlCommand cmd = new SqlCommand("select * from users where name='" + id +
"'", con);//查询用户名是否存在
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
flag = false;
con.Close();
}
if (flag == false)
{
}
Label2.Text = "该用户名已被注册!";
return;
else
{
con.ConnectionString = constr;
con.Open();//建立连接
SqlCommand cmd = new SqlCommand("insert into users values
('"+id+"','"+psw+"','"+ma+"','"+icon+"','"+levels+"')", con);//向数据库用户主要信息表里
添加一行数据
cmd.ExecuteNonQuery();//执行sql语句
cmd.CommandText = "select ID from users where name='" + id+"'";
int identify=0;
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
}
identify = dr.GetInt32(dr.GetOrdinal("ID"));//获得数据库生成的id
con.Close();
con.ConnectionString = constr;
con.Open();
cmd.CommandText = "insert into user_detail values ('" +
Convert.ToString(identify) + "','" + id +
"','0','0','0','"+""+"','"+""+"','"+""+"','"+""+"','"+""+"','"+""+"','"+""+"','"+""+"',
'0','"+""+"','0','"+""+"','0','"+""+"','0','"+""+"','0','"+""+"')";//向数据库中用户详细
信息表中添加一行数据
cmd.ExecuteNonQuery();
Session["name"] = id;//默认登录成功
Response.Redirect("index_login.aspx");
}
}
主要思路是从数据库中查询用户名是否已被注册,如果未注册则向数据库用
户主要信息和用户详细信息中各添加一行数据,同时保证两个表中同一行数据的
id 是相同的。
6、 代码数量:
不计控件所占行数,四个页面总代码数为 152。