IBM项目代码

来源:互联网 发布:手机淘宝怎样用信用卡 编辑:程序博客网 时间:2024/06/04 18:55

 

 

 

 

 

淮南师范学院

 

2012届毕业论文(设计)

 

 

 

 

 

论文(设计)题目

 

基于.net的网站的设计与开发

院系名称

 

数学与计算科学系

专业(班级)

 

信息与计算科学

 

 

2008级本科1

姓名(学号)

 

张兄才(0805020146

指导教师

 

陈宝国

系负责人

 

杨绪武

 

 

 

O一二年五月五日


摘要

随着互联网科技的迅猛发展,信息大爆炸时代已经来临,人们对信息获取的途径越来越多,一切都向智能化发展,快速、高效、便捷成为人们选择在互联网上获取信息的原因。它具有信息量巨大,获取信息范围广泛,获取信息速度快等特点。符合在新的情势下人们对信息的要求

互联网正在广大年轻人的生活中扮演着越来越重要的角色,而具有关统计,中国大部分网民年龄多不超过30岁,在此年龄段的年轻网民最为关注的信息咨讯中,动漫信息和游戏信息的排名都比较靠前。为了实现动漫游戏信息的集中化管理,让人们更快捷地获取需要的动漫游戏信息,基于.net的动漫游戏门户网站的设计和开发将这二者有机地结合于一体,让广大动漫游戏迷们能够通过这个专业的信息发布平台最快最大地获取自己需要的信息。

本文选用C#语言、ASP.NETADO.NET技术,设计开发基于.net的动漫游戏门户网站,主要实现动漫游戏网站内容的动态管理,使网站所有者能对网站内容信息的管理更加及时、更加高效,也提高了网站编辑工作效率。网站具有一般新闻发布管理系统的功能,主要包括用户的动漫游戏新闻信息查看区和后台管理员的信息管理区,可为网站运营商提供方便快捷的动漫游戏新闻信息发布与管理机制。

关键词:动漫游戏网站,ASP.NET C# ADO.NET


Abstract

With the rapid development of Internet technology, and the advent of information explosion era, the means people obtain information are more and more rich, the high speed, efficiency and convenience has become the main reason that a people to obtain information from Internet. It has some notable features such as the huge amount of information, a wide range of access to information, faster access to information and so on.

Internet plays an increasingly important role in the lives of vast numbers of young people. According to the statisticsMost Chinese Internet users are no more than 30 years of age, among this age of persons, animation and game information is one of the important concerns.

  In order to achieve the centralized management of cartoon and game information, and to allow more efficient access to required information of cartoon and game information for young person, the animation and game portal based on. Net combine the two organic whole formally.

This thesis uses C # language, ASP.NET and ADO.NET technology, design and develop a animation game site base on .Net, whose main function is to provide the dynamic Web content management for animation game site, so that site owners can manage site content information more timely, more efficient, and can also improve the efficiency of site editorial work. The animation game site has general function of press release management system, including the animation game information viewing district for normal users and the information management district for background administrator, and provide a convenient, fast animation game information release and management channel for site operators..

Keywords:ASP.NET, C#, ADO.NET, animation game site


目录

摘要... 2

Abstract.. 3

目录... 4

第一章绪论... 6

1.1课题背景、意义.... 6

1.2相关概念及技术介绍与应用.... 6

1.2.1动漫游戏网站中新闻管理系统简介.... 6

1.2.2 B/S结构.... 7

1.2.3 asp.net技术简介.... 8

1.2.4采用asp.net技术的系统与传统asp系统的差别.... 8

1.2.5国外研究现状及发展趋势.... 9

1.3本设计任务简介.... 9

第二章系统需求分析... 10

2.1编写目的.... 10

2.2系统总体概述.... 10

2.3系统开发目标.... 12

2.4功能需求.... 12

2.4.1新闻管理功能.... 12

2.4.2分类管理功能.... 13

2.4.3用户管理功能.... 14

2.4.4系统设置功能.... 14

2.4.5留言管理功能.... 15

2.4.6流量统计功能.... 16

2.5其他需求.... 17

2.5.1设计约束.... 17

2.5.2非功能性需求.... 17

2.5.3可使用性.... 17

2.5.4数据库要求.... 18

第三章系统设计... 19

3.1体系结构设计.... 19

3.1.1ASP.NET结构.... 19

3.1.2系统逻辑结构.... 20

3.1.3系统物理结构.... 21

3.1.4系统总体流程图.... 21

3.2系统环境选择.... 22

3.2.1系统开发环境.... 22

3.2.2关键问题解决方法.... 23

3.3接口设计.... 23

3.3.1界面设计.... 23

3.4数据库设计.... 28

3.4.1数据库环境.... 28

3.4.2数据库物理结构设计.... 28

3.4.3表字段设计.... 28

3.5数据库管理与维护.... 32

3.6其他设计.... 33

3.6.1系统安全性.... 33

3.6.2系统测试.... 33

第四章系统实现... 34

4.1 Web.config文件配置.... 34

4.2配置发布主页.... 34

4.3 Web用户控件.... 34

4.4通用类代码.... 35

4.5添加发布新闻.... 37

4.6用户注册.... 38

第五章系统测试、运行与维护... 40

5.1测试原理.... 40

5.2测试方法.... 40

5.3测试过程.... 40

5.3.1结果分析与评价.... 43

结论... 44

参考文献... 45

附录主要代码... 47

 

 

第一章绪论

1.1课题背景、意义

随着互联网科技的迅猛发展,信息大爆炸时代已经来临,人们对信息获取的途径越来越多,一切都向智能化发展,快速、高效、便捷成为人们选择在互联网上获取信息的原因。互联网在广大年轻人的生活中扮演着越来越重要的角色。它具有信息量巨大,获取信息范围广泛,获取信息速度快等特点。符合在新的情势下人们对信息的要求。

具有关统计,中国大部分网民年龄多不超过30岁,在这个年龄段中的年轻的网民最为关注的新闻信息中,动漫信息和游戏信息都是排名前几位的。

然而,目前大部分最新的动漫游戏信息都不是集中发布与某一个网站,所以要浏览这些相应的新闻还是需要网民们花一些心思和功夫在互联网上搜寻。特别是在安徽,并没有一个门户型的动漫游戏类的网站给广大动漫游戏迷提供集中新鲜的资讯。

基于.net的动漫游戏门户网站的设计和开发正是将这二者有机的结合于一体,让广大动漫游戏迷们能够通过这个专业的信息发布平台最快最大地获取自己需要的信息。

基于.net的动漫游戏门户网站提供了海量的动漫游戏最新信息,为广大动漫游戏迷提供了一个获取资讯的平台。其中的动漫游戏论坛则为广大网民提供了可以自由发表言论的平台,使得网民可以参与动漫游戏网的建设。

这个系统不仅仅可以为网民提供一个便利的交流平台,而且负责运营这个网站的公司可以通过这个网站的制定网站不同的盈利点(广告收入、会员收费等)为公司获取利益。因此本网站的建设既能够填补区域性动漫游戏门户网站欠缺的空白,又能够为网站运营公司带来巨大经济效益。

本动漫游戏网站使用ASP.NET(C#语言)ADO.NET技术,基于.NET FRAMEWORK平台架构开发设计,可以对网站中的动漫游戏新闻进行动态的管理,提高了网站管理员的工作效率。该系统具有一般新闻网站系统的功能,提供对动漫游戏新闻的发布与管理功能,主要包括游客信息查看区和管理新闻管理区,可为动漫游戏网站的网友提供新闻浏览服务。

1.2相关概念及技术介绍与应用

本毕业设计应用了目前比较先进的网站开发技术:asp.netado.net等。

1.2.1动漫游戏网站中新闻管理系统简介

在本动漫游戏网站中新闻管理系统是主要模块,下面是新闻管理系统的简介:

新闻发布系统又叫做内容管理系统,是一个基于新闻和内容管理的全站管理系统。新闻发布系统是基于B/S模式的WEBMIS系统,可以将杂乱无章的信息(包括文字、图片和影音)经过组织,合理有序地呈现在大家面前。当今社会是一个信息化的社会,新闻作为信息的一部分有着信息量大,类别繁多,形式多样的特点,新闻发布系统的概念就此提出。新闻发布系统的提出使得电视不再是唯一的新闻媒体,从此以后,网络也充当了一个重要的新闻媒介的功能。简单地说,新闻发布系统就是充当一个网络新闻媒介的功能,主要实现对新闻的分类,上传,审核,发布,模拟了一般新闻媒介的新闻发布的过程,通过不同权限的账号分别实现以上所说功能,当然这些功能也可以是某一个账号全部具有。

随着互连网的进一步发展,网络媒体在人们心中的地位进一步提高,新闻发布系统作为网络媒体的核心系统,重要性是越来越重要:一方面,它提供一个新闻管理和发布的功能;另一方面,现在的新闻发布要求实现与普通的用户实现交互,用户可以很方便地参加一些调查和相关新闻的评论,这一点也是其他一些媒体现在无法做到的(电视,电台等)。同时,Internet发展至今,可以说,只要是互联网民,就会接触到新闻发布系统,当然这也对新闻发布系统的开发提出了更高的要求。

新闻管理系统就是一个把杂乱无章的新闻信息有效地组织起来并以有序的方式呈现给前端客户的一个信息系统,系统主要实现对新闻的分类,管理,检索,浏览等一系列功能,从而为用户提供一个美观,大方,快速的前台新闻阅读界面。

1.2.2 B/S结构

随着Internet的普及,将原本在单机或LAN(局域网)上运行的数据库系统移植到Internet中,即开发基于浏览器/客户端模式的下一代MISManagement Information System,管理信息系统)系统,已经成为技术发展的趋势。为保证系统的高效性和可扩展性,以达到网络数据共享和网络信息管理的目的,本系统采用B/S架构进行设计和开发。

B/SBrowser/Server,浏览器/服务器模式)结构:是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。

