简易留言板课程设计报告

时间:2019-05-13 23:51:05下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《简易留言板课程设计报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《简易留言板课程设计报告》。

第一篇:简易留言板课程设计报告

武汉软件工程职业学院

课程设计报告

2016-2017学年度第 二 学期

题目:

简易留言板设计

姓名:

肖志超

班级:

网络1502

系部:

计算机学院

指导教师:

梁晓雅

日期:2017年6月13日

[摘要]

在网络网络技术迅速发展以信息交流频繁的今天,网络应用已经渗透到人类社会的各个角落。作为网络世界的支撑点的网站,更是人们关注的热点:政府利用网站宣传自己的施政纲领,日益成为与百姓交流的直通车;企业利用网站宣传自己的形象,进而挖掘无限商机;个人利用网站展示个性风采,创建彼此沟通的桥梁。越来越多的网站建立了自己的www.xiexiebang.command cmd = new SqlCommand(yh, conn);

if((int)cmd.ExecuteScalar()> 0){ string yhx = “admin”;string yhxx = “select count(*)from userinfo where uname='” + TextBox1.Text.Trim()+ “'and upwd='” + FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text.Trim(), “MD5”)+ “'and ulevel='” + yhx + “'”;SqlCommand cmd1 = new SqlCommand(yhxx, conn);if((int)cmd1.ExecuteScalar()> 0){ Session[“sf”] = “admin”;Session[“s”] = TextBox1.Text.Trim();} else { Session[“sf”] = TextBox1.Text.Trim();;} Response.Redirect(“xgxx.aspx”);} else { Response.Write(“”);}

}

protected void LinkButton1_Click(object sender, EventArgs e){

string yh = “select count(*)from userinfo where uname='” + TextBox1.Text.Trim()+ “'and upwd='”

+FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text.Trim(),“MD5”)+ “' ”;conn.Open();SqlCommand cmd = new SqlCommand(yh, conn);

if((int)cmd.ExecuteScalar()> 0){ Session[“uname”] = TextBox1.Text;

Response.Redirect(“ly.aspx”);} else { Response.Write(“”);}

}

4.2.新用户注册

在登录页面点击注册即可进入新用户注册页面

核心代码如下

static string Coonstr = System.Configuration.ConfigurationManager.ConnectionStrings[“coonstring”].ToString();SqlConnection conn = new SqlConnection(Coonstr);static int i = 1;protected void Page_Load(object sender, EventArgs e){ }

protected void LinkButton2_Click(object sender, EventArgs e){ Response.Redirect(“Default.aspx”);}

protected void LinkButton3_Click(object sender, EventArgs e){ string xyh = “select count(*)from userinfo where uname='” + TextBox1.Text.Trim()+ “'”;conn.Open();SqlCommand cmd = new SqlCommand(xyh, conn);

if((int)cmd.ExecuteScalar()> 0){ Label1.Text = “用户名重复”;} else { Label1.Text = “可以使用的用户名”;int i = 0;} }

