项目实战:ASP.NET:C/S架构  大学BBS论坛项目(推荐★★★)

目录

项目实战:ASP.NET:C/S架构  大学BBS论坛项目(推荐★★★)

编辑环境:

项目:

项目简介:

其他:

1.项目运行效果

2.项目思路分析:

3.分析与建模

系统业务流程图

4.可行性分析

(1) 法律可行性

(2)  技术可行性

(3) 经济可行性

(4) 操作可行性

5.功能需求分析与建模

6.数据需求分析与建模

7.系统设计

8.数据库设计

9.物理模型图

10.项目主要源码部分:

11.源码下载:

12.项目视频演示:



编辑环境:

win10_x64 /VS2015/ SqlServer2012

项目:

asp.net

项目简介:

这是我写的三个asp.net项目面写的费时间最长, 耗费精力最大,使用MVC三层架构开发,其中在DAO控制层和Servicer业务层开发耗费力气比较大,我觉得其中里面比较重点的知识点有:分页代码查询,多条件查询,多表查询,且有些功能比较重要,登录采用MD5加密,和验证码验证,还有勾选记住我,可以免密码登录在一定日期中,且普通用户具有发帖,评论等功能。版主具有回帖,发帖,删帖,修改个人信息等功能,管理员可以从右下角后台管理进入,登录,对大板块,小板块进行增加,批量删除,普通用户封号,添加还有整体的换肤,等功能。

其他

写的真的好累,每天都在写, 终于把最近一段时间写的4个项目全部整理了一遍,发了博客,该睡觉了喏

==================================================================

1.项目运行效果

==================================================================

==================================================================

2.项目思路分析:

==================================================================

3.分析与建模

系统业务流程图

4.可行性分析

(1) 法律可行性

该湖北理工学院的BBS论坛系统是为了方便湖北理工学院的大学生进行学习、生活、考研、就业、二手交易、心得体会交流的交流社区网上系统,且规范相关部门工作流程,也可以解决现阶段所大学生一些存在的许多问题,没有违反国家相关法律法规,该项目在法律上是完全可行的。

(2)  技术可行性

湖北理工学院的BBS论坛系统,采用SQL Server数据库作为系统的数据存储容器,其强大的备份恢复机制保证了数据的安全性。同时,还是具有高效的结构化查询语言的支持,让系统可以在庞大的数据中很容易得到所需要的统计与分析。前台采用HTML+CSS+JavaScript+ASP.NET等技术,实现了较为友好的人机交互。目前,该项目所需的技术都已经有对应的产品,因此该项目在技术上是可行的。

(3) 经济可行性

   经过有效的成本/效益分析所计算,得到的净现值是正数,说明该项目收益率为正数,有投资的价值。并且使用该湖北理工BBS论坛系统可大大的增加我校理工的大学生在衣食住行学的多个方面的及时沟通,还可以与附近的湖北师范大学的学生一起进行思想上面的沟通,生活上面的便利交流。最为关键的是相当提供了一个有效的信息沟通平台。增加了许多的便利和一些事情的公开与透明。同时大提高学生学习的效率,缩短信息处理周期,也可以教学质量更上一个台阶,。且在还可以在成功运行试水之后,合适的话,到其他的大学进行推广。从而收取部分经济效益。达到回本和盈利的目的。综合以上分析,该系统的开发在经济上是可行的。

(4) 操作可行性

BBS论坛系统是完全根据我校大学生的具体需求量身定制了,在工作流上完全细心周到的服务 。此外,系统的用户交互设计较为友好,功能分明,操作简单,且提供了较为详细的用户简介使用手册和具有良好的新手指导功能。因此,该系统在操作上是可行的。

5.功能需求分析与建模

任何一个软件系统本质上都是信息处理系统,对软件设计有深远影响,因此,必须分析系统的数据要求, 而这里为了把用户的数据要求清楚、准确地描述出来,我通过建立E-R图来进行描述,表示的是系统的E-R图。

6.数据需求分析与建模

任何一个软件系统本质上都是信息处理系统,对软件设计有深远影响,因此,必须分析系统的数据要求,而这里为了把用户的数据要求清楚、准确地描述出来,我通过建立E-R图来进行描述,表示的是系统的E-R图。

7.系统设计

功能结构设计

8.数据库设计

一.实体以及相关的属性

用户表(t_user):

用户编号(唯一,自增长),邮箱,头像,手机号码,网名,密码,注册时间(唯一),性别,真实姓名,身份标识