客户机上只要安装一个浏览器(Browser),如Netscape NavigatorInternet Explorer,服务器安装OracleSybaseInformix SQL Server等数据库。浏览器通过Web Server同数据库进行数据交互。

B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易。

B/S结构的使用越来越多,特别是由需求推动了AJAX技术的发展,它的程序也能在客户端电脑上进行部分处理,从而大大的减轻了服务器的负担;并增加了交互性,能进行局部实时刷新。

1.2.3 asp.net技术简介

ASP.NETMICROSOFTASP动态脚本语言之后推出的一种统一Web开发平台,它能与最新的数据访问技术ADO.NET一起构建出安全、强大、可靠的Web应用程序。ASP.NET的语法在很大程度上与ASP兼容,并且它还提供一种新的编程模型和结构—MVC三层架构,因此.NET编写的web应用程序更加安全、稳定、也有更强的可伸缩性。

ASP.net是把基于通用语言的程序在服务器上运行,不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译,这样的执行效果,当然比一条一条的解释强很多。

因为ASP.net是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.netWeb应用中。ASP.net同时也是language-independent语言独立化的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#C++Java的结合体),VBJscript[1]

1.2.4采用asp.net技术的系统与传统asp系统的差别

采用ASP.NET的系统在性能上相比于采用ASP的系统有很大的提升,主要表现在以下几点[2]

●ASP页面在每次打开时都会经过先编译后解释的过程,因此一个页面多次打开后访问此页面的速度仍然和第一次访问一样,无任何提升,但ASP.NET页面仅仅需一次编译,第二次访问此页面的时候它不需要重新编译,直到该页面内容被修改或Web服务重新启动。这使得在多次访问时,.NET速度相对之前的ASP有极大的提升;
    ● 由于ASP脚本语言没有提供任何接收数据库输出数据为内容的元件,所以在ASP编写相关数据库页面时只能借助ADODB.RecordSet对象逐条读取记录,然后在通过html中的table等组件输出至页面,而ASP.NET则可以利用ADO.NET提供的DataGrid等专用的数据库控件直接和数据库联系;

● ASP.NET支持应用程序的实时动态更新,服务器管理员不必关掉web服务器,甚至不用停止web应用程序的运行就能更新web应用程序相关文件。而应用程序相关文件并不会被加锁,因此在web引用程序正在运行时文件仍然可以被覆盖,当相关文件更新后,系统则会温和地转换到更新后的版本;
    ●ASP.NET中的程序编码采取“CodeBehind”即代码分离技术方式使得web程序代码更易于编写,层次结构更清晰,降低了初期系统开发与后期系统维护的复杂度和费用。

1.2.5国外研究现状及发展趋势

ASP.NET不仅仅是ASP(Active Server Pages,动态服务器页面)的升级版,而是为了建立动态Web应用程序重新打造的全新技术,其主要特点有:

独立性的编程语言;

简单高效的操作,程序代码和网页标记的分离;

    ● 执行效率的大幅度提高;

    ● 部署与组态的操作的简化;

    ● 支持客户端类型;

    ● 支持下一代的Web服务;

    ● 适用性的增进;

    ● 延展性的增进;

    ● 有更多的支持工具;

    ● 有更佳的安全机制;

● Session(会话)可以跨进程、跨机器。

正是由于ASP.NET有着的众多优点,也因为计算机编程技术发展和各种客观实际的需要,本系统选择采用ASP.NET来进行设计与开发,实现了对动漫新闻的动态管理操作,也使得对网站信息的发布与管理更加高效、及时,提高了网站工作人员工作效率。

1.3本设计任务简介

本文共分五章,每章阐述主题如下:

第一章绪论部分,简单阐述本课题的背景以及论文的任务简介。

第二章为系统需求分析部分,主要对系统的需求和可行性进行分析。

第三章为系统的软件设计部分,详细介绍了系统中各模块的设计思路和方法,、以及后台数据库的设计内容。

第四章为系统的软件实现部分,分别设计和编写了各模块的核心功能、说明,

在这部分中给出了各个功能模块的设计过程,最后加以了实现。

第五章为软件调试部分,介绍了系统的调试方法与步骤,设计了一系列的测试方法以实验系统的完成度与稳定性。

最后为结论部分,对本设计提出了进一步设想。

 

 

 

第二章系统需求分析

不管是开发什么系统,一份系统的全面的需求分析是十分必要的环节,实践说明,前期需求分析的优劣,在很大程度上面决定了系统的成败。系统分析的目的是:通过问题分析,可行性分析,详细调查,系统化分析,最终完成系统逻辑方案的设计。

2.1编写目的

本章描述的内容有以下几点:

*        介绍系统开发背景

*        概述系统开发目标及作用。

*        详细分析系统的所有功能需求,描述用户主要业务流程。