protected void LinkButton1_Click(object sender, EventArgs e){

conn.Open();if(i!= 0){ string ss = “user”;//string cyh = “insert into userinfo values('” + TextBox1.Text + “','” + TextBox2.Text + “','” + TextBox4.Text + “','” + ss + “''” + DropDownList1.SelectedValue.ToString()+ “','” + FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox5.Text, “MD5”)+ “')”;string cyh = “insert into userinfo(uname,upwd,uemail,ulevel,uquestion,uanswer)values('” + TextBox1.Text + “','” + FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text, “MD5”)+ “','” + TextBox4.Text + “','” + ss + “','” + DropDownList1.SelectedValue.ToString()+ “','” + FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox5.Text, “MD5”)+ “')”;SqlCommand cmd = new SqlCommand(cyh, conn);int num = cmd.ExecuteNonQuery();if(num > 0){ Response.Write(“”);} else { Response.Write(“”);} } else { Response.Write(“”);}

}

4.3找回遗忘的密码

在用户登录界面中输入用户名,单击“忘记密码”链接按钮打开如图所示的界面,程序根据用户输入的用户名,在页面中显示注册时填写的安全问题,若用户能正确回答安全问题答案,即可重置密码

核心代码如下

public partial class zhmm : System.Web.UI.Page { static string Coonstr = System.Configuration.ConfigurationManager.ConnectionStrings[“coonstring”].ToString();SqlConnection conn = new SqlConnection(Coonstr);protected void Page_Load(object sender, EventArgs e){ if(!IsPostBack){ Label1.Text = Convert.ToString(Session[“zhmm”]);if(Label1.Text==“"){ Response.Redirect(”Default.aspx“);}

DropDownList1.Items.Clear();conn.Open();this.DropDownList1.Items.Add(”“);string mm = ”select uquestion from userinfo where uname='“+Session[”zhmm“]+”'“;SqlCommand sql = new SqlCommand(mm, conn);SqlDataReader dr = sql.ExecuteReader();while(dr.Read()){ this.DropDownList1.Items.Add(dr[”uquestion“].ToString());}

}

}

protected void LinkButton1_Click(object sender, EventArgs e){ string m = ”select count(*)from userinfo where uname='“ + Session[”zhmm“] + ”'and uanswer='“ + FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox1.Text.Trim(), ”MD5“)+ ”'and uquestion='“ +DropDownList1.SelectedValue.ToString()+ ”'“;conn.Open();SqlCommand cmd = new SqlCommand(m, conn);

if((int)cmd.ExecuteScalar()> 0){ Response.Write(”“);} else { Response.Write(”“);} }

protected void LinkButton2_Click(object sender, EventArgs e){ Response.Redirect(”Default.aspx“);}

4.4.修改用户信息

在用户登录页面中输入用户名和密码,单击“修改用户信息”链接按钮讲打开用户管理页面。管理员用户可以使用页面中的所有功能,而普通用户只能修改自己的密码,电子邮箱等信息。

核心代码如下

public partial class xgxx : System.Web.UI.Page { static string Coonstr = System.Configuration.ConfigurationManager.ConnectionStrings[”coonstring“].ToString();SqlConnection conn = new SqlConnection(Coonstr);protected void Page_Load(object sender, EventArgs e){ if(!IsPostBack){ if((string)Session[”sf“] == ”admin“){ string dr = ”select uname ,uemail,ulevel from userinfo where ulevel='user'“;DropDownList1.Items.Clear();conn.Open();DropDownList1.Items.Add(Session[”sf“].ToString());DropDownList2.Items.Add(”admin“);SqlCommand sql = new SqlCommand(dr, conn);SqlDataReader dr1 = sql.ExecuteReader();while(dr1.Read()){ this.DropDownList1.Items.Add(dr1[”uname“].ToString());} conn.Close();

string drq = ”select uname ,uemail,ulevel from userinfo where ulevel='“ + Session[”s“] + ”'“;conn.Open();SqlCommand sq1l = new SqlCommand(drq, conn);SqlDataReader dr11 = sq1l.ExecuteReader();

while(dr11.Read()){ TextBox3.Text = dr11[”uemail“].ToString();

} } else { DropDownList1.Items.Add(Session[”sf“].ToString());DropDownList1.Enabled = false;DropDownList2.Items.Add(”user“);LinkButton2.Enabled = false;} } }

protected void LinkButton1_Click(object sender, EventArgs e){conn.Open();string cz = ”update userinfo set upwd='“

+FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox2.Text.Trim(),”MD5“)+ ”',uemail='“+TextBox3.Text.Trim()+”' where uname='“ + Session[”sf“] + ”'“;SqlCommand cmd = new SqlCommand(cz, conn);if((int)cmd.ExecuteNonQuery()> 0){ Response.Write(”“);} }

protected void LinkButton3_Click(object sender, EventArgs e){ Response.Redirect(”Default.aspx“);}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e){ TextBox3.Text = ”“;string yx = ”select uemail,ulevel from userinfo where uname='“+DropDownList1.SelectedValue.ToString()+”'“;conn.Open();DropDownList2.Items.Clear();SqlCommand sql = new SqlCommand(yx, conn);SqlDataReader dr1 = sql.ExecuteReader();while(dr1.Read()){ TextBox3.Text = dr1[”uemail“].ToString();DropDownList2.Items.Add(dr1[”ulevel"].ToString());}

}

五、总结

做课设让我对ASP.NET有了新的认识,首先我接触了很多上课见过见过但没有实际用过的类和方法,让我对编程有了许多新的思想。虽然系统的基本功能都已实现,但还是存在系统不稳定等多个问题尚待解决。这个系统主要是我自己开发的,但也得到了老师和同学的很大帮助。我正在做系统的过程中遇到了很多问题,有的是知识存储不足,有的是考虑不够周全,之所以能够顺利实现基本功功能,离不开老师和同学的大力相助。事实证明,只靠自己是不能顺利完成一套功能完整的系统的,必须充分利用团队的力量。开发一套系统,最重要的是细心,并不是一定要做到面面俱到,但也要充分考虑到客户的需求和现实意义,不管什么系统,只用运用到实际应用中,才具有先现实意义。所以在准备工作中要正确分析社会需求了解现实应用,画出流程图,把大体框架做好,然后再逐一细化。我们不可能做到面面俱到,但一定要做到步步扎实,作为一个程序编程人员,要保持清醒的头脑,以现实为依据,让自己的每一行代码都能实现自己的意义。通过这次课程设计,我收获的不仅仅是课程上的知识得到实际应用,还有编程的基本习惯和开发系统时应注意的流程。这次课程设计本人主要参与了系统实现以及系统测试,还有参与小组共同完成的编写代码、实现功能模块。历时两个星期终于在大家的一起努力下顺利完成了。虽然过程辛苦是不可避免,但收获还是令人感到尤其的欣慰。在这次的课程设计中不仅检验了我所学习的知识,也培养了我的实践能力,让我知道遇到一个问题,如何去寻找思路,如何去解决问题,最终完成整个事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了宽容,学会了理解,也学会了做人与处世。课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。实验过程中,也十分感谢实验指导老师马骏老师的指点与教导。这次课程设计不仅是对这学期所学知识的一种综合检验,而且也是对自己动手能力的一种提高,增强了自己实践能力。通过这次课程设计使我明白了自己知识还比较欠缺,只是学习书本知识还是远远不够的,自己不会的东西还有太多,学习需要自己长期的积累,在以后的学习、工作中都应该不断的学习,将课本的理论知识与生活中的实践知识相结合,不断提高自己文化知识和实践能力.参考文献

常永英,ASP.NET程序设计教程(C#3)[M].北京:机械工业出版社,2007.常永英,ASP.NET程序设计教程(C#3)[M].上机指导与习题解答。北京:机械工业出版社,2007.崔淼.VisualC#2005程序设计教程[M]。北京:机械工业出版社,2007.张亚习.精通ASP.NET3.5网络开发技术[M].北京:电子工业出版社,2009.Stephen Walther.ASP.NET3.5揭秘(卷1)[M].北京:人民邮电出版社,2009.Stephen Walther.ASP.NET3.5揭秘(卷2)[M].北京:人民邮电出版社,2009.刘瑞新.Visual Basic。NET程序设计教程[M].北京:机械工业出版社,2005.

第二篇:ASP课程设计简单留言板

ASP.NET课程设计说明书

业: 计算机科学与技术

级: 0801 学

号: 0812030111 学生姓名: 欧阳锋 指导教师: 言天舒

湖南工业大学科技学院教务部 制

第三篇:网站留言板留言板简易教程

用Dreamweaver MX设计超简留言本

初学者在学ASP的时候往往是无从学起,学理论的时候又太抽象不好懂,实践的时候又找不到合适的例子来分析练习,有时候找到一个源程序学习的时候,功能太繁杂,涉及到的ASP模块太多,也附带了不少的函数,这样使初学者一头雾水,知难而退,实际上ASP是比较容易掌握的,今天就是为了这个目的,剥茧抽丝做了一个非常简单的留言板,只有留言,删除和回复的功能,没有管理权限功能(站长登录,修改密码等)、判断功能(表单验证等)及分页功能,简洁干炼,主要是为了初学者掌握最重要的知识,就是如何抓取数据库以及如何查看、删除、修改记录的操作,我们先从这个超级简单的留言板开刀吧,此关只要能过,恭喜您了,将来即可步入ASP应用的行列了!:)本教程

完成后会提供下载!

首先我们先做准备工作,先做一下策划,看看我们可能要做哪些页面,所谓说好的开始就是成功的一半,所以大家不要急着做,听我慢慢讲来。为了让大家都能制作出自己的留言板,尽量实现一个网页一个功能模块,我们就做以下六个网页:

一、index.asp----首页即显示留言页

二、conn.asp----公共网页,每个网页都要包含它,是连接打开数据库的操作。

三、write.asp和save.asp----分别是发表留言的表单网页和保存留言页。

四、del.asp----删除留言页

五、reply.asp----回复当前留言页

做好的留言板效果图如下:

< P>

好了,说到这里我们可以动工了,首先做一个最重要的工作,就是建立起一个数据

库,将来存放网友的留言所用。

1、数据库名:db1.mdb

2、数据库表:只有一个表:book

3、数据表book里增设以下字段,见图1

说明:·任一字段的数据类型中的“常归”项中的“允许空字符串”最好填“是”

·日期/时间的“常归”项中默认值为Now();站长回复里的“常归”项中的默认值为“暂没有回复”,注意此处要加双引号,是半角而不是全角。

数据库建好后开始做公共网页,用来打开数据库,打开Dreamweaver MX,按如下方

法新建动态ASP网页:

并保存为CONN.ASP,在编辑区里切换到显示代码视图里,注意把第一行自动生成的代码删掉。

这次主要是写连接数据库和参数设置的ASP代码,不用输出什么HTML标签,所以把代码全部删掉,用DREAWMEAVER插入栏自带的ASP对象写入以下代码,ASP栏里没有的代码只能自己手写输入了。

注意要把所有要编译的ASP代码放在<% %>之间,这样才能正常运行,否则会出错!这是基本常识哦。让我解释以上代码的意思吧:

代码第一行: 用来建立connection对象,connection对象扮演着十分重要的前期连接工作,连接成功数据库才会有以后的数据操作功能。

代码第二行:设置数据库连接参数。包括有数据库驱动程序和数据库文件名。

代码第三行:用conn连接对象打开数据库。

这些是通用连接数据库的方法,任何需要打开数据库的动态网页都可以照搬以上代码就行了,只把数据库的名字换成你的数据库名字就行了,注意路径要正确。所以可以把这些代码用Dreawmeaver里的代码片断复制下来,以后直接插入就可以用了,比较方

便,也不用记忆,这是一个小技艺吧!

好了,今天就先说到这里。

有什么错误和更好的建议也希望你能到腾风在线论谈提出来。

现在我们继续前面的内容。

新建动态网页index.asp:先在设计视图里排版好一个留言板的界面,设计好的页

面效果图如下:

下面表格规划和显示都很清楚,一目了然,什么排版的我就不说了吧:),这可是基本功啊,如果不行的话可先学好Dreamweaver,再来学ASP哦!稳打稳进,至理名言^_^.如果想偷懒的话,可以直接下载源代码,学习研究ASP代码也可以啊,我不反对哦,至少我也是这么懒的,理解万岁!:)

排好版后再进入代码视图里,在不同的位置插入以下ASP代码:如下图:

在网页代码的最上面第一行,点击用红线圈起来的标志可以插入第一行的代码,并可以浏览到具体文件上,比较方便,注意选择file文件类型的,不是virtual虚拟类型的。这样就插入了conn.asp数据库连接代码页,此代码被包含在当前网页位置中进行正常编译,不用重复写数据库连接代码,它的好处很大哦,使页面结构化,容易修改和维护,如果数据库连接错误,或数据库文件变动,只需更改conn.asp即可,不必要修改每一页的代码。要善于用这个方法啊,会使你的程序简单化,清晰化,这是常用的编程方法。

然后再输入以上第二行到第六行的划红线的代码块,此代码块的意义让我一一讲

来:

第三行代码:既然网页和数据库用connection建立连接打开关系了,之后最重要的工作就是读取数据了。建立rs对象变量为recordset对象,这样以后可以用rs对象

变量来存取数据库操作。

第四行代码:把从数据表book里查询的结果放到sql变量上。它的意思是把book里所有的数据都取出来,并按id从大到小排序。desc表示从大到小排序,如果不加的话,最新的留言可是在最后面哦,不方便了。

第五行代码:表示用rs对象变量open方法来打开数据表book,取出结果按sql的查询方法。

以上是通用的读取记录的方法,到其它地方都可以举一反三,要熟悉使用!

接着我们要做无留言记录的判断显示代码出来,我们要定位到“暂无留言”这个表格标签代码的开头,加上第29行如下划红线的代码即可,此代码表示判断语句:如果RS记录指针的EOF结尾和BOF开头都为空,就返回真,执行以下标签,即输入暂无留言这个表格,而不输出下面的其它标签了。再定位到“暂无留言”表格标签的结尾,输入以下37、38行划红线的代码完成判断条件,Response.end表示输出结束,不再输出以

下的代码。

其次再做如果记录不为空的情况下输入留言的表格出来,分别定位在输出留言表格标签的前面和后面,插入ASP代码块如下图输入:

此代码块的意思为:将RS记录指针指向第一个记录,然后开始判断移动记录时,记录结尾是否为空,如果不为空接着移动指针,把所有数据都读取出来。直到结尾为空

时,退出循环。

然后我们做最重要的也是最频繁使用的工作了,就是把数据表里各字段的记录分别读取出来放在表格的不两路位置上,例姓名,QQ,邮箱及留言等。先转换到设计视图和

代码视图的环境下,如下图:

我们发现上图多了很多

标记,这就是刚才在代码视图中输入的ASP代码,方便我们在设计视图中进行修改,输出预览是不影响排版的。我们把光标定位在姓名旁边的表格里,点击插入栏ASP里的,自动插入代码区里指定位置,比较方便,不容易搞错,如下图:

然后选中姓名旁边的标记,点属性栏里的Edit编辑按钮,输入rs(“name”)即可。<%= %>表示输出变量值,相当于response.write的简化版。rs是上次已建过的recordset对象,可以直接读取字段里的内容,name是数据表里book里的姓名字段。

同理按以上方法再插入ASP代码留言内容、发表者、发表时间及回复内容在不同位

置,分别是:

留言内容:<%=server.htmlencode(rs(“content”))%>

发表者:<%= rs(“name”)%>

发表时间:<%= rs(“time”)%>

站长回复:<%= rs(“repcontent”)%>

大家可能发现了,留言内容插入的代码和别的稍微不一样,多了server.htmlencode这个对象,这是为了安全问题设置的,是HTML编码对象,可以使带有HTML标签的文本不被解释为HTML标记,这样可以防止被恶意者来写入特殊执行代码,造成不

必要的损失。

这样就写好了,如下图所示:

接着再做OICQ,EMAIL,HOMEPAGE的链接设置,这个和上述不太一样,它不是直接显示出记录即可,而是将鼠标移到QICQ上浮现留言者的QQ号码,点击EMAIL自动给留言者发信,点击HOMEPAGE直接到达留言者的网站。

选中OICQ,加上“#”空链接,同样的也给EMAIL和HOMEPAGE加上“#”空链接。

如下图所示:

大家都知道给图片加提示比较简单,直接在ALT里设置文字说明就可以了,但文字却没有ALT,没关系,我们的Dreamweaver早就想到了,很强大哦!在代码区里OICQ的空链接#后,按空格(注意是英文输入法才有效)会出现智能提示参数出来,我们选择“title”,然后接着打上“<%= rs(”oicq“)%>”即可!如下图所示:

同样的方法给EMAIL和HOMEPAGE加上啊,方法如下图划红线所示:

一切OK了!!^_^发现设计视图里的OICQ,EMAIL和HOMEPAGE的背景变成了浅蓝色,这说明我们在链接上给它们加了ASP代码,这样不同的提示是否很体贴啊:)

你肯定等不及了,看看效果吧!但还没有记录啊,没有做留言提交页和回复页,删除页,只好暂时在数据库里手动添加记录吧。

经过一些时间,千呼万唤始出来,不好意思,让大家久等了。

上次做的留言板只能显示数据,让我们赋于它生命吧,让这个留言板把网友们互动起来,大家可以积极发言,讨论侃山。首先要做一个写留言的网页,为了简单化,我们把写入留言的网页和提交保存留言的网页分成两个,这样容易看懂,方便学员分析。

我们先做写入留言的网页,静态或动态网页均可,不需要任何ASP代码,最好建个静态文件,这样浏览速度快,不增加服务器负担,也不是说全是ASP网页就好哦,有必要的时候该出手就出手!:)只需提供写留言的界面让网友填均可,新建write.htm,排版如下图:

注意给各个文本域命名,最好和数据表里的各个字段相同,这样赋值的时候容易对应,不会出错。然后选中红色虚线的表单,在属性栏里action栏里填入save.asp,这是将来接收网友的留言并保存到数据库里,我们后面会接着做这个网页。如下图:

写留言的表单页很简单,就这样制作完了,大家不要以为有多麻烦啊:)

下一步我们开始制作接收网友留言并处理的网页,新建save.asp网页,将上次做的表单提交的网页名称要一致啊,不能随便命名了。在网页HTML标签的最上面加入以

下红线框起来的代码,如下图:

以上代码分几个段落,并说明了每一块代码的意思,都是通用的基本操作,比较简单,如果有点困难的话,先放一放,先学好ASP基础再说哦.注意在划红线的地方我们增加了两个函数使用.一个是Trim函数,是用来帮助我们除去不必要的空格符,有很多人习惯多打几个空格出来,我们用这个函数来去掉空格就行了。

还有一个是Replace函数,我们在留言内容写了很多字,它到了边上会自动换行,或生成段落会生成回车符,这在提交前表单文本区域是正常的,但提交后数据库不能正常识别这两个特殊符号,在显示留言页只会生成一行,这可不得了啊,把表格撑得宽宽的,很不舒服。而Replace帮助我们来解决这个问题,它可以把文字段落里所有的自动换行符和回车符找出来(vbCrLf是自动换行符和回车符的代码),并自动转换为

字符串,这样HTML就可以正常解释了。

提交保存留言页基本上就完成了,为了更加友好一点,表示提交成功,我们再多做一点工作,一切为了网友方便嘛!我们回到设计视图环境中,插入大表格在正中央,写入“留言成功!2秒后自动返回首页”,在返回首页加入链接到 index.asp网页里。如

下图:

提交成功后2秒钟后自动返回首页,是不是很难啊??其实一点都不难!用Dreamweaver自带的功能就轻松解决这个问题,我们操作如下图:

插入栏中切换到head栏里,点击Refresh按钮,会弹出对话框,如下图:

按以上内容填好,就万岁了,是不是太简单了,别太得意了啊^_^

我们的发表提交留言页就到此结束了,大家是不是很激动,可以留言了,赶紧拉人来试试吧,猛灌水过把自己的瘾吧:),这关我们顺利过了,就要一鼓作气做完其它的工作,就是回复页和删除页,有了以上的基础,就更加轻松了,相信我,是真的!

