资源描述
动态网站的设计与开发
指导教师评语
指导教师:
年 月 日
成绩评定
姓 名
分工任务名称
成 绩
任宪朋
网站设计
代码编写
谢丽杰
文档编写
总体规划
邢幸芬
部分版面设计
部分文档编写
目 录
1 概述 1
2 系统分析与设计 2
2.1处理流程分析 2
2.2功能设计 3
2.3数据库设计 5
3 系统实现 14
3.1关键功能流程图 14
3.2使用说明 17
4 总结 23
附录 25
1 概述
随着经济水平的提高人们越来越关注旅游行业,旅游业已成为当今世界上发展势头最强劲的产业,它是集吃、住、行、游、购、娱六大要素的一个综合性产业。旅游活动涉及到众多的服务设施和旅游资源,其信息有着丰富的空间和时间的内涵同时由于旅游过程是一个受人为、自然等多种因素制约的复杂的过程,如何使游客在很短的时间内查找到所要旅游目的地的信息,是游客所关心的问题,更是旅游部门要解决的问题。故我们根据旅游用户和旅游部门的需要设计了旅游网站导航。网站的设计不但可以给旅部门带来新客户、新生意,也可以大大的方便用户满足用户的需求。利用互联网得到信息是最方便、费用最低、效率最高的方式。
本文是根据旅游行业的这种现状,采用现代化统一的计算机网络系统,实现了旅游的网络化,对各类信息有序地进行存储,同时采用了权限认证的方式,只有经过了系统权限认证之后,方可进入系统主控界面,进行信息管理,信息查询,在线预定,留言簿等功能的使用。利用ASP技术建立动态网站,实现旅游信息快速发布及接受游客的网上预定。本设计提出了基于浏览器/服务器结构旅游网站系统的基本设计思想,简要介绍了系统各功能模块及数据库的设计,着重讨论了用 ASP.NET技术和SQL Server 2005开发旅游网站系统时的数据库访问技术和动态网页制作技术,并给出了部分实现代码。该系统是在Windows 7系统和VS.NET平台下开发完成,使用C#作为ASP.NET的开发语言,SQL Server 2005作为数据库。它能够处理大量数据,同时保持数据的完整性、安全性。确保系统有较高的稳定性和较好的性能。其中连接数据库的字符串可以随时在web.config里修改,增加了灵活性。我们的网站使前台的用户操作方便简单,突出旅游特点,具有美观的界面设计,保证网站安全稳定的运行。
2 系统分析与设计
2.1处理流程分析
我们设计的旅游导航网站包括11个重要的功能模块,如图2-1:
图2-1 功能模块图
首先首次使用的用户可以注册,然后用户登录身份验证模块验证用户名和密码,并根据不同的用户类型,跳转到对应的页面中。用户在首页可以查看具体的景点介绍,景点查询模块用户可以对景点进行查询。留言板模块用户可以留言并查看别人的留言。订票模块用户可以订购旅游景点的票。管理模块管理员可以添加、删除、修改各景点信息以及管理用户等。
2.2功能设计
在本系统中,有两类用户:系统管理员、游客。两种不同的用户具有的操作权限以及可以操作内容均不一样。本系统的后台管理员具有很大的自主权,系统管理员主要负责发布信息、查询、添加、删除、修改旅游景点信息、管理用户。而游客只能使用管理员给予的权限进行相关的操作。游客可以浏览信息、查询景点信息、留言板留言、写自己的旅游日志、订购游票等。
根据上面的要求,从操作功能上可以分为两个类:一个是通用操作,主要实现用户的注册、登录和修改密码等;另一种是为不同用户定制不同操作。
1、通用操作
(1)登录
每个用户都可以用自己的账号登录系统,不同的权限登录到不同页面。
(2)修改密码
如果用户忘记登录密码都可以通过自己的邮箱验证进行密码的修改。
2、用户所具有功能
(1)后台管理员
首先管理员要管理整个网站的布局以及内容,同时也要对用户进行管理。此处我们设了两个重要的功能,管理员主要完成的功能一是对旅游景点信息进行添加、修改、删除;对用户进行管理,可以添加用户,编辑用户,删除用户。
(2)游客
① 用户注册
用户首次进入网站首先要注册自己的账号这样才能进入网站进行具体的操作,注册时有一定的限制,比如用户名、密码不能为空;密码要六位以上;邮箱可以选填,但必须符合邮箱的格式,用于找回自己的密码。
② 热门景点查询模块
该功能模块中用户可以查询网站上已有的旅游景点地点信息、票价信息、景点热度信息、旅游时间等。该模块主要是方便用户对本站景点进行相关检索,包括景点所在地、景点名称,然后返回检索结果。用户可根据自己不同的需要,系统根据用户选择的不同组合检索方式和输入的关键字进行相关检索,得到用户检索的信息。详情内还有具体景点的介绍。
③ 留言板功能
该功能模块主要是方便用户进行沟通和交流,用户可以发表自己的看法也可浏览其他用户的留言。为了让旅游部门掌握各方面的反馈信息,本系统设置了留言簿模块。通过此模块,可以上传留言、查看以往的留言信息。留言信息包括:留言的用户、留言内容、回复。
④ 订票模块
该功能模块主要是客户浏览了相关资料后,可在订票菜单里订票。具体操作包括,用户选择景点然后价格会自动跟出,还可以选择订的票数以及选择乘车的方式还有旅游时间,自己的联系方式,填写完整后,上交给系统。然后系统数据库就会记录用户的操作。同时用户还可以对自己预定的票进行添加、修改、删除。而系统经过简单的逻辑判断信息是否有错然后来确定预定是否成功。
⑤ 信息浏览模块
实现的主要功能包括查看站内公告(最新公告及近期的所有公告)、网站的联系方式等,而且点击景点会出现旅游景点介绍详细信息。
⑥ 我的旅游模块
此模块是游客用来写自己的旅游日记的,只有自己可以看到,是游客的私人空间。
2.3数据库设计
数据库是此类系统的核心,系统中所有的信息都存储在数据库中,在所有ASP.NET页面中通过ADO.NET与数据库连接,操作数据库中的数据,从而实现所有需要的功能。数据库软件有很多,如Microsoft SQL Server 2008等。本系统中数据库采用Microsoft SQL Server 2008作为数据库工具。数据库是网站的核心,数据库设计的合理与否对网站的建设有着至关重要的影响。一个良好的数据库开发过程一般是先系统分析,再逻辑设计,然后物理实现。系统分析中分析数据库用户需求,并画出E-R图直观地表示出数据库系统的需求。逻辑设计中根据系统分析设计的一个关系模型。物理设计为逻辑设计中的数据模型选取一个最合理的应用环境的物理结构,通常选取一个常用数据库软件,用数据库软件创建与逻辑设计中数据模型对应的数据库。
1、 概念设计
本系统的数据库实体主要有“用户”、“景点”、“管理员”、“留言”、“旅游路线”等。其中“旅游路线”与“景点”存在“包含”联系,并且一个旅游路线可以包含N处景点,一处景点可以被M个旅游路线所包含,即“旅游路线”与“景点”之间是多对多的关系。同样“景点”与“用户”存在“订票”联系,并且一个用户可以订购N处旅游景点的门票,一处景点的门票可以被M个用户所订购,即“景点”与“用户”之间是多对多的关系。对于用户和留言,一个用户可以发布N条留言,而一条留言只能由一个用户发布,因此用户与留言之间是一对多的关系。同样,用户与旅游笔记之间也是一对多的关系。整个数据库可以用一个E-R图表示,如图2-2:
图2-2:数据库E-R图
E—R图中的实体图:
图2-3:用户实体图
图2-3:留言实体图
图2-4: 旅游笔记实体图
图2-5:景点实体图
图2-6:旅游路线实体图
图2-7:管理员实体图
2、数据库逻辑设计:
数据库逻辑设计就是将E—R图转换为关系模型的过程,即将所有实体和关系转换成一系列的关系模式。转换过程中常见规则有:
(1)一个实体型转换为一个关系模式;
(2)一个一对一的联系可转换成一个独立的关系模式,也可与任意一端对应的关系模式合并;
(3)一个一对多的联系可以转换成一个独立的关系模式,也可与多的那一端对应的关系模式合并;
(4)一个多对多的关系转换成一个关系模式。
根据以上四条规则,下面将E—R图转换成关系模型。
对于“旅游路线”和“景点”两者之间的关系,就可以根据规则(4)转换成三个关系模式:
景点:(景点Id,景点名,省份,景点介绍);
旅游路线:(路线Id,时间,价格,热度);
包含:(包含Id,路线Id,景点Id)。
对于“用户”和“景点”和两者之间的“订票”关系,就可以根据规则(4)转换成两个关系模式:
用户:(用户Id,用户名,用户密码,用户邮箱)
订票:(预定Id,用户Id,景点Id,乘车方式,人数,时间,电话,总价)
对于“用户”和“留言”两者之间的关系,就可以根据规则(3)转换成一个关系模式:
留言:(留言Id,用户Id,用户名,主题,留言内容)
对于“用户”和“旅游笔记”两者之间的关系,就可以根据规则(3)转换成一个关系模式:
旅游笔记:(旅游笔记Id,用户Id,主题,内容)
管理员:(用户名,密码)
3、数据库物理实现:
经过数据库系统分析和逻辑设计后,数据库的结构已经非常清晰,剩下的就是用一种数据库软件实现这样的结构。本系统中数据库采用Microsoft SQL Server 2008作为数据库。
(1)景点信息表:用来存储景点基本信息,使用景点Id作为主键,如表2-:1:
表2-1 景点信息表
字段名
字段类型
字段意义
景点Id
int
景点的Id
景点名
varchar(50)
景点的名称
省份
varchar(50)
景点所在的省份
景点介绍
varchar(300)
景点介绍
(2)旅游路线信息表:存储旅游路线基本信息,使用路线Id作为主键。如表 2-2 :
表2-2 旅游路线信息表
字段名
字段类型
字段意义
路线Id
int
路线编号
热度
int
喜欢该景点的用户数
时间
varchar(50)
该景点路线行程时间
价格
int
该景点路线行程价格
(3)路线包含信息表:存储旅游路线和景点之间的对应关系,使用“包含Id”为主键。其中路线Id、景点Id为外键,其值必须分别是“旅游路线信息表”、“景点信息表”内存在的值。如表2-3:
表2-3 路线包含信息表
字段名
字段类型
字段意义
包含Id
int
旅游路线和景点对应关系编号
路线Id
int
旅游路线编号
景点Id
int
景点编号
(4)用户信息表:用户信息表用来存储用户的个人信息,使用用户Id作为主键,如表2-4:
表2-4 用户信息表
字段名
字段类型
字段意义
用户Id
int
用户编号
用户名
varchar(50)
用户昵称
用户密码
varchar(50)
用户登录密码
用户邮箱
varchar(50)
用户注册邮箱
(5)订票信息表:存储用户与其预定旅游路线的对应关系,使用“预订Id”为主键。其中路线Id、用户Id为外键,其值必须分别是“旅游路线信息表”、“用户信息表”内存在的值。如表2-5:
表2-5 订票信息表
字段名
字段类型
字段意义
预订Id
int
订票编号
景点Id
int
景点编号
用户Id
int
用户编号
乘车方式
varchar(50)
成火车或汽车等方式
人数
int
所订票数
时间
varchar(50)
乘车时间
电话
varchar(50)
联系方式
总价
int
票数*单价
(6)留言信息表:存储各条留言信息,使用留言Id做主键,表中用户Id为外键,其值必须是“用户信息表”内存在的值。设置外键关系可以通过在建立表的窗口中单击右键,在右键菜单中选择“关系”,在弹出的对话框中设置外键关系。如表2-:6:
表2-6 留言信息表
字段名
字段类型
字段意义
留言Id
int
留言编号
用户Id
int
发布者编号
主题
varchar(50)
留言标题
留言内容
varchar(100)
留言内容
(7)旅游笔记表:存储用户存储的旅游笔记,使用留言Id做主键,表中用户Id为外键,其值必须是“用户信息表”内存在的值。如表2-7:
表2-7 旅游笔记表
字段名
字段类型
字段意义
笔记Id
int
留言编号
用户Id
int
发布者编号
主题
varchar(50)
留言标题
内容
varchar(500)
留言内容
(8)管理员信息表:存储管理员基本信息,使用其用户名作为主键。如表2-:8:
表2-8 管理员信息表
字段名
字段类型
字段意义
用户名
varchar(50)
登陆用户名
密码
varchar(50)
登陆密码
3 系统实现
3.1关键功能流程图
登陆模块主要验证不同的用户身份并取得不同的用户操作界面,进行不同的系统操作。当用户点击登陆按钮,便进入登陆页面,即为登陆模块开始状态。输入与数据库内记录相匹配的用户名和密码才能顺利登陆。异常情况下显示异常信息。通过登陆名区分用户身份并跳转入不同页面。其流程图如图3-1所示:
图3-1 登陆模块流程图
景点查询模块让用户快捷方便地寻找其所需要景点的详细信息。其中景点名、省份为查询条件,查询条件输入格式要正确,结果以表格记录的方式返回给用户。用户可以通过翻页查看全部搜索结果。未输入查询条件则返回全部景点信息,输入信息错误或未在数据库中找到则返回空记录。结束界面仍出现搜索框,便于用户再次查询操作。其流程图如图3-2所示:
图3-2 景点查询流程图
“我的旅游”模块为用户提供发表旅游笔记的空间,使用户之间旅游经历分享和交流的渠道。开始界面为输入框,输入内容包括两项:主题和内容。其中主题不能为空,系统通过用户登陆记录自动向数据表中加入用户Id、用户名字段,未登陆用户记录为“游客”。用户提交后会显示发布成功或失败的反馈信息。旅游笔记发布过程结束。发表旅游笔记的流程图如图3-3所示:
图3-3 旅游笔记发表流程图
3.2使用说明
1、系统界面说明
下面是我们的旅游网站系统的预览,此处简单介绍本系统的部分功能。
(1)注册页面,如图3-4:
图3-4 注册界面图
在用户名和密码处输入用户名和密码,并且要确认密码,邮箱可以选填,如要填写要符合邮箱格式,填完点“确定” 。
(2)登录页面,如图3-5:
图3-5 登陆页面图
根据用户名的不同性质跳转到不同的页面。
2、 系统管理员界面说明
管理员主要有两个功能,一是负责发布信息、查询、添加、删除、修改旅游景点信息,二是管理用户。
添加用户,如图3-6:
图3-6 添加用户结果图
录入所要添加用户的“用户名”、“密码”、“邮箱”,点击添加就可以成功添加用户。同时还可以编辑已有的用户,如图3-7:
图3-7 用户编辑结果图
对风景管理,可以编辑和删除,如图3-8:
图3-8风景管理图
3、用户界面说明
(1)首页景点展示,如图3-9:
图3-9 首页简介图
点击链接就可以查看每个景点的详细介绍,点击“关于我们”有我们公司的简介以及联系方式等信息。
(2)景点查询,如图3-10:
图3-10查询结果图
游客输入关键字就可以查询相关的景点,例如在省份中输入“山”则所有带山的省份的旅游景点都会被查询出来,然后点击“详情”则得到每个景点的详细信息,如图3-11:
图3-11 详情结果图
(3)网上订票,如图3-12:
图3-12 订票操作图
用户可以在订票模块输入相关的信息进行订票,用户选择景点然后价格会自动跟出,还可以选择订的票数以及选择乘车的方式还有旅游时间,自己的联系方式,填写完整后提交。
(4)我的留言板,如图3-13:
图3-13 留言板界面图
游客可以进行留言,点击“发表”之后会跳转到留言发辫成功页面,并且留言内容会显示在所有用户留言的列表内。
(5)我的旅游,如图3-14:
图3-14 旅游日志界面图
在“我的旅游”里可以记载旅游乐事,抒发自己的心情等等,同时游客可以更新发表的信息,也可以删除已发的笔记。
4 总结
近两周的实习就要结束了,回首这个过程,在我们小组进行的课程设计过程中,大家用了将近两个星期的时间,克服了种种困难,在老师的指导下完成了本管理信息系统设计。但是由于技术学习远远不够,知识掌握程度不够等等因素的制约,我们的设计存在很大的不完美之处,距离我们与其想象的目标差距甚远。下面就我们本管理信息系统设计的总结如下:
1、学习所得:
经过此次课程设计,收获颇多,加深了我们对理论知识的理解,也锻炼了我们参阅书籍的动手能力和学习能力,使理论和实际联系起来。在设计网站的过程中我们遇到很多问题,也发现自己掌握的知识远远不够,在开发的过程中,走了不少弯路也出了不少错误,但是这些经验和教训使我们增长了见识。通过我们的努力协作,积极主动的学习使我们对ASP有了进一步的了解。这些知识必定会给以后的工作和学习带来很大益处。
在这次的课程设计中不仅检验了我们所学习的知识,也培养了我们的能力。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。我们学会了合作,也学会了为人处事。总之整个课程设计让我们受益匪浅,
2、学习到的教训:
首先,网站的设计不能太单调,这样没有吸引力,可以适当的插入图片来美化网站;其次,网站的布局非常重要,布局做不好,整个网站就变得乱乱的,给人不舒服的感觉;最后,设计网站时要多采纳别人意见,群众的力量是伟大的,遇到不懂的就多问。不及时的沟通讨论往往会浪费很多的时间,所以小组内要加强合作,只有团队协作一致才能高效的完成任务。
3、比较遗憾的地方:
由于时间的限制和我们知识的匮乏,网站设计的不是很完美,功能可能有些欠缺。尤其是数据库做的不够好,还有待提高,但这些都是我们自己做的。如果还有我们没发现的缺点希望老师能给予指正。
附录
default
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["username"] != null)
{
Label1.Text = Session["username"].ToString()+"你好,欢迎来我爱旅游";
//LinkButton1.Visible = false;
LinkButton2.Visible = false;
}
}
}
}
default2 管理员登录后界面
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "insert")
{
SqlDataSource1.InsertParameters.Clear();
SqlDataSource1.InsertParameters.Add("用户名", TextBox1.Text);
SqlDataSource1.InsertParameters.Add("密码", TextBox2.Text);
SqlDataSource1.InsertParameters.Add("邮箱", TextBox3.Text);
SqlDataSource1.Insert();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
}
}
登录页面
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("找密码.aspx");
}
protected void LoginButton_Click(object sender, EventArgs e)
{
if(UserName.Text=="admin" && Password.Text=="admin")
{
Response.Redirect("Default2.aspx");
return;
}
string username = UserName.Text.Trim();
string password = Password.Text.Trim();
string Mycon="Data Source=(local);Initial Catalog=课程设计;Integrated Security=True";
SqlConnection Sqlcon=new SqlConnection(Mycon);
string FindStr = "select count(*) from 用户表 where 用户名='" + username + "'and 密码='"+password +"'";
try
{
Sqlcon.Open();
SqlCommand Mycomand = new SqlCommand(FindStr, Sqlcon);
Object a = new Object();
a = Mycomand.ExecuteScalar();
if ((int)a == 0)
{
Label1.Text = "用户名或密码错误!";
Label1.Visible = true;
}
else
{
Session["username"] = username;
Response.Redirect("Default.aspx");
}
}
finally
{
Sqlcon.Close();
}
}
}
风景
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["username"] != null)
{
Label1.Text = Session["username"].ToString() + "你好,欢迎来我爱旅游";
LinkButton1.Visible = false;
LinkButton2.Visible = false;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string QStr;
QStr = "select * from 风景表 where 1=1";
if (TextBox1.Text != "")
{
QStr = QStr + " and 省份 like '%" + TextBox1.Text + "%'";
}
if (TextBox2.Text != "")
{
QStr = QStr + " and 风景名 like '" + TextBox2.Text + "%'";
}
string Mycon = ConfigurationManager.ConnectionStrings["课程设计ConnectionString"].ConnectionString;
SqlConnection Sqlcon = new SqlConnection(Mycon);
Sqlcon.Open();
GridView1.DataSource = null;
GridView1.DataSourceID = null;
SqlDataAdapter da = new SqlDataAdapter(QStr, Sqlcon);
DataSet ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
Image1.ImageUrl = RadioButtonList1.SelectedValue + ".jpg";
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index = Convert.ToInt32(e.CommandArgument);
Label4.Text = GridView1.Rows[index].Cells[1].Text.ToString();
}
}
管理员风景管理
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class 风景管理 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
三亚
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class 三亚 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
我的留言
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
public partial class 我的留言 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["username"] != null)
{
Label1.Text = Session["username"].ToString() + "你好,欢迎来我爱旅游";
LinkButton1.Visible = false;
LinkButton2.Visible = false;
}
else Session["username"] = "游客";
Label6.Text = Session["username"].ToString();
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index = Convert.ToInt32(e.CommandArgument);
Label4.Text = GridView1.Rows[index].Cells[1].Text.ToString();
}
protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string Zhuti = TextBox1.Text.Trim();
string LiuYan = TextBox2.Text.Trim();
string Mycon = ConfigurationManager.ConnectionStrings["课程设计ConnectionString"].ConnectionString;
SqlConnection Sqlcon = new SqlConnection(Mycon);
string ZhuCeStr = "insert 留言表(用户名,主题,留言)values('" + Label6.Text + "','" + Zhuti + "','" + LiuYan + "')";
try
{
Sqlcon.Open();
SqlCommand FaBiaocmd = new SqlCo
展开阅读全文