新闻系统的主要开发过程

本文详细描述了一个新闻系统的开发过程,涉及数据库设计(包括Lb_News和Lb_Admin表),图形用户界面(首页、详情、输入员、审核员和管理员页面),Web.config配置,Web用户控件的应用,以及用户注册功能,展示了系统的核心组件和工作流程。
摘要由CSDN通过智能技术生成

5 新闻系统的主要开发过程

5.1 数据库设计

该系统使用Access作为应用程序的数据库,建立了有6张数据表:Lb_Admin表用于存储帐户的信息,Lb_Class表用于存储新闻分类信息,Lb_Links表用于存储友情链接信息, Lb_News表用于存储新闻内容, Lb_Setup表用于存储系统设置信息,Lb_Skins表用于存储页面风格。Lb_News表与Lb_Class表相关联。

在6个数据表中,主要介绍一下新闻表和账户表如下:

Lb_News表如表1所示:

表1 新闻表

n_id为该表主键,n_cid为所属新闻分类ID,n_hit为点击数,n_commend用于判断是否为推荐新闻,n_index用于判断是否为首页新闻,n_title为新闻标题,n_date为发布新闻的日期,n_author为新闻发布者名,n_content为新闻内容,n_ispic用于判断是否为首页滚动图片,n_spic为首页所滚动图片的存储地址,,n_check用于判断是否为审核新闻(值为0表示未通过审核,值1表示通过审核),n_intro为新闻简介,n_publisher为账户类型,如为管理员、审核员或新闻输入员。

Lb_Admin表如表2所示:

表2 账户表

A_Id为该表主键,A_Name为用户名,A_Password为密码,A_Grade为用户级别。

5.2各主要窗体页的图形界面介绍

◆首页:主要功能是显示最热门、最新和推荐的前8条新闻,显示新闻搜索功能、页面风格设置、新闻分类、滚动新闻图片和网站公告等;

◆新闻详细内容查看页:在首页里点击新闻标题所进入的页面,显示当前所点击新闻的详细内容,新闻标题正中加粗显示,在添加新闻时,根据所编辑的新闻内容对应显示;

◆新闻输入员页面:新闻输入员只具有添加新闻的权限,任何浏览者都可注册成为新闻输入员,但所添加的新闻并不能直接发布到网站上显示,而需经过审核员或管理员审核是否给予通过,这保证了网站内容管理的合理性,并不是随便添加的新闻都能发布;

◆新闻审核员页面:审核员管理页面主要是对新闻进行审核,可对需审核的新闻内容进行查看和编辑,以确定是否授权发布,审核员除审核新闻外,也可添加新闻和管理新闻,所添加的新闻不需审核而可以直接发布,管理新闻包括修改和删除新闻;

◆新闻管理员页面:管理员具有系统的所有权限,除审核员的审核新闻、添加新闻和管理新闻外,还可添加新闻部门和用户。对用户和新闻部门进行管理,包括修改用户ID和密码,删除用户,更改部门名称,删除新闻部门,管理员所添加的新闻也不再需要审核而可以直接发布。

5.3 页面的风格设计

为使该系统的页面美观多样,在设计时使用了8种样式风格。为了在页面设计时方便调用,将其存储于数据库的Lb_Skins(风格样式)表中,各窗体通过调用style.css文件来设计界面外观。

CSS是Cascading Style Sheets(层叠样式表单)的简称,简称样式表,它是一种设计网页样式的技术。CSS代码的基本语句结构为:选择符{属性名:属性值},选择符可以是HTML中任何的标签或自定义标识符,比如P、DIV、IMG甚至BODY都可以作为选择符。

CSS在HTML文档中有三种用法:

◆一种是把CSS文档放到<head>文档中:<style type=“text/css”> …… </style>;

◆另一种方法是采用<style=“ ”>的格式把样式写在任何html标签中的行内,这种方法比较方便灵活;

◆还有一种方法是:把编辑好的CSS文档保存成“.CSS”文件,然后在<head>中定义,定义的格式为:<head> <link href="style.css" type="text/css" rel="stylesheet">…… </head> ,<link>和“rel=stylesheet”指连接的元素是一个样式表文档,“href=‘style.css’”指的是需要连接的文件地址。这种方法非常适宜同时定义多个文档,能使多个文档同时使用相同的样式,从而减少了大量的冗余代码。

5.4 系统配置

5.4.1 Web.config文件配置

ASP.NET应用程序的配置功能放在Web.config文件中,它包含每一个具体Web应用程序的配置信息。在程序运行时,ASP.NET使用分层虚拟目录结构的Web.config文件提供的配置信息为每个惟一的URL资源计算一组配置设置,然后缓存结果配置设置,以供所有页面对资源的请求使用。