小板块表(t_section)

小板块编号(唯一,自增长),所属大板块编号,用户编号,小版块名称,小版块标志

大板块表(t_zone)

大板块编号(唯一,自增长),大板块名称,大板块简介

帖子表(t_topic)

帖子编号(唯一,自增长),用户编号,小版块编号,帖子内容,修改帖子时间,第一次发帖时间,帖子标题,帖子点赞数,帖子置顶标记

回帖表(t_reply)

回复帖编号(唯一,自增长),最后回帖时间,回帖时间,回帖内容,回复的帖子标题

实体之间的联系

一个用户可以发表多个帖子(一对多的关系);

一个用户也可以有回复多个回帖(一对多的关系);

一个用户可以是多个小板块的版主(一对多的关系);

一个小板块只能够是属于一个大板块空间的(一对一的关系);

一个大板块空间是可以有多个小板块的(一对多的关系);

一个帖子可以有多个回复的帖子(一对多的关系)

9.物理模型图

一.生成的属性信息等关系

所有的表

序号

中文

名称

代码

数据类型

说明

1

回帖

t_reply

t_reply

2

小板块

t_section

t_section

3

帖子

t_topic

t_topic

4

用户

t_user

t_user

5

大板块

t_zone

t_zone

所有表的属性

序号

中文

名称

代码

数据类型

说明

1

编号

id

id

int

2

名称

name

name

Variable characters (100)

3

描述

description

description

Variable characters (200)

4

标号

id

id

int

5

邮箱

email

email

Variable characters (100)

6

头像

face

face

Variable characters (200)

7

手机号

mobile

mobile

Char(11)

8

网名

nickname

nickname

Variable characters (50)

9

密码

password

password

Char (20)

10

注册时间

regtime

regtime

Data&Time

11

性别

sex

sex

Char(2)

12

真实姓名

truename

truename

Char(20)

13

身份类型

type

type

Char(4)

14

编号

id

id

int

15

大板块编号

t_z_id

t_z_id

int

16

用户编号

t_u_id

t_u_id

int

17

名称

name

name

Char(50)

18

标志图片

logo

logo

Char(20)

19

编号

id

id

int

20

用户编号

t_u_id

t_u_id

int

21

大板块编号

t_s_id

t_s_id

int

22

内容

content

content

Variable characters (1000)

23

修改时间

modifytime

modifytime

Data&Time

24

回复时间

publishtime

publishtime

Data&Time

25

标题

title

title

Variable characters (100)

26

点赞数

good

good

Char(4)

27

置顶标记

top

top

Char(4)

28

编号

id

id

int

29

帖子编号

t_t_id

t_t_id

int

30

用户编号

t_u_id

t_u_id

int

31

最后回复时间

modifytime

modifytime

Data&Time

32

恢复时间

publishtime

publishtime

Data&Time

33

内容

content

content

Variable characters (100)

34

标题

title

title

Variable characters (1000)

==================================================================

10.项目主要源码部分:

==================================================================