*        详细分析系统数据,定义系统数据结构,给出系统数据需求。

*        定义系统的用户接口需求及数据库需求。

*        定义系统用户的其它需求。

2.2系统总体概述

本系统的用户为动漫游戏网站新闻发布人员,需要经常发布一些相关行业新闻,如何才能够有效地发布和管理相关新闻呢?用户的需求为:“本动漫游戏网站不仅具有一般网站发布行业相关信息的功能,同时应该具有新闻审核以及不同权限管理员进行对应权限操作的功能”。

在对其它一些web应用程序的新闻管理系统的调查中发现,本动漫游戏网站系统的基本功能应该如下:

◆前台信息展示页分类显示相关新闻信息;

◆新闻搜索功能;

◆网站管理员后台管理功能:

通过网站后台添加、删除和修改新闻

通过网站后台添加、删除和修改用户

通过网站后台添加、删除和修改新闻分类

通过网站后台添加新闻(成功添加后的新闻根据发布新闻的发布人员权限分为可发布新闻和待审核新闻,待审核新闻需要超级管理员或者审核员进行审核)

新闻审核,通过网站后台发布的新闻分两种:直接发布新闻在前台页面显示和发布待审核新闻。待审核的新闻通过管理员或审核员经审核后才可以显示在前台页面,让网民浏览新闻。因此管理员有不同的权限,后台中需要有管理权限的功能,而且在系统中应该有个超级管理员,具有后台操作所有权限,可对网站系统进行全面管理。

根据动漫游戏网站新闻发布管理的实际需求,首页中显示热门新闻、头条新闻和最近发布中的几条新闻等,并且在后台发布新闻同时能添加图片,也可以利用HTML语法,在前台能自动根据所显示的图片和HTML语法来显示新闻。

在后台管理操作中,因为只有对应权限的管理员才能登录管理后台,所以需要设置一个登录验证模块,而且根据登陆的用户权限的不同,显示相应的管理目录。在实践中发现,管理新闻和用户时,数据少时管理起来还比较方便,但如果数据量多了想找到某条新闻或某个用户就很难,所以需要设置一个查找模块用于查找新闻或用户。

根据上面的这些需求分析,本系统需要实现的主要功能为:

◆网站前台显示新闻功能

       ● 用户登录功能模块

       ● 显示最热门的前几条新闻

       ● 显示管理员推荐的前几条新闻

       ● 显示当前最新的前几条新闻

       ● 搜索新闻功能模块

       ● 显示新闻分类模块

       ● 按分类显示其下的所有新闻的页面

       ● 新闻详细信息浏览阅读的页面

       ● 图片新闻以滚动形式在首页显示

       ● 网站友情链接模块

       ● 网站公告模块

◆网站后台管理信息功能

       ● 登录验证

       ● 根据权限显示相应的管理目录

       ● 添加、修改和删除新闻

       ● 新闻发布人员发布新闻

       ● 管理员审核未审核新闻

       ● 管理网站信息分类

       ● 管理网站注册用户

       ● 网站风格设置

       ● 网站系统设置

2.3系统开发目标

本系统需实现以下主要目标:

   1、网民浏览网页,前台显示新闻分类

   2、管理员对最新新闻的增加,修改,改动和查询,并且实时显示于前台

   3、对不同的登录后台的用户分配不同的权限,可以执行不同的权限操作

   4、超级管理员可以对其余的管理员进行管理,包括增删改差等

   5、对基础分类进行管理

2.4功能需求

本系统的功能模块划分图如下:

.net动漫游戏网站功能模块划分图

新闻管理模块

分类管理模块

用户管理模块

系统设置模块

留言管理模块

流量统计模块

2-1 动漫游戏网站系统功能模块划分图

2.4.1新闻管理功能

(1)概述

新闻管理功能主要实现新闻的后台录入和前台的实时显示。

业务描述:对网站编辑搜集来的新闻信息在后台编辑后存入网站数据库,使得前

台可以动态调用数据库内数据以实时显示。

(2)业务流程图

用户登录

验证分配权限

录入新闻

后台修改数据库增删改查

选择操作

修改新闻

删除新闻

审核新闻

图2-2新闻管理功能模块流程图

2.4.2分类管理功能

(1)概述

分类管理功能主要实现对新闻分类的管理。

业务描述:对新闻分类在后台进行增删改查操作。

(2)流程图

                                    

用户登录

验证分配权限

增加分类

后台修改数据库增删改查

选择操作

修改分类

删除分类

图2-3分类管理模块流程图

2.4.3用户管理功能

(1)概述

用户管理功能主要实现对新闻分类的管理。

业务描述:对系统的用户以及用户的权限在后台进行增删改查操作。

(2) 流程图

用户登录

验证分配权限

增加新用户

后台修改数据库增删改查

选择操作

修改已存在用户信息

删除用户

2-4用户管理功能模块流程图

2.4.4系统设置功能

(1)概述

系统设置功能主要实现对网站基本系统信息的配置管理。

业务描述:对系统的用户以及用户的权限在后台进行增删改查操作。

(2)流程图

用户登录

验证分配权限

系统设置

后台修改数据库增删改查

选择操作

风格设置

友情链接

网站标题地址

首页图片

网站公告链接

底部信息

当前风格

网站友情链接设置

2-5系统设置功能模块流程图

2.4.5留言管理功能

(1)概述

系统设置功能主要实现对网站中用户的留言进行管理。

业务描述:对系统的用户的针对文章的留言在后台进行审查。

(2)流程图

用户登录

验证分配权限

审核用户留言

后台修改数据库增删改查

选择操作

删除用户留言

2-6留言管理模块流程图

2.4.6流量统计功能

(1)概述

系统设置功能主要实现对网站的ip流量进行统计。

业务描述:分总统计和分版块统计。

(2)流程图

用户登录

验证分配权限

查看整个网站流量统计

后台修改数据库增删改查

选择操作

查看单个版块流量统计

2-7流量统计模块流程图

2.5其他需求

2.5.1设计约束

本系统采用asp.net技术开发,运行于.net framework,采用面向对象的编程方法。

该软件的开发过程,文档应符合软件工程的标准,技术符合国际通用标准,数据定义符合国家标准。

客户机硬件要求:具有 Pentium III处理器以上且满足以下要求的计算机:最低 64 MB 内存,最小 2.1 GB 硬盘。

服务器硬件要求:具有 Pentium III处理器以上且满足以下要求的计算机:最低 256MB 内存,最小 8 GB 硬盘。

◆客户端

操作系统:Windows 98/NT/2000/XP或更高版本。

浏览器:IE 5.0以上或Netscape同等版本以上。

◆服务器

操作系统:Windows 2000 Server或者Windows 2003 Server

Web服务器:MS IIS

应用服务器:IISCOM+等企业级应用服务器。

数据库:ACCESS

2.5.2非功能性需求

操作简单、界面友好:页面布局简单友好,使得新闻的管理更加简便,许多选项例如新闻相关分类等仅需点击鼠标即可完成;另外,当用户完成一个操作后,相对应的提示信息能让用户随时清楚操作情况。对网站的动漫游戏新闻管理的各个方面,如:录入、浏览、删除、修改、搜索等方面都需要实现实时新闻的管理要求;
◆实时发布:管理员对动漫游戏新闻的操作(如:录入、修改、删除)会实时地在主页的相应分类栏目中显示出来,以达到新闻实时发布的功能;

