已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
天津电子信息职业技术学院集中实训课程名称:BBS管理与发布系统设计与实现系 别:软件技术系专 业:软件技术班 级:姓 名:学 号:任课教师:完成时间:15年6月29日至15年7月9日目录一、系统分析和设计思想1.1 系统分层设计目的 11.2 系统分层设计意义 1二、数据库2.1 数据库设计1三、系统分析与系统设计3.1 系统需求分析23.2 实体类设计 43.3 接口设计 63.4 工具类设计103.5 工厂类设计113.6 数据访问层设计133.7 业务逻辑层设计183.8 表现层设计203.9 系统需求阶段的用例图及活动图313.10 系统分析阶段的类图、状态图323.11 系统设计阶段的时序图、协作图35四、总结4.1 心得体会36一、系统分析和设计思想1.1 系统分层设计目的系统分层设计目的:充分利用网络优势,有效管理和使用网络资源,形成一套完整的交流体系。1.2 系统分层设计意义系统分层设计意义:在系统设计过程中,采取了一些原则:实现设计化规范、科学化;程序代码标准化,统一化,确保系统的可维护性和实用性;界面尽量简单化,做到实用、方便,尽量满足学生需求。二、数据库2.1 数据库设计 使用SQL SERVER 数据库系统,其中包括用户表(TUser)、版块设置表(TmessCategory)、帖子信息表(Tmessage)、和回复信息表(Tcomment)4个数据表。1. 用户表(TUser) 该表用于存放管理员、会员的登录数据,如用户名、密码、电子邮件、安全问题、安全问题的答案、是否为版主、是否加入黑名单等,数据表结构,见表2.1-1所示。表2.1-1 用户表(TUser)2. 版块设置表(TmessCategory) 该表用于存放BBS中板块设置信息,如版块编号、版块名称、版主名称,数据表结构,见表2.1-2所示。表2.1-2版块设置表(TmessCategory)3. 帖子信息表(Tmessage) 该表用于存放所有帖子的相关数据,如编号、标题、内容、发帖人、所属版块,是否通过了验证、是否被置顶等,数据表结构,见表2.1-3所示。表2.1-3帖子信息表(Tmessage)4. 回复信息表(Tcomment) 该表用于存放与帖子相关的所有回复信息,如回复信息的编号、对应的帖子编号、回复内容、回复发表的时间、发表回复的会员的等,数据表结构,见表2.1-4 所示。表2.1-4回复信息表(Tcomment)三、系统分析与系统设计3.1 系统需求分析 在本系统中,主要包括会员登录和注册、会员及版主管理、版块管理、发帖审核、帖子置顶、黑名单、帖子搜索、十大热门贴等功能。BBS系统主要具有如图3.1-1所示的功能模块。图3.1-1 系统功能结构1.会员登录和注册 会员、版主或管理员在实行自己权限内管理操作前,需要通过“登录”进行身份验证。如果会员被列在“黑名单”中,系统将拒绝登录。 未注册的用户只能以“游客”身份访问本论坛,只能浏览论坛中的帖子,没有发表新帖子的权限,但可以对现有的帖子发表回复(评论)。 会员管理模块中包含有修改密码和找回密码的功能。若用户遗忘密码,可根据注册时填写的安全问题及答案找回密码。2.会员及版主管理 该功能是一个管理员功能,管理员登录后可以删除会员、将某会员加入黑名单,也可以将某会员指定为某版块的版主。3.版块管理该功能是一个管理员功能,管理员登录后可对论坛中包含的模块(栏目)进行添加、删除、修改或者排序。4.发帖审核 该功能是一个版主功能,版主登录后可对会员在版块中发表的新帖进行审核,只有通过版主审核的帖子才会显示在论坛中。5.帖子置顶 该功能是一个版主功能,版主登录后可将版块中某会员发表的帖子设置为“置顶”,或者取消某帖子的“置顶”设置,所谓“置顶”是指总是将帖子排列在列表的最上方。6.黑名单 该功能是一个管理员功能,管理员登录后可将在论坛中有违规的会员添加到“黑名单”中,以取消其在论坛中发帖的权限。7.帖子搜索 任何人都可以使用该功能查找论坛中已经存在的帖子。8.十大热门贴 根据帖子的点击自动退出排在前十位的帖子,为论坛的十大热门贴。3.2 实体类设计 实体类(Entity)是实体在计算机中的表示。它贯穿于整个架构,担负着在各层及模块间传递数据的职务。多数情况下,实体类和数据库的表示相对的。这里的表示指数据库的是实体表,不包括表示多对多应关系的关系表在复杂数据库设计中,也有可能出现一个实体类对应多个数据表,或交叉对应的情况。 本系统中,实体类与数据表是一一对应的,并且实体类的属性与表字段也是一一对应的。 在Visual Studio 的“起始页”中点击“创建”栏中的“项目”,在打开的对话窗口中选择“项目类型”为“Visual Studio解决方案”,选择模版为“空白解决方案”,在指定了方案名称和保存位置后单击“确定”按钮。 在“解决方案资源管理器”中,右键点击解决方案名称,在弹出的快捷菜单中执行“添加”项下的“新建项目”命令,在打开的对话框中选择项目类型为Visual C#,模型类型为“类库”,指定其名称后点击“确定”按钮,实体类命名为Entity。 通过“解决方案资源管理器”删除Entity类库项目中由系统自动生成的Class.cs文件。然后在Entity中添加4个类文件,分别为UserInfo.cs、CategroyInfo.cs、MessageInfo.cs和CommentInfo.cs。UserInfo.cs代码如下:using System;using System.Collections.Generic;using System.Text;namespace BBS.Entity Serializable public class UserInfo private int id; private string name; private string password; private string email; private string inblack; private string question; private string answer; private bool isowner; / / 是否被加入黑名单 / public string InBlack get return inblack; set inblack = value; / / 找回?密码提示问题 / public string Question get return question; set question = value; / / 提示问题答案 / public string Answer get return answer; set answer = value; / / 会员id / public int ID get return id; set id = value; / / 会员名 / public string UserName get return name ; set name = value; / / 会员密码 / public string UserPwd get return password ; set password = value; / / 会员邮件 / public string UserEmail get return email ; set email = value; / / 所辖版块 / public bool IsOwner get return isowner; set isowner = value; 3.3 接口设计 从实体类的定义中可以看到,实体类中仅定义了字段和属性,而实现程序功能的方法则需要定义在接口中。使用接口的目的是实现上层与下层类的分离。使用接口,上层类就不能直接依赖下层类,而只依赖下层提供的一个接口,这就是所谓的“松散耦合”。 1.业务逻辑层接口(IBLL) 根据功能需求,可以将业务逻辑层操作分为“会员操作”、“版块操作”、“帖子操作”和“回复操作”4大类别。每个类别中又包含若干具体的操作方法,如会员操作中包含“会员注册”、“删除会员”、“更改密码”、“找回密码”、“获取所有会员信息”和“验证会员登录信息”等。 为了清楚的表现上述4个类别,可以向解决方案中添加一个为IBLL的类库项目,用于表示所有业务逻辑层接口。为了在IBLL项目中使用Entity实体类中定义的属性,需要添加引用,右键点击IBLL项目名称,在弹出的快捷菜单中执行“添加引用”命令在打开对话框的“项目”选项卡选择“Entity”后点击“确定”按钮,为项目添加对Entity实体类的引用。 在IBLL中添加4个接口文件(添加新选项是选择“接口”模版),并分别为IUserBLL.cs(包含会员操作相关方法)、ICategoryBLL.cs(包含版块操作相关方法)、IMessageBLL.cs(包含帖子操作相关方法)、ICommentBLL.cs(包含回复操作相关方法)。IUserBLL.cs代码如下:using System;using System.Collections.Generic;using System.Text;using BBS.Entity;namespace BBS.IBLL public interface IUserBLL /*/ / / 添加会员 / / 会员实体类 / 是否成功 bool Add(UserInfo user); / / 更新会员 / / / bool Update(UserInfo user); / / 判断会员是否被列入黑名单 / / / bool IsInBlack(string name); /*/ / / 删除会员 / / 欲删除的会员的ID / 是否成功 bool Remove(int id); /*/ / / 修改会员密码 / / 欲修改密码的会员的ID / 新密码 / 是否成功 bool ChangePassword(string user, string password); bool ChangeOwner(string user, bool isowner); /*/ / / 会员登录 / / 会员登录名 / 会员密码/param / 如果登录成功则返回true,否则返回?false bool Login(string name, string password); /*/ / / 取得全部会员信息 / / 会员实体类集合 IList GetAll(); / / 通过会员名返回会员信息 / / / UserInfo GetByName(string username); 2.数据访问接口(IDAL) 与业务逻辑层接口对应,数据访问层接口也可以分为“会员操作”、“版块操作”、“帖子操作”和“回复操作”4大类。 为了清楚的表现上述4个类别,可以向解决方案中添加一个为IDALL的类库项目,用于表示所有业务逻辑层接口。为了在IDAL项目中使用Entity实体类中定义的属性,需要添加引用,右键点击IDALL项目名称,在弹出的快捷菜单中执行“添加引用”命令在打开对话框的“项目”选项卡选择“Entity”后点击“确定”按钮,为项目添加对Entity实体类的引用。 在IDAL中添加4个接口文件(添加新选项是选择“接口”模版),并分别为IUserDAL.cs(包含会员操作相关方法)、ICategoryDAL.cs(包含版块操作相关方法)、IMessageDAL.cs(包含帖子操作相关方法)、ICommentDAL.cs(包含回复操作相关方法)。IUserDAL.cs代码如下:using System;using System.Collections.Generic;using System.Text;using BBS.Entity;namespace BBS.IDAL public interface IUserDAL / / 插入会员 / / 会员对象 / bool Insert(UserInfo user); / / 加入黑名单操作 / / / bool Update(UserInfo user); / / 是否在黑名单中 / / / bool InBlack(string name); / / 通过删会员 / / 会员id / bool Delete(int id); / / 修改密码 / / 会员名 / 修改后的密码 / bool UpdatePass(string user, string pwd); / / 修改会员的版主身份 / / 会员名 / 是否为版主身份 / bool UpdateOwner(string user, bool own); / / 返回所有会员信息 / / IList GetAll(); / / 验证会员身份 / / / / bool IsRight(string name, string pwd); / / 通过会员名返会员信息 / / / UserInfo GetByName(string name); 3.4 工具类设计 工具类(Utility)设计实际上及分层架构没有关系,也就是说,工具类并非分层架构的组成部分。使用工具类将一些经常使用的方法(如数据访问加密和缓存访问)进行封装,以便于开发人员在UI层代码设计调用。向解决方案中添加一个新类库项目,并命名为Utility,向Utility类库项目中添加两个类项文件 ,分别命名为Encryptor.cs和CacheAccess.cs。由于在数据加密类Encryptor需要使用System.Web.Security命名空间,CacheAccess类中需使用System.Web和System.Web。Caching命名空间,故应在相应的类文件中添加对上述命名空间的应用。CacheAccess.cs代码如下:using System;using System.Web;using System.Web.Caching;namespace BBS.Utility public sealed class CacheAccess / / 存到缓存中 / / / / public static void SaveToCache(string cacheKey, object cacheObject, CacheDependency dependency) Cache cache = HttpRuntime.Cache; cache.Insert(cacheKey, cacheObject, dependency); / / 从缓存中取 / / / public static object GetFromCache(string cacheKey) Cache cache = HttpRuntime.Cache; return cachecacheKey; 3.5 工厂类设计1.工厂类的简单概念它是专门定义的一个类,目的是利用这个类创建其他类的实例。该类根据数据传入的参数,动态决定应该创建那个“产品类”。通常可以通过.NET框架提供“反射机制”来实现工厂类。2.依赖注入的简单概念 依赖注入也称“控制反转”。在实际应用中,许多应用都是由两个或更多类,通过彼此合作来实现业务逻辑的,这使得每个对象都需要对和配合的对象添加引用。显然,如果这个过程依靠自身来实现,那么将导致代码耦合且难以测试。依赖注入是一种机制,目的是减少耦合度,也就是避免使用new 关键字来实现类,而是使用接口实现类。 3.创建工厂类项目 创建工厂类之前需要在解决方案中添加一个“新建网站”项目,为WebUI。在“解决方案资源管理器”中,双击打开WebUI下的web.config文件,在节点添加以下两个项,以便后面缓存注入中使用。 向解决方案中添加一个新类库项目,为Factory。由于工厂类需要使用前面创建的接口,故需要添加IBLL和IDAL的引用。此外,为了在Factory项目中使用配置文件,还添加System.Web和System.Configuration命名空间的引用。向 Factory项目中添加3个类文件,分别为BLLFactory.cs(要业务逻辑层工厂)、DALFactory.cs(数据访问层工厂)、DependencyInjiector.cs(依赖注入工厂)。DependencyInjiector.cs代码如下:using System;using System.Reflection;using System.Collections.Generic;using System.Text;using System.Configuration;using System.Web;using System.Web.Caching;using BBS.Utility;/缓存注入namespace BBS.Factory public sealed class DependencyInjector /通过类名返回数据访问层的对应的对象 public static object GetDALObject(string className) /从缓存中取 object dal = CacheAccess.GetFromCache(DAL); /如果不在缓存中就从配置文件中取出数据访问层的命名空间并存入缓存中 if (dal = null) CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath(Web.Config); dal = ConfigurationManager.AppSettingsDAL; CacheAccess.SaveToCache(DAL, dal, fileDependency); string dalName = (string)dal; string fullClassName = BBS.+dalName + . + className; object dalObject = CacheAccess.GetFromCache(className); /从程序集加载所要求的对象 if (dalObject = null) CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath(Web.Config); dalObject = Assembly.Load(dalName).CreateInstance(fullClassName); CacheAccess.SaveToCache(className, dalObject, fileDependency); return dalObject; /通过类名返回业务逻辑层的对应的对象 public static object GetBLLObject(string className) /从缓存中取 object bll = CacheAccess.GetFromCache(BLL); /如果不在缓存就从配置文件中取出业逻辑层的命名空间,并存入缓存 if (bll =null) CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath(Web.Config); bll =ConfigurationManager.AppSettingsBLL; CacheAccess.SaveToCache(BLL, bll, fileDependency); string bllName = (string)bll; string fullClassName = BBS.+bllName + . + className; object bllObject = CacheAccess.GetFromCache(className); /从程序集中加载所要求的对象 if (bllObject = null) CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath(Web.Config); bllObject = System.Reflection.Assembly.Load(bllName).CreateInstance(fullClassName); CacheAccess.SaveToCache(className, bllObject, fileDependency); return bllObject; 3.6 数据访问层设计 在解决方案中添加一个类库项目,为SQLServerDAL。需要引入的项目和命名空间有Entity、IDAL、Utility和System.Configuration。此外,需要在网站,双击打开WebUI下的web.config文件,添加连接字符串的设置(运行程序是,需要修改斜体字部分)。 在数据访问层包含有SQLServerDALHelper.cs(数据访问助手)、UserDAL.cs(会员类数据库访问)、CategoryDAL.cs(版块类数据访问库)、MessageDAL.cs(帖子类数据库访问)和CommentDAL.cs(回复类数据库访问)5个类项文件。UserDAL.cs代码如下:using System.Collections.Generic;using System.Data.SqlClient;using BBS.IDAL;using BBS.Entity;using BBS.Utility;namespace BBS.SQLServerDAL public class UserDAL:IUserDAL / / 插入会员 / / 会员对象 / public bool Insert(UserInfo user) string sql = insert into TUser (UserName,UserPwd,UserEmail , InBlack , Question,Answer ) values(+user.UserName +,+user.UserPwd +,+user.UserEmail+,+user.InBlack +,+user.Question +,+user.Answer +); try SQLServerDALHelper.ExecuteSQLNonQurey(sql); return true; catch return false; / / 更新操作 / / / public bool Update(UserInfo user) string sql = update TUser set InBlack= +user.InBlack+ where UserName=+user.UserName+ ; try SQLServerDALHelper.ExecuteSQLNonQurey(sql); return true; catch return false; / / 是否在黑名单中 / / / public bool InBlack(string name) string sql = select UserName from TUser where UserName=+name+ and InBlack=Yes; try string username = SQLServerDALHelper.ExecuteSQLScalar(sql).ToString(); if (username != null) return true; else return false; catch return false; / / 通过id删除会员 / / 会员id / public bool Delete(int id) string sql = delete from TUser where UserID=+id ; try SQLServerDALHelper.ExecuteSQLNonQurey(sql); return true; catch return false; / / 修改密码 / / 会员名 / 修改后的密码 / public boo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年下半年哈尔滨市市长公开电话受理中心招聘受理10人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年呼伦贝尔莫旗事业单位招聘工作人员(115人)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林省长春市信用信息服务中心招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林省通化市事业单位招聘916人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林直事业单位招考第二十七批拟聘用人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林白山市江源区事业单位公开招聘工作人员52人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林教育厅农业科学院招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林市事业单位招考工作人员(3号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林公主岭市事业单位招聘23人(2号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年内蒙古鄂尔多斯第二季度高层次人才和紧缺专业人才需求92人易考易错模拟试题(共500题)试卷后附参考答案
- 企业情绪管理培训课件
- 2025-2030中国橡胶性能检测行业发展方向及前景动态预测报告
- CJ/T 194-2014非接触式给水器具
- 皮肤病靶向治疗专家共识(2025版)解读课件
- 标准厂房项目消防安全突发事件应急预案
- 《放射诊疗许可讲解》课件
- 椎间孔镜手术护理
- 《数据统计与分析:大数据时代统计学课程教案》
- 医院装修整改合同范例
- 2025年广东广州市高三一模高考物理试卷试题
- 离婚不离家协议范本
评论
0/150
提交评论