/*自定义导航栏*/

【软件工程】web规格开发全过程

 

规格开发------中亚万惠车友会     

 

      此文以中亚万惠车友会开发,综合所知软件工程相关知识进行整体运用。其中涉及用例图,用例描述,用户字典,领域建模,非公能性需求,时序图,概念分析,架构设计,详细概念设计,开发涉及(依赖关系,用户交互,开发环境),部署分析,类关系和子系统设计,数据库设计,数据库分析和涉及,以及三层架构,五视图和部分涉及模式(依赖倒置原则,开放封闭原则)等主要有以下几个步骤:撰写中亚万惠(车友会)项目需求规格说明书,架构的分析与设计,子系统与类的分析与设计,数据库的分析与设计,最终总结。


一  撰写中亚万惠(车友会)项目需求规格说明书

 

1 用例视图

         

             

用例视图描述如下:本用例参与者user(用户)和system(管理员)。但是具体操作和权限是不同的,我们依次分析:

User权限:

Lookmain(查看主页面信息):包含以下主要功能1,cheyoudongxiang(车用动向新闻)2,huwaihuodong(户外活动新闻)3,cheyouyongpin(车友用品)4,lvyouyouhui(旅游优惠)5,cheyoudaren(车友达人)6,zhongyagongsi(中亚公司)7,huiyuanlipin(会员礼品)几个功能模块。

1,  cheyoudongxiang(车用动向新闻):此模块负责记录车友最近新闻,用以丰富会员动态交互。前台界面(main)主要显示最新的几条,用户可以点击更多去查看全部新闻。在更多车友动向新闻界面左侧显示最近更新的10条信息。用户点击任何一条信息都会查看到详细新闻内容。

2,  huwaihuodong(户外活动新闻)此模块负责记录车友户外活动新闻,用以丰富会员动态交互。前台界面(main)主要显示最新的几条,用户可以点击更多去查看全部新闻。在更多车户外活动新闻界面左侧显示最近更新的10条信息。用户点击任何一条信息都会查看到详细新闻内容。

3,  3,cheyouyongpin(车友用品)本模块是中亚推出一个服务车友的盈利性模块,主要以图片介绍形式显示。主要介绍车用品。用户可以查看更多用品,也可以点击图片,查看详细信息。用来找到买家,线下联系交易。

4,  4,lvyouyouhui(旅游优惠)本模块是中亚推出一个服务车友的盈利性模块,主要以图片介绍形式显示。主要旅游优惠,类似团购等。用户可以查看更多旅游优惠信息,也可以点击图片,查看详细信息。用来找到买家,线下联系交易。

5,  cheyoudaren(车友达人):本模块形式类似flash动画,实际通过js完成,主要针对一些用户游玩信息的显示。

6,  6,zhongyagongsi(中亚公司):上属公司,该块为一个超链接。

7,  7,huiyuanlipin(会员礼品):超链接,点击会员信息跳转更多会员礼品信息,点击查看详情。

System权限

 Systemmessage(后台管理):1,messagenews(新闻管理)2,messageproduct(产品管理)3,messagehuiyuan(会员管理)

1,  messagenews(新闻管理):该模块有两个部分组成分别是车友动向新闻和户外活动新闻,其他属性类似,可以通过news的type类型区分,这时要注意的。其次本模块负责新闻添加,修改和批量或单独删除(类似qq邮箱删除)完成对新闻的管理。

2,  messageproduct(产品管理)该模块有两个部分组成分别是车友用品产品和旅游优惠产品,其他属性类似,可以通过product的type类型区分,这时要注意的。其次本模块负责产品添加,修改和批量或单独删除(类似qq邮箱删除)完成对新闻的管理。

3,  messagehuiyuan(会员管理):负责对管理员和会员信息修改管理功能。

Login(后台登陆):本模块针对管理员权限,通过输入密码和用户名进行验证,还有就是验证通过参数化查询,以防止sql注入式攻击,增强安全性。

 

2 用例描述

2.1. LookMain

    英文名称:<LookMain>

    中文名称:<登陆首页>

    参与者  :<User>

2.1.1 简要说明

    用户只需要打开连接即可直接进入,可以对首页新闻(车友动向<cheyoudongxiang>,户外活动<huwaihudong>),公司产品业务(车友用品<cheyouyongpin>,旅游优惠<lvyouyouhui>),车友达人<cheyoudaren>,会员礼品<huiyuanlip>最新消息的浏览。点击更多可查看更多及详细内容

2.1.2 事件流

 基本流

    (1) 用户:输入中亚万惠(车友会)网址;

    (2) 用户:用户进入首页:

        (a) 用户:选择更多,则执行基本流(3);

                (a1)用户:选择基本流(3) (a),则执行基本流(4);

(a2) 用户:选择基本流(3) (b),则执行基本流(4);

(a3)用户:选择关闭,则执行基本流(6);

        (b) 用户:选择具体新闻题目(图片),则执行基本流(4);

       (c)用户:选择具体链接,则执行基本流(5);

(d)用户:选择闭,则执行基本流(6);

    (3) 系统:显示更多消息;

        (a) 系统:左侧显示更多最新消息题目;

        (b) 系统:右侧显示更多全部消息;

(4) 系统: 显示详细内容。

(5) 系统: 打开具体链接。

(6)系统:退出结束用例。

2.1.3 备选流

    (1) 查看会员:如果系统检测到用户名、密码不存在或错误,则提示用户输入的登录信息不正确,系统返回到选择登录前的状态,用户可以重新输入/修改登录信息,正确则查看个人信息。

2.1.4 特殊需求(约束和非功能性需求)

    1 第一特殊需求 要求链接网址正确。

2.1.5 前置条件

    1.4.1 第一前置条件  链接网址正确。

2.1.6 后置条件: 无要求

 

2.1.7 扩展点:无需扩展

 

2.1.8 附加说明:只要会员才能实现登陆查看个人信息。

 

2.1.9 优先级:不要求优先级

2.2. Login

    英文名称:<Login>

    中文名称:<登录>

    参与者  :<system>

2.2.1 简要说明

    对登录的流程进行描述,操作者输入用户名、密码、进行登录。登陆成功后进行后台管理

