基于ASP.NET技术 学生留言板的设计与实现

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、昵称、密码、性别、电话、登录状态、注册时间)

留言信息(留言ID、用户ID、留言内容、时间、IP地址、图片路径、回复内容) 

表情包信息(表情包名,表情包路径)

 用户与留言之间存在一对多的关系,全局E-R图设计如下图

3.1.2 逻辑设计

用户信息表,主要包括用户编号、用户账号、用户密码、姓名、地址、性别、电话、登录状态、注册时间,具体结构如下表:

 留言信息表,主要包括留言编号、用户编号、留言内容、时间、IP地址、表情包路径、回复内容,具体结构如下表:

 表情包信息表,主要包括表情包名、路径,具体结构如下表:

 3.1.3 数据库的实现

3.2 母版页面的布局设计与创建

Site1.Master:普通用户页面母版

Site2.Master:管理员页面母版

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: 

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="register.aspx.cs" Inherits="termtest.register" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div class="card">
        <div class="card-header">
                <h2>注册</h2>
        </div>
        <div class="card-body">
                <div class="form-group">
                <label>昵称:</label><asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="昵称不能为空" ControlToValidate="username" CssClass="alert-danger"></asp:RequiredFieldValidator><asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="请输入长度在3-10的任意字符" ControlToValidate="username" CssClass="alert-danger" ValidationExpression="^.{3,10}$"></asp:RegularExpressionValidator>
                    <div class="input-group mb-3">
                            <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fa fa-user fa-fw"></i></span>
                            </div>
                            <asp:TextBox ID="username" runat="server" class="form-control" placeholder="请输入昵称" required="required"></asp:TextBox>
                    </div>
                </div>
                <div class="form-group">
                <label>密码:</label><asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="密码不能为空" ControlToValidate="password" CssClass="alert-danger"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server" ErrorMessage="必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间" ControlToValidate="password" CssClass="alert-danger" ValidationExpression="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$"></asp:RegularExpressionValidator>
                        <div class="input-group mb-3">
                            <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fa fa-lock fa-fw" ></i></span>
                            </div>
                            <asp:TextBox ID="password" runat="server"  TextMode="Password" class="form-control" placeholder="请输入密码" required="required"></asp:TextBox>
                        </div>
            </div>

            <div class="form-group">
                <label>确认密码:</label><asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="两次输入的密码不一样" ControlToCompare="password" ControlToValidate="rpassword" CssClass="alert-danger"></asp:CompareValidator>
                        <div class="input-group mb-3">
                            <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fa fa-lock fa-fw" ></i></span>
                            </div>
                            <asp:TextBox ID="rpassword" runat="server"  TextMode="Password" class="form-control" placeholder="请再次输入密码" required="required"></asp:TextBox>
                        </div>
            </div>

            <div class="form-group">
                <label>姓名:</label><asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="姓名不能为空" ControlToValidate="name" CssClass="alert-danger"></asp:RequiredFieldValidator>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                    <span class="input-group-text"><i class="fa fa-id-card fa-fw" ></i></span>
                    </div>
                    <asp:TextBox ID="name" runat="server" class="form-control" placeholder="请输入姓名"></asp:TextBox>
                </div>
            </div>
            <div class="form-group">
                <label>性别:</label>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                    <span class="input-group-text"><i class="fa fa-mars-stroke fa-fw" ></i></span>
                    </div>
                    <asp:DropDownList ID="sex" runat="server">
                        <asp:ListItem Value="男">男</asp:ListItem>
                        <asp:ListItem Value="女">女</asp:ListItem>
                    </asp:DropDownList>
                </div>
            </div>

            <div class="form-group">
                <label>手机:</label><asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="请输入11位的手机号码" ControlToValidate="phone" ValidationExpression="^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$" CssClass="alert-danger"></asp:RegularExpressionValidator>
                <div class="input-group mb-3">
                    <div class="input-group-prepend">
                    <span class="input-group-text"><i class="fa fa-phone fa-fw" ></i></span>
                    </div>
                    <asp:TextBox ID="phone" runat="server" class="form-control" maxlength="11" placeholder="请输入手机号"></asp:TextBox>
                </div>
            </div>

        </div>
        <div class="card-footer">
            <asp:Button ID="Button1" runat="server"  class="btn btn-info btn-lg form-control" Text="注 册" onclick="Button1_Click" />
        </div>
    </div>
