新闻发布系统 (Asp.net 三层架构 )

                              2012年度课程设计---新闻发布系统(小结)

                                                                                                                                                                                                   -----Presented By muximuxi@Achilles
Tips:因本课程设计大部分代码皆有本人短时间仓促码成,界面恶心,代码丑陋.唯一优点便是:        全部代码都已贴上,并且全部都已注释.另外与Asp.net教程结合恰当,通俗易懂,容易上手.

需求

新闻发布系统需求III
NewsPublish(简称NP)
功能说明
本项目用于对新闻发布进行管理。
1、查看新闻
所有新闻按时间按降序排列;
用户登录后在自己主页可以查看自己当前所发布的所有新闻,在系统首页可以查看系统中所有的新闻;
游客可以查看当前系统所发布的所有新闻。
2、发布新闻
用户登录后,通过填写表单,添加附件或者不添加附件,指定接收人进行新闻发布;
接收人可以为联系人中的某几个人或所有人,其中所有人包括游客。表单见表一。

表一:表单
标题 xxxxxxx
接收人 XXX
发布人 XXX            添加附件 xxx
正文 xxxxxxx

简单需求分析

简单分析:
名词:新闻,用户,主页,表单,附件,接收人,联系人,游客.
抽取名词建立实体类:新闻类(News),用户类(User),附件类(FileService),联系人类(Contact),添加了联系人的新闻类(NewsHaveSetContact)(为了不改变原来的代码,这个类建立应该是很丑陋恶心的,这应该用到设计模式的,这里主要为了展示三层架构就不从设计模式展开,-)_(-)



底层之数据库









项目文件夹部分截图


三层架构代码

Model层

Model层之NewsModel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace NewsPublish.Model
{
    /// <summary>
    /// 封装News的字段和属性
    /// </summary>
    public class NewsModel
    {

      
        #region NewsModel构造函数

        /// <summary>
        /// NewsModel构造函数
        /// </summary>
        /// <param name="title">新闻标题</param>
        /// <param name="date">新闻发布日期</param>
        /// <param name="content">新闻内容</param>
        /// <param name="newsID">新闻ID(key)</param>
        /// <param name="fileID">新闻所含的上传附件ID(or not)</param>
        public NewsModel(string title, DateTime date, string content, int newsID,int  fileID)
        {
            this._title = title;

            this._date = date;

            this._content = content;

            this._newsID = newsID;

            this._fileID = fileID;

        }
        /// <summary>
        /// 其实建立这个构造函数是为了弥补这个缺陷的:没有绑定用户名;
        /// 不过话说是每一个model只是含有这个样例的
        /// </summary>
        public NewsModel()
        {
    
        }
        #endregion
        

        #region 设置新闻类的属性

        //News标题
        private string _title;

        //News发布时间
        private DateTime _date;

        //发布人
        private string _userName;

        //News内容
        private string _content;

        //与主键相对应的字段
        private int _newsID;

        private int _fileID;

        #endregion

      
        #region 设置成员属性访问器

        public string Title
        {
            set
            {
                _title = value;
            }

            get
            {
                return _title;
            }
        }

        public DateTime Date
        {
            set
            {
                _date = value;
            }

            get
            {
                return _date;
            }
        }

        public string UserName
        {
            set
            {
                _userName = value;
            }

            get
            {
                return _userName;
            }
        }

        public string Content
        {
            set
            {
                _content = value;
            }

            get
            {
                return _content;
            }
        }

        public int NewsID
        {
            set
            {
                _newsID = value;
            }

            get
            {
               return  _newsID;
            }
        }

        public int FileID
        {
            set
            {
                _fileID = value;
            }

            get
            {
                return _fileID;
            }
        }

        #endregion
    }
}


Model层之UserModel层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace NewsPublish.Model
{
    /// <summary>
    /// 封装User的字段和属性
    /// </summary>
    public class UserModel
    {

        #region UserModel构造函数
        /// <summary>
        /// UserModel构造函数
        /// </summary>
        /// <param name="userID">用户ID</param>
        /// <param name="userName">用户名</param>
        /// <param name="password">用户密码</param>
        public UserModel(string userID, string userName, string password)
        {
            this._userID = userID;
            this._userName = userName;
            this._password = password;
        }
        public UserModel()
        { 
        
        }
        #endregion


        #region 定义用户类的属性(注意是private)

        private string _userID;
        private string _userName;
        private string _password;

        #endregion

   
        #region 设置成员属性访问器

        public string UserID
        {
            set
            {
                _userID = value;
            }
            get
            {
                return _userID;
            }
        }

        public string Password
        {
            set
            {
                _password = value;
            }
            get
            {
                return _password;
            }
        }

        public string UserName
        {
            set
            {
                _userName = value;
            }
            get
            {
                return _userName;
            }
        }
       
        #endregion
    }
}