Web.config文件对于访问站点的用户来说是不可见的,而且也是不可访问的,它基于XML,每个配置文件都包含XML标记和子标记的嵌套层次结构。

新闻系统的Web.config文件中的配置:

<appSettings><add key="MdbPath" value="lbnews.mdb" /></appSettings> 通过键/值对key 和value配置数据库连接的相关信息,将ACCESS数据库lbnews.mdb文件用相对路径的方式设置为字符串"MdbPath"在程序代码中进行连接引用。

5.4.2 配置发布主页

首先要创建虚拟目录,新建虚拟目录的步骤如下:

● 打开IIS(Internet 信息服务),在默认网站上右击,在快捷菜单中选择新建—>虚拟目录; 

● 在弹出的虚拟目录创建向导对话框里点击“下一步”; 

● 输入虚拟目录别名;

● 选择网站内容所在目录路径; 

● 设置“访问”权限。 

在所建虚拟目录上右击,在弹出菜单中选择浏览,或在浏览器里输入相应网址,都可运行浏览程序。虚拟目录不在目录列表中显示(也称为 WWW 服务的“目录浏览”),要访问虚拟目录,用户必须知道虚拟目录的别名并在浏览器中键入 URL。对于 WWW 服务,也可以在 HTML 页面中创建链接。发布网站的时候,把程序首页的名字(index.aspx或default.aspx)写在IIS当中就可以访问了。

5.5 系统部分重要功能及其代码

5.5.1 Web用户控件

该系统中创建了两个Web用户控件top.ascx和bottom.ascx,在首页、新闻详细内容查看、新闻分类等页面的HTML代码里都进行了引用,调用方式为:

<%@ Register TagPrefix="uc1" TagName="bottom" Src="bottom.ascx"  %>

<%@ Register TagPrefix="uc1" TagName="top" Src="top.ascx" %>

@ Register指令注册用户控件,同时把属性TagName(标签名)和TagPrefix(标签前缀)添加到@ Register指令中,Src属性表示该用户控件相对于父页面的相对地址。用户控件也是服务器端控件,还必须在用户控件代码中添加Runat=server属性,用法如下:

<uc1:top id="Top1" runat="server"></uc1:top>

<uc1:bottom id="Bottom1" runat="server"></uc1:bottom>

其中top.ascx用户控件作用是显示首页图片、“首页”文本字体、新闻分类、新闻风格和当前日期,bottom.ascx用户控件作用是显示底部相关网站信息等。

用户控件是非常易于代码重用的,可以把许多相关功能和用户界面封装在一个用户控件中,然后在任何需要该功能的地方重用此控件。

5.5.2 通用类代码

在所有相关页面显示文件和Web用户控件的代码隐藏文件.aspx.cs或.ascx.cs中,通过对数据访问类的引用(以创建类实例方式),调用数据访问类里的相应函数完成相关功能,如建立数据库连接、打开和关闭数据库、对数据库执行查询、插入、删除和更新操作、页面登陆检验等。

此处列举Conn类(数据访问类)中主要函数的源码:

public class Conn

{

// 建立数据库连接字符串

public  OleDbConnection Lb_Conn=new OleDbConnection(strConn);

public static string strConn  //通过创建一个属性来连接数据库

{

get    //使用get方法返回此属性的值

{

StringBuilder strResult = new StringBuilder();

strResult.Append("Provider = Microsoft.Jet.OLEDB.4.0");

strResult.Append("; ");

strResult.Append("Data Source = ");

strResult.Append(HttpContext.Current.Server.MapPath("."));

             //HttpContextà应用程序上下文类,Current属性表示进程中当前请

//求的上下文,MapPath()方法表示返回与Web服务器上的指定虚

//拟路径相对应的物理文件路径,此处作用是创建数据库文件的虚拟路径     

strResult.Append("\\");

strResult.Append(ConfigurationSettings.AppSettings["MdbPath"]);

                //从配置文件中取到数据库连接字符串,“MdbPath”为Web.config

//文件中的键/值对所设置的key值

return strResult.ToString();  //返回字符串类型

}

}

public OleDbDataReader ExecuteOleDbDataReader(string strSql)

{ //此函数表示从数据库读取数据时以只进只读的行流的方式进行

OleDbCommand cmd=new OleDbCommand(strSql,Lb_Conn);

OleDbDataReader rd=cmd.ExecuteReader();

            //通过调用对象OleDbCommand的ExecuteReader()方法创建//OleDbDataReader对象

return rd;

}

public DataSet CreateDataSet(string strSql,string tableName)

{

OleDbDataAdapter da=new OleDbDataAdapter(strSql,Lb_Conn);

            //创建DataAdapter类实例,可用于填充DataSet对象和检索、更新数据

DataSet dst=new DataSet();

da.Fill(dst,tableName);

            //填充DataSet(数据集)中的一个表

return dst;

}

public int ExecuteSql(string strSql)

{

OleDbCommand cmd2=new OleDbCommand(strSql,Lb_Conn);

int result=cmd2.ExecuteNonQuery();

            //对数据库执行插入、删除和更新等操作,返回影响数据库记录的行数

return result;

}

}

