1、Web应用技术ASP.NET大作业选题名称:同学录设 计 人:郑亚光刘震龚璟学 号:8000610163 8000610137 8000610120班 级:计软103南昌大学软件学院2012.12.15目录第一章、小组分工2第二章、系统需求分析报告32.1问题的提出:32.1.1 背景32.1.2选题目的和意义42.1.3 国外研究动态42.2需要完成的功能:52.3技术实现路线:5第三章、数据库逻辑结构设计93.1 数据表93.2 E-R图13第四章、系统实现144.1 登录注册模块144.1.1登录界面154.1.2注册界面164.1.3找回密码174.2生日列表184.3用户资料194.
2、3.1查看用户资料194.3.2修改用户资料204.4论坛224.4.1获取所有帖列表224.4.2发表新帖234.4.3回帖244.5班级相册254.5.1上传图片254.5.2评论图片264.5.3展示图片274.6显示注册用户284.7站内信箱294.7.1收信箱304.7.2写信304.7.3已发信箱32参考文献32第一章、小组分工组长: 郑亚光工程设计策划,项目分析,可行性规划.组员: 刘震数据库和大部分前台代码组员: 龚璟部分前台代码,撰写作业文档第二章、系统需求分析报告2.1问题的提出:2.1.1 背景现代社会是一个信息化社会,信息的交流在无形中影响着我们的生活,我们的生活速度随
3、之加快,网上的同学录就是一个很好的交流平台,它不仅为我们节约了大量的时间,更给我们提供了一个同学交流的空间,让我们在繁忙的生活中获得一份轻松和惬意Internet已经成为人们生活、工作、学习越来越离不开的平台。作为Internet上一种先进的,易于被人们所接受的信息检索手段,World Wide Web(简称WWW)发展十分迅速,成为目前世界上最大的信息资源宝库。据估计,目前Internet上已有上百万个Web站点,其内容范围跨越了教育科研、文化事业、金融、商业、新闻出版、娱乐、体育等各个领域,其用户群十分庞大,因此,建设一个好的Web站点对于一个机构的发展十分重要。Web技术已经不再局限于单
4、纯的提供信息服务,而是日益成为一个操作平台,为用户提供强大的服务功能。例如:电子商务、CRM(客户管理管理)等。 近年来各种在线服务系统,更是深刻的影响了人们的联系方式,使得人们可以在远隔千里之遥随时通讯。过去的种种陈旧的联系方式,已经不能满足现代生活的需要。校友录作为一种方便校友之间联系的实用系统便应运而生。华工校友录是为华工校友之间进行交流和联系提供的一个平台。通过提供完善的校友录服务和规范校友录的管理,可以达到增进校友之间、校友与母校之间的感情,方便校友联系的目的。基于我校现有的校友录系统功能比较简单、页面粗糙、安全性不强的特点,我参考了现有的系统和一些在线应用系统(比如chinaren
5、,友联等),对现有校友录系统进行了比较全面彻底的改进,使得校友录系统无论是在功能、用户界面、安全性、可扩充性等都得到了根本的改进2.1.2选题目的和意义目前,经济发展迅猛,人们的压力也越来越大,以致把大多数的时间都投入在工作上,往往就会淡忘以前的生活。学生时代是梦想最多的时代,感情最纯真的时代,在那时,我们都会遇到很多不同的人,也交了很多知己。但是一走上工作岗位,大多数人都会与以前的朋友失去联系。有时,即使想联系却没有联系方式。通过校友录系统,可以找到想要联系的朋友,这是许多人都认可的,可以看出设计一个校友录是极具可行性的。 校友录是为了方便校友之间联系而使用的一种系统。本论文主要介绍了一个同
6、学录系统的规划。主要模块的详细设计主要包括:用户注册和登录模块、留言模块、查询模块等。 本课题是基于Windows环境的数据库管理,该系统前台使用Microsoft Visual Studio 2008中的ASP.NET(C#语言)技术进行开发,后台数据库采用SQL Server 2005,并通过IIS进行发布,属于WEB数据库开发、用于解决实际问题的实例,具有一定的深度,涉及到数据库设计和前端开发工具的开发和设计,与之相似的应用很广泛。 本论文概述了ASP.NET与SQL Server 2005数据库及其相关的一些知识,着重论述数据库中间技术,并将其放入一个简单的体系中加以实现。 具体的实现
7、是构造一个校友录管理系统,用户以个人的身份进入,查找满足条件的班级,并可以填写个人资料,以便被查询。通过校友录这种网络联系方式,可以让很多因毕业而分离的同学们还能够经常聚首,互相嘘寒问暖,了解各自的近况,还可以建立毕业生和在校生的沟通渠道,增强学校的凝聚力,能很方便的和同学沟通和交流。2.1.3 国外研究动态目前世界上各种形式的同学录网站大约有28 万个之多,它们在网民心中占有重要地位。以目前存在的同学录网站来看,大致有以下几类:(1)按收费方式分,有收费同学录和免费同学录,其中以后者居多,像中国人的超级校友录就是收费的同学录服务,而像友联同学录、网易同学录等大部分提供的是免费校友录服务;(2
8、)按提供同学录服务所在网站分,有大专院校自己网站上的同学录,如西北大学校友录;有专门单独的同学录网站,如世纪同学录;有综合网站上的同学录,如ChinaRen校友录、新浪校友录、校内网等等,其中以综合网站上的校友录居多。国内的同学录,目前仍然以ChinaRen、校内网和5460最具知名度,这三个同学录在众多的同学录网站中人气最旺,经营状况良好,占据了这个领域的大部分份额,但5460更多是在吃“资历老”的老本,呈现下降趋势。其他的同学录如友联、网易、新浪、亿唐、网大也占有一定份额。2.2需要完成的功能:a. 用户注册登录功能b. 找回密码功能c. 修改个人资料功能d. 投票功能e. 发帖功能f.
9、看帖功能g. 评论功能h. 搜索站内贴功能i. 写信功能j. 收信功能k. 上传照片功能l. 查看班级相册功能2.3技术实现路线:2.3.1页面设计:a. 整个网站包含了共六个网页b. 班级首页面c. 班级论坛页面从数据库中调用数据并且以列表的形式显示在页面中d. 用户专区页面显示所有的注册用户e. 班级资料页面显示数据库中保存的班级资料文档f. 站内短息页面个人信息中心:以列表形式显示已收到的信件,已发送的信件, g. 班级相册页面把所有的上传到网站的图片以小图标的显示方式排列在页面中h. 母版模块1: 登陆注册栏(游客状态) 班级功能(登录状态)2: 未来一个月生日列表3: 对网站评价2.
10、3.2 用户权限功能描述游客功能分析:(1) 用户注册:用于注册同学录新用户。(2) 查看班级资料:供游客了解同学录中班级的一些基本资料和描述。(3) 查看注册用户:让游客知道同学录中有哪些人。(4) 查看用户资料:这是一个仅对班级内部开放的同学录便于了解给用户 的一些开放信息。(5) 查看班级论坛:可以查看所有在同学录中发表的帖子。(6) 查看班级相册:可以查看所有在同学录中上传的图片。注册用户功能分析:(1) 用户登录:注册用户登录同学录。(2) 查看班级资料:了解同学录中班级的一些基本资料和描述。(3) 查看注册用户:让游客知道同学录中有哪些人。(4) 查看用户资料:这是一个仅对班级内部
11、开放的同学录便于了解给用户 的一些开放信息。(5) 查看班级论坛:可以查看所有在同学录中发表的帖子。(6) 查看班级相册:可以查看所有在同学录中上传的图片。(7) 投票:对此网站进行评价。(8) 发表新帖子:发表一份新的帖。(9) 回复:对别人的帖进行评价。(10) 修改个人资料:对用户个人的资料进行修改。(11) 修改安全问题:安全问题用于找回密码修改密码。(12) 站内信:a 收件箱:查看站内收信。b 发件箱:查看已发送信件。c 撰写:写信。d 清空:清空邮箱。(13)上传图片:把本地图片上传到网站。(14)用户退出:退出登录状态返回游客状态。第三章、数据库逻辑结构设计3.1 数据表cla
12、ssInfo(班级资料):Message(站内信):Photo(相册):PhotoClass:RePhoto:ReTopic:Topic:Users:Vote:VoteCon:3.2 E-R图第四章、系统实现4.1 登录注册模块4.1.1登录界面在输入框输入正确的用户名和密码点登录按钮登录, 或通过点注册按钮跳转到注册界面,点击链接忘记密码跳转到获取密码界面。关键代码:检查数据库中是否有该用户dbh.sqlCommand = select * from Users where UserName=UserName; dbh.AddSqlCmdParameters(UserName, this.t
13、xtUserName.Text); dbh.GetDataReader();判断密码是否正确 if (dbh.dr.Read() else if (dbh.drUserPwd.ToString() = LeeHom.Web.Text.MD5(this.txtUserPwd.Text) 根据不同的时间显示不同的问候function ShowHello() var welcomestring;var d = new Date();h = d.getHours();if(h6)welcomestring=不要睡太晚了哦!;else if (h9)welcomestring=您来得真早啊!;else
14、if (h12)welcomestring=今天精神不错吧!;else if (h14)welcomestring=吃午饭了吗?;else if (h17)welcomestring=午睡睡得好吗?;else if (h19)welcomestring=吃晚饭了吗?;else if (h22)welcomestring=人多了,网慢了。;elsewelcomestring=注意休息哦!;document.write(welcomestring);4.1.2注册界面把输入的信息加入到数据库中dbh.AddFieldParameters(UserName, txtUserRegName.Text)
15、; dbh.AddFieldParameters(UserPwd, LeeHom.Web.Text.MD5(txtUserRegPwd.Text); dbh.AddFieldParameters(RealName, txtUserRegRealName.Text); dbh.AddFieldParameters(Sex, rbtnlistUserRegSex.SelectedItem.Value); dbh.AddFieldParameters(Mail, txtUserRegMail.Text); dbh.AddFieldParameters(PwdQue, txtUserRegPwdQue
16、stion.Text); dbh.AddFieldParameters(PwdAnswer, LeeHom.Web.Text.MD5(txtUserRegPwdAnswer.Text); dbh.AddFieldParameters(IsVaild, Mode);4.1.3找回密码获取用户名bool UserExists(string str) dbh.Reset(); dbh.tableName = Users; dbh.fieldName = str; dbh.AddConditionParameters(str, this.txtUserName.Text); return dbh.Da
17、taExists(); 回答安全问题获取安全问题和答案dbh.Reset(); if (i = 1) dbh.sqlCommand = select top 1 PwdQue,PwdAnswer from Users where RealName=Name; else dbh.sqlCommand = select top 1 PwdQue,PwdAnswer from Users where UserName=Name; dbh.AddSqlCmdParameters(Name, this.txtUserName.Text); dbh.GetDataReader(); if (dbh.dr.
18、Read() this.ltlPwdQue.Text = dbh.dr0.ToString(); strPwd = dbh.dr1.ToString(); dbh.dr.Close();判断安全问题答案if (LeeHom.Web.Text.MD5(this.txtPwdAns.Text) = strPwd)设置新密码dbh.AddFieldParameters(UserPwd, LeeHom.Web.Text.MD5(this.txtPwd.Text); if (i = 0) dbh.conditionExpress=UserName=UserName; else dbh.condition
19、Express=RealName=UserName; dbh.AddConditionParameters(UserName, this.txtUserName.Text);4.2生日列表查找最近一个月中是否有人过生日 if (ConfigurationManager.AppSettingsconMode = 0) dbh.sqlCommand = SELECT RealName,birthday FROM Users WHERE NOT ISNULL(birthday) AND CDATE(STR(year(date() +-+STR(month(birthday)+-+STR(day(bi
20、rthday)-now() between 0 and 30 order by birthday; else dbh.sqlCommand = select RealName,birthday from users where datediff(dd,cast(year(Birthday)as varchar(30)+right(convert(varchar(10),getdate(),120),6),Birthday) between 0 and 30 order by birthday; 4.3用户资料4.3.1查看用户资料获取用户信息dbh.sqlCommand = select to
21、p 1 * from Users where RealName=RealName; dbh.AddSqlCmdParameters(RealName, Request.QueryStringUserName); DataTable dt = dbh.GetDataTable(); BinderRepeater br = new BinderRepeater(); br.repeater = rptUserInfo; br.datatable = dt; br.Bind();显示用户信息this.txtUserName.Text = dbh.drUserName.ToString(); this
22、.txtRealName.Text = dbh.drRealName.ToString(); this.txtBirthday.Text = Convert.ToDateTime(dbh.drBirthday).ToString(d); this.txtPhone.Text = dbh.drPhone.ToString(); this.txtMobile.Text = dbh.drMobile.ToString(); this.txtQQ.Text = dbh.drQQ.ToString(); this.txtICQ.Text = dbh.drICQ.ToString(); this.txtM
23、sn.Text = dbh.drMSN.ToString(); this.txtMail.Text = dbh.drMail.ToString(); this.txtWorkAdd.Text = dbh.drWorkAdd.ToString(); this.txtAddress.Text = dbh.drAddress.ToString(); this.txtWeb.Text = dbh.drWeb.ToString(); this.txtZip.Text = dbh.drZipCode.ToString(); this.txtUnderWrite.Text = dbh.drUnderWrit
24、e.ToString(); this.ddlSex.SelectedValue = dbh.drSex.ToString();4.3.2修改用户资料上传头像if (Path = UpFile.upImage(UpFileFace, this.fuUserFace.FileName, this.txtRealName.Text) != null) new LeeHom.Web.File.Delete(UpFileFace + SessionUserName + .gif); new LeeHom.Web.File.Delete(UpFileFace + SessionUserName + .jp
25、g); if (System.IO.Path.GetExtension(fuUserFace.FileName).ToLower() = .jpg) UpFile.MakeThumbnail(fuUserFace.PostedFile.InputStream, null, Path, 160, 120, W); else this.fuUserFace.PostedFile.SaveAs(Server.MapPath(Path.ToString(); dbh.Reset(); dbh.tableName = Users; dbh.AddFieldParameters(Face, Path);
26、dbh.conditionExpress = ID=ID; dbh.AddConditionParameters(ID, SessionID); dbh.DataUpdate();4.4论坛4.4.1获取所有帖列表获取所有列表dbh.sqlCommand=select ID,UserName,Title,Hits,Reverts,LastReplyTime,LastReplyUserName from Topic order by LastReplyTime Desc;搜索指定列表 dbh.sqlCommand = select ID,UserName,Title,Hits,Reverts,L
27、astReplyTime,LastReplyUserName from Topic where + this.ddlClass.Text + like % + Text.HtmlEncode(this.txtSKey.Text) + % order by LastReplyTime Desc;4.4.2发表新帖dbh.tableName = Topic; dbh.AddFieldParameters(UserName, SessionUserName); dbh.AddFieldParameters(LastReplyUserName, SessionUserName); dbh.AddFie
28、ldParameters(Title, txtTitle.Text); dbh.AddFieldParameters(Contents, fckTopicNew.Value); if(dbh.DataInsert() dbh.Reset(); dbh.tableName = ClassInfo; dbh.fieldName = AllTopicCount; dbh.CountChange(1); Alert(发表成功!, Topic.aspx); 4.4.3回帖绑定要回复的帖dbh.tableName = ReTopic; dbh.AddFieldParameters(TopicID, Req
29、uest.QueryStringID); dbh.AddFieldParameters(UserName, SessionUserName); dbh.AddFieldParameters(Contents, this.fckContent.Value);回帖dbh.Reset(); dbh.tableName = Topic; dbh.AddFieldParameters(LastReplyTime, DateTime.Now); dbh.AddFieldParameters(LastReplyUserName, SessionUserName); dbh.conditionExpress
30、= ID=ID; dbh.AddConditionParameters(ID, Request.QueryStringID); dbh.DataUpdate(); dbh.Reset(); dbh.tableName = Topic; dbh.fieldName = Reverts; dbh.AddConditionParameters(ID, Request.QueryStringID); dbh.CountChange(1); this.fckContent.Value = ; Alert(this.ltlMessage, 回复成功!);4.5班级相册4.5.1上传图片获取本地图片UpIm
31、age u = new UpImage(); string imgLink = DateTime.Now.ToString(yyyyMMddhhmmssfff) + SessionUserName.ToString(); LeeHom.File.UpImage.ImgValue i=new LeeHom.File.UpImage.ImgValue(); if (ddlWater.SelectedValue != no) i.showWaterMark = true; i.waterMarkType = ddlWater.SelectedValue; i.waterMarkText = Sess
32、ionUserName.ToString(); u.ValueChange(i); 4.5.2评论图片绑定要评论的图片dbh.Reset(); dbh.sqlCommand = select * from RePhoto where PhotoID=PhotoID order by ID desc; dbh.AddSqlCmdParameters(PhotoID, Request.QueryStringID); BinderRepeater br = new BinderRepeater(); br.datatable = dbh.GetDataTable(); br.repeater = t
33、his.rptRePhoto; br.havePage = true; br.lnkFirst = this.lnkFirst; br.lnkLast = this.lnkLast; br.lnkNext = this.lnkNext; br.lnkPrev = this.lnkPrev; br.ltlIntr = this.ltlPageIntr; br.pageSize = 8; br.Bind();评论dbh.Reset(); dbh.tableName = RePhoto; dbh.AddFieldParameters(PhotoID,Request.QueryStringID); d
34、bh.AddFieldParameters(UserName,SessionUserName); dbh.AddFieldParameters(Contents,LeeHom.Web.Text.HtmlEncode(this.txtContents.Text); if (dbh.DataInsert() dbh.Reset(); dbh.tableName = Photo; dbh.fieldName = Reverts; dbh.conditionExpress = ID=ID; dbh.AddConditionParameters(ID,Request.QueryStringID); db
35、h.CountChange(1);4.5.3展示图片检索所有图片dbh.sqlCommand = select * from PhotoClass order by TheDesc; BinderRepeater br = new BinderRepeater(); br.datatable = dbh.GetDataTable(); br.repeater = rptPhotoClass;列表显示图片protected void DataBindTorptPhoto() string str = string.Empty; if (Request.QueryStringSID != null
36、 & Request.QueryStringSID != ) str = where ClassID=ClassID; dbh.Reset(); dbh.sqlCommand = select * from Photo + str + order by ID desc; if (str != string.Empty) dbh.AddSqlCmdParameters(ClassID, Request.QueryStringSID); BinderRepeater br = new BinderRepeater(); br.repeater = rptPhoto; br.datatable =
37、dbh.GetDataTable(); br.havePage = true; br.pageSize = 12; br.lnkFirst = lnkFirst; br.lnkLast = lnkLast; br.lnkNext = lnkNext; br.lnkPrev = lnkPrev; br.ltlIntr = ltlPageIntr; br.Bind(); 4.6显示注册用户protected void BindTorptUserList() dbh.Reset(); dbh.sqlCommand = select ID,LastLogin,RealName,IsVaild,IsTe
38、acher,RegTime,IsAdmin from Users order by RealName asc; BinderRepeater br = new BinderRepeater(); br.datatable = dbh.GetDataTable(); br.repeater = rptUserList; br.havePage = true; br.ltlIntr = ltlPageIntr; br.lnkFirst = lnkFirst; br.lnkLast = lnkLast; br.lnkNext = lnkNext; br.lnkPrev = lnkPrev; br.pageSize = 20; br.Bind(); 4.7站内信箱4.7.1收信箱dbh.Reset(); dbh.sqlCommand = select * from Message where Receiver=Receiver order by ID desc; dbh.AddSqlCmdParameters(Sender, SessionUserName);