Model层之FileServiceModel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace NewsPublish.Model
{
    public class FileServiceModel
    {
        #region NewsModel构造函数

       /// <summary>
        /// NewsModel构造函数
       /// </summary>
       /// <param name="fileID">该新闻上传的附件的ID</param>
       /// <param name="fileTitle">附件标题</param>
       /// <param name="fileContent">附件内容</param>
       /// <param name="fileType">附件格式,这是和附件以二进制流的形式存在数据库的内容紧密相关的,不懂度娘去(附件上传数据库)</param>
        public FileServiceModel(int fileID,string fileTitle,byte[] fileContent ,string fileType )
        {
            this._fileID = fileID;

            this._fileTitle = fileTitle;

            this._fileContent = fileContent;

            this._fileType = fileType;

            
        }
        public FileServiceModel()
        { 
        
        }
        #endregion
        

        #region 设置新闻类的属性

        private int _fileID;

        private string _fileTitle;

      
        private byte [] _fileContent;


        private string _fileType;

        #endregion

      
        #region 设置成员属性访问器

        public int FileID
        {
            set
            {
                _fileID = value;
            }

            get
            {
                return _fileID;
            }
        }

        public string FileTitle
        {
            set
            {
                _fileTitle = value;
            }

            get
            {
                return _fileTitle;
            }
        }

        public byte[] FileContent
        {
            set
            {
                _fileContent = value;
            }

            get
            {
                return _fileContent;
            }
        }

        public string FileType
        {
            set
            {
                _fileType = value;
            }

            get
            {
                return _fileType;
            }
        }

     

        #endregion
    }
}


Model层之ContactModel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace NewsPublish.Model
{
    public class ContactModel
    {
        
       #region ContactModel构造函数

       /// <summary>
       /// ContactModel的构造函数
       /// </summary>
       /// <param name="contactName">联系人</param>
       /// <param name="userName">用户</param>
     
       public ContactModel(string contactName,string userName)
       {
           this._contactName = contactName;

           this._userName = userName;

   
       }
       public ContactModel()
       { 
       
       }
       #endregion
       
        #region 设置新闻类的属性
        //用户的联系人
        private string _contactName = null;
        //用户名
        private string _userName = null;
      

        #endregion

        #region 设置成员属性访问器

       public string ContactName
        {
            set
            {
                _contactName = value;
            }

            get
            {
                return _contactName;
            }
        }

        public string UserName
        {
            set
            {
                _userName = value;
            }

            get
            {
                return _userName;
            }
        }
       

        #endregion



    }
}


Model层之NewsHaveSetContactModel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;


namespace NewsPublish.Model
{
    public class NewsHaveSetContactModel
    {


        
       #region NewsHaveSetContactModel构造函数


       
        public NewsHaveSetContactModel(string contactName, int newsID)
       {
           this._contactName = contactName;


           this._newsID = newsID;


       }
        public NewsHaveSetContactModel()
        { 
        
        }
       #endregion
       
        #region 设置已添加联系人的新闻类成员变量
        
        private string _contactName = "VISITOR";//!!!!
    
        private int _newsID ;


        #endregion
        #region 设置成员变量访问器
  
        public string  ContactName
        {
            set
            {
                _contactName = value;
            }


            get
            {
                return _contactName;
            }
        }


        public int NewsID
        {
            set
            {
                _newsID = value;
            }


            get
            {
                return _newsID;
            }
        }
        #endregion
    }
}

IDAL层

IDAL层之INewsDAL


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NewsPublish.Model;

namespace NewsPublish.IDAL
{
    public interface INewsDAL
    {

        //建立接口,是为了上一层依赖于这个一层的抽象而不是实现(也就是不必知道具体的方法怎么执行)
        //只需要知道传什么参数返回什么东西即可..接口无限强大,什么函数都调用(C#语法书没看,摸黑过来,百度后推测应该是这样)


        /// <summary>
        /// 得到所有新闻列表,主要用于主页显示
        /// </summary>
        /// <returns>所有新闻列表</returns>
        List<NewsModel> GetAllNewsList();


      
        /// <summary>
        /// 根据用户名,得到用户已发布的新闻列表
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <returns>用户已发布的新闻列表</returns>
        List<NewsModel> GetUserNewsListByUserName(string userName);
        

        
       /// <summary>
       /// 发布新闻
       /// </summary>
       /// <param name="title">新闻标题</param>
       /// <param name="date">发布新闻系统时间</param>
       /// <param name="userName">用户名(新闻,和用户名都有这么一个属性)</param>
       /// <param name="content">新闻内容</param>
       /// <param name="fileID">新闻附件ID</param>
       /// <returns>返回插入的新闻ID,这对后续处理很有帮助,good</returns>
        int PublishNews(string title, DateTime date, string userName, string content,int fileID);
        

        
        /// <summary>
        ///  由新闻Id得到具体新闻内容
        /// </summary>
        /// <param name="newsID">新闻ID</param>
        /// <returns>详细新闻</returns>
        NewsModel GetDetailNewsByNewsID(int newsID);
  
        
    }
}