◆系统运行稳定、可靠、快速和高效;

◆在结构上应具有很强的扩展性和伸缩性,以便于将来对网站的功能扩展和维护。

2.5.3可使用性

本系统采用当下流行的.net平台开发,是解决企业级开发的最好途径之一,适应大规模和复杂的应用需求,可适应不断的变化和新的业需求,实现对异构数据库的访问,有效提高系统并发处理能力。

系统应采用用户权限管理,保证非法用户无法进入系统。数据库中关键数据采用加密保存的方式。

2.5.4数据库要求

数据库是指在一个或多个企业组织中,为多个用户服务的,在计算上可运行的、有结构的数据集合,它与传统的数据文件不同,它不是面向单个程序的,而是面向整个需求的;记录之间不是没有关系的,而是有结构上的联系。数据库是实现有组织地,动态地存储大量关联数据,方便多用户访问的计算机软硬件组成的系统;它与文件系统的重要区别是数据的充分共享,交叉访问,与应用程序的高度独立性。

基于asp.net的动漫游戏网站的开发本质上是一个对数据库进行应用的web系统,采用面向数据的设计和开发是正确的。其主要的功能是对数据的采集、存储、加工、传递和应用,也就是数据的管理功能。以数据为中心的方法是将数据处理分为进行数据维护的增、删、改,称为一次处理功能;对数据库存储的数据进行加工、处理,称为二次数据处理。抓住这样的本质就将管理信息系统的复杂关系进行简化、规范,系统设计和开发思路清晰,可采用数据库管理系统提供的各类工具。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第三章系统设计

本系统设计本着先进性、开放性、可扩充性、可维护性的原则,并根据目前业务实际,并充分考虑今后业务发展需要,采用浏览器/服务器体系结构,使用当前先进的系统平台、面向对象的开发方法、可视化的开发工具,开发出一套较为完善的动漫游戏网站。

3.1体系结构设计

3.1.1ASP.NET结构

ASP.NET结构是一个三层系统:UI层、业务逻辑层和数据层,结构模型如下图所示[3]

3-1asp.net系统结构

UI层负责与用户交互,接收用户的输入并将服务器端传来的数据呈现给客户;

●业务逻辑层负责接收浏览器传来的请求并将请求传给数据层,同时将请求处理结果发给浏览器。它由Web表单、XML Web Services和组件服务组成,其中Web表单是ASP.NET应用程序的核心所在,它是向客户呈现数据和信息的基础,也是响应和处理客户与显示的Web表单交互生成的信息和数据的基础;

●数据层是通过ADO.NET操纵数据为事务逻辑层提供数据服务,如存储数据操作结果、返回数据检索结果等。

ADO.NET提供对Microsoft SQL ServerOLEDBXML公开的数据源的一致性访问,数据共享用户应用程序可以使用ADO.NET来连接到这些数据源,并检索、操作和更新数据。

ADO.NET 有两个核心组件:DataSet .NET Framework数据提供程序,后者是一组包括 ConnectionCommandDataReader DataAdapter 4个对象在内的组件,其组件结构如下所示:

图3-2ado.net组件结构

3.1.2系统逻辑结构

系统逻辑结构图如下图所示:

客户端

浏览器

客户端

浏览器

客户端

浏览器

 

 

 

 

 

Web

业务层

数据访问层

系统配置

数据库

3-3动漫游戏网站逻辑结构模型图

该系统结构分为三个逻辑层[4]:

Web 层:Web层为客户端浏览器提供对应用程序的访问,这一层是作为解决方案文件中的 Web 项目实现的。Web 层由 ASP.NET Web 窗体和代码隐藏文件组成,Web 窗体只是用 HTML 提供用户操作,而代码隐藏文件实现各种控件的事件处理程序;

业务层:包含各种业务规则和逻辑的实现,业务规则完成如客户帐户的验证和字符串处理这样的任务;

数据访问层:数据访问层为业务层提供数据服务,这一层是作为解决方案文件中的 Conn类(数据访问类,实现公共操作的一个通用类)实现的;

3.1.3系统物理结构

系统在物理上的部署采用集中式[5]

将动漫游戏相关信息数据存放在一个数据库系统上,系统部署在单个应用服务器上,所有的业务都在此应用服务器上进行处理。

中心数据库和单应用服务器的优点是数据库费用较低,应用服务器费用较低。数据统一存放,应用统一部署,有利于统一维护和管理。

结构如下:

3.1.4系统总体流程图

本系统的总体流程图如下:

浏览网站

普通浏览者

浏览阅读动漫游戏新闻

搜索动漫游戏新闻

注册用户

登录后经权限判断

网站新闻输入员

添加动漫游戏新闻

系统管理员

网站新闻审核员

添加动漫游戏新闻

 

审核动漫游戏新闻

管理动漫游戏新闻

添加分类

管理分类

添加用户

管理用户

系统设置

风格设置

友情链接设置

图3-4系统总体流程图

3.2系统环境选择

3.2.1系统开发环境

软件:

.NET FRAMEWORK SDK V2.0 或以上版本

MRCROSOFT IIS5.0或以上版本

Visual studio 2005

Access2003

Dreamwear8

Photoshop8

3.2.2关键问题解决方法

本系统中的关键问题包括:

1)系统设计中所用的技术。在本次设计中通过aspx和网页制作技术制作前台,使用.netc#技术编写后台代码,并使用ado.net技术完成数据库操作。

2)在几乎所有的web应用中都需要对访问者(用户)进行权限管理,这也是本系统的一个重点。我们希望某些操作只对特定的用户开放,以及某些操作只有符合身份的用户才能进行。这之中涉及到了身份验证和权限管理.只有单用户系统和多用户单权限系统才不需要权限管理。出于信息安全和其他一些原因的考虑,项目中的一些页面要求用户满足了一定条件之后才能访问。

3.3接口设计

3.3.1界面设计

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

3-5首页效果图

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

3-6新闻查看页效果图

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

3-7新闻输入员管理页面效果图

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

3-8新闻审核员管理页面效果图

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

3-9新闻管理员管理月面效果图

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

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

CSSHTML文档中有三种用法:

◆一种是把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’”指的是需要连接的文件地址。这种方法非常适宜同时定义多个文档,能使多个文档同时使用相同的样式,从而减少了大量的冗余代码。

 

3.4数据库设计

数据库设计是按照一般数据库设计步骤,先由需求分析再到数据库逻辑设计。

3.4.1数据库环境

数据库:access

设计工具:access2003

3.4.2数据库物理结构设计

根据数据库逻辑结构,设计出相应的数据库物理结构,数据表如下:

3-1数据库物理结构设计表

表名称

表代码

表功能说明

管理员表

Lb_Admin

存储网站管理员用户信息

分类表

Lb_Class

存储网站新闻分类

友情链接表

Lb_Links

存储网站友情链接

文章表

Lb_new

存储网站中新闻

网站设置表

Lb_Setup

存储用户对网站信息的设置

风格表

Lb_Skins

存储网站的风格

留言表

Lb_LeaveWord

存储用户对新闻的留言

统计表

Lb_Static

存储网站流量统计信息

管理员级别表

Lb_Right

存储网站管理员的权限级别

统计板块

Lb_Board

存储正在进行流量统计的板块

3.4.3表字段设计

3-2管理员信息表

表名

Lb_Admin