2.2.2 事件流

    1.2.1 基本流

    (1) 系统:显示登录界面;

    (2) 管理员:输入登录信息,登录信息包括:用户名、密码;

    (3) 管理员:可能进行下面两种操作:

        (a) 管理员:选择登录,则执行基本流(4);

        (b) 管理员:选择重置,则返回到基本流(1);

    (4) 系统:检查用户的登录信息,可能有下边两种情况;

        (a) 登录成功:执行基本流(5);

        (b) 登录失败:执行备选流(1);

    (5) 登录成功,结束此用例。

2.2.3 备选流

    (1) 登录失败:如果系统检测到用户名、密码不存在或错误,则提示用户输入的登录信息不正确,系统返回到选择登录前的状态,管理员可以重新输入/修改登录信息,重新执行基本流(3)。

2.2.4 特殊需求(约束和非功能性需求)

       1 第一特殊需求 要求用户密码安全。

       2 第一特殊需求 要求仅限管理员登陆。

2.2.5 前置条件

    1.4.1 第一前置条件   系统已启动到登录界面。

2.2.6 后置条件

    1.5.1 第一后置条件

        管理员登录成功后,根据用户类型进入到相应界面。管理员用户进入到管理员界面,    1.5.2 第二后置条件

        管理员登录失败,返回到登录界面。

2.2.7 扩展点:可以提供用户登陆修改个人信息

2.2.8 附加说明1 附加说明1登录过程要求安全性。

2 附加说明1 仅限管理员登陆

2.2.9 优先级没有与此相关的内容。

 

2.3. systemmessage

    英文名称:< systemmessage >

    中文名称:<后台管理>

    参与者  :<system>

 

2.3.1 简要说明

    管理员登陆成功后,可以对新闻(车友动向<dongxiang>,户外活动<huwai>),公司产品业务(车友用品<yongpin>,旅游优惠<youhui>),车友达人<daren>,会员礼品<liping>等进行管理

 

2.3.2 事件流

 基本流

    (1) 管理员:登陆成功;

    (2) 管理员:用户进入管理界面:

        (a) 管理员:选择新闻,则执行基本流(3);

                (a1)管理员:选择户外新闻,则执行基本流(3)(a);

(a2) 管理员:选择车友动向,则执行基本流3) (b);

(a3)管理员:选择关闭,则执行基本流(6);

        (b) 管理员:产品类型,则执行基本流(4);

                (a1)管理员:选择车友用品,则执行基本流(4)(a);

(a2) 管理员:选择旅游优惠,则执行基本流4) (b);

(a3)管理员:选择关闭,则执行基本流(6);

       (c)管理员:其他,则执行基本流(5);

                (a1)管理员:选择会员礼品,则执行基本流(5)(a);

(a2) 管理员:选择车友达人,则执行基本流(5) (b);

(a3)管理员:选择关闭,则执行基本流(6);

(d)管理员:选择闭,则执行基本流(6);

    (3) 系统:新闻类型;

        (a) 系统:户外新闻;

        (b) 系统:车友动向;

(4) 系统: 产品类型。

         (a) 系统:车友用品;

     (b) 系统:旅游优惠;

(5) 系统: 其他。

       (a) 系统:会员礼品;

   (b) 系统:车友达人;

(6)系统:退出结束用例。

2.3.3 备选流

    (1) 管理员登陆:如果系统检测到用户名、密码不存在或错误,则提示用户输入的登录信息不正确,系统返回到选择登录前的状态,用户可以重新输入/修改登录信息,正确则查看个人信息。

2.3.4 特殊需求(约束和非功能性需求)

    1 第一特殊需求    要求登陆正确。

    2 第二特殊需求    要求管理员登陆

2.3.5 前置条件  要求登陆正确。。

2.3.6 后置条件: 必须是管理员

2.3.7 扩展点:可用于用户登陆及部分信息查看

2.3.8 附加说明:只要管理员才能实现登陆查看个人信息。

2.3.9 优先级:不要求优先级

 

3 领域建模与用户字典

领域建模:

 

用户字典:

3.1 myuser

实体名

 myuser(系统管理员)

说明

系统管理员可以登陆后,对新闻(车友动向<dongxiang>,户外活动<huwai>),公司产品业务(车友用品<yongpin>,旅游优惠<youhui>),车友达人<daren>,会员礼品<liping>等进行管理

基本属性

编号 用户名  密码

 

实体名

u_id(编号)

说明

系统管理员编号,通过设置标示符由系统自动生成。设置为int型,例如:1

从属实体

myuser

 

实体名

u_user(用户名)

说明

管理员用户名。设置nvarchar(50)型。

从属实体

myuser

 

实体名

u_pwd(密码)

说明

系统管理员密码。设置nvarchar(50)型。

从属实体

myuser

 

 

     3.2 news

实体名

 news(车友新闻)

说明

主要包括新闻(车友动向<dongxiang>,户外活动<huwai>)业务封装和使用

基本属性

编号  新闻编号  新闻题目 发布时间  新闻内容 新闻类型

 

实体名

id(编号)

说明

编号,通过设置标示符由系统自动生成。设置为int型,例如:1

从属实体

news

 

实体名

n_id(新闻编号)

说明

新闻编号,唯一性,便于做查询和操作编号。设置为int型

从属实体

news

 

实体名

n_title(新闻题目)

说明

新闻题目,设置为nvarchar(100)型

从属实体

news

 

实体名

n_time(发布时间)

说明

新闻发布时间,设置为nvarchar(30)型

从属实体

news

 

实体名

n_content(新闻内容)

说明

新闻内容,,设置nvarchar(max)型

从属实体

news

 

 

实体名

n_type(新闻类别)

说明

新闻类别(户外活动,车友动向),设置nvarchar(50)型

从属实体

news

 

 

 

    3.3 product

实体名

 product(车友产品)

说明

主要包括对公司产品业务(车友用品<yongpin>,旅游优惠<youhui>)管理

基本属性

编号 产品编号 产品名称 产品价格   会员价格 产品图片 产品介绍 产品类型

 

实体名

id(编号)

说明

编号,通过设置标示符由系统自动生成。设置为int型,例如:1

从属实体

product

 

实体名

P_id(产品编号)

说明

产品编号,唯一性,便于做查询和操作编号。设置int型

从属实体

product

 

实体名

P_name(产品名称)

说明

产品名称,设置nvarchar(50)

从属实体

product

 

实体名

P_price(产品价格)

说明

产品价格,设置nvarchar(50)