人总是不满足现状的,我们要永无止步,拿下最后的任务吧。

上次做的留言板有了生命力,可以互动提交留言了,但不能这么泛滥下去,我们还要做个删除页,删除无用的垃圾,网上也需要环保哦^_^.废话少说吧,我们开始建删除页,命名为del.asp。切换到代码视图中,把所有的HTML标签全部删掉,加入如下代码,见下图:

写完这些代码即完成了删除页的制作。让我们分析一下上面代码块的意思:

代码第三行:是删除语句,WHERE后面跟的是条件语句,只删除接受传递过来ID值的数据,这个很关键,一定要设好,否则会把数据表里的全部字段全部清空了,这也

太恐怖了吧。

代码第四行:CONN对象执行DELESQL删除语句结果。

代码第五行和第六行:关闭CONN对象并设为空释放资源。

代码第七行:response.redirect是输出转向对象,表示删除后自动转向到首页去。

接着我们还要再做回复页,总得有来有回嘛,否则别人再大的热情你不回复,也会冷却下来的。所以很有必要哦:),新建reply.asp网页,在设计视图里先排好版,如

下图:

注意红线的地方要加隐藏域,这样的目的是为了防止表单未提交但页面刷新却执行

代码的错误,设置如上图.排好后再切换到代码视图里,定位到HTML标签的最上面,加入如下红线框起来的代码,见下图:

以上代码块的意思有部分我已经在上面反复讲过了,不在重复了,如有不懂请在论谈提出来,我会补充的。这里我再说明一下回复的模块代码:

代码第四行:定位回复的位置,WHERE后面跟的是回复条件,只接受我们传递过来的留言ID值,并赋值到当前的ID变量上,这样我们只会对当前回复的留言页来回复,这个很关键,不然都乱套了。

代码第六行:用来判断是表单提交还是刷新页面,如果是提交表单,那么隐藏域的值肯定被提交,这样Request.Form(“active”)不为空,就执行以下回复语句.如果没提交表单,而是刷新页面,那么那么隐藏域的值没有提交,Request.Form(“active”)

肯定为空,就跳过不执行.

代码第八行:注意此代码前没有加rsedit.addnew,因为这是更新原有的记录,在原有的留言中在追加回复内容,而不是再添加一条新记录。

回复的代码设置好,我们再回到设计视图环境中,先定位到要回复的留言旁边的单元格里,点击后再点属性栏里的edit编辑按钮,弹出编辑框后填写代码“rsedit(“content”)”确定即可。如下图:

选中红色虚线表单,在action栏里填写如下:“reply.asp?id=<%=request(“id”)%>”,如下图:

回复页我们也做好了,是不是完事了?先别激动,还有一件事呢,忘了给首页index.asp的删除和回复还有发表新主题这三个加链接了,那不是空谈嘛,赶紧补上吧!