描述信息

存储网站管理员用户信息

序号

字段名

描述

类型

约束

备注

1

A_Id

编号

int

主键

自增1的标识

2

A_Name

名称

varchar50

not null

 

3

A_Password

部门

varchar20

not null

 

4

A_grade

级别

int

not null

fk

 

 

 

 

 

 

3-3分类信息表

表名

Lb_Class

描述信息

存储网站新闻分类

序号

字段名

描述

类型

约束

备注

1

C_Id

编号

int

主键

自增1的标识

2

C_Name

名称

varchar50

not null

 

3

C_Nums

分类编码

int

not null

fk

 

3-4友情链接信息表

表名

Lb_Links

描述信息

存储网站友情链接

序号

字段名

描述

类型

约束

备注

1

L_Id

编号

int

主键

自增1的标识

2

L_pic

友情链接图片显示

varchar50

not null

 

3

L_title

友情链接名称

varchar50

not null

 

4

L_url

友情链接地址

varchar50

not null

 

 

3-5网站新闻信息表

表名

Lb_News

描述信息

存储网站中新闻

序号

字段名

描述

类型

约束

备注

1

n_id

编号

int

主键

自增1的标识

2

n_cid

分类

int

not null

 

3

n_hit

新闻点击次数

int

 

 

 

4

n_commend

推荐新闻

int

 

默认值0

5

n_index

首页显示新闻

int

 

 

默认值0

6

n_title

新闻标题

varchar200

not null

 

7

n_date

新闻发布时间

datatime

 

not null

 

默认值now()

 

8

n_author

新闻作者

varchar50

 

 

9

n_content

新闻内容

text

 

 

 

10

n_spic

新闻图片

varchar50

 

 

11

n_check

新闻是否审核

int

 

 

默认值0

12

n_ispic

新闻是否首页图片滚动显示

int

 

 

默认值0

13

n_intro

新闻摘要

varchar65

 

 

14

n_publisher

发布人

Varchar50

not null

 

 

3-6网站配置信息表

表名

Lb_Setup

描述信息

存储用户对网站信息的设置

序号

字段名

描述

类型

约束

备注

1

S_Id

编号

int

主键

自增1的标识

2

S_Title

网站名称

varchar200

 

not null

 

3

S_url

网站网址

varchar200

 

not null

 

 

4

S_logo

网站logo存储位置

varchar200

 

 

 

5

S_Banner

网站banner图片

Text

 

 

 

6

S_Copyright

网站版权声明

varchar200

 

 

 

7

S_Board

网站公告

Test

 

 

8

S_ScriptName

网站链接名称

varchar200

 

 

 

9

S_ScriptCode

网站友情链接

Text

 

 

 

 

3-7网站风格信息表

表名

Lb_Skins

描述信息

存储网站的风格

序号

字段名

描述

类型

约束

备注

1

S_Id

编号

int

主键

自增1的标识

2

S_Name

风格名称

varchar50

not null

 

3

S_Isdef

是否为默认风格

int

 

not null

默认值0

4

S_Css

风格css所在地址

varchar50

 

not null

 

 

5

S_Show

是否显示该风格

boolean

 

 

 

6

S_Dirname

风格文件夹名称

varchar50

 

 

 

3-8网站留言表

表名

Lb_LeaveWord

描述信息

存储用户对新闻的留言

序号

字段名

描述

类型

约束

备注

1

L_Id

编号

int

主键

自增1的标识

2

L_Message

留言内容

varchar200

 

 

3

L_Check

是否审核通过

int

 

默认值0

4

L_New

被留言新闻

int

not null

fk

 

3-9网站流量统计表

表名

Lb_Static

描述信息

存储网站流量统计信息

序号

字段名

描述

类型

约束

备注

1

S_Id

编号

int

主键

自增1的标识

2

S_Ip

板块ip总流量

int

 

not null

 

 

 

3-10管理员级别信息表

表名

Lb_Right

描述信息

存储网站管理员的权限级别

序号

字段名

描述

类型

约束

备注

1

R_Id

编号

int

主键

自增1的标识

2

R_Name

级别名称

varchar50

not null

 

 

 

3-11统计板块信息表

表名

Lb_Board

描述信息

存储正在进行流量统计的板块

序号

字段名

描述

类型

约束

备注

1

B_Id

编号

int

主键

自增1的标识

2

B_Name

级别板块名称

varchar50

 

not null

 

 

3

B_Static

在流量统计表中对应id

int

not null

fk

 

 

本系统数据库表的实体关系图如下:

3-10表关系图

3.5数据库管理与维护

对一些敏感信息进行加密防止未授权用户改动数据库。

用户界面操作安全监控;查看资料通过权限控制;只有授权用户才能登录系统,对于某个操作,需要具有相应权限才能进行操作。

数据存储安全性设计:

对于用户的密码等敏感信息采MD5进行加密

数据库管理与维护说明:

1、数据库的管理工作主要在系统管理模块中进行。

2、系统利用数据库提供的触发器功能,自动记录操作历史。

3、系统利用数据库本身的数据备份功能向系统用户提供数据备份的功能。

3.6其他设计

3.6.1系统安全性

登陆验证,防止未授权用户进入后台。

3.6.2系统测试

1、前台表示层测试

2、业务逻辑层测试

3、数据库测试。

可以结合预定测试数据,生成sql语句,通过sql语句进行数据库测试。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第四章系统实现

本章重点介绍本设计的实现方法,包括前后台设计与实现,各个功能模块的功能实现。

4.1 Web.config文件配置[6]

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

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

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

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

4.2 配置发布主页

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

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

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

输入虚拟目录别名;

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

设置“访问”权限。

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

4.3 Web用户控件

该系统中创建了两个Web用户控件top.ascxbottom.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属性,用法如下:

<uc1top id="Top1" runat="server"></uc1top>

<uc1bottom id="Bottom1" runat="server"></uc1bottom>

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

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

4.4通用类代码

在所有相关页面显示文件和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();

            //通过调用对象OleDbCommandExecuteReader()方法创建//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;

             }

}

4.5 添加发布新闻

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

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();

                    }//关闭数据库连接

4.6 用户注册

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

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”属性。正常情况下验证控件是不可见的,当用户输入数据错误时它们才可见。

 

 

 

 

第五章系统测试、运行与维护

5.1测试原理

根据在软件工程里面学习到的软件测试理论,在本系统的测试中,我选择了黑盒测试法。

黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,通过程序接口进行测试。它只检查程序功能是否按照需求分析的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。

5.2测试方法

根据系统的需求分析和测试原理,设计了如下的验证测试程序:

对各子系统分别输入若干随即数据,以检测系统的正确性。

5.3测试过程

(1)选择一个子系统作为测试目标

(2)点击登陆、添加或查看按钮,系统将进入相对应的操作界面或显示对应的操作结果,以供用户继续操作

(3)填写完成信息后,点击提交按钮,完成操作

(4)推出上一级菜单,查看刚才所执行的操作是否成功

 

 

 

 

 

 

 

 

 

 

用户名为空测试失败图:

5-1用户名为空测试图

用户名或者密码错误测试失败图:

5-2用户名或密码错误侧视图

用户名和密码正确测试成功图:

5-3用户名和密码正确测试图

信息为空测试失败图:

5-4信息为空测试图

 

信息添加成功图:

5-5信息添加成功图

添加分类为空测试失败图:

