资源描述
项目课程报告
课程名称:WEB网站项目开发
项目名称:网站管理系统
专业班级:软件11301
学 号:1104030120
姓 名:陈秋实
1 项目概要
1.1 引言
Internet的蓬勃发展,使新闻的传播方式发生了巨大的变化,传统的信息传播媒体电视、广播、报纸已经不再是人们茶余饭后的主要精神甜点、人们更多的开始关注网络新闻。由于互联网所容纳的信息量大、内容丰富、信息及时、准确,更有相关信息的全面介绍与比较,大大地方便了人们的阅读,因此在短短几年的时间里,互联网便跻身于众多媒体之间,并具有相当一部分媒体人群。
1.2 项目名称
《新闻管理系统》
1.3 项目背景
新闻网站内容丰富,涉及商业、工业、农业、银行、财政、教育、娱乐和信息等各个产业,信息量大,不仅有时事新闻,还有相关的行业信息,同时新闻网具有互联网所具备的一切特征,在全球网络化、信息化的今天,新闻网站有很大的发展空间。
2 可行性研究报告
2.1 概论
网站新闻管理系统运用 。NET、数据库、和C#相关技术,本案通过对其相应的研究确定开发可行性及注意事项。
2.2 可行性研究的前提
2.2.1 项目的基本功能要求
通过相关调查,要求新闻网站具有以下功能:
(1) 通过网络,浏览各行业新闻及相关信息;
(2) 新闻分类显示相关信息;
(3) 提供站内新闻全面搜索功能;
(4) 设置本站为首页和搜藏本站;
(5) 支持其他网站的友情链接;
(6) 为后台管理提供管理入口;
(7) 后台编辑各行业新闻中心并且管理新闻信息。
2.2.2 项目实现的目标
可以实现新闻的查询,新闻分类显示相关信息,支持其他网站的友情链接,后台编辑各行业新闻中心并且管理新闻信息。
2.2.3 可行性分析
新闻发布系统后台管理对新闻做了详细的分类,前台以分类形式显示新闻的详细信息,满足了人们浏览器新闻时分类查看新闻信息的要求,前台提供查询新闻信息功能,方便浏览者查找相关的新闻信息.新闻发布系统后台由管理员进行管理维护,保证了网站的安全性。
2.2.4 保证可行性的主要因素
(1)经济可行性:系统建设不需要很大的投入.
(2)运行上可行性:本系统只是网站开发的一部分,所耗费的资源非常的小。
(3)从各种社会因素可行性分析:可提高文件的利用率,提高效率更有利于网友的交流,会得到人们的一致同意的。
综上所述通过可行性分析认为新系统的开发方案切实可行,可进行开发。
2.3 程序业务流程图
图2。1程序业务流程图
2.4 技术可行性分析
2.4.1 系统的简要阐述
该系统分为网站的前台浏览和后台的新闻编辑。
2.4.2 需用技术
。NET网站开发技术,C#程序设计语言,sqlserver数据库。
2.5 结论意见
通过研究具备相关的开发条件,可以开发本项目.
开发过程中仍需进一步钻研、进取,结合所学知识综合运用,在实践中加深对知识的理解。
3 需求规格说明书
3。1概论
新闻网站管理系统功能的实现需要相应的开发和运行环境,本案介绍该项目在开发和运行过程中所需要的准备工作和相关规格需求,以规范该项目,保证功能的完整性。
3。2新闻概述
3.2。1项目目标
通过相关调查,要求新闻网站具有以下功能:
1).通过网络,浏览各行业新闻及相关信息;
2)。新闻分类显示相关信息;
3).提供站内新闻全面搜索功能;
4)。设置本站为首页和搜藏本站;
5)。支持其他网站的友情链接;
6)。为后台管理提供管理入口;
7)。后台编辑各行业新闻中心并且管理新闻信息。
3。2.2开发运行环境
系统开发环境:Microsoft Visual Studio 2008
系统开发语言:ASP.net+C#
运行平台:Windows XP
数据库:SQL Server 2008
Web服务器: IIS
3。2。3系统规范要求
(1)界面设计友好、美观.
(2)数据存储安全、可靠。
(3)信息分类清晰、准确。
(4)提供灵活、方便的权限设置功能,使整个系统的管理分工明确。
(5)具有易维护性和易操作性。
(6)能够进行文件上传及下载。
4 概要设计说明书
新闻发布系统是一个功能完善的新闻类网站,由前台新闻浏览和后台新闻管理两大部分组成。
前台功能模块
该模块主要包括新闻分类、显示新闻详细信息、新闻信息查询、设置本站为首页和收藏本站、提供友情链接、提供后台登陆入口等功能。
后台功能模块
该模块主要包括后台系统管理员设置的密码修改、添加管理员、管理员信息设置、新闻类型管理、新闻详细类型管理、新闻信息管理、连接管理、后台安全退出等功能。
新闻发布系统前台功能模块图如图,如图3-1所示。
新闻详细信息
站内新闻搜索
设为首页收藏本站
友情链接
后台登录系统
新闻类别
新闻发布系统功能结构图
图3—1 新闻发布系统前台功能结构图
新闻发布系统后台功能结构图,如图3—2所示。
新闻添加、修改和删除
新闻详细类型管理
新闻信息管理
友情链接管理
后台安全退出
管理员设置
新闻发布系统后台功能结构图
图3—2 新闻发布系统后台功能结构图
4。1 模块说明
4。1.1前台功能模块
该模块主要包括新闻分类、显示新闻详细信息、新闻信息查询、设置本站为首页和收藏本站、提供友情链接、提供后台登陆入口等功能。
4。2。2后台功能模块
该模块主要包括后台系统管理员设置的密码修改、添加管理员、管理员信息设置、新闻类型管理、新闻详细类型管理、新闻信息管理、连接管理、后台安全退出等功能。
5详细设计说明书
本案主要介绍各个页面的主要控件及功能实现,通过实例展现出项目开发的详细过程。
文件组织结构图,如图5。1所示.
图5。1,文件组织结构图
5.1数据库设计
本系统采用sqlserver 2008数据库系统,在该数据库中创建3个数据表,分别为用户信息表(tbuser)、新闻信息表(tbnews)、和网站友情连接表(tblink)。
Tbuser(用户信息表)
用户信息表主要用于保存管理员的基本信息,tbuser数据表的结构如表5.1所示。
表5—1 用户信息表(tbuser)结构
字段名称
类型
长度
是否可为空
说明
ID
Int
4
否
主键
Name
Varchar
20
否
用户姓名
Passwd
Varchar
50
否
用户密码
AddData
Datatime
8
否
添加时间
Tbnews(新闻信息表)
用户信息主要用于保存新闻的基本信息,Tbnews数据表的结构如表5-2所示.
表5—2 新闻信息表(tbnews)结构
字段名称
类型
长度
是否可为空
说明
ID
Int
4
否
主键
Title
Varchar
50
否
新闻标题
Content
Text
16
否
新闻内容
Style
Varchar
50
否
新闻类别
Type
Varchar
50
否
新闻范围
IssuDate
Smalldatatime
8
否
新闻发布时间
Tblink(网站友情链接)
网站友情连接表(tblink)主要用于保存其它网站信息。该表的结构如表5—3所示.
表5-3 网站友情链接表(tblink)结构
字段名
数据结构
长度
主键否
描述
Id
Int
4
是
数据库流水号
Picpath
Varchar
50
描述
Linkname
Varchar
50
链接网站名称
Linkaddress
Varchar
50
链接网站地址
Adddate
Datatime
8
链接网站发布的日期
5.2代码封装技术
在开发网站时,如果实现某个功能的代码段需要在不同的网页多次应用.可以考虑将代码写到公共类中,使用该功能时,在网页中直接调用即可,本系统中将代码封装到公共类commonclass中,代码如下.
public SqlConnection GetConnection()
{
string mystr = ConfigurationManager.ConnectionStrings["Con"]。ToString();
SqlConnection myconn = new SqlConnection(mystr);
return myconn;
}
public DataSet GetDataSet( String sqlstr, String TableName)
{
SqlConnection con = new SqlConnection();
con = GetConnection();
con。Open();
SqlDataAdapter mydapter = new SqlDataAdapter(sqlstr, con);
DataSet myset = new DataSet();
mydapter。Fill(myset, TableName);
con.Close();
return myset;
}
public void DBlind(string str, DataList DL)
{
CommonClass common = new CommonClass();
string strsql = ”select top 5 * from tb_News where style =’” + str + "’";
DataSet ds = common。GetDataSet(strsql, ”tb_News”);
DL。DataSource = ds;
DL.DataBind();
}
}
5。3网站主页面设计
网站主页面是用户浏览各种新闻的主页面,可以方便用户的各种浏览要求,主页面如图5。3所示。
图5。3
5。4后台新闻管理模块设计
5。4.1后台登陆模块设计
网站前台任何页面底部都设置了后台登陆入口的超级链接。后台登陆页面(login。aspx)中使用了验证技术,主要用来防止用户使用非法手段恶意登陆本站后台.后台登陆模块运行结果如图5.4所示。
图5—4 后台登陆模块
单击“登陆”按钮时,将会触发该按钮的click事件,该事件下,主要调用commanClass类的checkLogin方法,判断用户是否为合法用户,如果正确则跳转到后台页面,代码如下.
private SqlConnection LoginConn()
{
SqlConnection con = new SqlConnection("server=localhost;uid=sa;pwd=admin123;database=db_news");
return con;
}
protected void Button1_Click(object sender, EventArgs e)
{
string userName = TextBox1。Text.Trim();
string passwd = TextBox2。Text.Trim();
string code = TextBox4。Text。Trim();
SqlConnection con = LoginConn();
con。Open();
//cc。GetConnection();
try
{
string str2 = ”select count(*) from tb_User where Name=@Name and PassWord=@PassWord";
SqlCommand cmd = new SqlCommand(str2, con);
cmd。Parameters。Add(”@Name", SqlDbType。VarChar, 50);
cmd.Parameters[”@Name"]。Value = userName;
cmd.Parameters。Add("@PassWord”, SqlDbType.VarChar, 50);
cmd。Parameters[”@PassWord”].Value = FormsAuthentication.HashPasswordForStoringInConfigFile(passwd, "MD5");
int count = Convert。ToInt16(cmd.ExecuteScalar());
if (count 〉 0 && Session["checkCode”].ToString() == code)
{
this.TextBox4。Text = ””;
Session[”_Login”] = "true”;
//string str3 = ”insert into register_log values ('” + userName + "',’” + System。DateTime。Now。ToString() + "')”;
//cmd。Connection = con;
//cmd.CommandText = str3;
//cmd。ExecuteNonQuery();
Response.Redirect("ShowNews.aspx");
}
else
{
Response.Write(”〈script〉alert('登录不成功,请检查输入信息!')</script〉”);
}
}
catch
{
Response.Write(”〈script>alert('登录失败’)</script〉”);
}
finally
{
con。Close();
}
}
5。4.2新闻添加功能模块设计
用户进入图5—5所示的后台管理首页后,单击菜单栏中任一新闻类别(如:时政要闻)下的“添加"按钮,都会进入图5-6的新闻添加界面,在该界面中,用户可以添加新闻的详细信息。
图5-5后台管理界面
图5—6新闻添加界面
在page_lode事件中,调用commonclass类中的getdataset方法,获取需要编辑的新闻信息,并将其显示出来,代码如下.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//调用CommonClass类中的GetDataSet获取数据集
DataSet ds = CC。GetDataSet(”select * from tb_News where id=’" + Request。QueryString[”id"] + ”’”, "tbNews”);
DataRow[] row = ds。Tables[”tbNews”]。Select();
foreach (DataRow rs in row)
{
//显示编辑的新闻类别名
this.txtNewsTitle.Text = rs["title”]。ToString();
//显示编辑的新闻内容
this。txtNewsContent.Text = rs[”content”]。ToString();
//显示编辑的新闻标题
this.labTitle。Text = rs["Style”]。ToString();
//显示编辑的新闻类型
switch (rs["type"]。ToString())
{
case ”国内新闻":
this。ddlNewsType。SelectedIndex =1;
break;
case ”国际新闻":
this。ddlNewsType。SelectedIndex =0;
break;
default:
break;
}
}
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
CC.ExecSQL("UPDATE tb_News SET Title = ’”+this.txtNewsTitle。Text+”’, Content = ’”+this。txtNewsContent.Text+”', Style = ’"+this.labTitle。Text。Trim()+"', Type = '"+this.ddlNewsType.SelectedValue.ToString()+”’ WHERE (ID = ’”+Request。QueryString[”id"]+”’)”);
Response.Write(CC。MessageBox(”数据修改成功!",”list.aspx"));
}
protected void btnReset_Click(object sender, EventArgs e)
{
this。txtNewsTitle。Text = ””;
this。txtNewsContent。Text = ”";
}
}
5.4。3新闻类别页
在用户点击站内导航条中的任意新闻类别,都会跳转到新闻类别页(newlist.aspx),该页的运行结果如图5—7所示。
图5—7新闻类别页
在自定义bind方法中,首先使用switch语句,获取新闻类别名,其次调用commonclass类的getdatdaset方法查询新闻信息,并将其绑定到datalist空间上,让后使用pagedatasource类实现datalist空间的分页功能,其代码如下。
protected void bind()
{
int n = Convert。ToInt32(Request。QueryString[”id"]);
switch (n)
{
case 1: mystyle = "时政要闻";
this.LabelTitle。Text = "新闻中心->时政要闻”;
this。Image2。ImageUrl = ”~/Images/时政要闻图片。jpg";
this.Image1。ImageUrl="~/Images/二级页时政要闻。jpg";
break;
case 2: mystyle = ”经济动向”;
this.LabelTitle。Text = ”新闻中心—〉经济动向”;
this。Image2。ImageUrl = "~/Images/经济动向图片。jpg”;
this.Image1.ImageUrl = ”~/Images/二级页经济动向。jpg";
break;
case 3: mystyle = ”世界军事";
this。LabelTitle.Text = "新闻中心—〉世界军事";
this。Image2.ImageUrl = "~/Images/世界军事图片.jpg”;
this。Image1。ImageUrl = ”~/Images/二级页世界军事。jpg";
break;
case 4: mystyle = "科学教育”;
this.LabelTitle.Text = ”新闻中心->科学教育";
this。Image2。ImageUrl = ”~/Images/科学教育图片。jpg";
this。Image1.ImageUrl = ”~/Images/二级页科学教育。jpg”;
break;
case 5: mystyle = ”体育世界";
this。LabelTitle。Text = ”新闻中心-〉体育世界";
this。Image2。ImageUrl = ”~/Images/体育世界图片.jpg";
this.Image1.ImageUrl = ”~/Images/二级页体育世界.jpg”;
break;
case 6: mystyle = "法治道德";
this。LabelTitle.Text = ”新闻中心—>法制道德";
this.Image2.ImageUrl = ”~/Images/法制道德图片.jpg";
this.Image1。ImageUrl = ”~/Images/二级页法制道德.jpg";
break;
case 7: mystyle = ”时尚娱乐”;
this。LabelTitle。Text = ”新闻中心->时尚娱乐";
this。Image2.ImageUrl = ”~/Images/时尚娱乐图片。jpg”;
this。Image1.ImageUrl = "~/Images/二级页时尚娱乐。jpg”;
break;
case 8: mystyle = "社会现象”;
this。LabelTitle.Text = "新闻中心—>法制道德”;
this。Image2.ImageUrl = ”~/Images/法制道德图片。jpg”;
this.Image1。ImageUrl = ”~/Images/二级页法制道德.jpg”;
break;
}
int curpage = Convert.ToInt32(this。LabelPage。Text);
PagedDataSource myps = new PagedDataSource();
//string str = ”select * from tb_News where style='” + mystyle + ”’ order by issueDate Desc”;
//DataSet mydset = new DataSet();
//mydset = CC。GetDataSet("select * from tb_News where style=’” + mystyle + "' order by issueDate Desc", ”tb_News”);
DataSet mydset = CC。GetDataSet(”select * from tb_News where style='” + mystyle + ”’ order by issueDate Desc”, "tb_News");
myps.DataSource = mydset。Tables["tb_News"]。DefaultView;
myps。AllowPaging = true;
myps.PageSize = 3;
myps。CurrentPageIndex = curpage — 1;
this。lnkbtnOne.Enabled = true;
this。lnkbtnUp。Enabled = true;
this。lnkbtnNext。Enabled = true;
this。lnkbnBack。Enabled = true;
if (curpage == 1)
{
this。lnkbnBack。Enabled = false;
this.lnkbtnOne。Enabled = false;
}
if (curpage == myps.DataSourceCount)
{
this.lnkbtnUp。Enabled = false;
this.lnkbtnNext。Enabled = false;
}
this.Label6。Text = Convert。ToString(myps。PageCount);
this.DataList1.DataSource = myps;
this。DataList1.DataKeyField = ”id”;
//this。DataList1.DataBind();
CC.DBlind(mystyle, this.DataList1);
}
protected void LinkButton2_Click(object sender, EventArgs e)
{
this。LabelPage。Text = ”1”;
CC.DBlind(mystyle, this。DataList1);
}
protected void lnkbtnUp_Click(object sender, EventArgs e)
{
this.LabelPage。Text = Convert.ToString(Convert.ToUInt32(this。LabelPage。Text) — 1);
CC。DBlind(mystyle, this.DataList1);
}
protected void lnkbtnNext_Click(object sender, EventArgs e)
{
this.LabelPage。Text = Convert。ToString(Convert.ToUInt32(this.LabelPage。Text) + 1);
CC.DBlind(mystyle, this.DataList1);
}
protected void lnkbnBack_Click(object sender, EventArgs e)
{
this。LabelPage。Text = this。Label6。Text;
CC.DBlind(mystyle, this。DataList1);
}
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
int id = Convert.ToInt32(DataList1.DataKeys[e。Item。ItemIndex].ToString());
Response。Write(”〈script language=javascript〉window。open('ShowNews.aspx?id=” + id + ”’,’’,’width=520,height=260’)</script〉”);
}
6项目测试报告
6。1目的
为了指导软件测试人员有效地设计测试用例,对所测试软件进行全面地测试,以尽可能发现最隐藏问题。检测软件存在的bug,及时发现并改正。
6。2测试方法
黑盒测试、白盒测试。
6。3测试要求屏幕上的显示位置是否正确
6。3。1窗口
l 窗口标题是否正确
l 窗口中各对象位置是否正确、美观
l 窗口的系统菜单及按钮操作是否正常
l 窗口在各种不同分辨率下是否能全部显示
6。3。2对话框
l 对话框弹出时机及位置是否正确
l 对话框内各对象位置是否正确
l 对话框内各对象的文字标题意义是否明确
l 模式对话框和非模式对话框的属性是否正确
6.3。3消息框
l 弹出时机及位置是否正确
l 信息意义是否正确、意义是否明确
l 弹出时必须锁住Mouse消息和键盘输入
l 必须有正确的对象用于退出Message Box
6。3。4文字
l 显示位置要美观
l 文字意义要明确
l 同一界面上字体及字体大小应统一、美观
l 显示正确且意义明确
6.3.5图像Button
l 应相应的文字说明或意义明确
l 应有按下和抬起两种状态
l 在界面中所处位置要美观
6.3。6输入域
l 字符输入域
l 为空
l 任意字符串(中英文)
l 功能键及符号键
l 超界字符串的处理
6。3。7显示域
l 显示域中各对象显示位置正确、美观
l 显示域中文字Label信息正确
l 显示域中文字Label字体及字体大小应统一且美观
l 显示域中显示信息应与输入的信息一致
l 在屏幕显示不下时,应增加滚动条以确保信息显示的完整
6.4测试结果
经检验,可以进行网站新闻的显示与查询,进行新闻内容的写入和读出,界面布局、控件属性合格,基本符合要求。
7项目总结
经过与自己的努力以及与同学的合作,完成了新闻网站管理系统这个项目。经过测试,基本功能得到实现。在设计过程中学到了很多东西,同时也深感不足。现在此做一总结。
7。1 完成情况
(1)窗口布局美观大方,控件属性设置正确搭建较合理;
(2)代码编写严谨规范。
(3)能够进行新闻的显示与编辑。
7。2 项目收获
在本项目的实现过程中,遇到了很多困难,同时也学到了很多知识,如何编写自定义方法以及如何使用函数数组.了解了项目的组成以及结构。编写能力得到提升,先做出一些总结。
(1)将所学知识用于实践,深入理解了所学知识,运用更加熟练。
(2)自己查阅资料,扩展了知识面,对项目开发过程有了深入详细了解
(3)与他人合作,团队协作能力提升
(4)代码编写水平提高
7。3 存在不足
(1)项目开发不是一帆风顺的,开发过程中也有些不足的地方
(2)准备不充分,入手困难,导致开发周期长
(3)开发环境运用不太熟练,编代码上有一定影响
(4)代码书写格式不太规范,易出现语法错误,影响开发进度
7。4 改进意见
(1)要注意细节,掌握基本知识.
(2)进一步熟悉开发环境,提高代码编写水平,代码书写规范化
(3)在编写过程中尝试自己编写方法,改变方法,发散思维
(4)有恒心毅力,刻苦进取
(5)多向老师同学请教。
展开阅读全文