从属实体

product

 

实体名

h_price(会员价格)

说明

会员价格,设置nvarchar(50)

从属实体

product

 

 

实体名

P_pic(产品图片)

说明

产品图片,设置nvarchar(50)

从属实体

product

 

 

实体名

P_note(产品介绍)

说明

产品介绍,设置nvarchar(max)

从属实体

product

 

实体名

P_type(产品类型)

说明

产品类型(车友用品,旅游优惠),设置nvarchar(50)类型

从属实体

product

 

 

4   非功能性需求表

质量属性:

性能

性能稳定

安全性

密码安全,采用参数化查询;数据库存储安全,防止SQL注入式攻击。

易用性

配备使用流程图,界面简洁实用为主。

持续可用性

程序基本稳定,控制在适宜人群范围之内

可伸展性

前台采用DIV+CSS模式,分层管理,后台用三层架构。增强伸缩性和扩展性

互操作性

数据库层,UI层,业务层独立处理,可根据需求改动。

可靠性

允许在需求人数同时在线,不易死机,采取阶段式测试和系统总体测试。优化功能和代码。

鲁棒性

能接受一般的非法操作,给予合适处理。

易理解性

前台容易被用户理解使用,代码尽可能模块化,外加详细注释。

可扩展性

前台采取DIV+CSS分层管理,容易结构和样式扩展,后台分层管理,可增减功能,或是更换数据库,增强代码复用功能。

可重用性

前台css类样式以及后台类库和部分存储过程可被复用。

可测试性

尽可能采取多浏览器兼容,便于测试。

可维护性

UI和后台分层管理,便于维护

可移植性

逻辑代码单独封装,类单独复用,数据库采用数据层类处理,可移植性强。

分析后的约束

技术

C#语言,ASP.NET技术,CSS+DIV+js,Linq技术,存储过程,AXJX,多层架构等技术水平高。

平台

WinXP以上平台,采用VS2010平台开发

数据库

采用SQL2008数据库

界面风格

Web页面

时间

一周

其他

系统力求浏览器兼容多,可扩展性强,实用性高,界面优美

 


 二  架构的分析与设计

 

第一部分:架构分析部分,概要架构设计

1 架构分析:序列图

   本系统开发核心模块有三,分别如下:用户前台操作,管理员登陆,管理员后台操作。先将三部分序列图一一列出,具体操作如下:

1.1绘制用户前台查看车友动向时序图:

如图1所示。           

1.2绘制管理员登陆时序图:

 

图2 管理员登陆后台时序分析图

1.3绘制管理员后台删除新闻时序图

 

 

图3 删除信息操作时序分析图

 

2 概念架构设计

在感念设计阶段,考虑方便灵活开发出项目,再结合以后维护考虑到使用三层架构,分别为界面层,业务逻辑层和数据层,即所谓(UI层,BLL层,DLL层)。具体各层功能操作如下:

首先,布局完成后,采用依赖倒置原则,从底层数据库层开发,依次业务逻辑层直到界面层。

2.1数据层:封装各个实体间的方法操作,包括对实体的增加,删除,修改,查询(参数查询,非参数查询)等功能,并在各个方法进行注释(主题,时间,作者)便于之后修改和版本更新

2.2业务逻辑层(实体层):封装各个实体的属性,并对属性进行私有化声明以提高安全性。然后在各个属性后进行注释。以求符合开放封闭原则

2.3界面层:界面层只需要引用数据层和业务逻辑层,引用后直接在相应执行代码上对相应方法调用。同样和操作前必须加以注释(主题,时间,作者)。

综述以上,结合开放封闭原则和依赖倒置原则基本达到要求,以使其更改便利,然后使用详细注释便于读取修改。其还有个特性就是为以后版本2做开放。

具体如图4 所示。

 

 

图4 系统逻辑架构概要设计

第二部分:架构设计部分,细化架构设计

一、逻辑视图

2 系统逻辑层次图

中亚万惠车友会主要分 为三层:界面层,业务逻辑层和数据层。

界面层的主要功能包括:

(1) 采用div+css布局时,修改扩展界面设计时降低前台耦合度。

(2) 通过引用业务逻辑和数据层进行方法调用,具体方法具体调用降低后台耦合。

业务逻辑层的主要功能包括:

(1) 采用业务逻辑层使其属性私有封装,增强安全性且便于管理

(2)不同实体业务逻辑封装到不同类里面

实体层的主要功能包括:

(1) 对不同实体的ADO操作放在不同数据类中

(2) 单一实体类中具体方法具体封装,符合开放封闭原则

具体如图5所示。

图5 系统逻辑视图

二、开发视图

1 系统开发环境图

    本系统开发环境依旧是microsoft的fromwork环境下进行开发。本系统在FormWork4.0环境下开发出的版本1.对其接口要求符合microsoft的fromwork3.0以上版本均支持.开发语言则使用c#语言。数据库则采用sql server2008开发,对数据库要求在sql server2008以上版本均支持。

如图6所示。

图6 系统开发环境图

2 系统开发依赖关系视图

本程序命名为zhongya,可执行文件即是zhongya.exe。其在NET FormWork框架下VS2010环境中开发出,依赖数据ku为SQL Server2008.其所有接口类库均来自NET FormWork类库。本实验又分为三层架构,界面主要依赖vs2010中div+css开发,后台代码依赖于c#语言开发,数据库依赖SQL SERVER2008。

如图7所示。

 

图7 系统开发图

 

2 系统开发交互关系视图

 从图8中不难看出里面包括4个类分别是界面类(UI)业务逻辑类(model)实体类(BLL)持久类即数据类(DAL)。

界面类(UI):依赖于实体类(BLL),以便属性设置。依赖数据层(DAL),以便数据操作方法调用,依赖业务逻辑层(Model)以便实体,数据层和界面交互。

实体类(BLL):依赖于数据层,作为类似通信,起着中间调用和属性封装作用。

持久类即数据类(DAL):封装各个实体数据操作类,在具体类中进行具体方法二次封装。其为最底层所以不具备任何依赖。

业务逻辑类(model):业务逻辑层是一个抽象类,负责实体类和界面类交互,故依赖于实体类。

如图8所示。

 

图8 系统开发交互关系图

三、部署视图