5-6添加分类为空测试图

添加分类成功图:

5-7添加分类成功测试图

添加用户为空测试失败图:

5-8添加用户名为空测试图

添加用户成功图:

5-9添加用户成功测试图

其余部分的测试无需数据输入,当用户选择相应操作时系统将执行操作。

5.3.1结果分析与评价

经过对程序的反复测试和修改,已经基本上达到了测试目的,但是对系统的测试并不能使系统达到完全没有缺陷,只是降低了系统出错的概率,将网站系统的出错率控制在一定的范围内,在该范围内能够认定本系统的正确性。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

结论

本系统采取了面向对象的设计思想;通过使用vs2005等编程工具,实践了软件开发的基本过程,掌握了web应用软件的开发的一些开发理论,并积累了一定的开发经验。贯穿整个软件开发过程的是在大学学习的软件工程原理及思想,它指导了本系统的设计和开发,随着本系统的完成,我深刻的体会到,需求分析的好坏直接决定了软件的最终效果。所以,在需求分析阶段,要仔细耐心的获得更加详细,更加准确的用户需求,使得最终的软件产品符合用户的需求。

通过本系统的设计与开发,实现了动漫游戏网站的新闻信息动态添加,用户分类权限管理等功能,也相信本系统的使用能使得广大网民能更加快捷方便的浏览自己需要的信息。

为完成该毕业设计系统,访问了大量Web网络开发方面的网站,搜集了大量关于Web网络开发的中英文资料,也查阅了大量书籍的源代码作为参考和运用,从中学会了许多ASP.NET和ADO.NET技术关于Web开发方面的知识。

但是由于时间的仓促和自身经验的缺乏,该系统的功能还有一些没完成和完成得不理想,如文件上载和管理功能没做出,新闻审核功能里没能做到将审核时的意见反馈给新闻发布者,而是通过网站公告的形式来实现。由此可见要精通ASP.NET这门技术用需要一个长期的过程。

此外,本次毕业设计是作为本科阶段理论学习的总结与应用,因此对于没有实际开发经验的开发者来说无论是实际的程序编写还是论文的著作都难免会存在一些的问题,希望大家能够给予理解并欢迎提出宝贵的意见。

 

 

 

 

 

 

 

 

 

 

 

 

参考文献

[1] (美)哈特著,孟宪瑞,易磊译.ASP.NET 2.0经典教程:C#篇.人民邮电出版社,2007年.

[2]赵增敏主编. ASP.NET2.0案例教程.电子工业出版社,2007年.

[3] ()塔格拉提纳姆著,郝刚,严治国,罗宇波译.ASP.NET 2.0数据库高级编程.人民邮电出版社,2007年.

[4] 贝尔利纳索著,杨剑译.ASP.NET 2.0网站开发全程解析(2)(ASP.NET 2.0 Website Programming Problem-Design-Solution).清华大学出版社,2008年.

[5] 攀建编著.ASP.NET+ADO.NET项目开发实例.清华大学出版社,2004.1.

[6] ()A.Russell Jones著,高春蓉等译.ASP.NET从入门到精通.电子工业出版,2002.1.

[7] Scott Worley著,王文龙,刘湘宁译.ASP.NET技术内幕.人民邮电出版社,2002.4.

[8]高守传.精通SQL-结构化查询语言详解.人民邮电出版社,2007.


致谢

本次毕业设计的顺利完成要感谢我的母校—淮南师范学院,对我辛勤的培养;感谢校领导多年来对我孜孜不倦的教诲;也感谢同学多年来对我的鼓励和帮助。

学生在本篇论文撰写过程中,得到张艳明指导老师的悉心指导,特在此向他致以最真诚的谢意。同时也真诚感谢四年以来教授知识我的老师们,是您们的教诲使我获得计算机程序的理论知识和实践技能,让我能在各种新技术信息时代的学习中有个扎实的基础。

在此向院系各位领导,各位老师置以最崇高的敬意和最衷心的感谢!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附录主要代码

本次设计中的主要源代码:

admin_login.aspx:

<%@Pagelanguage="c#"Inherits="Lb_news.admin.admin_login"CodeFile="admin_login.aspx.cs"%>

<HTML>

<HEAD>

     <title>admin_login</title>

     <LINKhref="style.css"type="text/css"rel="stylesheet">

     <metacontent="Microsoft Visual Studio .NET 7.1"name="GENERATOR">

     <metacontent="C#"name="CODE_LANGUAGE">

     <metacontent="JavaScript"name="vs_defaultClientScript">

     <metacontent="http://schemas.microsoft.com/intellisense/ie5"name="vs_targetSchema">

</HEAD>

<body>

     <formid="Form1"method="post"runat="server">

          <tableclass="border"height="198"cellSpacing="0"cellPadding="0"width="352"align="center"

               border="0">

               <tralign="center"height="25">

                   <tdclass="title"><b>管理登录</b></td>

               </tr>

               <trheight="150">

                   <tdclass="tdbg"align="center">

                        <divalign="center"><asp:labelid="Label1"Runat="server"Width="100%"></asp:label></div>

                        <br>

                        用户名:

                   <asp:textboxclass="inputbg"id="userName"Runat="server"MaxLength="15"Columns="10"></asp:textbox><asp:requiredfieldvalidatorid="RequriedField1"EnableClientScript="False"Runat="server"Display="Dynamic"

                             ErrorMessage="*请输入用户名!"ControlToValidate="username"></asp:requiredfieldvalidator><asp:regularexpressionvalidatorid="Regular1"Runat="server"Display="Dynamic"ErrorMessage="不能使用'和空格"EnableClientScript="False"

                             ControlToValidate="username"ValidationExpression="[^' ]+"></asp:regularexpressionvalidator><br>

                        密&nbsp;&nbsp;码:

                   <asp:textboxclass="inputbg"id="passWord"Runat="server"MaxLength="15"Columns="10"textmode="Password"></asp:textbox><asp:requiredfieldvalidatorid="RequriedField2"EnableClientScript="False"Runat="server"Display="Dynamic"

                             ErrorMessage="*请输入密码!"ControlToValidate="password"></asp:requiredfieldvalidator><asp:regularexpressionvalidatorid="Regular2"Runat="server"Display="Dynamic"EnableClientScript="False"ErrorMessage="不能使用'和空格"

                             ControlToValidate="password"ValidationExpression="[^' ]+"></asp:regularexpressionvalidator><br>

                        <br>

                        <br>

                        <asp:buttonid="Submit"Runat="server"Text="登陆"Width="56px"Height="23px"onclick="Submit_Click"></asp:button></td>

               </tr>

          </table>

          <FONTface="宋体"></FONT>

     </form>

</body>

</HTML>

Admin_login.aspx.cs:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Data.OleDb;

namespace Lb_news.admin