//登录页面,是由三部分组成的
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebApplication.Index" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>论坛首页</title><link href="/bootstrap/css/bootstrap.css" rel="stylesheet" /><link href="/bootstrap/css/bootstrap-responsive.css" rel="stylesheet" /><script src="/bootstrap/js/jquery.js"></script><script src="/bootstrap/js/bootstrap.min.js"></script><script src="/bootstrap/js/bootstrap.js"></script>
</head>
<body><div id="header" class="wrap" style="width: 1200px; margin: 0 auto;"><% Server.Execute("/common/Top.aspx"); %></div><div id="content" style="width: 1200px; margin: 0 auto;"><% Server.Execute("/common/Default.aspx"); %></div><div id="footer" style="width: 1200px; margin: 0 auto;"><% Server.Execute("/common/Footer.aspx"); %></div>
</body>
</html>//后台处理程序
using hua_bbs.BLL;
using hua_bbs.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace WebApplication.common
{public partial class Default : System.Web.UI.Page{public List<Zone> zoneList { set; get; }public List<Section> sectionList { set; get; }protected void Page_Load(object sender, EventArgs e){ZoneService zoneService = new ZoneService();zoneList = zoneService.GetZoneSectionList();SectionService sectionService = new SectionService();sectionList = sectionService.GetModelList("");//foreach(Zone zone in zoneList)//{//    Response.Write("<h1>"+zone.name+ "</h1><br>");//    foreach (Section section in sectionList)//    {//        if(zone.id == section.t_z_id)//        {//            Response.Write(section.name + "<br>");//        }               //    }//}}}
}
 
//TopicService.cs//***********************************************//置顶帖子//通过板块id(外键id)进行数据查询//获得回帖数, 最后回帖人和回帖时间, 普通帖子的发帖人//***********************************************public ArrayList FindStickTopic(int sectionId){DataSet dataSet = dal.GetList("t_s_id='" + sectionId + "' and [top] = '1'");//将ds对象 转换 成List集合List<Topic> ZdTopicList = DataTableToList(dataSet.Tables[0]);//保存每个贴子的回复作者与回复时间Dictionary<int, Reply> topicLastReply = new Dictionary<int, Reply>();//保存每个贴子的回复数Dictionary<int, int> topicReplyCount = new Dictionary<int, int>();foreach (Topic topic in ZdTopicList){//获取(封装)发贴人的用户信息到贴子对象中去topic._topicUser = userDao.GetModel(topic.t_u_id);//通过主帖id进行查询回复的贴子对象.但是我们只需要最后回复的那一条dataSet = replyDao.GetList(1, "t_t_id='" + topic.id + "'", "publishtime desc");if (dataSet.Tables[0].Rows.Count > 0){Reply reply = replyDao.DataRowToModel(dataSet.Tables[0].Rows[0]);//将查询出来的回贴DataSet转换成Reply对象获取(封装)回帖人的用户信息到回贴对象中去reply._replyuser = userDao.GetModel(reply.t_u_id);topicLastReply.Add(topic.id, reply);//主贴ID为key , 回贴对象为value//得到此主贴下的回贴数int count = replyDao.GetRecordCount("t_t_id='" + topic.id + "'");topicReplyCount.Add(topic.id, count);//主贴ID为key , 回贴数为value}}ArrayList mylist = new ArrayList();mylist.Add(topicReplyCount);//0下标:回帖数mylist.Add(topicLastReply);//1下标:回帖作者与回帖时间mylist.Add(ZdTopicList);//2下标:保存的置顶的主贴return mylist;}//***********************************************//普通帖子//通过板块id(外键id)进行数据查询并且分页,//获得回帖数, 最后回帖人和回帖时间, 普通帖子的发帖人//***********************************************public ArrayList FindTopic(int sectionId, int pageNumber){int pageCount = 4;  //一页显示的帖子(普通帖)个数//通过帖子所属于模块,的主键ID, 查询 发帖者和 所属于 大板块的 信息Section section = sectionDao.GetModel(sectionId);//通过主键ID查询板块信息section._user = userDao.GetModel(section.t_u_id);section._zone = zoneDao.GetModel(section.t_z_id);//查询主贴的记录数int recordCount = dal.GetRecordCount("t_s_id='" + sectionId + "'and [top]='0'");int maxPage = 0;if (recordCount % pageCount == 0){maxPage = recordCount / pageCount;}else{maxPage = recordCount / pageCount + 1;}if (pageNumber > maxPage){pageNumber = maxPage;}//主贴分页链接string pageCode  = PageUtil.GenPagination("/topic/TopicList.aspx", recordCount, pageNumber, pageCount, "sectionId=" + sectionId);//分页查询数据.返回datasetDataSet dataSet =  GetListByPage("t_s_id='" + sectionId + "'and [top]='0'", "", (pageNumber-1)*pageCount, pageNumber* pageCount);  //分页获得所有符合条件的数据列表List<Topic> topicList = DataTableToList(dataSet.Tables[0]);  //将里面数据进行转化为List<Topic>类型    //只收了第一页的数据//创建一个,使用键值对的方式//获取每一个帖子的 回复数Dictionary<int, int> topicReplyCount = new Dictionary<int, int>();//获取每一个帖子的 最后回复(人和时间)Dictionary<int, Reply> topiclastReply = new Dictionary<int, Reply>();//查询普通贴子foreach(Topic topic in topicList){//获取(封装)发贴人的用户信息到贴子对象中去topic._topicUser = userDao.GetModel(topic.t_u_id);//通过主帖id进行查询回复的贴子对象.但是我们只需要最后回复的那一条dataSet = replyDao.GetList(1, "t_t_id = '" + topic.id + "'", "publishtime desc");  //if (dataSet.Tables[0].Rows.Count > 0){Reply reply = replyDao.DataRowToModel(dataSet.Tables[0].Rows[0]);//将查询出来的回贴DataSet转换成Reply对象//获取(封装)回帖人的用户信息到回贴对象中去reply._replyuser = userDao.GetModel(reply.t_u_id);  //*******************reply.t_u_id  回帖人 ???topiclastReply.Add(topic.id, reply);//主贴ID为key , 回贴对象为value//得到此主贴下的回贴数int count = replyDao.GetRecordCount("t_t_id='" + topic.id + "'");topicReplyCount.Add(topic.id, count);//主贴ID为key , 回贴数为value}}ArrayList mylist = new ArrayList();mylist.Add(topicReplyCount);//0下标:回帖数mylist.Add(topiclastReply);//1下标:回帖作者与回帖时间mylist.Add(topicList);//2下标:普通的主贴对象mylist.Add(pageCode);//3下标:保存分页的连接mylist.Add(section);//4下标:保存的是板块对象return mylist;}
//ZoneService.cs//此删除方法会删除主题下的所有板块 与 贴子 与 回贴public bool mydelete(int zoneId){//开启事务//查询出此主题下的所有板块对象 List<Section> sectionList = sectionService.GetModelList("t_z_id='" + zoneId + "'");foreach (Section section in sectionList){List<Topic> topicList = topicService.GetModelList("t_s_id='" + section.id + "'");foreach (Topic topic in topicList){replyService.DeleteByTid(topic.id);//删除此主贴下的所有回帖}topicDao.DeleteByTsid(section.id);//删除此板块下的所有主贴}//删除此主题下的所有板块sectionDao.DeleteByTzid(zoneId);//删除此主题return this.Delete(zoneId);//事务//事务提交//结束事务}public List<Zone> findAllZone(int pageNumber){DataSet ds = this.GetListByPage("", "", (pageNumber - 1) * 5 + 1, pageNumber * pageCount);List<Zone> zoneList = this.DataTableToList(ds.Tables[0]);return zoneList; ;}//查询所以主题信息时也将此主题下相应的板块信息查询出来public List<Zone> GetZoneSectionList(){DataSet ds = dal.GetList("");List<Zone> zoneList = this.DataTableToList(ds.Tables[0]);//注意:下面代码就是重点foreach (Zone zone in zoneList){DataSet ds2 = sectionDao.GetList("t_z_id = '" + zone.id + "'");List<Section> sectionList = sectionService.DataTableToList(ds2.Tables[0]);zone.sectionList = sectionList;}return zoneList;}
//RepyService.cs/// <summary>/// 通过主帖的id和页码, 查询回复帖子人的相关信息, 和分页(链接)代码/// </summary>public ArrayList FindReplyInfoByTopicId(int topicId, int pageNumber){//1通过主帖id 查询出 回复帖子id 和 发帖者id 和  回帖者id//2通过这个id得到回帖者详细信息 和 回帖的int pageCount = 4;Topic topic = topicDao.GetModel(topicId);topic._topicUser = userDao.GetModel(topic.t_u_id);//获得分页显示的代码,DataSet dataSet 看做一个集合(游标)==>得到回帖者的List集合DataSet dataSet = dal.GetListByPage("t_t_id = '" + topicId + "'", "publishtime asc", (pageNumber - 1) * pageCount + 1, pageNumber * pageCount);//将dataSet 集合转换为列表集合List<Reply> replyList = DataTableToList(dataSet.Tables[0]);//将回帖人的信息全部封装到reply对象中去foreach (Reply reply in replyList){User user = userDao.GetModel(reply.t_u_id);reply._replyuser = user;   }//得到总的记录数int maxRecord = dal.GetRecordCount("t_t_id = '" + topicId + "'");//生成分页的连接string pageCode = PageUtil.GenPagination("/topic/TopicDetails.aspx", maxRecord, pageNumber, pageCount, "topicID=" + topicId);Section section = sectionDao.GetModel(topic.t_s_id);ArrayList mylist = new ArrayList();mylist.Add(topic);      //将主贴对象设置到0下标mylist.Add(replyList);   //将回帖的集合设置到1下标mylist.Add(pageCode);   //将分页的连接设置到2下标mylist.Add(section);//将板块信息设置到3下标return mylist;}

==================================================================

11.源码下载

==================================================================

=================更新时间2019-03==================
源码下载:

ASP.NET:C/S架构 大学BBS论坛项目

==================================================================

12.项目视频演示:

==================================================================

https://www.bilibili.com/video/av45528410

项目实战:ASP.NET:C/S架构 大学BBS论坛项目(推荐★★★)相关推荐

  1. 【项目】基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析

    [项目]基于SaaS的餐掌柜项目实战 文章目录 [项目]基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析 1.1 餐饮行业分析 1.2 餐饮 ...

  2. 基于LAMP架构搭建BBS论坛或者博客

    搭建 一.项目简介 二.环境准备 1.需要准备的软件包 2.安装前环境准备 3.编译方式 (讲究顺序) 三.编译安装MySQL 四.编译安装Apache 1.安装依赖包apr 2.安装httpd软件 ...

  3. BBS论坛项目总结(持更),附源码

    BBS论坛项目总结(持更) 总结各个功能实现的简单思路,自己按心情总结的,持续更新中~~ 源码百度云地址:链接:https://pan.baidu.com/s/1ix2MN2-JKwbeGrIg59W ...

  4. BBS论坛项目相关-5:评论模块

    BBS论坛项目相关-5:评论模块 事务管理 事务管理:ACID 常见并发异常: 第一类丢失更新,第二类丢失更新 脏读.不可重复读.幻读 第一类丢失更新:某个事务的回滚,导致另一个事务已更新数据丢失了. ...

  5. BBS论坛项目相关-4:发帖模块

    BBS论坛项目相关-4:发帖模块 过滤敏感词 前缀树 trie,字典树,查找树 查找效率高,消耗内存大,应用:字符串检索,词频统计,字符串排序等 敏感词过滤器 定义前缀树,根据敏感词,初始化前缀树,编 ...

  6. ASP.NET Core分布式项目实战(业务介绍,架构设计,oAuth2,IdentityServer4)--学习笔记...

    任务4:第一章计划与目录 敏捷产品开发流程 原型预览与业务介绍 整体架构设计 API 接口设计 / swagger Identity Server 4 搭建登录 账号 API 实现 配置中心 任务5: ...

  7. python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)

    爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...

  8. 没项目实战经验?分享自学练手的软件测试项目实战+数据库+接口,部署超级简单

    hello,我是清风,今天给大家分享一个大家能够在本地亲自搭建的实战项目, 是一个教育类型的考试系统,我这边帮你打包好之后搭建起来也非常简单. 而且几分钟就搞定. 我最近看到有位粉丝的评论挺有意思,自 ...

  9. 【项目实战】Python基于KMeans算法进行文本聚类项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 随着计算机技术的发展.Web 应用的逐步普及,大量的电子文本已经 ...

最新文章

  1. feign调用多个服务_Spring Cloud多个微服务之间调用代码实例
  2. P4factory ReadMe Quickstart 安装p4factory
  3. Oracle 系统表大全
  4. Python 爬虫修养-处理动态网页
  5. 亚马逊AWS EC2云实例AMI安装LNMP环境(1)——Nginx安装
  6. 野指针出现的三种情况
  7. 上海出租车价格计算方法
  8. dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用
  9. DirectInfo.GetFiles 排序
  10. CSC申请成功经验(自动化到生物信息,德国KIT-CSC攻博)
  11. amoeba启动报错
  12. QIIME2进阶五_QIIME2扩增子基因序列多样性分析
  13. Massve MIMO波束成形
  14. C语言 三个数字比较大小
  15. (转)80后生存法则
  16. 快速解决java端口占用
  17. RationalDMIS 7.1 矢量点自动“获得IJK“功能。
  18. mysql云架构设计_MySQL云数据库架构设计实践 洪斌@爱可生
  19. 基于linux的c语言版本的俄罗斯方块
  20. 计算机企业人员的职称有哪些,企业IT人员评职称需要什么资质

热门文章

  1. 我的世界拔刀剑java要求_我的世界1.7.10用拔刀剑征服世界整合包
  2. idea 控制台乱码问题解决
  3. 【通义千问】什么是通义千问,如何免费获得内测和使用方法。
  4. Notepadd++显示CRLF
  5. threejs和3d各种效果的学习
  6. JS实现数字的分隔符,美元分隔符(12,300)
  7. 从腾讯外包到正式员工,我只用了一年时间。。。
  8. java病人健康档案管理电子病历系统ssm#毕业设计
  9. Unity开发备忘录000005:用Unity标准着色器构建金属材质效果(一)
  10. 中国人工智能学会通讯——心智模型CAM的学习记忆机制 1.3 互补学习系统