1. 主要技术点
AccessDataSource控件:连接Access数据库DetailsView控件:以表格形式显示和处理来自数据源的单条数据记录GridView控件:显示表中的数据源的单个记录,也可以关联数据源中的一次显示,编辑,插入或者是删除记录Label控件:显示用户不能编辑的文本Button控件:提交按钮用来将Web页面送回到服务器,而命令按钮一般用于处理控件命令事件。LinkButton控件:与Button控件功能相似,但是样子不一样,LinkButton控件以超链接的形式显示。 DropDownList控件:用于在一个集合列表中选中其中的一项Image控件:显示指定的图片TextBox控件:用于输入或显示文本,通常用于可编辑文本。RequiredFieldValidator控件:验证一个必填字段CompareValidator控件:将用户输入与一个常数值或者另一个控件或特定数据类型的值进行比较(使用小于、等于或大于等比较运算符)RegularExpressionValidator控件: 它根据正则表达式来验证用户输入字段的格式是否合法,本此设计中主要验证电话号码Response对象:从服务器返回到客户端的数据Session对象:由服务器自动创建与用户请求相关的对象。服务器会为每一个用户创建一个session对象用来保存用户信息,跟踪用户操作。基于ADO.NET技术的数据库访问类AccessHelper
2. 系统功能模块
2.1 前台系统功能描述
用户登录注册功能:包括新用户的注册、登录。
用户留言功能:普通游客只能浏览留言,注册登录后可完成留言操作。
用户信息修改功能:用户在登录状态下,可以对自己的信息进行修改。
2.2 后台系统功能描述
留言信息管理:管理员登录后,可完成对留言的回复和删除操作。
用户信息管理:管理员在登录状态下,可对已经注册的用户数据进行删改操作。
3. 设计过程
3.1 数据库(termtest.accdb)的设计与创建
3.1.1 概念设计
用户信息(用户ID、昵称、密码、性别、电话、登录状态、注册时间)
![](https://img-blog.csdnimg.cn/77306c21ae0e4110bb813ac6a3959ae3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_18,color_FFFFFF,t_70,g_se,x_16)
留言信息(留言ID、用户ID、留言内容、时间、IP地址、图片路径、回复内容)
![](https://img-blog.csdnimg.cn/a7cc5fdad3ec43719194f83fc16b0769.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_18,color_FFFFFF,t_70,g_se,x_16)
表情包信息(表情包名,表情包路径)
![](https://img-blog.csdnimg.cn/0b774c7a7cb94dd2b2195b6d83ac6ca4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_18,color_FFFFFF,t_70,g_se,x_16)
用户与留言之间存在一对多的关系,全局E-R图设计如下图
![](https://img-blog.csdnimg.cn/5c9d16385af84f0fa2cc7310c7e300d3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_20,color_FFFFFF,t_70,g_se,x_16)
3.1.2 逻辑设计
用户信息表,主要包括用户编号、用户账号、用户密码、姓名、地址、性别、电话、登录状态、注册时间,具体结构如下表:
留言信息表,主要包括留言编号、用户编号、留言内容、时间、IP地址、表情包路径、回复内容,具体结构如下表:
表情包信息表,主要包括表情包名、路径,具体结构如下表:
![](https://img-blog.csdnimg.cn/aa16d1ed67e64617a601913e28244810.png)
3.1.3 数据库的实现
![](https://img-blog.csdnimg.cn/c106f973f6544a8f8dea22f0166b89c2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_19,color_FFFFFF,t_70,g_se,x_16)
3.2 母版页面的布局设计与创建
Site1.Master:普通用户页面母版
Site2.Master:管理员页面母版
![](https://img-blog.csdnimg.cn/2f4232216d5e4177b5185667760924e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_20,color_FFFFFF,t_70,g_se,x_16)
3.3 创建包含母版页的WEB窗体
admin.aspx:用户管理页adminexit.aspx:管理员退出登录状态中转页browse.aspx:留言浏览页login.aspx:管理员用户登录页manageusers.aspx:用户管理页modify.aspx:用户信息修改页register.aspx:用户注册页reply.aspx:管理员回复页userexit.aspx:用户退出登录状态中转页userlogin.aspx:用户登录页Write.aspx:用户写留言页Verification.aspx:验证码生成页
4. 部分代码
register.aspx:
注册
昵称:
密码:
确认密码:
姓名:
性别:
男
女
手机:
register.aspx.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace termtest
{
public partial class register : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string sql = string.Format("insert into alluser(username,pwd,uname,sex,phone) values('{0}','{1}','{2}','{3}','{4}')", username.Text.Trim(), password.Text.Trim(), name.Text.Trim(), sex.SelectedValue, phone.Text.Trim());
AccessHelper.ExcuteSQL(sql);
Response.Redirect("~/userlogin.aspx");
}
}
}
userlogin.aspx:
登录
账 号:
密 码:
验证码:
userlogin.aspx.cs:
using System;
using System.Data;
using System.Data.OleDb;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace termtest
{
public partial class userlogin1 : System.Web.UI.Page
{
public static readonly string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["testconn"].ToString();
protected static OleDbConnection conn = new OleDbConnection();
protected static OleDbCommand cmd = new OleDbCommand();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
String username = TextBox1.Text.Trim();
String password = TextBox2.Text.Trim();
String verifycode = TextBox3.Text.Trim();
String vCode = Session["ValidCode"].ToString();
if (verifycode != vCode)
{
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "Startup", "alert('验证码输入错误!请重新输入');", true);
TextBox3.Text = "";
}
else
{
String sql = string.Format("select ID,pwd from alluser where username='{0}'", username);
conn.ConnectionString = strConn;
conn.Open();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
OleDbDataReader read = cmd.ExecuteReader(CommandBehavior.CloseConnection);//CommandBehavior.CloseConnection能够保证当DataReader对象被关闭时,其依赖的连接也会被自动关闭
if (read.Read())
{
if (password.Equals(read[1].ToString()))
{
Session["userlogin"] = true;
Session["userid"] = read[0].ToString();
Session["username"] = username;
read.Close();//防止登录成功后再次登录时导致数据库连接未关闭
Response.Redirect("write.aspx");
}
else
{
Response.Write("alert('密码输入错误!请重新输入')");
TextBox2.Text = "";
}
}
else
{
Response.Write("alert('用户名不存在!请重新输入')");
TextBox1.Text = "";
}
read.Close();
}
}
}
}
browse.aspx:
5. 页面展示
![](https://img-blog.csdnimg.cn/8aef2f059dbd439c9c967fff7ef49c39.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/8edd9d3d6e7845eb92c27531dd1e3e05.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/2ea3cb61a73a48ea99b8dfebf4f7e51c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/5c7ae17255134a3fb4684f90f5b844af.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/deb42b9a5d3d44b5be7d65e7daaa0cdd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/0cd049ad4f0a494185e46176ce202a97.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aW95pWZ5ZGY5aW9,size_20,color_FFFFFF,t_70,g_se,x_16)
6. 源码链接
留言板
7. 设计总结
用户注册功能:用户可在注册界面填写账号、密码等信息,验证昵称后完成注册。主要通过ado.net技术完成该功能。用户登录功能:用户注册后,在登录页面输入正确的账号和密码完成登录。主要通过ado.net技术完成该功能。用户写留言功能:用户在登录状态下,完成写留言操作。主要通过ado.net技术完成该功能。用户修改个人信息功能:用户在登录状态下可对自己的信息进行修改。主要通过DetailsView控件完成该功能。用户退出登录状态功能:用户在完成相关操作后,可退出登录状态。通过对Session对象状态的修改实现该功能。管理员登录功能:管理员在登录页面输入正确的账号和密码完成登录。通过遍历XML文件完成该功能。管理员管理留言功能:管理员在登录状态下,主要通过DetailsView控件和GridView控件完成对留言的回复和删除操作。管理员管理用户功能:管理员在登录状态下,主要通过GridView控件可对用户的信息进行修改和删除操作。管理员登录状态功能:用户在完成相关操作后,退出登录状态。通过对Session对象状态的修改实现该功能。自适应页面:通过Bootstrap中的网格系统完成了页面自适应布局。
|