{

///<summary>

/// admin_login的摘要说明。

///</summary>

publicpartialclassadmin_login : System.Web.UI.Page

{

     protectedConn ds1=newConn();

     protectedOleDbDataReader rd;

     protectedDataSet ds;

 

     protectedvoid Page_Load(object sender, System.EventArgs e)

     {

          // 在此处放置用户代码以初始化页面

     }

 

 

     privatevoid Check(string t1,string t2)

     {

          string   UserName=t1;          

          string PassWord=t2;

 

          ds1.DBopen();

 

          rd=ds1.ExecuteOleDbDataReader("select * from Lb_Admin where A_Name='"+UserName+"' and A_Password='"+PassWord+"'"); 

    

 

          if(rd.Read()==true)

          {

               int Grade=(int)rd.GetValue(3);  

                  

               HttpCookie MyCookies;      

               MyCookies=newHttpCookie("UserInfo");

               MyCookies.Values.Add("username",rd.GetString(1).ToString());

               MyCookies.Values.Add("grade",rd["A_Grade"].ToString());

                            

               Response.AppendCookie(MyCookies);

               Response.Write ("<script>top.location.href=('admin_main.htm');</script>");

                  

              

          }

          else

          {

 

                  

               ds1.alert("用户名或者密码错误","admin_login.aspx");

 

          }

          rd.Close();

          ds1.DBclose();

 

     }

 

 

     #region Web 窗体设计器生成的代码

     overrideprotectedvoid OnInit(EventArgs e)

     {

          //

          // CODEGEN: 该调用是ASP.NET Web窗体设计器所必需的。

          //

          InitializeComponent();

          base.OnInit(e);

     }

    

     ///<summary>

     ///设计器支持所需的方法-不要使用代码编辑器修改

     ///此方法的内容。

     ///</summary>

     privatevoid InitializeComponent()

     {   

 

     }

     #endregion

 

     protectedvoid Submit_Click(object sender, System.EventArgs e)

     {

          if (Page.IsValid)

          {

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

               string password=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(passWord.Text.Trim(),"MD5");

               Check(username,password);

              

          }

         

     }

}

}

Admin_articleadd.aspx:

<%@Pagelanguage="c#"Inherits="Lb_news.admin_articleadd"validateRequest=falseCodeFile="admin_articleadd.aspx.cs"%>

<HTML>

<HEAD>

     <title>添加新闻</title>

     <metacontent="Microsoft Visual Studio .NET 7.1"name="GENERATOR">

     <metacontent="C#"name="CODE_LANGUAGE">

     <metacontent="JavaScript"name="vs_defaultClientScript">

     <metacontent="http://schemas.microsoft.com/intellisense/ie5"name="vs_targetSchema">

     <LINKhref="style.css"type="text/css"rel="stylesheet">

</HEAD>

<body>

     <formid="postform"name="postform"method="post"runat="server">

          <inputid="LbNewsContent"type="hidden"name="LbNewsContent"runat="server">

          <tablecellSpacing="0"cellPadding="0"width="600"align="center">

               <TRalign="center"height="25">

                   <TDclass="title"colSpan="2"><B>添加新闻</B>

                   </TD>

               </TR>

               <tr>

                   <tdclass="tdbg"colSpan="2"height="20"></td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="50"height="18"></td>

                   <tdclass="tdbg"height="18">新闻类别:

                   <asp:dropdownlistid="ddl_class"runat="server"onselectedindexchanged="ddl_class_SelectedIndexChanged"></asp:dropdownlist><asp:labelid="News_Error"EnableViewState="False"Runat="server"></asp:label></td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="20"height="17"style="HEIGHT: 17px"></td>

                   <tdclass="tdbg"height="17"style="HEIGHT: 17px"><asp:checkboxid="Is_Commend"runat="server"TextAlign="Left"Text="是否推荐新闻:"oncheckedchanged="Is_Commend_CheckedChanged"></asp:checkbox></td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="50"height="10"style="HEIGHT: 10px"></td>

                   <tdclass="tdbg"height="10"style="HEIGHT: 10px"><asp:checkboxid="Is_Index"runat="server"TextAlign="Left"Text="是否首页新闻:"oncheckedchanged="Is_Index_CheckedChanged"></asp:checkbox></td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="20"height="2"style="HEIGHT: 2px"></td>

                   <tdclass="tdbg"height="2"style="HEIGHT: 2px">新闻标题:<inputid="Lb_Title"type="text"size="52"runat="server"NAME="Lb_Title"style="WIDTH: 344px; HEIGHT: 19px">

                   </td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="50"></td>

                   <tdclass="tdbg">新闻作者:<inputid="Lb_Author"type="text"size="15"name="Text1"runat="server">

                        <br>

                        <asp:checkboxid="Is_Pic"TextAlign="Left"Text="是否首页滚动图片"Runat="server"oncheckedchanged="Is_Pic_CheckedChanged"></asp:checkbox><inputid="Lb_TitlePic"type="hidden"name="Lb_TitlePic"runat="server"><Aonclick="insertImage('two')"href="#"><fontcolor="blue"><b>请上传图片</b></font></A>

                        <br>

                        <IMGonclick="RunCom('cut')"alt="剪切"src="pic/cut.gif"><IMGonclick="RunCom('copy');"alt="复制"src="pic/copy.gif">

                        <IMGonclick="RunCom('paste')"alt="粘贴"src="pic/paste.gif"><IMGonclick="RunCom('undo')"alt="撤消"src="pic/undo.gif">

                        <IMGonclick="RunCom('bold')"alt="粗体"src="pic/bold.gif"><IMGonclick="RunCom('italic')"alt="斜体"src="pic/italic.gif">

                        <IMGonclick="RunCom('underline')"alt="下划线"src="pic/under.gif"><IMGonclick="RunCom('justifyleft')"alt="靠左对齐"src="pic/aleft.gif">

                        <IMGonclick="RunCom('justifycenter')"alt="居中对齐"src="pic/center.gif"><IMGonclick="RunCom('justifyright')"alt="靠右对齐"src="pic/aright.gif">

                        <IMGonclick="createLink()"alt="加入超链接"src="pic/wlink.gif"><IMGonclick="insertImage('one')"alt="插入图片"src="pic/img.gif">

                        <IMGonclick="creatTable()"alt="插入表格"src="pic/table.gif">

                        <br>

                        <selectonchange="RunCom('fontname',this[this.selectedIndex].value);"name="FontName">

                             <optionvalue="font"selected>字体</option>

                             <optionvalue="宋体">宋体</option>

                             <optionvalue="楷体_GB2312">楷体</option>

                             <optionvalue="黑体">黑体</option>

                             <optionvalue="仿宋_GB2312">仿仿宋</option>

                             <optionvalue="新宋体">新宋体</option>

                             <optionvalue="幼圆">幼圆</option>

                             <optionvalue="隶书">隶书</option>

                             <optionvalue="Arial">Arial</option>

                             <optionvalue="Fixedsys">Fixedsys</option>

                             <optionvalue="System">System</option>

                             <optionvalue="Times New Roman">NewRoman</option>

                             <optionvalue="Verdana">Verdana</option>

                             <optionvalue="Wingdings">Wingdings</option>

                             <optionvalue="Kantipur">Kantipur</option>

                        </select>

                        <selectonchange="RunCom('fontsize',this[this.selectedIndex].value);"name="FontSize">

                             <optionvalue="fontsize"selected>字号</option>

                             <optionvalue="1">1号</option>

                             <optionvalue="2">2号</option>

                             <optionvalue="3">3号</option>

                             <optionvalue="4">4号</option>

                             <optionvalue="5">5号</option>

                             <optionvalue="6">6号</option>

                             <optionvalue="7">7号</option>

                        </select>

                        <selectonchange="foreColor()"name="fColor">

                             <optionvalue="color"selected>字体颜色</option>

                             <optionstyle="BACKGROUND-COLOR: #000000"value="#000000"></option>

                             <optionstyle="BACKGROUND-COLOR: #000080"value="#000080"></option>

                             <optionstyle="BACKGROUND-COLOR: #0000ff"value="#0000ff"></option>

                             <optionstyle="BACKGROUND-COLOR: #008000"value="#008000"></option>

                             <optionstyle="BACKGROUND-COLOR: #008080"value="#008080"></option>

                             <optionstyle="BACKGROUND-COLOR: #00ff00"value="#00ff00"></option>

                             <optionstyle="BACKGROUND-COLOR: #00ffff"value="#00ffff"></option>

                             <optionstyle="BACKGROUND-COLOR: #800000"value="#800000"></option>

                             <optionstyle="BACKGROUND-COLOR: #800080"value="#800080"></option>

                             <optionstyle="BACKGROUND-COLOR: #808080"value="#808080"></option>

                             <optionstyle="BACKGROUND-COLOR: #c0c0c0"value="#c0c0c0"></option>

                             <optionstyle="BACKGROUND-COLOR: #ff0000"value="#ff0000"></option>

                             <optionstyle="BACKGROUND-COLOR: #ff00ff"value="#ff00ff"></option>

                             <optionstyle="BACKGROUND-COLOR: #ffff00"value="#ffff00"></option>

                             <optionstyle="BACKGROUND-COLOR: #ffffff"value="#ffffff"></option>

                        </select>

                   </td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="50"style="HEIGHT: 485px"></td>

                   <tdclass="tdbg"style="HEIGHT: 485px"><iframeid="content1"width="500"height="400"style="WIDTH: 520px; HEIGHT: 506px"></iframe>

                   </td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="50"style="HEIGHT: 16px"></td>

                   <tdclass="tdbg"style="HEIGHT: 16px">新闻简介</td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="50"style="HEIGHT: 80px"></td>

                   <tdclass="tdbg"style="WIDTH:400px;WORD-BREAK:break-all;HEIGHT:80px"><FONTface="宋体"><asp:textboxid="LbNews_Intro"runat="server"MaxLength="50"Width="520px"TextMode="MultiLine"

                                 Rows="5"Height="94px"></asp:textbox></FONT></td>

               </tr>

               <tr>

                   <tdclass="tdbg"width="50"></td>

                   <tdclass="tdbg"><inputid="Submit1"type="submit"value="添加"runat="server"NAME="Submit1"style="WIDTH: 56px; HEIGHT: 20px"onserverclick="Submit1_ServerClick">

                        <inputtype="reset"value="取消"style="WIDTH: 56px; HEIGHT: 20px">

                   </td>

               </tr>

          </table>

     </form>

     <scriptlanguage="JavaScript">