5.5.3 添加发布新闻

添加发布新闻在该系统中显然起着很关键的作用,在添加新闻管理页面里,通过单击“添加”按钮执行新闻的添加,但能不能直接发布,还要根据权限来判断,“添加”按钮的单击事件主要程序如下:

Conn ds1=new Conn(); //调用数据访问类

ds1.DBopen(); //打开数据库

       string title=Lb_Title.Value.ToString();  //新闻标题

string Content=LbNewsContent.Value.ToString().Replace("'"," "); //新闻内容

string Author=Lb_Author.Value.ToString(); //新闻作者

string TitlePic=Lb_TitlePic.Value.ToString(); //是否首页滚动图片

string Intro=LbNews_Intro.Text.ToString().Replace("\r\n","<br>").Replace("'"," ");

 //新闻简介

             string Lb_Grade;//用户级别

int lb_check; //判断新闻是否需要审核,1:不需要审核,0:需要审核

try  //捕获异常范围

{

if (Lb_Grade=="1") //用户级别1为新闻输入员

{

lb_check=0; //需要审核

}

else  //审核员或管理员

{

lb_check=1; //不需要审核

}

int result=ds1.ExecuteSql("insert into Lb_News([n_cid],[n_commend],[n_index],[n_ispic],[n_title],[n_spic],[n_author],[n_content],[n_publisher],[n_intro],[n_check])values("+Lb_Classid+","+Lb_IsCommend+","+Lb_IsIndex+","+Lb_IsPic+",'"+title+"','"+TitlePic+"','"+Author+"','"+Content+"','"+Publisher+"','"+Intro+"',"+lb_check+")");

//将所添加的新闻标题、内容、作者和来源部门等插入到数据表Lb_News中

if (result>0)  //数据添加到数据库中成功

{

if (Lb_Grade=="1")

{

ds1.alert("添加成功,需等待管理员审核","admin_articleadd.aspx");

} //输入员添加新闻的话弹出对话框提示需审核,并重置当前添加页面

else

{

ds1.alert("添加成功","admin_articleadd.aspx");

} //审核员或管理员添加的话就直接发布到网站上,并重置当前添加页面

}

else  //添加不成功

{

Response.Write ("添加新闻失败");

}

}

catch(System.Data.OleDb.OleDbException ex)

{

Response.Write (ex.ToString());

} //以上操作中如有异常发生则捕捉

finally

{

ds1.DBclose();

}//关闭数据库连接

5.5.4 用户注册

该系统的内容是需要靠校园众多部门众多用户来丰富充实的,而用户注册功能提供了给用户注册和发布新闻的作用。在首页里只需点击注册按钮即可注册,注册页面里注册按钮的单击事件处理程序如下:

Conn ds1=new Conn(); //调用数据访问类

ds1.DBopen();

string name=userName.Text.Trim(); //用户名

string pass=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(passWord.Text.Trim(), "MD5") ; //用户密码

//通过HashPasswordForStoringInConfigFile()方法实现MD5加密解密算法

string  strSql="select * from Lb_Admin where A_Name='"+name+"'";

ds1.DBopen();

OleDbDataReader rd=ds1.ExecuteOleDbDataReader(strSql);   

if (rd.Read()==true) //读取DataReader中下一条记录时有相同记录

{

ds1.alert("已存在此用户名,请用其它","reg.aspx");

rd.Close();

}

else

{

rd.Close();

int result=ds1.ExecuteSql("insert into Lb_Admin(A_Name,A_Password)values('"+name+"','"+pass+"')");

if(result>0) //添加数据成功

{

ds1.alert("注册成功,请登陆","index.aspx");

}

else

{

ds1.alert("注册失败","reg.aspx");

}

}

ds1.DBclose();

在注册页面中用到了RequiredFieldValidator(非空)、RegularExpressionValidator(正则表达式)和CompareValidator(比较)验证控件,分别用于文本输入框的非空验证、由正则表达式来验证用户的输入值是否正确和验证两个输入框的值是否相等。

服务器端验证控件是ASP.NET控件中新产生的一种验证控件,可以在客户端直接验证用户的输入,但控件必须包含“runat=server”属性。正常情况下验证控件是不可见的,当用户输入数据错误时它们才可见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

等天晴i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值