链接设置见下图:

< P>

超简留言板的教程就到此结束了,是不是非常超简啊:),不知道大家收获怎么样?希望能反馈给我哦。在这里我把本教程的源代码提供出来,给大家一个方便,可以直接

对照一下,祝你成功了!

编辑后话:幻想曲 还可以更人性化一点!比如如果用户没有填写OICQ或是EMAIL地址就不显示出来!当然,回复和删除是要经过登录验证的!这些东东我相信是作者留下来让朋友们自行完成的吧!鼓励一下这篇不错的教程!

作者虽然是在用DW,但没有依赖于DW自动生成的代码.这对于那些想学ASP而又一直借助于DW的朋友们来说确是一个不小的帮助!另外:提交留言时是不是要把单引号屏蔽掉呢?不然SQL语句是很容易出错的!作者后话:我已经有了完善版的大飞猪留言板,但考虑到是让学生更能入门,所以没有加上去,免得起不到效果,完善版的主要是加了权限功能,登录系统,主要是版主才能回复和删除才行的.这个会更多的,怕吓跑了初学者,有经验的学习者可以向我索要源代码!

改日我再发布完善版的教材出来!

第四篇:简易示波器课程设计报告

课程设计报告

课程名称 综合电子设计 题 目 简易数字示波器 指导教师 起止日期 系 别 自 动 化 专 业 自动控制 学生姓名 班级/学号 成 绩

摘要

本系统由CPLD,单片机控制模块,键盘,LED,幅度控制模块,低通滤波模块组 成,采用当前主流DDS 技术完成,能产生从1HZ-260KHZ 正弦波,方波,三角波以及这三种同频率波的线性组合,失真度限制在6%之内。

一、功能介绍

1.具有产生正弦波、方波、三角波三种周期性波形的性能。

2.用键盘输入编辑生成上述三种波形(同周期)的线性组合波形。

3.输出波形频率范围为1Hz~200kHz(非正弦波频率按10 次谐波计算;重复频 率可调,频率步进间隔1Hz。)

4.输出波形幅度范围 0~5V(峰-峰值),可按步进为0.1V(峰-峰值)。5.具有显示输出波形种类、重复频率(周期)和幅度的功能。

6.增加稳幅输出功能,当负载变化时,输出电压幅度变化不大于±3%(负载变 化范围:100Ω~∞)。

二、方案论证与比较

常见信号源的制作方法有: 方案一:采用锁相式频率合成。将一个高稳定度和高精确度的标准频率经过加减 乘除的运算产生同样稳定度的大量离散频率技术,它在一定程度上既要频率稳定精确,又要频率在很大范围内可变的矛盾。但频率受VCO 可变频率范围的影响,高低频率比不可能做的很高,而且只能产生方波和正弦波。

方案二:采用模拟奋力元件或单片压控函数发生器MAX0832,可产生正弦波,方 波,三角波,通过调整外部元件可改变输出频率,但采用模拟器件由于元件分散性太大,即使使用单片函数发生器,参数也与外部元件有关,外接的电阻电容对参数影响很大,不能实现波形运算输出等智能化的功能。

方案三:采用DDFS,即直接数字频率合成技术,以Nyquist 时域采样原理为基础,在时域中进行频率合成,它可以快速转换频率,频率,相位,幅度都可以实现程控,便于单片机控制,所以,本系统采用此方案。

三、系统设计

系统总体设计方框图:

系统设计方案:

1、实现A/D芯片的模数转换功能,通过keil的watch窗口观察ADC0读取的数据的变化。

2、设置合适的采样频率和采样时间,对输入信号进行连续采样,对规定时间内的采样结果进行存储。

3、对已有数据进行D/A转换,实现数字量到模拟量的变化,并在示波器上显示结果。

4、添加单次按键触发等功能,实现在满足触发条件后,对一个采样周期内的输入进行存储和连续显示。

5、增加1通道输入,实现双踪示波。

6、综合上述情况实现完整的数字双踪示波器。

四、单元电路设计及其初始化

1.ADC0电路的设计

初始化程序为:

void ADC0_Init(void){ ADC0CN = 0x05;// ADC0 T3定时采样,左对齐 REF0CN = 0x03;// 启用内部基准源

AMX0CF=0x00;// 选择采样输入源 ADC0CF =((SYSCLK/2500000)-1)<< 3;// ADC conversion clock = 2.5MHz ADC0CF &= 0xf8;ADC0GTH=0Xff;ADC0GTL=0Xff;ADC0LTH=0X00;ADC0LTL=0X00;// PGA gain = 2 EIE2 |= 0x02;// 启用 ADC 中断 }

采用数据左对齐存储方式。由0端口输入。T3定时器启动,当T3溢出时启动ADC0。转换结束时产生15号中断。执行中断程序。2.DAC电路的设计

初始化程序:

void DAC0_Init(void){ DAC0CN = 0x82;} void DA0_Out(unsigned int con_volt){ con_volt=con_volt<<2;DAC0L=con_volt%256;DAC0H=con_volt/256;}

其中控制字DAC0CN说明如下:采用更新于写入DAC0H时,数据格式为高八位的低六位和低八为的高六位。

五、软件设计

1.软件流程图:

开始系统初始化扫描键盘循环扫描否定时器3是否溢出是启动ADC015号中断ADC数据采集DAC数据输出输出结束

3.相关程序及其功能

AD DA转换

#include sfr16 ADC0 = 0xbe;sfr16 ADC0GT = 0xc4;sfr16 ADC0LT = 0xc6;sfr16 TMR3RL = 0x92;//Timer3 reload value sfr16 TMR3 = 0x94;#define SYSCLK 22118400 //18432000 #define SAMPLE_RATE 2500000 // Sample frequency in Hz采样频率 #define INT_DEC 1 // integrate and decimate ratio #define uchar unsigned char #define uint unsigned int

void SYSCLK_Init(void);void ADC0_Init(void);void Timer3_Init(int counts);void ADC0_ISR(void);void DA0_Out(unsigned int con_volt);void DAC0_Init();uchar int_dec=INT_DEC;uchar tt=0;void main(void){ WDTCN = 0xde;WDTCN = 0xad;SYSCLK_Init();Timer3_Init(SYSCLK/SAMPLE_RATE);ADC0_Init();AD0EN = 1;DAC0_Init();EA = 1;while(1){

} } void SYSCLK_Init(void)

// 配置系统时钟使用外部晶振22.1184MHz { int i;OSCXCN = 0x67;// 晶体振荡器未用,晶体振荡器方式 for(i=0;i < 256;i++);// XTLVLD blanking interval(>1ms)while(!(OSCXCN & 0x80));// Wait for crystal osc.to settle OSCICN = 0x88;// 选择外部振荡器作为系统时钟,内部振荡器禁止 } void ADC0_Init(void){ ADC0CN = 0x06;// ADC0 T3定时采样,左对齐 REF0CN = 0x03;// 启用内部基准源 AMX0SL = 0x00;// 选择采样输入源0 ADC0CF =(SYSCLK/2500000)<< 3;// ADC conversion clock = 2.5MHz ADC0CF|= 0x00;ADC0LTH= 0x00;ADC0LTL= 0x00;ADC0GTH= 0xFF;ADC0GTL= 0xFF;EIE2 |= 0x02;// 启用 ADC 中断 } void DAC0_Init(void){ DAC0CN = 0x80;} void DA0_Out(unsigned int con_volt){ unsigned char hbyte,lbyte;

hbyte=con_volt/256;lbyte=con_volt%256;DAC0L=lbyte;DAC0H=hbyte;} void Timer3_Init(int counts){ TMR3CN = 0x02;TMR3RL =-counts;TMR3 = 0xffff;EIE2 &= ~0x01;TMR3CN |= 0x04;} void ADC0_ISR(void)interrupt 15 { AD0INT = 0;int_dec--;if(int_dec == 0){ int_dec =INT_DEC;DA0_Out(ADC0);} }

六、设计结果

1.对原温度采集程序进行修改完成对信号的采集,以下分别为对于方波、三角波及正弦波的信号采集。

2.加入单次触发程序后,可进行按键触发:(以正弦波为例)

按下采样键K5前 按下采样键K5后

3.加入回放功能键K5,可实现在采样之后,进行波形回放(以正弦波为例)首先按下K5键得到正弦采样信号如图:

然后按下K2键得到回放波形如图:

(由于采样频度与周期等问题,回放波形有失真显现)经程序调整后得到:

更接近采样波形

4.完成双踪示波的采集,见图。

5将双踪示波与触发脉冲结合起来,完成对于双踪信号的采集、存储及回放,原始信号为三角波和方波。

按键k5对信号进行采样存储 按键k2对三角信号进行回放

按键k3恢复信号采集初始状态(等待采集信号)

七、心得体会

通过本次设计我进一步了解数字示波器的基本控制原理,掌握了怎样利用C8051F020开发板实现一个简易数字示波器的设计与制作以及处理器C8051F020芯片的应用,多通道ADC采集功能等应用技术。本次课程设计所设计的是基于C8051F020芯片,通过软硬件结合实现普通示波器显示被测波形的简易数字示波器。能完成对ADC0的0通道和1通道的信号的分时或同时采集(高电平约2V、低电平接近0V)并且对采集的信号通过DAC0和DAC1两个输出口同时输出实现双踪示波器功能。另增加单次触发存储显示方式,即每按动一次“单次触发”键,仪器在满足触发条件时,能对被测周期信号或单次非周期信号进行一次采集与存储,然后通过其他触发键触发信号的回放,观测波形无明显失真。

由于时间和硬件条件关系没有把做出LCD液晶显示示波器有点遗憾,不过我从网络上搜索了有关资料,对其也有了一定的了解。

八、参考文献

[1] 潘琢金【译】.《C8051F020/1/2/3混合信号ISP FLASH微控制器数据手册》

九、附录

1、元器件清单

(1)MCU 为美国Silabs 公司C8051F020,64KB FLASH、(4096+256)B RAM、最高25MIPS 执行速度;

