黑龙江大学ASPnet实验报告

黑龙江大学

        

黑龙江大学教务处

实验步骤

1、设计思想

本次实验旨在使用Asp.Net技术设计开发一个具有用户登录、注册、文章评论、以及购物的网站。

用户登录模块:用户将登录的信息表单填写好后提交给后台程序,通过查询数据库查询验证用户是否合法,如果合法则将用户名保存在Session中否则显示登录失败的信息。

注册模块:用户填写表单,将表单填写后提交后台程序,首先验证用户是否已经存在,如果不存在则向数据库中插入记录并跳转到注册成功的页面,并设置Session中用户名,成为已经登录的状态。否则显示用户已经存在的信息。

文章评论模块:如果用户尚未登录,则不能评论,只要不显示输入框、提交按钮即可;如果用户已经登录,则显示输入框,提交按钮,此时用户可以进行评论。

购物模块:当用户进行访问时,首先应对是否已经登录进行判断,如果用户尚未进行登录则不显示购物车、加入购物车等按钮只能浏览商品,如果已经登录,则显示购物车、加入购物车的按钮等。加入购物车时将商品的信息全保存在Session中。点击结算时,将页面转换到OrderSubmit.aspx即可。

2、控件的使用

用户登录模块:用户登录模块主要运用了标准控件中的TextBox、Button,用于输入用户名,用户密码和提交时的按钮;

验证控件中使用了RequiredFieldValidator,以确保用户登录时必须填写用户名和密码。

注册模块:标准控件中使用了TextBox,用户注册时需要填写的基本信息;Button,注册按钮;

验证控件中使用了RequiredFieldValidator,主要用于验证用户名和用户密码项;CompareValidator验证密码与密码确认是否一致;

RegularExpressionValidator用于验证用户输入的电子邮箱的格式是否正确。

自定义控件CustomValidator验证用户输入的密码复杂度长度是否足够。

文章评论模块:主要使用到了标准的控件中的TextBox,用于用户输入评论内容;Button,用于提交用户输入的评论,Label显示用户的评论内容。AdRotator显示一个广告内容。

购物模块:主要使用了标准控件中的Button,用于提交购物车中所选择的商品,Label显示购物车的所有商品。

3、网页布局设计

为了各个网页的一致布局能够精确的控制,网站采用表格布局的方法。如下为各个网页的布局说明:

首页:Default2.aspx

主要包含用户登录的模块以及其他链接,如下图所示为首页的整体布局。

用户的注册页面:Register.aspx

主要包含用户注册的模块,注册的表单含有用户名、用户密码、密码确认、QQ号、邮箱、地址、个人资料(选填),提交按钮等

简要布局模式如下所示:

Default.aspx页面:主要包含用户的文章展示和用户评论模块

简要布局如下图所示:

Shoping.aspx页面:

主要包含购物的功能模块,页面的布局同样采用table布局,用户未登陆时,没有购物车等信息,因此该页面在用户登录后与未登陆时显示效果不一样,但整体布局相差不大。如下是网页的整体布局:

4、编码及流程图

(1)用户登录时首先应该验证用户是否已经存在,其次还要验证用户密码是否正确,具体的流程图如下所示:

用户登录的关键代码如下所示,所在的文件为Default2.aspx.cs:

protected void Page_Load(object sender, EventArgs e)

    {

        if (Session["username"] != null)

        {

            Label1.Text = "欢迎您:" + (String)Session["username"];

        }

        else  if (Session["username"] == null && TextBox1.Text.Length == 0)

        {

            HttpCookie hcusername = Request.Cookies["username"];

            HttpCookie hcuserpassword = Request.Cookies["userpassword"];

            if (hcusername != null)

                TextBox1.Text = Server.HtmlEncode(hcusername.Value);

            if (hcuserpassword != null)

                TextBox2.Text = Server.HtmlEncode(hcuserpassword.Value);

            CheckBox1.Checked = true;

        }

    }

    private bool check()

    {

        String name = TextBox1.Text;

        String password = TextBox2.Text;

        bool ret = false;

        if ((name != null && name.Length > 0) && (password != null && password.Length > 0))

        {

            OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("siwen.mdb"));

            OleDbCommand cmd = new OleDbCommand("select * from user1 where name='" + name + "'", conn);

            //打开数据库连接

            conn.Open();

            //建立DataReader对象

            OleDbDataReader dr = cmd.ExecuteReader();

            if (dr.Read())

            {

                String psw = (String)dr["password"];

                if (psw == password)

                {

                    Session["username"] = name;

                    ret = true;

                }

                else

                {

                    RequiredFieldValidator2.ErrorMessage = "密码错误!";

                    RequiredFieldValidator2.IsValid = false;

                    RequiredFieldValidator2.Visible = true;

                }

            }

            else

            {

                RequiredFieldValidator1.ErrorMessage = "不存在的用户!";

                RequiredFieldValidator1.IsValid = false;

                RequiredFieldValidator1.Visible = true;

            }

            conn.Close();

        }

        return ret;

    }

(2)用户注册时对用户所输入的信息获取后插入数据库中即可。用户注册时对数据库的操作、点击提交按钮后执行的函数代码如下所示,所在的文件为register.aspx.cs:

protected void Button2_Click(object sender, EventArgs e)

    {

        if (CustomValidator1.IsValid == false) {

            CustomValidator1.Visible = true;

            return;

        }

        OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("siwen.mdb"));

        //建立Command对象

        string strSql;

        strSql = "insert into user1([name],[password],[qq],[email],[address],[information]) values('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox7.Text + "')";

        OleDbCommand cmd = new OleDbCommand(strSql, conn);

        conn.Open();

        cmd.ExecuteNonQuery();

        conn.Close();

        Session["username"] = TextBox1.Text;

        Response.Redirect("RegisterSucess.aspx");

    }

(3)用户的文章展示,首先要获取用户所输入的内容,然后追加到Label的末尾即可。流程图如下所示:

以及用户评论功能实现的代码如下所示:

    static String ltext="";

    static int i=1;

    protected void Page_Load(object sender, EventArgs e)

    {

        if (i != 1) {

            Label1.Text = ltext + "</table>";

        }

    }

   protected void Button2_Click(object sender, EventArgs e)

    {

        String s = TextBox1.Text;

        s=s.Replace("\n", "<br>");

        if (i == 1)

        {

            ltext = "<table><tr><td style=\"width:224px;height:30px;border-bottom-style:solid; border-bottom-color:Green; border-bottom-width:1px;\"><span style=\"font-size: 10pt;color: #993300;\">1楼</span>:<br />" + s + "</td></tr>";

        }

        else

        {

            ltext += "<tr><td style=\"width:224px;height:30px;border-bottom-style:solid; border-bottom-color:Green; border-bottom-width:1px;\"><span style=\"font-size: 10pt;color: #993300;\">" + i + "楼:</span><br />" + s + "</td></tr>";

        }

        Label1.Text = ltext+"</table>";

        TextBox1.Text = "";

        i++;

    }

}

 (4)购物车的功能:加入购物车的功能为Button4_Click主要的代码如下所示:

    protected void Button4_Click(object sender, EventArgs e)

    {

        Goods book;

        if (Session["goods"] == null)

            book = new Goods();

        else

            book = (Goods)Session["goods"];

        if (select1.Checked)

        {

            book.addGoods("1", 1);

            select1.Checked = false;

        }

        if (select2.Checked)

        {

            book.addGoods("2", 1);

            select2.Checked = false;

        }

        if (select3.Checked)

        {

            book.addGoods("3", 1);

            select3.Checked = false;

        }

        if (select4.Checked)

        {

            book.addGoods("4", 1);

            select4.Checked = false;

        }

        if (select5.Checked)

        {

            book.addGoods("5", 1);

            select5.Checked = false;

        }

        if (select6.Checked)

        {

            book.addGoods("6", 1);

            select6.Checked = false;

        }

        if (select7.Checked)

        {

            book.addGoods("7", 1);

            select7.Checked = false;

        }

        if (select8.Checked)

        {

            book.addGoods("8", 1);

            select8.Checked = false;

        }

        Session["goods"] = book;

        init_label2();

    }

    显示购物车的函数为void init_label2(),其实现的流程图如下所示:

主要的代码如下所示:

    protected void init_label2() {

        String str = "";

        int i;

        double total = 0;

        if (Session["goods"] == null)

        {

            str += "<table style=\"width: 277px; height: auto;background-color:#e3d8cf\">";

            str += "<tr><td colspan=\"2\">您尚未选购商品</td></tr></table>";

            Label2.Text = str;

            Label3.Text = "0";

            return;

        }

        Goods book=(Goods)Session["goods"];

        str += "<table style=\"width: 277px; height: auto;background-color:#e3d8cf\">";

        for (i = 0; i < book.getCount(); i++)

        {

            str += "<tr><td style=\"color:#4ca547\">" + book.getGoodsName(i) + "</td>";

            str += "<td style=\"color:#4ca547\">" + book.getGoodsNum(i) + "</td></tr>";

        }

        str += "</table>";

        Label2.Text = str;

        //总价值

        for (i = 0; i < book.getCount(); i++)

        {

            total += (double)book.getGoodsNum(i) * book.getPrice(i);

        }

        Label3.Text = Convert.ToString(total);

    }

5、测试

首页运行效果如下所示:

注册页面的运行效果:

查看数据库文件,可以看到已经插入一条记录:

文章与评论的运行效果如下所示:

商品的展示与购物车运行效果如下所示:

点击某个商品后,商品的详细信息展示如下图所示:

订单提交成功的页面效果如下所示:

实验总结

通过这学习研究,我懂得了怎样去开发一个网站,以及网站的运行机制。包括用户注册、购物车、通过Asp.net操作数据库等。在对数据库进行操作的时候遇到了很多的问题,例如插入时总是会抛出异常,后来通过查找资料,原来插入的格式有问题,将strSql = "insert into user1(name ,password ,qq , email, address,information)values('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox7.Text + "')"; 改成为strSql = "insert into user1([name],[password],[qq],[email],[address],[information]) values('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox7.Text + "')";后就能够成功的插入记录了,因此学习要做到一丝不苟,坚持方能成功。

相关推荐