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

项目实战: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);
            //分页查询数据.返回dataset
            DataSet 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

 

 

  • 42
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 64
    评论
论坛演示地址: http://netfocus.b13.cnwg.cn 论坛功能设计  论坛前台: 1. 用户注册、登陆、注销; 2. 版块导航:显示所有的版块分组和版块; 3. 帖子列表:显示当前版块下所有的帖子,可以区分置顶帖子、精华帖子、推荐帖子; 4. 帖子内容:显示帖子内容; 5. 帖子回复:显示帖子的回复列表; 6. 添加帖子:用户添加新帖; 7. 添加回复:用户添加回复; 8. 精华帖子列表:显示所有的精华帖子; 9. 推荐帖子列表:显示所有的推荐帖子; 10. 帖子管理:具有帖子管理权限的人对帖子进行管理; 11. 回复管理:具有帖子回复管理权限的人对帖子回复进行管理;  论坛后台: 1. 版块组管理:添加、删除、修改; 2. 版块管理:添加、删除、修改,添加或修改时通过下拉框选择版块组; 3. 版主管理:可以管理论坛中每个版块的版主,如添加、删除版主; 4. 用户管理:查看用户资料、删除用户、封锁用户、解锁用户、重置密码; 5. 角色管理:添加、删除、修改; 默认定义如下角色: 系统管理员、用户管理员、角色管理员、版块管理员、版主管理员、版主、所有者、注册用户、所有人;其中所有者指发帖人,回复人;另外系统管理员、注册用户、所有者、所有人是内置角色,不能修改或删除;下面分别对每种角色的含义进行说明: 1) 系统管理员:拥有论坛所有权限; 2) 用户管理员:拥有用户管理权限; 3) 角色管理员:拥有角色管理权限; 4) 版块管理员:拥有版块管理权限; 5) 版主管理员:拥有版主管理权限; 6) 版主:拥有所有论坛事务管理权限; 7) 所有者:拥有对自己发表的帖子或回复的内容进行修改的权限;(此角色可以考虑禁用,出于数据真实性考虑,因为任何人都要对他或她所说的言行负责,不允许随便修改); 8) 注册用户:拥有一部分论坛事务,如看帖,发帖,回帖,管理和自己相关的一些帖子; 9) 所有人:这个角色只是一个映射角色,任何登陆网站的人都自动拥有此角色;此角色可以表示匿名用户;仅拥有此角色的人一般只能看帖,不能做其他任何事情。当然如果愿意,我们也可以给它分配更多的权限,如发帖,回帖。如果这样,那就意味着运行匿名用户发帖或回帖了。 6. 用户角色管理:对任意一个用户的所属角色进行管理(包括添加和删除用户所属角色); 7. 角色权限管理:分为两类进行管理; 系统管理权限:用户管理、角色管理、版块管理、版主管理; 论坛事务管理权限:浏览帖子、发表帖子、编辑帖子、置顶帖子、设为推荐帖子、设为精华帖子、删除帖子、修改回复、删除回复; 因为权限分为两种,所以角色权限管理也可以采用两个界面实现。这两个界面的行就是所有角色,列就是当前权限类型下的所有权限点。 8. 头像设置:设置用户的头像; 9. 密码修改; 10. 我的帖子管理:有我发布的帖子,我回复的帖子; 另外,一个论坛可能还常常有星级评定,积分设置,界面管理,等等其他辅助功能。这些东西可以在日后慢慢补充。
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值