(2)4 路12 位AD 输入,AIN1 到AIN4 输入信号量程0~+2.4V ;(3)2 路12 位DA 输出,输出信号量程0~+2.4V;(4)1 路标准RS232 通讯接口;(5)1 个16X2LCD 接口;(6)1 个128X64LCD 接口;(7)1 个复位键,4 个按键;(8)JTAG 调试接口;(9)外扩总线接口;

(10)C8051F020 上的资源对用户开放。

2、程序清单

/*************************************************************** 功能:实现ADC信号采样和DAC信号输出 用外部基准:

J7 NC 2 内部VREF 外部VREF 3 4 内部DAC工作基准输入

外部VREF 5---6 内部ADC0工作基准输入

外部VREF 7 8 内部ADC1工作基准输入 或用内部基准:

J7 NC 2-内部VREF 外部VREF 3 4 | 内部DAC工作基准输入

外部VREF 5 6-内部ADC0工作基准输入

外部VREF 7 8 内部ADC1工作基准输入

***************************************************************/ #include //调用头文件 #include #include //---------------// 16-bit SFR Definitions for 'F02x //---------------sfr16 DP = 0x82;// data pointer sfr16 TMR3RL = 0x92;// Timer3 reload value sfr16 TMR3 = 0x94;// Timer3 counter sfr16 ADC0 = 0xbe;// ADC0 data sfr16 ADC0GT = 0xc4;// ADC0 greater than window sfr16 ADC0LT = 0xc6;// ADC0 less than window sfr16 RCAP2 = 0xca;// Timer2 capture/reload sfr16 T2 = 0xcc;// Timer2 sfr16 RCAP4 = 0xe4;// Timer4 capture/reload sfr16 T4 = 0xf4;// Timer4 sfr16 DAC0 = 0xd2;// DAC0 data sfr16 DAC1 = 0xd5;// DAC1 data sbit P31=P3^1;//按键K5端口定义 sbit P32=P3^2;// 按键K4端口定义 sbit P34=P3^4;// 按键K3端口定义 sbit P33=P3^3;// 按键K2端口定义

#define BAUDRATE 115200 // Baud rate of UART in bps #define SYSCLK 22118400 // 系统晶振频率(Hz)#define SAMPLE_RATE 100000 // Sample frequency in Hz void SYSCLK_Init(void);void PORT_Init(void);void ADC0_Init(void);void Timer3_Init(int counts);void ADC0_ISR(void);void DAC0_Init(void);void DAC1_Init(void);void DA1_Out(unsigned int con_volt);void DA0_Out(unsigned int con_volt);long xdata NCDdata [510];int i=0,j=0,y =0,z=0,x=0,n,k=0,c=0,d,f,m;long a,b;

long result;void main(void){ WDTCN = 0xde;// 看门狗 WDTCN = 0xad;SYSCLK_Init();// initialize oscillator PORT_Init();// initialize crossbar and GPIO Timer3_Init(SYSCLK/SAMPLE_RATE);// initialize Timer3 to overflow at

// sample rate ADC0_Init();// init ADC DAC0_Init();DAC1_Init();AD0EN = 1;// enable ADC EA = 1;while(1){

if(P31==0)

//K5循环扫描

{ for(m=0;m<11;m++);if(P31==0){

f=1;DAC0CN = 0x02;x=0;} } if(P33==0)

//K3循环扫描

{ for(m=0;m<11;m++);if(P33==0){ y=1;DAC0CN = 0x82;} }

if(P34==0)

//K2循环扫描

{ for(m=0;m<11;m++);if(P34==0){ k=1;c=0;DAC0CN = 0x82;} } } }

//---------------// SYSCLK配置

//---------------// 配置系统时钟使用外部晶振22.1184MHz void SYSCLK_Init(void){ int i;// delay counter OSCXCN = 0x67;// start external oscillator with

// 22.1184MHz crystal for(i=0;i < 256;i++);// XTLVLD blanking interval(>1ms)while(!(OSCXCN & 0x80));// Wait for crystal osc.to settle OSCICN = 0x88;// select external oscillator as SYSCLK

// source and enable missing clock

// detector } //---------------// PORT配置

//---------------void PORT_Init(void){ XBR0 = 0x04;// Enable UART0 XBR1 = 0x00;XBR2 = 0x40;// Enable crossbar and weak pull-ups P0MDOUT |= 0x01;// enable TX0 as a push-pull output P2MDOUT = 0xff;// P2口设为推挽方式 P3MDOUT = 0xe0;// P3口设为推挽方式 } //---------------// ADC0配置,T3定时启动ADC //---------------void ADC0_Init(void){ ADC0CN = 0x05;// ADC0 T3定时采样,左对齐 REF0CN = 0x03;// 启用内部基准源 AMX0CF=0x00;// 选择采样输入源

ADC0CF =((SYSCLK/2500000)-1)<< 3;// ADC conversion clock = 2.5MHz ADC0CF &= 0xf8;ADC0GTH=0Xff;ADC0GTL=0Xff;ADC0LTH=0X00;ADC0LTL=0X00;// PGA gain = 2 EIE2 |= 0x02;// 启用 ADC 中断 } //---------------// Timer3配置,T3定时启动ADC //---------------void Timer3_Init(int counts){ TMR3CN = 0x02;TMR3RL =-counts;TMR3 = 0xffff;EIE2 &= ~0x01;//定时器3中断屏蔽。TMR3CN |= 0x04;} //---------------// ADC0采样中断

//---------------void ADC0_ISR(void)interrupt 15 { AD0INT = 0;// 清 ADC 中断标志位 result=ADC0;if(AMX0SL==0x00)a=result;else b=result;DA1_Out(b);//DAC1输出通道1采集的数据

if(f==0)DA0_Out(a);else { NCDdata[x]=a;if(x<500)x++;if(x==500){ if(k==1&&c<400){ DA0_Out(NCDdata[c]);if(c<400)c++;}

else DAC0CN = 0x02;} if(y==1){k=0;f=0;y=0;} } if(AMX0SL==0x00)AMX0SL=0x01;//改变采样输入源 else AMX0SL=0x00;} //---------------// DAC0配置

