热门标签 | 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;
        }

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

项目源码:

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






推荐阅读
  • 本文介绍了如何使用Power Design(PD)和SQL Server进行数据库反向工程的方法。通过创建数据源、选择要反向工程的数据表,PD可以生成物理模型,进而生成所需的概念模型。该方法适用于SQL Server数据库,对于其他数据库是否适用尚不确定。详细步骤和操作说明可参考本文内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
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社区 版权所有