热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

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

项目实战:ASP.NET:CS架构大学BBS论坛项目编辑环境:win10_x64/VS2015/SqlServer2012项目:asp.net项目简介:这是我写的三

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


编辑环境:win10_x64 /VS2015/ SqlServer2012

项目:asp.net

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

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


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

项目运行效果

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









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

项目思路分析:

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


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

项目主要源码部分:

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


//登录页面,是由三部分组成的
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebApplication.Index" %>





    
    

    
    
    
    
    


    
    
<% Server.Execute("/common/Default.aspx"); %>
//后台处理程序 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 zoneList { set; get; } public List
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("

"+zone.name+ "


"); // foreach (Section section in sectionList) // { // if(zone.id == section.t_z_id) // { // Response.Write(section.name + "
"); // } // } //} } } }
 
 

//TopicService.cs

        //***********************************************
        //置顶帖子
        //通过板块id(外键id)进行数据查询
        //获得回帖数, 最后回帖人和回帖时间, 普通帖子的发帖人
        //***********************************************
        public ArrayList FindStickTopic(int sectionId)
        {
            DataSet dataSet = dal.GetList("t_s_id='" + sectionId + "' and [top] = '1'");

            //将ds对象 转换 成List集合
            List ZdTopicList = DataTableToList(dataSet.Tables[0]);
            //保存每个贴子的回复作者与回复时间
            Dictionary topicLastReply = new Dictionary();
            //保存每个贴子的回复数
            Dictionary topicReplyCount = new Dictionary();
            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 topicList = DataTableToList(dataSet.Tables[0]);  //将里面数据进行转化为List类型    //只收了第一页的数据

            //创建一个,使用键值对的方式
            //获取每一个帖子的 回复数
            Dictionary topicReplyCount = new Dictionary();
            //获取每一个帖子的 最后回复(人和时间)
            Dictionary topiclastReply = new Dictionary();
            
            //查询普通贴子
            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
sectiOnList= sectionService.GetModelList("t_z_id='" + zoneId + "'"); foreach (Section section in sectionList) { List 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 findAllZone(int pageNumber) { DataSet ds = this.GetListByPage("", "", (pageNumber - 1) * 5 + 1, pageNumber * pageCount); List zOneList= this.DataTableToList(ds.Tables[0]); return zoneList; ; } //查询所以主题信息时也将此主题下相应的板块信息查询出来 public List GetZoneSectionList() { DataSet ds = dal.GetList(""); List zOneList= this.DataTableToList(ds.Tables[0]); //注意:下面代码就是重点 foreach (Zone zone in zoneList) { DataSet ds2 = sectionDao.GetList("t_z_id = '" + zone.id + "'"); List
sectiOnList= sectionService.DataTableToList(ds2.Tables[0]); zone.sectiOnList= sectionList; } return zoneList; }

//RepyService.cs

 /// 
        /// 通过主帖的id和页码, 查询回复帖子人的相关信息, 和分页(链接)代码
        /// 
        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 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;
        }

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

项目源码:

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






推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
author-avatar
小妖694_807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有