• 【软件工程】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;
                }
            }
           
        }
    
    注释:本程序完全自主完成,各层功能均能实现,本源码只是截取每层核心部分代码
    

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

     

     

  • 相关阅读:
    websocket的理解&应用&场景
    如何设置winform程序图标
    Python简单爬虫爬取自己博客园所有文章
    分享一个自己做的SpringMVC的PPT
    2016校招薪资汇总
    2016阿里巴巴校招offer面经
    利用快排partition求前N小的元素
    几个面试经典算法题Java解答
    深入理解java垃圾回收机制
    深入理解JVM结构
  • 原文地址:https://www.cnblogs.com/baiboy/p/ruanjiangongcheng.html
Copyright © 2020-2023  润新知