IDAL层之IUserDAL


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NewsPublish.Model;

namespace NewsPublish.IDAL
{
    public interface IUserDAL
    {
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        /// <returns>登录是否成功</returns>
      bool Login(string userName, string password);

        /// <summary>
        /// 注册
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
      /// <returns>注册是否成功,只不过用int类型更好的变化://flag=1,2,3  分别为:用户名已存在/注册成功/注册失败</returns>
      int Register(string userName, string password);
    }
}


IDAL层之IFileServiceDAL

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;

namespace NewsPublish.IDAL
{
    public interface IFileServiceDAL
    {


        /// <summary>
        /// 上传附件
        /// </summary>
        /// <param name="fileTitle">附件标题</param>
        /// <param name="fileContent">附件内容</param>
        /// <param name="fileType">附件格式</param>
        /// <returns>返回附件插入数据库的即时ID</returns>
        int UpLoadFile(string fileTitle, byte[] fileContent, string fileType);
       
      
       

         
        /// <summary>
        /// 通过fileID下载新闻附件
        /// </summary>
        /// <param name="fileID">附件ID</param>
        /// <returns>通过DataTable类型返回文件</returns>
        DataTable GetHadUpLoadFileByFileID(int fileID);



        /// <summary>
        /// 通过newsID获取fileID;
        /// </summary>
        /// <param name="newsID">新闻ID</param>
        /// <returns>附件ID</returns>
        int GetFileIDByNewsID(int newsID);


    }
}


IDAL层之IContactDAL


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NewsPublish.Model;

namespace NewsPublish.IDAL
{
    public  interface IContactDAL
    {



        /// <summary>
        /// 通过用户名获取联系人
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <returns>联系人列表</returns>
        List<ContactModel> GetMyContactByUserName(string userName);


        /// <summary>
        /// 根据用户名和联系人添加联系人
        /// </summary>
        /// <param name="newContact">用户名</param>
        /// <returns>添加是否成功</returns>
        bool AddContact(string userName, string newContact);
    }
}


IDAL层之INewsHaveSetContactDAL

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NewsPublish.Model;

namespace NewsPublish.IDAL
{
    public interface INewsHaveSetContactDAL
    {

        /// <summary>
        /// 得到将我加入联系人的新闻的新闻ID列表--------未登录主页+个人中心
        /// </summary>
        /// <returns>将我加入联系人的新闻的新闻ID列表</returns>
        List<NewsHaveSetContactModel> GetNewsIDOfNewsHaveAddMeIntoContact(string contactName);


        /// <summary>
        /// 根据相应逻辑获取到的新闻ID列表(根据联系人来分)   然后得到相应逻辑的新闻列表
        /// </summary>
        /// <returns>将我加入联系人的新闻列表</returns>
        List<NewsModel> GetNewsListOfNewsHaveAddMeIntoContact(List<NewsHaveSetContactModel> newsIDList);



        /// <summary>
        ///  得到将游客和我作为接收人的新闻的新闻ID列表---------登录主页
        /// 其实一开始我还忘了我本人发布的新闻也放在登录主页呢..囧..
        /// </summary>
        /// <param name="contactName">作为联系人的名字---"我"</param>
        /// <returns>得到将游客,我作为接收人,以及我发布的新闻的ID列表</returns>
        List<NewsHaveSetContactModel> GetNewsIDOfVisitorAndMe(string contactName);



       /// <summary>
        /// 从联系人添加新闻接收人到具体新闻
       /// </summary>
       /// <param name="newsID">新闻ID</param>
       /// <param name="contactName">联系人名字</param>
       /// <returns>添加是否成功</returns>
        bool AddNewsReceiver(int newsID, string contactName);
    }
}


DAL层

DAL层之SQLHelper(这个是作为数据库操作写的辅助类,对减少冗余代码起了不少作用,不过是从老师课题笔记那摘过来的,网上也有一大堆下载)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace NewsPublish.DAL
{
    public class SQLHelper
    {
        
        string connectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

        /// <summary>
        /// 构造函数
        /// </summary>
        public SQLHelper()
        {
        }

        /// <summary>
        /// ExecuteNonQuery操作,对数据库进行 增、删、改 操作((1)
        /// </summary>
        /// <param name="sql">要执行的SQL语句 </param>
        /// <returns> </returns>
        public int ExecuteNonQuery(string sql)
        {
            return ExecuteNonQuery(sql, CommandType.Text, null);
        }

        /// <summary>
        /// ExecuteNonQuery操作,对数据库进行 增、删、改 操作(2)
        /// </summary>
        /// <param name="sql">要执行的SQL语句 </param>
        /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
        /// <returns> </returns>
        public int ExecuteNonQuery(string sql, CommandType commandType)
        {
            return ExecuteNonQuery(sql, commandType, null);
        }

        /// <summary>
        /// ExecuteNonQuery操作,对
  • 14
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值