本系统开发后终归发布,所以部署尤为重要,本系统于本机测试,所以服务器即为本机采用的sql server2008 ,对于访问pc要求,执行文件在NET Fromwork框架下运行,所运行需求的硬件条件是windows操作系统。其具体部署如图9。

如图9所示。

 

图9 系统部署图

 

综述:以上开发均为版本1下设计,随后版本2以及版本3升级可能有些视图会发生细微变动。


 

三  子系统与类的分析与设计

 

一、类关系图纵览

  子系统设计类关系尤为重要,从下图1不难看出本系统采用三层架构开发。其三层架构即为(界面层,业务逻辑层,数据层)各层之间的联系以及接口如下所述:

数据层(dal):数据层是具体实现的底层,不具备任何依赖。开发过程中,本系统共有5个实体,化为3张表,即为用户表,新闻表(车友动向新闻,户外活动新闻)产品表(车友用品,旅游优惠),在实现过程中,将其封装5个数据类(daluser.cs,daldxnews.cs,dalhdnews,dalypnproduct.cs,dallyproduct.cs)。在每个类中二次封装具体实现:例如(动向新闻类)daldxnew.scs,其具体实现方法和接口为查询新闻(select()),参数查询新闻(select(parameter)),添加新闻(insert(parameter)),删除新闻(delect(parameter)),修改新闻(update(parameter))等具体方法接口。

业务逻辑层(bll):首选引用dal层,然后封装每个实体的具体属性,并设置属性私有,以便于安全性和扩展,在bll留有接口,对dal方法调用,以形参形式留有接口。

界面层(UI):界面层尤为重要,主要实现和用户交互,所以前台设计本系统采用div+css,这样便于修改和设置。其接口在于css.cs类进行前台布局美化。还有一个接口就是:通过引用bll和dal,调用bll方法,具体调用dal底层方法,以实现具体操作。

以上对所以层和层之间接口均已介绍完,其这样使用优点有3个即是分层便于管理和界面更换,其次使用依赖倒置原则增强业务分析理解,和开放封闭原则,以最大最优化的实现修改和变化。

具体如图1所示。

 

               

图1 类关系图纵览

 

二、界面层类关系图

界面层类关系图的介绍,本系统基于NET Formwork4.0下,使用web创建,基于page运行,界面类(UI)页面实现了类的调用关系、继承关系,设计模式。界面层类关系图的介绍,本系统基于NET Formwork4.0下,使用web创建,基于page运行,页面实现了类的调用关系、继承关系,设计模式。

具体描述如下:

界面调用关系:通过前台即是UI(界面类)层调用bll(实体类)层留有的接口,以实现ui具体方法,无需理会后台(dal)如何实现,当然调用时基于已完成的数据层(dal)。Bll中的类调用dal,通过dal调用,以实现中间通信或是逻辑前提为界面类(UI)提供接口。Dal只是负责各个实体类方法具体实现,也是底层数据方法实现,负责与数据库进行交互。

继承关系:本系统主要有5个实体分别为:管理员登陆用户,户外活动新闻,车友动向新闻,旅游优惠,车友用品,然而数据库设计接段将:,(户外活动新闻,车友动向新闻)划分为新闻,(旅游优惠,车友用品)划分为产品。所以户外活动新闻和车友动向新闻继承于新闻;旅游优惠,车友用品继承于产品。具体如图2.

设计模式:本系统使用三层架构体现了高内聚低耦合思想,采用自下向上设计思想符合依赖倒置原则。每层操作封闭处理符合开放封闭原则。在数据库实现采用适配器设计模式。

具体描述如下:

界面调用关系:通过前台即是UI(界面类)层调用bll(实体类)层留有的接口,以实现ui具体方法,无需理会后台(dal)如何实现,当然调用时基于已完成的数据层(dal)。

继承关系:本系统主要有5个实体分别为:管理员登陆用户,户外活动新闻,车友动向新闻,旅游优惠,车友用品,然而数据库设计接段将:,(户外活动新闻,车友动向新闻)划分为新闻,(旅游优惠,车友用品)划分为产品。所以户外活动新闻和车友动向新闻继承于新闻;旅游优惠,车友用品继承于产品。其主要继承实体类(Bll)

设计模式:每层操作封闭处理符合开放封闭原则。在数据库实现采用适配器设计模式。

具体如图2所示。

 

 

 

 

图2 界面层类关系图

三、实体层类关系图

实体层类关系图的介绍,本系统基于NET Formwork4.0下,基于dal层下,页面实现了类的调用关系、继承关系,设计模式。界面层类关系图的介绍,本系统基于NET Formwork4.0下,使用web创建,基于page运行,页面实现了类的调用关系、继承关系,设计模式。

具体描述如下:

界面调用关系:通过前台即是UI(界面类)层调用bll(实体类)层留有的接口,以实现ui具体方法,无需理会后台(dal)如何实现,当然调用时基于已完成的数据层(dal)。Bll中的类调用dal,通过dal调用,以实现中间通信或是逻辑前提为界面类(UI)提供接口。Dal只是负责各个实体类方法具体实现,也是底层数据方法实现,负责与数据库进行交互。主要调用数据层(dal)

继承关系:本系统主要有5个实体分别为:管理员登陆用户,户外活动新闻,车友动向新闻,旅游优惠,车友用品,然而数据库设计接段将:,(户外活动新闻,车友动向新闻)划分为新闻,(旅游优惠,车友用品)划分为产品。所以户外活动新闻和车友动向新闻继承于新闻;旅游优惠,车友用品继承于产品。主要继承数据层(dal)方法.

设计模式:本系统使用三层架构体现了高内聚低耦合思想,采用自下向上设计思想符合依赖倒置原则。每层操作封闭处理符合开放封闭原则。在数据库实现采用适配器设计模式。

接口:

具体如图3所示

 

图3 实体层类关系图

 


 

四  数据库的分析与设计

一、数据库分析

     本系统经分析可知总归有5个实体登陆用户(myuser)车友动向新闻(news)户外活动新闻(news)旅游优惠(product)车友用品(product)。基于这些实体属性在试验一以述,这里只是简述,车友动向新闻和户外活动新闻属性基本相同都是新闻类别,而旅游优惠和车友用品属性基本相同都是业务产品,那么基于此索性建立三个表,在news和product中分别加一个type进行区分。这样数据库表已经建立,耦合度很低了。在分析news和product两张表没有直接联系,但是考虑到登陆时,可以把信息放在同一张myuser、表中以降低冗余度,故作以下数据分析:

具体如图1所示。

 

                

二、数据库关系图

  通过图2不难看出有三张表分别是news(新闻表),myuser(登录表)product(业务产品表)具体表属性分析:

news表:

n_id(新闻编号,类型int)                 n_title(新闻题目,类型 nvarchar(50))

n_time(发布时间,类型 nvarchar(50)     n_content(新闻内容,类型 nvarchar(max)

n_type(新闻类别,类型 nvarchar(50)

注:新闻类型本系统分为:车友动向新闻和户外活动新闻。具有扩展性。

 

myuser表:

u_id(用户编号,类型int)                 u_user(用户名,类型 nvarchar(50)

u_pwd(用户密码,类型 nvarchar(50)     

 

product 表:

p_id(产品编号,类型int)              p_name(产品名称,类型 nvarchar(50)   

p_priceh(产品价格,类型 nvarchar(50)   h_price(会员价格,类型 nvarchar(50)   

p_pic(产品图片,类型 nvarchar(50)      p_note(产品介绍,类型 nvarchar(max)

p_type(产品类型,类型 nvarchar(50)

注:新闻类型本系统分为:车友动向新闻和户外活动新闻。具有扩展性。

关系描述:news与myuser使用都依赖于用户

          Product与myuser之间依赖于管理员,

          News与product本身没有联系

具体如图2所示。

 

 

图2 数据库关系图纵览


 

五  总结

 

一、  需求获取总结

需求分析一再强调软件开发的重中之中,结合上课所学,书本所讲述,外加中亚万惠车友会小系统的完成。让我对此有实践性的认识。软件需求分析特点:应尽量提供软件实现功能需求的全部信息,使得软件设计人员和软件测试人员不再需要需求方的接触。这就要求软件需求分析内容应正确、完整、一致和可验证。此外,为保证软件设计质量,便于软件功能的休整和验证,软件需求表达无岔意性,具有可追踪性和可修改性。下面结合总结和实践,以知识总结为引子,具体到实例和分析解决的方式进行描述如下:需求分析的具体内容可以归纳为五个方面:软件的功能需求,软件的非功能性需求,软件质量属性,软件对外接口,软件设计和实现上的约束。

软件的功能需求

功能需求通常为三个层次(1)业务需求(2)用户需求(3)系统需求。基于此结合中亚万惠。业务分析后大体功能基本确定主要包括以下模块:车友动向,户外新闻,车友用品,旅游优惠,车友达人,会员礼品,后台登陆,中亚简介等。大方向已定,下面寻求客户需求,客户只是潜意识的翻出一个模板界面,要求与此类型。本身不懂技术所以造成不少麻烦。界面设计和实现完全依赖于自己。到此需求基本结束。

软件的非功能性需求

除了功能需求之外,非功能需求也同样不可少。非功能需求主要包括:性能需求,质量属性,对外接口等,具体分析解决如下:

软件质量属性(如表1

 

表1 如下:

 

性能

性能稳定

安全性

密码安全,采用参数化查询;数据库存储安全,防止SQL注入式攻击。

易用性

配备使用流程图,界面简洁实用为主。

持续可用性

程序基本稳定,控制在适宜人群范围之内

可伸展性

前台采用DIV+CSS模式,分层管理,后台用三层架构。增强伸缩性和扩展性

互操作性

数据库层,UI层,业务层独立处理,可根据需求改动。

可靠性

允许在需求人数同时在线,不易死机,采取阶段式测试和系统总体测试。优化功能和代码。

鲁棒性

能接受一般的非法操作,给予合适处理。

易理解性

前台容易被用户理解使用,代码尽可能模块化,外加详细注释。

可扩展性

前台采取DIV+CSS分层管理,容易结构和样式扩展,后台分层管理,可增减功能,或是更换数据库,增强代码复用功能。

可重用性

前台css类样式以及后台类库和部分存储过程可被复用。

可测试性

尽可能采取多浏览器兼容,便于测试。

可维护性

UI和后台分层管理,便于维护

可移植性

逻辑代码单独封装,类单独复用,数据库采用数据层类处理,可移植性强。

 

软件对外接口

对外接口主要通过三层架构实现,三层通过前台即是UI(界面类)层调用bll(实体类)层留有的接口,以实现ui具体方法,无需理会后台(dal)如何实现,当然调用时基于已完成的数据层(dal)。Bll中的类调用dal,通过dal调用,以实现中间通信或是逻辑前提为界面类(UI)提供接口。Dal只是负责各个实体类方法具体实现,也是底层数据方法实现,负责与数据库进行交互。主要调用数据层(dal)

软件设计和实现上的约束。(如表2

表2 如下:

 

技术

C#语言,ASP.NET技术,CSS+DIV+js,Linq技术,存储过程,AXJX,多层架构等技术水平高。

平台

WinXP以上平台,采用VS2010平台开发

数据库

采用SQL2008数据库

界面风格

Web页面

时间

一周

其他

系统力求浏览器兼容多,可扩展性强,实用性高,界面优美

 

二、  架构分析与设计总结

 

本阶段设计分两个部分,分别是概念架构和细化架构,以下是结合中亚万惠系统与五视图具体总结

 

架构分析可运用五视图法:

 

 

一  概念架构设计

在感念设计阶段,考虑方便灵活开发出项目,再结合以后维护考虑到使用三层架构,分别为界面层,业务逻辑层和数据层,即所谓(UI层,BLL层,DLL层)。具体各层功能操作如下:

首先,布局完成后,采用依赖倒置原则,从底层数据库层开发,依次业务逻辑层直到界面层。

2.1数据层:封装各个实体间的方法操作,包括对实体的增加,删除,修改,查询(参数查询,非参数查询)等功能,并在各个方法进行注释(主题,时间,作者)便于之后修改和版本更新

2.2业务逻辑层(实体层):封装各个实体的属性,并对属性进行私有化声明以提高安全性。然后在各个属性后进行注释。以求符合开放封闭原则

2.3界面层:界面层只需要引用数据层和业务逻辑层,引用后直接在相应执行代码上对相应方法调用。同样和操作前必须加以注释(主题,时间,作者)。

综述以上,结合开放封闭原则和依赖倒置原则基本达到要求,以使其更改便利,然后使用详细注释便于读取修改。其还有个特性就是为以后版本2做开放。

逻辑设计

中亚万惠车友会主要分 为三层:界面层,业务逻辑层和数据层。

界面层的主要功能包括:

(1) 采用div+css布局时,修改扩展界面设计时降低前台耦合度。

(2) 通过引用业务逻辑和数据层进行方法调用,具体方法具体调用降低后台耦 合

业务逻辑层的主要功能包括:

(1) 采用业务逻辑层使其属性私有封装,增强安全性且便于管理

(2)不同实体业务逻辑封装到不同类里面

实体层的主要功能包括:

(1 对不同实体的ADO操作放在不同数据类中

(2) 单一实体类中具体方法具体封装,符合开放封闭原则

二、开发设计

   系统开发环境设计

      本系统开发环境依旧是microsoft的fromwork环境下进行开发。本系统在FormWork4.0环境下开发出的版本1.对其接口要求符合microsoft的fromwork3.0以上版本均支持.开发语言则使用c#语言。数据库则采用sql server2008开发,对数据库要求在sql server2008以上版本均支持。

系统开发依赖关系设计

本程序命名为zhongya,可执行文件即是zhongya.exe。其在NET FormWork框架下VS2010环境中开发出,依赖数据ku为SQL Server2008.其所有接口类库均来自NET FormWork类库。本实验又分为三层架构,界面主要依赖vs2010中div+css开发,后台代码依赖于c#语言开发,数据库依赖SQL SERVER2008。

系统开发交互关系设计

不难看出里面包括4个类分别是界面类(UI)业务逻辑类(model)实体类(BLL)持久类即数据类(DAL)。

界面类(UI):依赖于实体类(BLL),以便属性设置。依赖数据层(DAL),以便数据操作方法调用,依赖业务逻辑层(Model)以便实体,数据层和界面交互。

实体类(BLL):依赖于数据层,作为类似通信,起着中间调用和属性封装作用。

持久类即数据类(DAL):封装各个实体数据操作类,在具体类中进行具体方法二次封装。其为最底层所以不具备任何依赖。

业务逻辑类(model):业务逻辑层是一个抽象类,负责实体类和界面类交互,故依赖于实体类。

部署设计

本系统开发后终归发布,所以部署尤为重要,本系统于本机测试,所以服务器即为本机采用的sql server2008 ,对于访问pc要求,执行文件在NET Fromwork框架下运行,所运行需求的硬件条件是windows操作系统。

三、  子系统与类分析与设计总结

子系统类设计部分,主要从类关系设计,界面设计,实体设计三大部分着手,具体如下:

   类关系设计

  子系统设计类关系尤为重要,从下图1不难看出本系统采用三层架构开发。其三层架构即为(界面层,业务逻辑层,数据层)各层之间的联系以及接口如下所述:

数据层(dal):数据层是具体实现的底层,不具备任何依赖。开发过程中,本系统共有5个实体,化为3张表,即为用户表,新闻表(车友动向新闻,户外活动新闻)产品表(车友用品,旅游优惠),在实现过程中,将其封装5个数据类(daluser.cs,daldxnews.cs,dalhdnews,dalypnproduct.cs,dallyproduct.cs)。在每个类中二次封装具体实现:例如(动向新闻类)daldxnew.scs,其具体实现方法和接口为查询新闻(select()),参数查询新闻(select(parameter)),添加新闻(insert(parameter)),删除新闻(delect(parameter)),修改新闻(update(parameter))等具体方法接口。

业务逻辑层(bll):首选引用dal层,然后封装每个实体的具体属性,并设置属性私有,以便于安全性和扩展,在bll留有接口,对dal方法调用,以形参形式留有接口。

界面层(UI):界面层尤为重要,主要实现和用户交互,所以前台设计本系统采用div+css,这样便于修改和设置。其接口在于css.cs类进行前台布局美化。还有一个接口就是:通过引用bll和dal,调用bll方法,具体调用dal底层方法,以实现具体操作。

以上对所以层和层之间接口均已介绍完,其这样使用优点有3个即是分层便于管理和界面更换,其次使用依赖倒置原则增强业务分析理解,和开放封闭原则,以最大最优化的实现修改和变化。

界面层类设计

界面层类关系图的介绍,本系统基于NET Formwork4.0下,使用web创建,基于page运行,界面类(UI)页面实现了类的调用关系、继承关系,设计模式。界面层类关系图的介绍,本系统基于NET Formwork4.0下,使用web创建,基于page运行,页面实现了类的调用关系、继承关系,设计模式。

具体描述如下

界面调用关系:通过前台即是UI(界面类)层调用bll(实体类)层留有的接口,以实现ui具体方法,无需理会后台(dal)如何实现,当然调用时基于已完成的数据层(dal)。Bll中的类调用dal,通过dal调用,以实现中间通信或是逻辑前提为界面类(UI)提供接口。Dal只是负责各个实体类方法具体实现,也是底层数据方法实现,负责与数据库进行交互。

继承关系:本系统主要有5个实体分别为:管理员登陆用户,户外活动新闻,车友动向新闻,旅游优惠,车友用品,然而数据库设计接段将:,(户外活动新闻,车友动向新闻)划分为新闻,(旅游优惠,车友用品)划分为产品。所以户外活动新闻和车友动向新闻继承于新闻;旅游优惠,车友用品继承于产品。具体如图2.

设计模式:本系统使用三层架构体现了高内聚低耦合思想,采用自下向上设计思想符合依赖倒置原则。每层操作封闭处理符合开放封闭原则。在数据库实现采用适配器设计模式。

具体描述如下:

界面调用关系:通过前台即是UI(界面类)层调用bll(实体类)层留有的接口,以实现ui具体方法,无需理会后台(dal)如何实现,当然调用时基于已完成的数据层(dal)。

继承关系:本系统主要有5个实体分别为:管理员登陆用户,户外活动新闻,车友动向新闻,旅游优惠,车友用品,然而数据库设计接段将:,(户外活动新闻,车友动向新闻)划分为新闻,(旅游优惠,车友用品)划分为产品。所以户外活动新闻和车友动向新闻继承于新闻;旅游优惠,车友用品继承于产品。其主要继承实体类(Bll)

设计模式:每层操作封闭处理符合开放封闭原则。在数据库实现采用适配器设计模式。

实体层类设计

实体层类关系图的介绍,本系统基于NET Formwork4.0下,基于dal层下,页面实现了类的调用关系、继承关系,设计模式。界面层类关系图的介绍,本系统基于NET Formwork4.0下,使用web创建,基于page运行,页面实现了类的调用关系、继承关系,设计模式。

具体描述如下:

界面调用关系:通过前台即是UI(界面类)层调用bll(实体类)层留有的接口,以实现ui具体方法,无需理会后台(dal)如何实现,当然调用时基于已完成的数据层(dal)。Bll中的类调用dal,通过dal调用,以实现中间通信或是逻辑前提为界面类(UI)提供接口。Dal只是负责各个实体类方法具体实现,也是底层数据方法实现,负责与数据库进行交互。主要调用数据层(dal)

继承关系:本系统主要有5个实体分别为:管理员登陆用户,户外活动新闻,车友动向新闻,旅游优惠,车友用品,然而数据库设计接段将:,(户外活动新闻,车友动向新闻)划分为新闻,(旅游优惠,车友用品)划分为产品。所以户外活动新闻和车友动向新闻继承于新闻;旅游优惠,车友用品继承于产品。主要继承数据层(dal)方法.

设计模式:本系统使用三层架构体现了高内聚低耦合思想,采用自下向上设计思想符合依赖倒置原则。每层操作封闭处理符合开放封闭原则。在数据库实现采用适配器设计模式。

接口:

四、数据设计总结

还原课堂:数据库设计:

概念设计----》详细设计-----》具体实施----》持久化存储

 概念设计:

数据库本系统经分析可知总归有5个实体登陆用户(myuser)车友动向新闻(news)户外活动新闻(news)旅游优惠(product)车友用品(product)。基于这些实体属性在试验一以述,这里只是简述,车友动向新闻和户外活动新闻属性基本相同都是新闻类别,而旅游优惠和车友用品属性基本相同都是业务产品,那么基于此索性建立三个表,在news和product中分别加一个type进行区分。这样数据库表已经建立,耦合度很低了。在分析news和product两张表没有直接联系,但是考虑到登陆时,可以把信息放在同一张myuser、表中以降低冗余度,故作以下数据分析:

详细设计:

有三张表分别是news(新闻表),myuser(登录表)product(业务产品表)具体表属性分析:

news表:

n_id(新闻编号,类型int)                 n_title(新闻题目,类型 nvarchar(50))

n_time(发布时间,类型 nvarchar(50)     n_content(新闻内容,类型 nvarchar(max)

n_type(新闻类别,类型 nvarchar(50)

注:新闻类型本系统分为:友动向新闻和户外活动新闻。具有扩展性。

myuser表:

u_id(用户编号,类型int)                 u_user(用户名,类型 nvarchar(50)

u_pwd(用户密码,类型 nvarchar(50) 

    

product 表:

p_id(产品编号,类型int)              p_name(产品名称,类型 nvarchar(50)  

p_priceh(产品价格,类型 nvarchar(50)   h_price(会员价格,类型 nvarchar(50)   

p_pic(产品图片,类型 nvarchar(50)      p_note(产品介绍,类型 nvarchar(max)

p_type(产品类型,类型 nvarchar(50)

注:新闻类型本系统分为:车友动向新闻和户外活动新闻。具有扩展性。

关系描述:news与myuser使用都依赖于用户

          Product与myuser之间依赖于管理员,

          News与product本身没有联系

创建代码:

 

/*创建中亚车友会数据库*/

create database zhongya;

 

/*创建中亚车友会数据库新闻表   新闻表包括(户外活动,车友动向)  属性(编号,新闻题目,发布时间,新闻内容,新闻类型)  */

 

create table news
(
  n_id int IDENTITY(1,1) unique not null,
  n_title nvarchar(50) not null,
  n_time nvarchar(50) not null,
  n_content nvarchar(max) not null,
  n_type nvarchar(50) not null
 )

 

/*创建中亚车友会数据库产品表  产品表包括(车友用品,优惠礼品)  属性(产品编号,拆品名称,产品价格,会员价格,产品图片,产品介绍,产品类型)*/

create table product
(
  p_id int IDENTITY(1,1) unique not null,
  p_name nvarchar(50) not null,
  p_price nvarchar(50) not null,
  h_price nvarchar(50) not null,
  p_pic nvarchar(50) ,
  p_note nvarchar(max) not null,
  p_type nvarchar(50) not null
 )

 


 

中亚万惠车友会部分源代码

(界面层)UI层源代码

  

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                bdhd();//户外运动新闻显示
                bddx();//车友动向新闻显示
                bdyp();//车友用品图片显示
                bdyh();//优惠旅游信息显示
            }

        }    
        /// <summary>
        /// 主题:新闻层引用
        /// </summary>
        model.modhd mhd = new model.modhd();//引用用户活动model层
        dal.hdnews dhd = new dal.hdnews();//引用用户活动dal层

        /// <summary>
        /// 主题:车友用品产品层引用
        /// </summary>
        model.myongpin myp = new model.myongpin();//引用车友用品model层
        dal.yongpinproduct dyp = new dal.yongpinproduct();//引用车友用品dal层

        /// <summary>
        /// 主题:优惠旅游层引用
        /// </summary>
        model.myongpin myh = new model.myongpin();//引用优惠旅游model层
        dal.youhui dyh =new dal.youhui();//引用优惠旅游dal层

        /// <summary>
        ///主题:主页显示户外活动新闻标题和时间
        ///时间:2012年11月28日11:25:56
        ///作者:bnc
        /// </summary>
        public void bdhd()
        {
            DataSet ds = dhd.selhd();
            GVhuodong.DataSource = ds;
            GVhuodong.DataBind();
        }

        /// <summary>
        ///主题:主页显示车友动向新闻标题和时间
        ///时间:2012年11月28日11:25:56
        ///作者:bnc
        /// </summary>
        public void bddx()
        {
            DataSet ds = dhd.seldx();
            GVCX.DataSource = ds; 
            GVCX.DataBind();
        }


        /// <summary>
        ///主题:主页显示车友用品新闻标题和时间
        ///时间:2012年11月28日11:25:56
        ///作者:bnc
        /// </summary>
        public void bdyp()
        {
            DataSet ds = dyp.selyp();
            //FormView1.DataSource = ds;
            //FormView1.DataBind();

            DataList1.DataSource = ds;
            DataList1.DataBind();
        }

        /// <summary>
        ///主题:主页显示优惠旅游
        ///时间:2012年11月28日11:25:56
        ///作者:bnc
        /// </summary>
        public void bdyh()
        {
            DataSet ds = dyh.selyh();
            FormView2.DataSource = ds;
            FormView2.DataBind();
        }
    }


注:界面层代码量过大,只拿主页核心代码粘贴出来。

 

 (业务逻辑层)model层源代码

/// <summary>
   /// 题目:新闻属性
   /// 时间:2012年11月28日14:35:50
   /// 作者:bnc
   /// </summary>
    public class modhd
    {
        public int n_id { get; set; }//新闻编号
        public string n_title { get; set; }//新闻题目
        public string n_time { get; set; }//新闻发布时间
        public string n_content { get; set; }//新闻内容
        public string n_type { get; set; }//新闻类别

    }
/// <summary>
    /// 题目:产品属性
    /// 时间:2012年11月28日14:37:40
    /// 作者:bnc
    /// </summary>
    public class myongpin
    {
        public int p_id { get; set; }//产品编号
        public string p_name { get; set; }//产品名称
        public string p_price { get; set; }//产品价格
        public string h_price { get; set; }//会员价格
        public string p_pic { get; set; }//产品图片
        public string p_note { get; set; }//产品介绍
        public string p_type { get; set; }//产品类别
    }
/// <summary>
    /// 题目:管理员属性
    /// 时间:2012-12-1 17:05:32
    /// 作者:bnc
    /// </summary>
    public class user
    {
        public int u_id { get; set; }//管理员编号
        public string u_user { get; set; }//管理员名称
        public string u_pwd { get; set; }//管理员密码
    }

 

 (数据层)DAL层源代码

public class hdnews
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlcon"].ConnectionString);
        SqlDataAdapter da;
        SqlCommand cmd;
        /// <summary>
        /// 1
        /// 题目:户外活动新闻题目时间显示
        /// 时间:2012年11月28日13:55:30
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet selhd()
        {
            da=new SqlDataAdapter("select top 6 * from news where n_type='户外活动新闻'",con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 1
        /// 题目:更多户外活动新闻题目时间显示
        /// 时间:2012-11-29 15:54:46
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet selallhd()
        {
            da = new SqlDataAdapter("select * from news where n_type='户外活动新闻'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 1
        /// 题目:户外活动新闻菜单查看
        /// 时间:2012年11月28日22:00:20
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet selhdcd()
        {
            da = new SqlDataAdapter("select  * from news where n_type='户外活动新闻'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 1
        /// 题目:户外活动新闻详细信息
        /// 时间:2012-11-29 15:25:23
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet selhdxw(string id)
        {
            da = new SqlDataAdapter("select  * from news where n_type='户外活动新闻' and n_id='"+id+"'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 1
        /// 题目:根据类型删除信息
        /// 时间:2012年11月30日15:21:49
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public bool deletenews(string type, string id)
        {
            con.Open();
            cmd = new SqlCommand("delete news where n_type='" + type + "' and n_id='" + id + "'", con);
            int i = cmd.ExecuteNonQuery();
            con.Close();
            if (i > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 1
        /// 题目:删除信息后刷新页面
        /// 时间:2012年11月30日15:21:49
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet selectnews(string type, string id)
        {
            con.Open();
            da = new SqlDataAdapter("select * from news where n_type='" + type + "' and n_id='" + id + "'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }
        /// <summary>
        /// 1
        /// 题目:更新查询数据绑定
        /// 时间:2012年11月30日15:21:49
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet selupdenews(string nid)
        {
            con.Open();
            da = new SqlDataAdapter("select * from news where  n_id='" + nid + "'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            con.Close();
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 1
        /// 题目:更新信息后刷新页面
        /// 时间:2012年11月30日18:20:48
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public bool updatenews(string title, string time, string content, string type, string nid)
        {
            con.Open();
            cmd = new SqlCommand("update news set n_title='" + title + "',n_time='" + time + "', n_content='" + content + "',n_type='" + type + "' where n_id='" + nid + "' ", con);
            int i=cmd.ExecuteNonQuery();
            con.Close();
            if (i>0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 1
        /// 题目:添加信息后刷新页面
        /// 时间:2012年11月30日18:20:48
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public bool insertnews(string title, string time, string content, string type)
        {
            con.Open();
            cmd = new SqlCommand("insert into news values('" + title + "','" + time + "','" + content + "','" + type + "')", con);
            int i=cmd.ExecuteNonQuery();
            if (i>0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// 2
        /// 题目:车友动向新闻题目时间显示
        /// 时间:2012年11月28日13:55:30
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet seldx()
        {
            da = new SqlDataAdapter("select top 6 * from news where n_type='车友动向新闻'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 2
        /// 题目:更多车友动向新闻题目时间显示
        /// 时间:2012-11-29 15:54:46
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet selalldx()
        {
            da = new SqlDataAdapter("select * from news where n_type='车友动向新闻'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 2
        /// 题目:车友动向新闻菜单查看
        /// 时间:2012年11月28日22:00:20
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet seldxcd()
        {
            da = new SqlDataAdapter("select top 10 * from news where n_type='车友动向新闻'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 2
        /// 题目:车友动向新闻详细信息
        /// 时间:2012-11-29 15:25:23
        /// 作者:bnc
        /// </summary>
        /// <returns></returns>
        public DataSet seldxxw(string id)
        {
            da = new SqlDataAdapter("select  * from news where n_type='车友动向新闻' and n_id='" + id + "'", con);
            DataSet ds = new DataSet();
            da.Fill(ds);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds;
            }
            else
            {
                return null;
            }
        }
       
    }

注释:本程序完全自主完成,各层功能均能实现,本源码只是截取每层核心部分代码

    到此,伴随着几个小时的结束,小伙的这篇文章也该告一段落了,经过这次小型项目的运用以及总结,小伙确实收获很多,今天拿来跟园友共享。本文所有总结都是本人完成,由于也是刚接触软件工程以及设计模式不久,其中错误之处,还望大虾指点改正,一则惠己,二则也避了误人之过。

 

 

posted @ 2012-12-11 10:57  伏草惟存  阅读(2115)  评论(0编辑  收藏  举报