</asp:Content>

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: 

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="userlogin.aspx.cs" Inherits="termtest.userlogin1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div class="card">
            <div class="card-header">
                 <h2>登录</h2>
             </div>
             <div class="card-body">
                  <div class="form-group">
                     <label>账 号:</label>
                     <div class="input-group mb-3">
                        <div class="input-group-prepend">
                            <span class="input-group-text"><i class="fa fa-user fa-fw"></i></span>
                        </div>
                        <asp:TextBox ID="TextBox1" runat="server" class="form-control" placeholder="请输入用户名" required="required"></asp:TextBox>
                      </div> 
                    </div>
                   <div class="form-group">
                      <label>密 码:</label>
                      <div class="input-group mb-3">
                         <div class="input-group-prepend">
                             <span class="input-group-text"><i class="fa fa-lock fa-fw" ></i></span>
                         </div>
                         <asp:TextBox ID="TextBox2" runat="server"  TextMode="Password" class="form-control" placeholder="请输入密码" required="required"></asp:TextBox>
                      </div>
                    </div>
                    <div class="form-group">
                      <label>验证码:</label>
                      <div class="input-group mb-3">
                         <div class="input-group-prepend">
                             <span class="input-group-text"><i class="fa fa-user-secret" ></i></span>
                         </div>
                         <asp:TextBox ID="TextBox3" runat="server"  class="form-control" placeholder="请输入验证码" required="required"></asp:TextBox>
                         <image id="img_code" src="Verification.aspx" onclick="this.src=this.src+'?'+Math.random()"/><br/>
                      </div>
                    </div>
              </div>
              <div class="card-footer">
                   <asp:Button ID="Button1" runat="server"  class="btn btn-info btn-lg form-control" Text="登 录" onclick="Button1_Click" />
              </div>
    </div>
</asp:Content>

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("<script>alert('密码输入错误!请重新输入')</script>");
                        TextBox2.Text = "";
                    }
                }
                else
                {
                    Response.Write("<script>alert('用户名不存在!请重新输入')</script>");
                    TextBox1.Text = "";
                }
                read.Close();
            }
        }
    }
}

browse.aspx: 

<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="browse.aspx.cs" Inherits="termtest.browse1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="AccessDataSource1" PageSize="4"  style="border-width:0px;border-collapse:collapse;" BorderStyle="None" GridLines="None">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
            <div class="card mt-1">
                <div class="card-header d-flex align-content-center">
                    <div class="d-flex align-content-center">
                         <asp:Image ID="Image1" runat="server" Height="86px" class="img-fluid mr-3 border" ImageUrl='<%#Eval("picpath")%>' Width="86px" />
                    </div>
                    <div class="d-flex flex-column flex-fill"> 
                        <div class="d-flex justify-content-between p-2">
                            <span><i class="fa fa-user-o fa-fw" aria-hidden="true"></i><%#Eval("username")%></span>
                            <span><i class="fa fa-paper-plane-o fa-fw" aria-hidden="true"></i><%#Eval("ip")%></span>
                            <span><i class="fa fa-clock-o fa-fw" aria-hidden="true"></i><%#Eval("time")%></span>
                        </div>
                        <div class="d-flex justify-content-start">
                            <p class="font-weight-light"><%#Eval("content")%></p>
                        </div>
                    </div>
                </div>
                <div class="card-body">
                    <p class="font-weight-light"><%#Eval("reply")%></p>
                </div> 
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    <PagerSettings Mode="NumericFirstLast" />
    <PagerStyle BackColor="white" HorizontalAlign="Center" VerticalAlign="Middle" />
    </asp:GridView>
    <asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/termtest.accdb" SelectCommand="SELECT alluser.username, guest.ip, guest.[time], guest.picpath, guest.content, guest.reply FROM (alluser INNER JOIN guest ON alluser.ID = guest.userid) ORDER BY guest.[time] DESC"></asp:AccessDataSource>
</asp:Content>

 5. 页面展示

 

 

 

 