//---------------void DAC0_Init(void){ DAC0CN = 0x82;// Enable DAC0 in left-justified mode

// managed by Timer4 overflows } //---------------// DAC1配置

//---------------void DAC1_Init(void){ DAC1CN = 0x82;// Enable DAC0 in left-justified mode

// managed by Timer4 overflows } //---------------// DAC输出数据处理

//---------------void DA0_Out(unsigned int con_volt){ con_volt=con_volt<<2;DAC0L=con_volt%256;DAC0H=con_volt/256;}

void DA1_Out(unsigned int con_volt){

con_volt=con_volt<<2;DAC1L=con_volt%256;DAC1H=con_volt/256;}

3、系统功能说明:

当没有按键的时候系统为完整的双踪示波器,能对双通道的输入输出进行分别采样和输出。当K5按下的时候,DAC0屏蔽,系统开始将数据采集后存放于设定的数组当作,此时当K2键按下的时候系统使能DAC0,输出存储在数组中的采集好的数据,当数据输出完成的时候关闭DAC0。当按下K3时,系统还原到初始状态(双踪示波)。

第五篇:基于JSP的留言板课程设计

Jsp课程设计报告

JSP课程设计报告书

—基于jsp留言板

业: 计算机信息管理

级:

096111

名:

号:

09611108

指导老师:

东华理工大学

二零一一年六月二十日

钟春连 2011-6-21

Jsp课程设计报告

一 需求分析

随着互联网的迅猛的发展,网站给我们带来不少的便利,于此同时,论坛基本是每个网站必有的功能,为用户之间的交流提供的很好的平台。我通过仔细的分析和规划,本论坛有如下功能:用户注册,登录,用户信息修改,签写留言,留言查看,回复留言和管理员的普通维护功能等。

这些功能的具体描述如下:

1)用户注册模块:用户可已成为本论坛的会员,通过表单把用户的相关信息提交给数据库。

2)登录模块:基本是每个系统必备的模块,本论坛的登录的模块分为两个小模块:普通用户登录,另一个是管理员登录。

3)签写留言模块:这是论坛的主要功能之一,用户把自己感兴趣的话题发表到论坛上,与网上的会员进行探讨。

4)回复留言模块:这也是论坛的主要功能之一,用户对别的用户发表的留言进行回复。5)普通的维护模块:这是给管理员的功能,该功能对那些危害社会风气的留言删除。6)用户信息修改模块:用户能对自己的信息进行修改。二 分析和设计(页面和数据库)

设计网站论坛时,首先应该区别是普通用户登录还是管理员登录。如果是普通用户登录,那么该用户只有查看和回复留言的权限。如果是管理员登录,则除了具有查看和回复权限外,还用具有管理论坛的权限。

在用户发表留言后,将显示该用户的用户名、性别、留言内容和留言时间等内容。如果在某个留言有回复内容,则显示出是谁恢复了该篇留言和回复的内容。

另外还能在页面中显示当前的系统的时间和访问权限。数据库设计

通过以上的分析:数据库应有四个表,tb_user、td_topic、tb_reply、tb_counter。由于是个小型的论坛,选择AEESS数据库

程序的主要实现根据等级设置用户权限,是用脚本言语(javascript)来显示系统的当前时间,并通过来实现滚动的显示,主要代码如下:

<%@ page contentType=“text/html;

charset=gb2312”

language=“java” import=“java.sql.*” errorPage=“" %> <%@ include file=”connDB.jsp“ %> <% ResultSet rs_user=stmt.executeQuery(”select * from tb_user where

钟春连

2011-6-21

Jsp课程设计报告

username='“+session.getAttribute(”username“)+”'and status='版主'“);boolean eof=rs_user.next();%>

钟春连 2011-6-21

Jsp课程设计报告

<%if(session.getAttribute(”username“)!=null){%> <%}else{%> <%}%>
签写留言 修改资料用户注册 <%if(session.getAttribute(”username“)!=null){%> 注销用户 <%}else{%> 用户登录 <%}%> 查看留言 刷新页面 <%if(eof){%> 注销版主登录

钟春连

2011-6-21

Jsp课程设计报告

<%}else{ %>版主登录<%}%>

系统公告:
下载简易留言板课程设计报告word格式文档
下载简易留言板课程设计报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    基于JSP的留言板课程设计(含源文件)

    JSP在水一方留言簿设计报告 一需求分析 随着互联网的迅猛的发展,网站给我们带来不少的便利,于此同时,论坛基本是每个网站必有的功能,为用户之间的交流提供的很好的平台。我通过......

    简易数字频率计(数字电路课程设计)

    数字电路课程设计报告1)设计题目简易数字频率计2)设计任务和要求要求设计一个简易的数字频率计,测量给定信号的频率,并用十进制数字显示,具体指标为:1)测量范围:1HZ—9.999KHZ,闸......

    AVA简易计算器课程设计-

    JAVA课程设计 简易计算器的设计 学号: 姓名: 班级: 指导教师:完成日期:第1页(共11页) 2016-12-31JAVA课程设计 目 录 简易计算器课程设计 ............................................

    Dreamweaver 8.0制作简易留言板图文教程

    用ASP和Dreamweaver 8.0制作简易留言板 目录 一、ASP原理 ..............................................................................................................

    超市留言板报告

    实 验 报 告 1.实验项目名称:超市促销留言板的设计与实现2.实验原理: mfc是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装大部分的windows API函数。使用MFC可以方......

    微机原理简易计算器课程设计

    简易计算机课程设计 一、 设计目的 本次课程设计的实验目的是通过该实验掌握较复杂程序的设计。能够独立完成用程序对8255控制键盘和LED显示的控制,完成计算器加减法的应用。......

    单片机课程设计_简易频率计数器..

    单 片 机 课 程 设 计 简易频率计数器 1. 实验目的 1.要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。 2.熟练掌握焊接技术的基础上,能熟练......

    留言板

    日照职业技术学院毕业设计(论文) php留言板系统 学生姓名 院 部电子信息科学与工程学院 专 业 计算机应用技术 指导老师 鲁 红 日 期 2015-05-19 目录 一 留言板简介 .............