content1.document.open();

content1.document.write("<BODY MONOSPACE STYLE=\"font:10pt arial,sans-serif\"></body>");

content1.document.close();

content1.document.designMode = 'On';

document.write("<script src=\"edit.js\"><"+"/script>");

 

function check_empty(form)

{

var content = content1.document.body.innerHTML;

var ddlclass=postform.ddl_class.value;

var title = postform.Lb_Title.value;

var intro=postform.LbNews_Intro.value;

if(ddlclass=="def")

  {

    alert("请选择新闻类别!");

returnfalse;

  }

elseif(title=="")

  {

    alert("新闻标题不能为空!");

returnfalse;

  }

elseif (content=="")

  {

     alert("新闻内容不能为空!");

returnfalse

  }

elseif (intro=="")

  {

     alert("新闻简介不能为空!");

returnfalse

  }

else

  {

 

returntrue;

  }

}

     </script>

</body>

</HTML>

admin_articleadd.aspx.cs:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.Data.OleDb;

//该源码下载自www.51aspx.com(51aspx.com)

 

namespace Lb_news

{

///<summary>

/// admin_articleadd的摘要说明。

///</summary>

publicpartialclassadmin_articleadd : System.Web.UI.Page

{

     protectedint Lb_IsIndex=0;

     protectedint Lb_IsCommend=0;

     protectedint Lb_Classid;

     protectedint Lb_IsPic=0;

     protectedstring Lb_Grade;

     protectedstring Publisher;

     protected System.Web.UI.HtmlControls.HtmlInputHidden LbNewsPublisher;

 

     protectedConn ds1=newConn();

 

     protectedOleDbDataReader rd;

     protectedDataSet ds;

 

     protectedvoid Page_Load(object sender, System.EventArgs e)

     {

 

          ds1.CheckCookies(1);

 

          // 在此处放置用户代码以初始化页面postform

          Submit1.Attributes.Add("OnClick","document.postform.LbNewsContent.value = content1.document.body.innerHTML;return check_empty(this.form)");

         

          HttpCookie cookie=Request.Cookies["UserInfo"];

 

 

          Publisher=cookie.Values["username"].ToString();

 

          Lb_Grade=cookie.Values["grade"].ToString();

 

 

 

          if(!Page.IsPostBack)

          {

         

                  

              

               classDate();

 

          }   

 

    

     }

 

     privatevoid classDate()

     {

          ds1.DBopen();

    

          ds=ds1.CreateDataSet("select * from Lb_Class","Lb_class");

 

 

 

          if (ds.Tables["Lb_class"].DefaultView.Count==0)

          {

              

               News_Error.Text="目前没有类别,请先添加一级分类";

          }

          else

          {

              

               ddl_class.DataSource=ds;

               ddl_class.DataTextField="C_Name";

               ddl_class.DataValueField="C_Id";

               ddl_class.DataBind();

          }

 

         

 

          ListItem ClassDefault=newListItem("请选择类别","def"); //增加一个空白项,并使之位于首位。  

          ddl_class.Items.Insert(0,ClassDefault);

          ds1.DBclose();

     }

 

 

     #region Web 窗体设计器生成的代码

     overrideprotectedvoid OnInit(EventArgs e)

     {

          //

          // CODEGEN: 该调用是ASP.NET Web窗体设计器所必需的。

          //

          InitializeComponent();

          base.OnInit(e);

     }

    

     ///<summary>

     ///设计器支持所需的方法-不要使用代码编辑器修改

     ///此方法的内容。

     ///</summary>

     privatevoid InitializeComponent()

     {   

 

     }

     #endregion

 

     protectedvoid Submit1_ServerClick(object sender, System.EventArgs e)

     {

          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("'"," ");

          int lb_check;

 

          Lb_Classid=ds1.ChangeToInt(ddl_class.SelectedItem.Value.ToString());

          try

          {

               if (Lb_Grade=="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+")");    

               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();

          }       

    

         

 

 

     }

 

     protectedvoid Is_Commend_CheckedChanged(object sender, System.EventArgs e)

     {

          if(Is_Commend.Checked)

          {

               Lb_IsCommend=1;

          }

     }

 

     protectedvoid Is_Index_CheckedChanged(object sender, System.EventArgs e)

     {

          if(Is_Index.Checked)

          {

               Lb_IsIndex=1;

          }

     }

 

     protectedvoid ddl_class_SelectedIndexChanged(object sender, System.EventArgs e)

     {

          Lb_Classid=ds1.ChangeToInt(ddl_class.SelectedItem.Value.ToString());

    

     }

 

     protectedvoid Is_Pic_CheckedChanged(object sender, System.EventArgs e)

     {

          if(Is_Pic.Checked)

          {

               Lb_IsPic=1;

         

 

          }

    

     }

 

 

}

}