6. 源码链接

                                                                           留言板

 7. 设计总结

  • 用户注册功能:用户可在注册界面填写账号、密码等信息,验证昵称后完成注册。主要通过ado.net技术完成该功能。
  • 用户登录功能:用户注册后,在登录页面输入正确的账号和密码完成登录。主要通过ado.net技术完成该功能。
  • 用户写留言功能:用户在登录状态下,完成写留言操作。主要通过ado.net技术完成该功能。
  • 用户修改个人信息功能:用户在登录状态下可对自己的信息进行修改。主要通过DetailsView控件完成该功能。
  • 用户退出登录状态功能:用户在完成相关操作后,可退出登录状态。通过对Session对象状态的修改实现该功能。
  • 管理员登录功能:管理员在登录页面输入正确的账号和密码完成登录。通过遍历XML文件完成该功能。
  • 管理员管理留言功能:管理员在登录状态下,主要通过DetailsView控件和GridView控件完成对留言的回复和删除操作。
  • 管理员管理用户功能:管理员在登录状态下,主要通过GridView控件可对用户的信息进行修改和删除操作。
  • 管理员登录状态功能:用户在完成相关操作后,退出登录状态。通过对Session对象状态的修改实现该功能。
  • 自适应页面:通过Bootstrap中的网格系统完成了页面自适应布局。

  • 48
    点赞
  • 177
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
ASP.NET留言板 Version 1.0 软件信息: 软件名称:光辉岁月留言板 版 本 号:Version 1.0 授权类型:免费软件 运行环境:ASP.NET 版权所有:光辉岁月 Q Q:258653163 开发日期:2007.1 软件描述: 1、使用ASP.NET(C#)开发; 2、全部代码都由手写完成,清晰易懂、易维护; 3、采用三层体系结构,通过接口继承来支持多数据库模式; 4、动态支持Access,MSSQL(存储过程); 5、支持HTML编辑器,集成QQ,MSN,TAOBAO等表情; 版权声明: 1. 本软件由本人独立开发完成的留言平台,拥有留言簿的所有版权。 2. 本软件为免费软件,授权用户免费使用,无须通告作者本人。 3. 允许任何人可以在本软件的基础上独立开发新的模块,并可自由商业或免费,并不受限制。 4. 本软件使用了部分网络上的资源(包括图像,皮肤等)。如果您有任何意见或想法可以与我取得联系 。我将会根据您的意愿进行修改。 免责声明: 1.本软件是免费软件,作者只负责软件本身的制作与维护,不负责任何与软件本身无关的问题。 2.用户自愿使用本软件,并无须支付任何费用,由使用软件对用户所造成的任何损失均与作者无关。 3.用户在使用本软件时所引起的任何纠纷均与作者无关。 4.浏览者发表的任何言论,纯属浏览者个人意见,概与作者无关。 5.用户使用本软件,即表示无条件接受以上条款。 6.作者保留以上条款的最终解释权。 安装使用: Access环境 前提必须支持asp.net 注意:你电脑的系统必须装了Internet 服务管理器和Microsoft.NET Framework 1.1或2.0 双击Setup.exe应用文件,然后进行安装。然后进入C:\\Inetpub\\wwwroot\\BBS里面的#chat.mdb数据拿出来 到C:\\ 数据库的路径可以在Web.config里面的以下改: <add key=\"connString\" value=\"Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\\#chat.mdb\"></add> 最后就可以在IE里面的地址栏上输入http://localhost/bbs运行出来了。 ****************************************************************************************** 注意:请不要直接进入数据库更改密码,因为数据库已经通过MD5的数据加过密,要更改密码,请用默认 的系统管理员帐号和密码登录,进去可以更改,要是你直接进数据库自己改的会,可能会出现不能登录的 问题。 ****************************************************************************************** 默认系统管理员帐号:admin 默认系统管理员密码:admin 常见问题: 如果出现未设置对象实例,无法添加记录,DBNULL转换失败等错误,可能是数据库遭到破坏,如果是NTFS分区 ,最好将数据库文件的EVERYONE用户的所有权限设置为允许 与我联系: QQ:258653163 官方主页: http://www.ghsy123.com 电子邮件: pyh123@126.com 2007.2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好教员好

您的鼓励是我前进动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值