设计说明_设计说明书 - CSDN
精华内容
参与话题
  • 详细设计说明

    千次阅读 2019-01-13 10:47:03
    详细设计说明
                   


                                                            详细设计说明书

    1引言

    1.1编写目的


       本详细设计说明书,是在概要设计说明书的基础上进一步明确系统结构,详细的介绍系统的各个模块,为进行后面的编码和测试做准备。

              预期读者为:系统维护人员和开发人员


     


    1.2背景


        待开发的系统的名称:机房收费系统

              本项目的任务提出者:雪下机房管理人员

              开发者:周小强


    1.3 定义


        系统结构:对系统整体布局的宏观的描述。

         算法:对于程序内部流程计算的逻辑表达方式。


    1.4参考资料


     《软件工程概论》 李存珠 编著 南京大学计算机系出版 20018


     2程序系统的结构


    3程序1(标识符)设计说明

    3.1程序描述


        在本阶段逐个的描述每个程序要实现的功能,以及内部的结构和算法,为下一步的编码工作做准备。


    3.2功能


    模块名称:机房管理

    设计者:周小强

    使用单位:机房

    文本框: 机房收费系统编程要求:

    VB6.0 SQL

    输入部分

    处理部分

    输出部分

    1.     学生基本信息

    2.     教师基本信息

    3.     输入充值金额

    4.     学生输入学号

    5.     教师登录信息

    将学生基本信

    1.     息写入到用户信息表

    2.     将教师基本信息写入到教师基本表中

    3.     对学生进行充值

    4.     进行上机

    5.     上机值班

    1.     学生基本档案

    2.     教师基本档案

    3.     学生充值记录

    4.     消费收据

    5.     值班记录

         


     


    3.3性能


      精度:

    1. 学生上机计时消费时间要精确到秒。

    2. 对于结账方面的管理,要精确到小数两位。

           灵活性:


    1. 学生可以刷卡上机,也可以输入自己的卡号上机。

    2. 当出现错误的时候,给予相应的提示。

    3. 输入的数据类型要匹配一致

    4. 模块之间的设计要考虑到可移植性


    时间


    1.  如果程序运行没有反应的时间超过30秒的话,应提示要重新运行程序。

    2.  如果在添加用户或者学生的时候,在30秒内没有反应的话,则需要重新录入数据。


    3.4输入项   


    数据提示符

    数据类型

    取值范围

    数据提示符

    数据类型

    取值范围

    姓名

    文本

     

    上机时间

    时间

     

    班级

    文本

     

    下机日期

    时间

     

    性别

    文本

    /

    下机时间

    时间

     

    卡号

    文本

     

    登录日期

    时间

     

    管理级别

    文本

     

    登录时间

    时间

     

    上机日期

    时间

     

    消费金额

    货币

     

    递增时间

    时间

     

    最少上机时间

    货币

     

    充值日期

    时间

     

    退卡金额

    货币

     

    退卡日期

    时间

     

    结账员

    文本

     

    充值金额

    货币

     

     

     

     


    3.5输出项


     输出项内容与输入项内容一致


    3.6算法


    1. 售卡计算公式


          售卡张数=未结账卡数


    1. 退卡计算公式

       退卡张数=未结账退卡数目


    3)充值和退卡金额


      充值金额=未结账充值金额汇总


       退卡金额=未结账退卡金额汇总


    4)结账


      账目汇总=充值总金额-退卡总金额


    3.7流程逻辑


    1. 上机流程


    B.注册卡流程


     

    3.8接口


     暂无


    3.9存储分配


     对于数据库中的记录,将分配10完条记录的存储空间


    3.10注释设计


    1. 模块首部的注释,要大体上说明模块要实现的功能

    2. 各个语句后面的注释要说明语句实现的功能

    3. 注释要规范,命名要标准


    3.11限制条件


      暂无


    3.12测试计划


    测试名称

    测试进度安排

    测试目的

    测试内容

    基本数据输入

    系统完成后

    系统功能是否达到要求

    输入简单的一致的数据

    非法数据输入

    基本数据测试后

    系统对非法数据的反应

    输入一些特殊字符和字符串、边界值的数据

    空字符串

    非法测试以后

    系统对空字符串的反应

    在信息上输入空字符


    3.13尚未解决的问题


          暂无


    
               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 模板模板
  • 为了明确系统实现功能,提供明确目标指导开发过程,最终完整实现系统建设项目,编写了本详细说明书。 供开发人员使用,作为系统开发的依据。 作为项目验收标准之一。 软件维护的参考资料。 另外,编写此文档...

    本项目设计书为笔者软件工程课的作业,由于时间有限较为粗糙,不合理之处还望指出并改正。
    互联网+废品回收项目可行性分析报告
    互联网+废品回收项目需求分析报告
    互联网+废品回收项目概要设计说明书
    互联网+废品回收项目详细设计说明书
    互联网+废品回收项目数据库设计说明书
    页面实现(静态页面)所在git仓库


    F.1 引言

    F.1.1 编写目的

    为了明确系统实现功能,提供明确目标指导开发过程,最终完整实现系统建设项目,编写了本详细说明书。

    • 供开发人员使用,作为系统开发的依据。
    • 作为项目验收标准之一。
    • 软件维护的参考资料。

    另外,编写此文档为了能够使用户和系统的开发人员更好的沟通,能够对系统的功能达成一致,确定出系统应该实现哪些功能,不实现哪些功能,便于用户与开发商协调工作,为软件系统的后续开发完善提供便利。

    F.1.2 背景

    开发单位:wyq工作室 负责人:wyq
    互联网+废品回收的想象空间:从资源回收产业链改造的角度去说,互联网取缔了“回收站点”,将零散的回收从业者个人统一起来,使旧物直接从用户家中到达回收基地(大型回收分拣处理企业),缩短了产业链流程以节约成本,包括单人、单点覆盖面的时间成本,运输成本、层层转手产生的二次成本。如果从规模上来说,在完全规模化以后,还能实现城市回收基地的取代,直接与再生产企业建立业务往来,这中间成本几乎为零。另一方面,如果旧物回收工具能够成功进入家庭或社区,成为一道入口,在这个方向上将更加具有想象力。

    F.1.3 定义

    B/S:(Browser/Server结构)结构即浏览器和服务器结构。
    需求: 用户解决问题或达到目标所需的条件和功能;系统或系统部要满足合同、标准,规范或其他正式文档所需具有的条件及权能。

    F.1.4 参考资料

    [1] 张海藩、牟永敏. 《软件工程导论(第6版)》[M].北京: 清华大学出版社,2013

    F.2 程序系统的结构

    这里写图片描述

    F.3 登录注册模块设计说明

    F.3.1 程序描述

    用户登录, 如果是老会员则直接验证登录到系统首页,如果是新会员则首先进行注册, 注册成功, 进行登录,登录成功的用户进入系统首页。

    F.3.3 性能

    身份认证模块和检查用户名模块要对数据库进行搜索和录入,检查用户是不是合法和注册时用户表里是否有此会员的会员名,如果是会员要求反应时间在1秒之内,如果不是会员反映时间在2秒之内并在0.5秒之内跳转到注册页面。

    F.3.4 输入项

    在登录界面登陆的信息包括:用户信息(会员名,用户密码,数据类型:varchar,长度:20) 密码要以“ * ”显示

    F.3.5 输出项

    对用户输入信息进行判断, 通过验证后进入用户操作界面, 如果该用户信息不存在提示“注册”。

    F.3.6 算法

    登录过程:

    从登录界面得到游客的用户名及其密码,传给登录检查文件检查用户名及密码是否正确。对于密码框,要求用户输入密码时候显示为“ * ”

    If(用户名在数据库中存在并且用户名所在记录中密码项与所得到的相同) 
    { 
    显示登录成功 
    网页转向到登录页面
    }Else {
    提示用户名或密码有误
    }
    注册过程:

    从注册界面得到游客的个人信息,如:用户名、登录密码、真实姓名等。将信息传递给会员检查函数,在其中验证数据项是否符合规定。若符合则会员要求再将其值传递并保存到数据库中。

    检查数据过程:

    对登录注册的会员号和密码的格式进行检验,如果通过验证则返回true,进入身份认证,否则返回false,调用错误处理程序。

    if(用户名为空或字符少于指定字符) 
    { 
        警告请正确的填写用户名
        return false 
    } 
    if(密码长度不符) 
    {   
        警告:密码长度应该在5位到20位之间,请重新输入
        return false;
    }  
    if(两次输入的密码不同) 
    { 
        警告:两次输入的密码不同,请重新输入
        return false; 
    } 
    if(输入的字符少于2个汉字字符) 
    { 
        警告:请填写真实姓名;
        return false;
    }
    身份认证&检查过程:

    对登陆的用户名及密码进行检验,如果通过验证则返回true,进入系统主菜单,否则返回false,调用错误处理程序。

    if(MemberUser不存在) 
    { 
        ErrorNoID == T; 
        Error(); 
        return false;
    } 
    if(MemberUser所在列MemberPassword与数据库中password不相符) 
    { 
        ErrorPassword == T;
        Error(); 
        return false; 
    } else { 
        redirect(index.jsp);
        return true; 
    }
    Error()过程(错误信息):

    错误处理程序,给出错误提示,并引导用户转入系统登陆界面或注册界面。

    if(ErrorNull == T)  
    {
        显示:会员号为空,请输入用户名&密码为空,请输入用户名&密码;  
        login();
    } 
    if(ErrorLen == T)  
    {
        显示:输入的信息超过规定字符长度,请重新输入;  
        login(); 
    } 
    if(ErrorType == T)  
    {
        显示:输入含有非法字符,请重新输入;  
        login(); 
    } 
    if(ErrorNoID == T)  
    {  
        显示:无此用户名,请重新输入;  
        login(); 
    } 
    if(ErrorPassword == T)  
    {
        显示:密码错误,请重新输入;  
        login(); 
    }

    F.3.7 流程逻辑

    这里写图片描述

    F.3.8 接口

    F.3.9 存储分配

    面向服务器采用固定式分区存储结构。

    F.3.10 注释设计

    详见本功能模块算法。

    F.3.11限制条件

    由于本系统的开发将是基于浏览器的B/C结构,所以浏览器语言使用HTML/CSS/JavaScript,服务器端的语言使用ASP(.NET),开发人员将不能用其他的开发语言(编写组件除外)。而数据库也将随之采用SQL Server2000。

    开发人员在编写代码的过程中需要严格按照软件工程的要求来进行,以利于接下来的测试和维护及升级。一个更为完善的网上购物系统,应提供更为便捷与强大的信息查询功能,如相应的网络操作及服务,由于开发时间和计算机数量有限,该系统并未提供这一功能。对信息的保护手段仅限于设置用户级别,以及提供数据文件的备份,比较简单,不能防止恶意的破坏,安全性能有待进一步完善。

    F.3.12 测试计划

    测试工件为四个阶段:单元测试、组装测试、确认测试、系统测试。

    • 单元测试:采用白盒法和黑盒法相结合的方法,对于逻辑结构复杂的模块采用白盒法,对于以输入、输出为主的模块采用黑盒法测试,以提高测试的效率。
    • 组装测试:自底向上的增式测试。
    • 确认测试:由用户参与按需求规格说明书验收。
    • 系统测试:采用人工测试方法。

    (1) 系统环境模块测本测试是为了检测系统环境模块,数据连接是否正确,数据能否正确,并进行仔细核对。
    (2) 基本信息测试基本信息模块是本系统的一个重要模块,本模块能否正确运行关系到系统设计成败的关键,所以有必要专门对这个之模块进行严格的测试。以弥补设计过程中的不足。及早发现和修改问题。
    (3) 查询模块的测试所有的数据库管理软件设计的目的之一都是为了人们提供快捷方便的数据查询功能,查询设计的是否合理和正确是系统的又一关键之所在。

    F.3.13 尚未解决的问题

    待测试。

    F.4 个人资料管理模块设计说明

    F.4.1 程序描述

    本程序设计的目的主要是个人资料的修改功能的实现。本程序的特点是非常驻内存,可重人无覆盖要求,能够并发处理。

    F.4.3 性能

    本模块要求对用户信息进行维护。会员不可以有重复,所以在输入中要检查冲突信息,删除信息时不要发生误操作,每次操作都需要用户确认操作,只有当点击“确定”时候才能完全修改数据库中的内容。对于数据要求,不能输入与相应字段不符合的内容,要求点击确定之后系统核查反映时间为1秒之内,并在0.5秒跳转回用户界面。

    F.4.4 输入项

    输入新的用户信息或者输入修改以后的用户信息。

    F.4.5 输出项

    数据表格中出现新的数据字典,并且提示操作完成。

    F.4.6 算法

    登录页面中传递页面中客户所填写的各项数据的值到一个检查方法中检查其正确性,若正确则该方法将调用此信息将用户个人信息保存到数据库上。

    添加用户过程(只用于注册时及后台管理):

    增加新的数据。用户输入新的用户信息。经检验输入无误后,将输入界面表单中的数据输入到会员表中。

    修改过程(修改用于客户个人管理及后台管理):

    修改已有数据。单击选中要修改的数据,用户即可修改已有的用户信息。经检验输入无误后,修改会员表中对应的数据项。

    删除过程(只用于后台管理):

    删除已有数据。单击选中要删除的数据,用户即可删除已有的数据字典。经确认后,删除会员表中对应的数据。

    消息提示过程(操作信息):

    返回操作结果信息:“操作成功,用户信息已更新。”

    F.4.7 流程逻辑

    这里写图片描述

    F.4.8 接口

    详见第一模块的接口

    F.4.9 存储分配

    面向服务器采用固定式分区存储结构。

    F.4.10 注释设计

    详见本功能模块算法。

    F.4.11限制条件

    详见第一模块的限制条件

    F.4.12 测试计划

    详见第一模块的测试计划

    F.4.13 尚未解决的问题

    待测试。

    F.5 订购商品管理与订单管理模块设计说明

    F.5.1 程序描述

    本程序设计的目的主要是订购商品功能的实现。本程序的特点是非常驻内存,可重人无覆盖要求,能够并发处理。

    F.5.3 性能

    本模块要求对数据字典进行维护。商品表和商品名不可以有重复,所以在输入中要检查冲突信息,删除信息时不要发生误操作。要求点击确定之后系统核查反映时间为1秒之内,并在0.5秒跳转回商品界面。

    F.5.4 输入项

    输入新的订单信息或者输入修改以后的订单信息。

    F.5.5 输出项

    数据表格中出现新的订单信息,并且提示操作完成。

    F.5.6 算法

    Add()过程(增加):

    增加新的数据。用户输入新的订单信息。经检验输入无误后,将输入界面表单中的数据输入到Order 表及OrderList表中。

    Modify()过程(修改):

    修改已有数据。单击选中要修改的数据,用户即可修改已有的订单资料。经检验输入无误后,修改Order 表及OrderList表中对应的数据项。

    Delete()过程(删除):

    删除已有数据。单击选中要删除的数据,用户即可删除已有的订单资料。经确认后,删除Order 表及OrderList表中对应的数据。

    Ok()过程(确定):

    保存当前操作,修改数据库内容。并有确认信息:“您确认要(增加、修改、删除)此数据?”确定返回true,保存当前操作到数据库,并调用Message()过程。取消返回false,取消当前操作,并返回原页面或首页。

    Message()过程(操作信息):

    返回操作结果信息:“操作成功,订单已更新。

    F.5.7 流程逻辑

    这里写图片描述

    F.5.8 接口

    详见第一模块的接口

    F.5.9 存储分配

    面向服务器采用固定式分区存储结构。

    F.5.10 注释设计

    详见本功能模块算法。

    F.5.11限制条件

    详见第一模块的限制条件

    F.5.12 测试计划

    详见第一模块的测试计划

    F.5.13 尚未解决的问题

    待测试。

    F.6 商品信息管理模块设计说明

    F.6.1 程序描述

    本程序设计的目的主要是商品信息管理功能的实现。包括对商品信息的添加,修改,删除和查找。本程序的特点是非常驻内存,可重人无覆盖要求,能够并发处理。

    F.6.3 性能

    在查询条件输入正确的前提下,从数据库中查找所有符合条件的数据,并输出;若输入信息出错,则给出出错信息,并进行相应的出错处理。本模块是查询商品信息、管理商品信息,因此要求出错率在0.0000001之内,查询速度在0.5秒之内。要求点击确定之后系统核查反映时间为1秒之内,并在0.5秒跳转到该商品的界面。

    F.6.4 输入项

    输入进行查询的条件,商品名称。可以模糊查询。

    F.6.5 输出项

    输出商品的基本信息或修改后的商品信息。分条列出。

    F.6.6 算法

    查询过程:

    经数据库查询后,是否查询到符合查询条件的数据。有则返回true,调用shop.jsp输出查询结果过程,显示输出结果。否则返回false,调用shop.jsp输出空结果。

    Shop.jsp 
    
    If(没查到)   如:·#¥%„„等 
    { 
        在shop.jsp中输出空结果集;  
        return false; 
    } 
    Else 
    { 
        在shop.jsp中输出查询结果;   
        return true; 
    } 
    
    
    Admin/admin_products.jsp 
    
    { 
        查询数据库中的Products表,得到商品的信息;   
        输出商品基本信息; 
    }
    删除过程:
    Admin/admin_ DeleteProducts.jsp
    
    {
        删除商品信息
        要求用户确认
        If(确认删除)
        {
            删除数据库中的该商品信息 
        }
        Else 
        {
            返回当前商品基本信息查看页
        }
    }
    添加过程(修改相似):
    Admin/admin_EditProducts.jsp 
    
    { 
        输入商品相应信息
        保存在Products表中
    }

    F.6.7 流程逻辑

    这里写图片描述

    F.6.8 接口

    详见第一模块的接口

    F.6.9 存储分配

    面向服务器采用固定式分区存储结构。

    F.6.10 注释设计

    详见本功能模块算法。

    F.6.11限制条件

    详见第一模块的限制条件

    F.6.12 测试计划

    详见第一模块的测试计划

    F.6.13 尚未解决的问题

    待测试。

    展开全文
  • 文章目录1. 引言1.1 编写目的1.2 背景说明1.3 术语定义1.4 参考资料2. 总体设计2.1 性能规定2.1.1 数据精确度2.1.2 时间特性2.1.3 适应性2.1.4 可用性2.1.5 ... 模块设计说明3.1 模块介绍3.1.1 概要3.1.2 登录模块3.

    1. 引言

    1.1 编写目的

      本文档描述软件设计说明书的目的如下:
      1)定义软件的总体要求,作为用户与软件开发人员之间相互了解的基础,令项目开发人员明确项目最终的目的以及用户的需求,了解软件开发的流程、软件的测试流程等
      2)提供性能要求、初步设计和用户影响的信息,作为软件人员进行软件结构设计和编码的基础;

      3)作为软件总体测试的依据。

    1.2 背景说明

      本项目主要应用于医院管理,按照医院工作的客观规律,运用现代管理理论和方法。对人、财、物、信息、时间等资源,进行计划、组织、协调、控制。充分发挥整体运行功能,以取得最佳综合效益的管理活动过程。使医院管理的日常事务在信息系统的协助下变得高效、快捷。
      实现利用计算机软硬件技术、网络通信技术等现代化手段对医院及其所属各部门的人流、物流、财流进行综合管理,对在医疗活动各阶段中产生的数据进行采集、存储、处理、提取、传输、汇总、加工生成各种信息。从而为医院的整体运行提供全面的、自动化的管理以及各种服务的信息系统。是为采集、加工、存储、检索、传递病人医疗信息及相关的管理信息而建立的系统。

    • 软件名称:医疗服务系统
    • 此系统基于B/S架构,使用者可以登录医院网站使用该系统
    • 使用者:系统管理员、医生、患者
    • 系统管理员可以对系统中非隐私的所有数据进行管理
    • 医生可以利用该系统管理自己信息和提供治疗信息给自己的患者
    • 患者可以通过该系统查看药物、医生和个人等信息,进行挂号和缴费
    • 技术人员需要参考此需求规约进行软件开发

    1.3 术语定义

    • Manager 系统管理员
    • Doctor 医生
    • Patient 患者
    • Department 科室
    • Drug 药物
    • Introduction 医院简介
    • Medical Record 医疗记录
    • B/S (Brower/Server) 浏览器/服务器
    • DBMS (Database Management System) 数据库管理系统
    • JDBC (Java Database Connectivity) Java数据库连接

    1.4 参考资料

    • Software Engineering Standards Committee of the IEEE Computer Society. IEEE Std 1016-1987, IEEE Recommended Practice for Software Design Descriptions, 9 December 2009

    2. 总体设计

    2.1 性能规定

    2.1.1 数据精确度

    1、时钟设置以秒为单位
    2、系统及时误差在10秒以内

    2.1.2 时间特性

    1、每步操作的响应时间不超过3秒

    2.1.3 适应性

    1、适应Windows操作系统的不同版本
    2、支持WindowsXP及以上不同类型的PC兼容机和笔记本电脑

    2.1.4 可用性

    1. 系统界面友好,不会出现中英文混杂的情况
    2. 系统中的提示信息清楚且易于理解
    3. 各个模块的风格不会相差太大
    4. 查询的输出结果直观、合理

    2.1.5 输入和输出

    1. 输入来自于客户端的标准输入设备,即键盘或鼠标
    2. 输出到客户端的标准输出设备,即所用设备的显示器

    2.1.6 设计约束

    1. 要求遵循的开发规范和标准:9002质量体系认证
    2. 企业策略的限制:不同医院的各自政策的限制,如病人不能查看药品价格等
    3. 政府法规的限制:地方政府的不同规则
    4. 数据转换格式标准的限制:无限通信协议限制

    2.2 运行环境

    医疗服务系统基于B/S架构,在浏览器端用户发出请求,服务器端通过JDBC与数据库交互并返回响应提供服务。

    • 硬件环境:服务器端,PIII800以上+内存32GB以上+硬盘16TB以上+10/100M网卡
    • 客户机端:P133,32M内存+10/100M网卡
    • 软件环境:IE 10.0以上,Chrome 70.0以上,MySQL8.0以上
    • 开发环境:Windows10+IE9.0+Apache+Tomcat 7/Mysql数据库

    2.3 处理流程

    在这里插入图片描述

    2.3.1 管理员子系统

    在这里插入图片描述

    2.3.2 患者子系统

    在这里插入图片描述

    2.3.3 医生子系统

    在这里插入图片描述

    2.4 软件结构

    2.4.1 顶层结构图

    在这里插入图片描述

    2.4.2 管理员结构图

    在这里插入图片描述

    2.4.3 患者结构图

    在这里插入图片描述

    2.4.4 医生结构图

    在这里插入图片描述

    3. 模块设计说明

    3.1 模块介绍

    3.1.1 概要

      医疗服务系统一共分为五大模块,分别为登录模块、注册模块、患者模块、医生模块、系统管理员模块。
    模块划分如下图:

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    3.1.2 登录模块

    在这里插入图片描述

      登录模块主要分为三种登录用户,分别为管理员登录、医生登录、患者登录,三种用户拥有不同的处理数据的权限,同时三种用户登录之后拥有不同的业务功能。

    3.1.3 注册模块

    在这里插入图片描述

      注册模块主要为两种用户提供注册功能,分别为医护人员、患者。注册模块无法实现管理员的注册,管理员的账号是提前加入数据库中,无法更改。

    3.1.4 患者模块

    在这里插入图片描述

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r11gWPMP-1589678145587)(en-resource://database/2123:1)]

      患者模块主要分为查询服务模块、业务处理模块。查询服务模块是患者的各种查询信息,包含医院简介查询、个人信息查询、余额查询、排队查询、缴纳费用查询、诊断报告查询、挂号记录查询、购药记录查询。业务处理模块是患者的各种请求,包含预约挂号请求、费用服务请求、个人信息管理请求,费用服务请求中又包括充值服务、缴费服务,个人信息管理请求中包含对个人信息的修改,对个人账号的注销。

    3.1.5 医生模块

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QcrZNjis-1589678145591)(en-resource://database/2111:1)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-isaFAIrY-1589678145595)(en-resource://database/2119:1)]

      患者模块主要分为查询服务模块、业务处理模块。查询服务模块是医护人员的各种查询信息,包含医院简介查询、个人信息查询、医疗记录查询。业务处理模块是患者的各种请求,包含个人信息管理、医疗记录管理、诊断处理,个人信息处理包含个人信息的修改以及注销,医疗记录管理包含记录的删除与添加。

    3.1.6 管理员模块

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8EIeLEKL-1589678145601)(en-resource://database/2113:1)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0my85D4-1589678145606)(en-resource://database/2121:1)]

      管理员模块主要分为查询服务模块、业务处理模块。查询服务模块是管理员的各种查询信息,包括医院简介查询、个人信息查询、科室查询、药物信息查询、患者信息查询、医生信息查询。业务处理模块是管理员的各种请求,包含医院简介的修改,医生信息、科室信息、药物信息、患者信息的增删改查操作,个人信息的修改操作。

    3.2 功能概述

    3.2.1 登录模块详述

      登录模块包含登录用户所需的用户名、登录密码,同时登陆界面拥有跳转到注册界面的超链接。登录时主要包含三种权限的登录,其一患者登录,当患者登录成功之后,将会跳转到患者模块的主页面,在患者的权限之下,无法对管理员模块的信息以及医生模块的信息进行查看以及修改等操作。其二医生登录,医生登录成功之后,跳转到它对应的医生模块,医生权限下,无法查看以及修改管理员的个人信息以及管理员的权限控制,也无法查看病人的个人信息以及病人的权限控制。其三管理员登录,管理员登陆之后,跳转到管理员的模块,管理员拥有最高的权限,可以对医生信息和患者信息进行查看和修改。注册界面填写注册信息,在此过程中js将会对注册信息进行检测和校对,当注册成功后,针对于不同的权限将注册信息添加到后台不同的数据库中。同时会跳转到登录界面进行登陆。

    3.2.2 注册模块详述

      注册模块包含两种用户的注册,分别是医生注册,患者注册。在注册时,JS会对注册的信息进行检测与校对,当相关的用户注册成功之后,针对于不同的权限将注册信息添加到后台不同的数据库中,同时注册成功之后,系统自动跳转至登录界面。

    3.2.3 患者模块详述

    查询服务模块:

    • 个人信息:查看自己的个人信息,包括 年龄、登录账号、登录密码、性别、ID号、联系方式、卡中余额、需交费用等信息。
    • 医院简介:点击医院简介按钮之后,会在当前页面中显示出医院简介的基本信息
    • 余额情况:点击查询余额之后,系统后台会根据患者的ID编号查询用户的所剩的余额情况,最后以表单的形式显示出来。
    • 排队情况:排队查询需要输入患者用户的编号以及要预约的医生的姓名,后台数据库根据患者编号以及医生姓名查询到患者所在的队列位置,以表单的形式显示出来
    • 需交费用:点击待缴费后,系统页面会以表格的形式显示出需要交纳的药品的详细信息以及诊断的费用,最后在表格的结尾处显示需要的总费用,在主治医生诊断后才会更新表单。
    • 诊断报告:诊断报告是在诊断结束之后医生给出的建议以及需要服用的药品的详细信息。会以表格的形式展现给用户。
    • 挂号记录:挂号记录会显示从用户注册到现在为止的所有挂号记录,最后以表单的形式呈现在页面上。
    • 购药记录:点击查询购药记录之后,会将该账户从注册到现在的所有购药记录以 表单的形式呈现在页面上

    业务处理模块:

    • 预约挂号:患者填写一份在线表单(医疗记录单),表单的内容包括:患者编号、患者姓名、科室、主治医师、预约时间(依据系统时间得出),提交之后,系统根据当前该主治医生的预约情况,返回该患者当前号码,同时在提交表单之后患者的余额 减去10元。
    • 充值:点击充值按键之后,会在屏幕上显示出用户的卡中的余额,以及用户的身份证 信息,同时也会包含一个数字框用于输入准备充值的数值,点击提交之后,系统会更 新数据库的数据,同时仍然停留在充值界面,不过此时卡中的余额会显示充值之后的 余额。
    • 缴费:点击缴费按钮之后,会显示在缴费的页面,当卡中的余额大于待缴费的余额 时,点击缴费之后,会自动扣除待缴的费用,如果卡中的余额小于待缴费,则弹出余额不足的提示按钮,提醒用户充值费用。
    • 个人信息管理:患者可以对自己的个人信息进行添加、修改、注销操作,必要时可以上传自己的各种证件。

    3.2.4 医生模块详述

    查询服务模块:

    • 个人信息:查看医生的个人信息,包括医生个人的ID,姓名、性别、年龄、身份证号、联系方式、职称等信息。
    • 医院简介:点击医院简介按钮之后,会在当前页面中显示出医院简介的基本信息
    • 医疗记录查询:医疗记录中包含了医生从注册到现在的时间段内所诊断的全部病人,以及所开出的药方等,医疗记录的查询就是对应医疗记录数据库文件的查询。

    业务处理模块:

    • 个人信息管理:医生可以修改自己的用户名、登录密码、联系方式、职称、年龄等,也可以对自己的账户进行注销。
    • 医疗记录更新:当医生完成对预约患者的诊断之后,系统就会同步的更新医生所对应的医疗记录情况。
    • 待诊断患者处理:(用一个table表示医疗记录–Medical_Record,includes患者编 号,患者姓名,科室,主治医生,预约时间,病患描述,医生诊断报告,开药清 单,是否诊断(默认为false)):医生填写当前诊断的病人所给出的病患描述, 并给出诊断报告,开药清单,并将是否诊断赋值为true。(患者可在“查询报 告”中查看诊断报告,开药清单中的药品价格会加进患者的“待缴费”中)

    3.3 处理描述

    3.4 性能约束

    3.5 内部接口

    3.6 外部接口

    3.6.1 用户接口

    • 登录页面
      • 名称:登录
      • 意义:用户访问系统时通过登录本人账户进行身份认证,若未注册,则跳转至注册页面
      • 数据范围:用户名、密码、身份(个人、医生、管理员)
      • I/O标志
        • username:用户名
        • password:密码
        • 3个单选框:个人、医生、管理员
        • Login按钮:提交登录信息
        • SignUp按钮:跳转至注册页面

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f0MENtSS-1589678145610)(en-resource://database/2141:0)]

    • 注册界面

      • 名称:注册
      • 意义:生成用户个人账户,用于用户身份识别
      • 数据范围:姓名、性别、生日、身份证、电话、密码
      • I/O标志
        • 7个表单:性别、生日、身份证、电话、密码、确认密码
        • SignUp按钮:提交注册信息

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3dXSUUdZ-1589678145614)(en-resource://database/2143:0)]

    • 用户登录后会进入个人主页,通过左列表单使用各种功能,不同身份的用户的个人主页不同。可以通过左上角“后退”和“前进”调节使用进度,右上角“退出系统“。

    • 管理员个人主页

      • 名称:管理员空间
      • 意义:提供管理员可以实现的业务功能
      • I/O标志和对应功能
        • 个人信息:查看个人信息
        • 科室管理:查看和修改医院科室信息
        • 药物管理:添加和修改药物信息
        • 医生信息管理:增删改查授权的医生基本信息
        • 病人信息管理:增删改查授权的病人基本信息
        • 医院简介:查看和修改医院简介内容
        • 后退:返回上级页面
        • 前进:跳转至下级页面
        • 退出系统:登出系统

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-12PN7eR0-1589678145623)(en-resource://database/2145:0)]

    • 医生个人主页

      • 名称:医生空间

      • 意义:提供医生可以实现的业务功能

      • I/O标志和对应功能:

        • 个人信息:查看和更改本人信息

        • 待处理患者:查看已挂号仍未就诊的患者信息

        • 已处理患者:查看已进行诊治的患者信息和医疗记录,填写该患者的诊断报告

        • 医院简介:查看医院简介

        • 后退:返回上级页面

        • 前进:跳转至下级页面

        • 退出系统:登出系统

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HOWzFKEE-1589678145627)(en-resource://database/2147:0)]

    • 患者个人主页

      • 名称:个人空间
      • 意义:提供就诊者可以实现的业务功能
      • I/O标志和对应功能:
        • 个人信息:查看和更改本人信息
        • 预约挂号:选择科室医生进行挂号
        • 排队查询:查看挂号排队情况
        • 查询余额:查看账户余额
        • 充值:向账户充值
        • 待缴费:查看未缴费的账单
        • 个人报告:查看本人诊断报告
        • 挂号记录:查看本人挂号信息
        • 购药记录:查看本人已购药物信息
        • 医院简介:查看医院简介
        • 后退:返回上级页面
        • 前进:跳转至下级页面
        • 退出系统:登出系统

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m18zUhLa-1589678145630)(en-resource://database/2149:0)]

    3.6.2 硬件接口

      因为该系统应用在医院网站上运行,没有直接的硬件接口。和数据库服务器的硬件连接是由应用端的操作系统和Web服务器负责。

    3.6.3 软件接口

    • Web服务器接口:Apache+Tomcat 7
    • MySQL数据库接口:JDBC

    3.6.4 通讯接口

    • TCP/IP网络协议

    3.7 全局数据依赖

    4. 数据库

    4.1 数据库环境说明

    4.1.1 数据库系统

    4.1.2 设计工具

    4.1.3 数据库配置

    4.2 数据库设计

    4.2.1 数据库表结构

    4.2.1 数据图逻辑关系

    5. 系统出错处理

    5.1 出错信息简要说明

    5.2 出错处理方式及补救措施

    展开全文
  • 软件设计说明书模版(申请软件著作权可供参考)

    万次阅读 多人点赞 2019-06-20 14:59:22
    1.引言 1.1 编写目的 1.2 项目背景 ...3.2.1 软件概要设计说明 3.2.3 基本设计概念和处理流程 3.3 软件的详细设计 3.3.1 系统结构 3.3.2 模块设计说明 3.3.3 爬虫模块 3.3.4 日志模块 3.3.5 数...

    1.引言

    1.1 编写目的

    1.2 项目背景

    1.2 项目概要

    1. 总体要求

    2.1 系统功能概述

    2.2 系统功能要求

    1. 软件开发

    3.1 软件需求分析

    3.2 软件的概要设计

    3.2.1 软件概要设计说明

    3.2.3 基本设计概念和处理流程

    3.3 软件的详细设计

    3.3.1 系统结构

    3.3.2 模块设计说明

    3.3.3 爬虫模块

    3.3.4 日志模块

    3.3.5 数据处理

    3.3.6 数据建模

    3.3.7 事件画像

    3.3.8 可视化展示

    3.4 数据库设计

    3.4.1 数据库说明

    3.4.2 数据库操作

    3.4.3 数据库结构

    3.4.4 表结构

    1.引言

    1.1 编写目的

    项目名称:基于互联网大数据的事件智能抓取和画像系统
    项目成员:禹精华、刘可可、刘贤辉

    对基于互联网大数据的事件智能抓取和画像系统进行算法描述和软件设计说明。

    1.2 项目背景

    项目背景:随着互联网大数据的发展,各种大数据的分析对各行业都产生了不同程度的影响。网站数据、社交媒体数据等是互联网大数据的重要组成部分。对于民航业领域,社会事件的发生,会很大程度影响旅客的出行需求变化,从而影响航空公司飞机运力投放、航班编排、票价策略调整等,对互联网事件的准确抓取和分析能够帮助航空公司更好的服务市场、服务旅客、提升收益。

    行业背景:对于航空公司来说,能否预先判断旅客的出行需求,可用于航空公司及行业管理部门决定行业运力投放的合理性,从而提高旅客服务水平、提高航空公司航班收益水平,从互联网中获取大量的影响民航领域的信息能够帮助航空公司制定销售策略。

    1.3 项目概要

    开发团队:武汉职业技术学院筑梦云工作室demo01团队

    项目开发平台说明:

    操作系统:Windows7 及以上版本

    应用服务器:Ubuntu Server 14.04 LTS 64位

    服务器配置:CUP: 1核 内存:1GB 公网带宽:1Mbps 硬盘:20G

    应用服务器:Windows Servers 2008

    服务器配置:CUP: 1核 内存:2GB 公网带宽:1Mbps 硬盘:40G

    网络架构:完全支持TCP/IP协议

    开发工具或技术体系:开发语言:Python 3.6,开发工具:Pycharm 2017

    数据库: MongoDB 3.4.3

    软件运行环境说明:

    设备:

    客户程序硬件要求:

    具有 1核处理器且满足以下要求的计算机:

    最低 1G内存

    最小 20 GB 硬盘

    web服务器硬件需求:

    具有1核处理器且满足以下要求的计算机:

    最低 1G内存

    最小 20 GB 硬盘

    总线I/O:8M/s;

    数据库服务器硬件需求:

    具有1核处理器且满足以下要求的计算机:

    最低 1G内存

    最小 20 GB 硬盘

    2.总体要求

    2.1 系统功能概述

    从互联网上抓取事件,对事件数据进行数据处理,存储到数据库,进行分词及语义等处理,提取事件的属性建立事件模型,以及可视化展现。

    1、实现互联网事件天级或更高频次抓取,采集政治会议、展会、体育赛事、演唱会、突发异常天气等各类中比较主要的事件,每个类型的事件数据至少来自2个数据源(网站),每天爬取一次。

    2、实现事件的去重功能,一是不同数据源(网站)的事件去重,二是不同天抓取的事件去重。

    3、事件画像建模,即事件属性自动化提取。

    4、使用DataV进行可视化展现。

    2.2 系统功能要求

    1、网络爬虫模块实现互联网事件抓取。

    2、日志模块实现各个模块间日志的生成。

    3、数据处理模块实现数据的准备、清洗、去重、转换。

    4、数据建模模块对数据建立模型,计算及转换。

    5、事件画像模块对事件分词及提取属性。

    6、DataV进行可视化展示。

    3.软件开发

    3.1 软件需求分析

    系统需求分析:为航空公司飞机的运力投放、航班编制、票价策略提供服务。

    软件系统结构描述:基于互联网大数据的事件智能抓取和画像系统由爬虫模块、日志模块、数据处理模块、数据建模模块、事件画像模块、可视化系统构成。

    软件结构如图3-1:

    图3-1 系统总用例图

    数据流程如图 3-2:

     

    图 3-2 数据流程

    3.2 软件的概要设计

    3.2.1 软件概要设计说明

    软件系统采用B/S架构,并且将程序部署在云服务器。

    3.2.2 基本设计概念和处理流程

    考虑到互联网上的数据复杂性非常高、并且事件数据一般为非结构化数据,其处理和分析有一定的难度,对爬虫的稳定性和爬取速度有很大的要求,我们使用scrapy爬虫框架技术来从各网站爬取数据,对数据进行处理,使用NoSQL型数据库MongoDB存储半结构化数据,对数据画像、分析、建模并且将程序部署在云端。通过访问云端数据库,数据流映射到DataV实现可视化展示。

    系统流程如图 3-2-2:

    图 3-2-2 系统流程图

    设计说明:

    1、每一个计算机需要不需要安装客户程序,但是需要有IE4.0或更高版本的支持;

    2、WEB发布服务器访问数据库服务器,数据库服务器对外部不可见;

    3、数据库服务器使用MongoDB来实现,对于目前的访问量,MongoDB在足够的硬件环境的支持下能够适用,并且在经济上也是合理的;

    4、多用户并发访问和处理、数据加锁、事务协调,由MongoDB数据库来完成,本系统不提供单独的事务处理服务器;

    5、scrapy爬虫框架可以实现快速、高并发、高层次的网络抓取。

    3.3 软件的详细设计

    3.3.1 系统结构

    应用程序采用Python语言进行开发,网络爬虫使用scrapy框架进行开发并将其部署在云服务器上,考虑到爬虫抓取的数据多为半结构化或者非结构化数据,我们使用NoSQL型数据库MongoDB进行数据存储,并部署在云服务器上。

    系统设计如图 3-3-1:

    图 3-3-1 系统设计图

    3.3.2 模块设计说明

    整个系统共划分为6个模块

    1、爬虫模块

    2、日志模块

    3、数据处理

    4、数据建模

    5、事件画像

    6、可视化展示

    系统模块设计如下:

    1、爬虫模块分为定时爬虫模块和scrapy爬虫两个模块构成。

    定时爬虫模块:管理整个爬虫模块,监控爬虫运行状态、设置爬虫抓取频率(每天爬取一次)、爬虫程序异常处理、管理爬虫日志。

    Scrapy爬虫模块:从目标网站上抓取数据,采集政治会议、展会、体育赛事、演唱会、突发异常天气、交通管制新闻网等数据源网站的事件经过数据处理,并生成爬虫日志存储到数据库。此模块由11个爬虫脚本组成,分别对相应的数据源进行数据爬取。

    爬虫模块如图3-3-2:

    图3-3-2 爬虫模块图

    2、日志模块:日志模块与系统各个模块部分联系紧密,各个模块运行都会产生日志,生成的日志将存储到数据库,方便系统管理、维护、排错。

    日志设计图如图 3-3-3:

    图3-3-3 日志模块设计图

    3、数据处理:数据处理分为数据准备、数据转换、数据聚合。主要对非结构化/半结构化数据进行处理,得到干净、规整的数据。爬虫爬取网站数据源的时候进行数据预处理,对所收集数据进行审核、筛选、排序等操作。数据预处理完成后对数据进行清洗,过滤掉不符合要求的数据,将脏数据转化为满足要求的数据。再进行缺失值处理,对缺失项进行特殊值填充,存储到数据库。数据去重主要对不同网站的事件数据去重复处理。

    4、数据建模:对事件数据建立一个统一的模型,利用聚类等机器学习算法挖掘数据间隐藏的属性及关系。由聚类算法和搜索引擎收录数两个子模块构成。

    聚类算法:使用无监督学习的K-Means对数据进行聚类分析。

    搜索引擎收录数:对于热度相关数据的缺失,我们通过抓取百度搜索引擎对事件的收录数,对缺失热度数据进行填充。

    5、事件画像:事件画像模块实现了对事件属性的自动化提取。调用数据建模模块对数据进行聚类,对不同类型的事件进行分词及属性提取,数据样本初始化,日志生成,对事件画像,生成事件样本。

    事件属性表如下:

    主办方级别 是否是国际性组织
      是否是国家政府
      是否是省政府
      是否是地方级政府
    主办方类型 是否是国内民间协会
      是否是国际民间协会
      是否是国内行业协会
      是否是国际行业协会
    主要影响年龄阶段 主要影响年龄层为儿童
      主要影响年龄层为青年
      主要影响年龄层为成年
      主要影响年龄层为老年
    是否有固定的参与人群 是否有固定的参与人群
    影响社会群体 是否影响商务人群
      是否影响社会大众
    最大影响范围 最大影响全球
      最大影响洲际
      最大影响全国
      最大影响全省
      最大影响全市
    事件类型 是否是展会
      是否是演唱会
      是否是体育赛事
      是否是会议
      是否是地方性节假日
    事件热度 事件热度
    事件历史悠久程度 事件历史悠久程度
    事件一年内频率 事件一年内频率
    基本属性 开始日期
      结束日期
      举办城市
      事件名称

    6、可视化展示我们使用阿里云的可视化工具DataV来生成图表和数字大屏。


    3.3.3 爬虫模块

    定时爬虫模块设计如图3.3.3:

    图3.3.3 定时爬虫模块

    程序定时及爬虫管理脚本 TimerAdmins.py

    import multiprocessing
    import time
    import pymongo
    from SpiderAdmin import CrawlAdmin
    from Log import LogUtils
    
    class ProcessingTest(multiprocessing.Process):
    
        host = ''       #目标IP
        port = 0        #端口号
    
        def __init__(self,sleep):
            multiprocessing.Process.__init__(self)
            self.sleep=sleep
            self.ConfigDB='Config'
            self.ConfigTdb='timer'
    
        #程度运行
        def run(self):
            log = LogUtils()
            client = pymongo.MongoClient(host=self.host, port=self.port)
            db = client[self.ConfigDB]
            table = db[self.ConfigTdb]
            while True:
                ''' 得到当前时间戳'''
                times=time.time()
                '''得到当前时间戳去小数'''
                tim=int(str(times).split('.')[0])
                '''得到当前日期'''
                date=tim//86400
                '''从数据库查询日期'''
                info=table.find_one({"config": "timer"})
                print('data----------------------->'+str(date ))
                dateInfo=-1
                '''如果数据库没有记录则保存一下'''
                if info==None:
                    print('没有数据')
                    log.I('TimerAdmins','第一次运行数据库里没有数据')
                    table.insert({"config": "timer","time":date})
                    p = CrawlAdmin(1)
                    p.start()
                    print("已经启动爬虫模块")
                    log.I('TimerAdmins', '已经启动爬虫模块')
                    time.sleep(self.sleep)
    
                else:
                    '''
                    如果数据库有记录则对比上面获取的当前日期
                    '''
                    print(info)
                    dateInfo=int(info['time'])
                    ''' 如何当前日期大于数据库日期 '''
                    print("------------------------"+str(dateInfo))
                    if date>dateInfo:
                        timers=tim%86400
                        print('timers'+str(timers))
                        if date-dateInfo==1:
                            if timers>21600:
                                info['time']=date
                                table.save(info)
                                p=CrawlAdmin(1)
                                p.start()
                                print("已经启动爬虫模块---")
                                log.I('TimerAdmins', '已经启动爬虫模块')
                        else:
                            info['time'] = date-1
                            table.save(info)
                            p = CrawlAdmin(1)
                            p.start()
                            print("已经启动爬虫模块---")
                            log.I('TimerAdmins', '已经启动爬虫模块')
                        time.sleep(self.sleep)
                    else:
                        print('数据已是最新,不用更新')
                        log.I('TimerAdmins', '数据已是最新,不用启动爬虫模块更新')
                        time.sleep(self.sleep)
    
    if __name__ =="__main__":
        print('时间管理员开始运行')
        p=ProcessingTest(900)
        p.start()
        print(p.pid)
    

    scrapy爬虫模块设计如图 3.3.4:

     

    图3.3.4 Scrapy爬虫模块类和接口设计

    3.3.4 日志模块

    日志模块设计如图 3.3.4:

    图3.3.4 日志接口类图

    算法及源码设计如下:

    import pymongo
    import time
    import traceback
    class  LogUtils():
      
        host = ''      #目标主机IP
        port = 0      #端口号
    
        def __init__(self):
            self.LogDB='Log'
            self.Table=''
            self.client=pymongo.MongoClient(host=self.Host,port=self.port)
            self.db=self.client[self.LogDB]
    
        '''
        普通日志信息
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def InfoLog(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'Info','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
    
        '''
        普通日志信息 的重载方法  简便写法
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
    
        def I(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'Info','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
    
        '''
        错误日志信息 
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def ErrorLog(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'Error','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
        '''
        错误日志信息 的重载方法  简便写法
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def E(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'Error','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
    
        '''
        调试日志信息 
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def DeBugLog(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'DeBug','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
        '''
        调试日志信息 的重载方法  简便写法
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def D(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'DeBug','time':OtherStyleTime})
            except:
                traceback.print_exc()
    
    
    

    3.3.5 数据处理

    数据处理脚本文件 ToHeavy.py

    数据去重设计如图 3.3.5:

    图3.3.5 数据去重接口和类图

    数据去重算法说明:根据表名查询数据库对应的表,获取该条事件过去三天所有数据,对事件名分词,如果事件名与过去三天的事件记录相似度超过65%,标记为重复数据,flag赋值为0。

    import jieba
    from datetime import *
    from pymongo import MongoClient
    import time
    from OperatingDB import OperatingDB
    
    
    def connDB(ip, port, tableName, base):
        db = OperatingDB(ip, port)
        table = db.createTable(tableName, base)
        return table
        
    
    #得到过去三天的日期(以字符串形式添加到列表)
    def past_three_days(time, daynum, pastday_lit):
        date_time = datetime.strptime(time, '%Y-%m-%d')
        for i in range(daynum):
            pastday = date_time - timedelta(i)
            strpastday = datetime.strftime(pastday, '%Y-%m-%d')
            pastday_lit.append(strpastday)
    
    #查询过去三天的数据
    def pastThreeDayData(table, pastday_lit):
        past_one_day = {}
        past_two_day= {}
        past_three_day = {}
        key = '开始日期'
    
        past_one_day[key] = pastday_lit[0]
        past_two_day[key] = pastday_lit[1]
        past_three_day[key] = pastday_lit[2]
    
        data = table.find({'$or':[past_one_day, past_two_day, past_three_day]})
        title_lit = []
        for i in data:
            title_lit.append(i['事件名称'])
     
        return title_lit
        
    
    #返回 flag,如果 flag = 0,则表示是重复数据   
    def toheavy(table, title, titles):
        
        #对标题分词处理
        title_Participle = jieba.lcut(title)
        
        for title in titles:
            count = 0
            title_tmp = jieba.lcut(title)
            for i in title_Participle:
                if i in title_tmp:
                    count += 1
            frequency = count/len(title_Participle)*100
            if(frequency > 65):
                print('相似度超过65%, 去重')
                flag = 0
    
        if flag == 1:
            print('数据无重复')
        return flag
    

    3.3.6 数据建模

    3.3.6.1 聚类算法

    数据建模说明:我们采用机器学习算法的无监督学习算法,对原始数据建立分类模型, 使用聚类分析算法来对数据进行建模。

    数据说明:在我们抓取到的数据中有关于热度的字段,例如下图的中国会展门户网站的一条数据,有关注指数的数据字段,可是单凭原始数据却无法判断所属热度的级别,无法直接划分热度级别。

    中国会展门户数据如图3.3.6.1:

    图3.3.6.1 中国会展门户数据图

    K-Means 聚类算法说明:在具体的聚类算法中我们采用K-Means聚类算法,对数据建模,将事件热度分为三类,既聚类热度级别为 1、2、3。K-Means算法是基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,既认为两个对象的距离越近,相似度就越大。度量样本之间的相似性使用的是欧氏距离,公式如图 3.3.6.2:

    图3.3.6.2 欧氏距离公式图

    具体算法描述如图 3.3.6.3:

    图3.3.6.3 算法描述

    聚类算法流程如图 3.3.6.4:

    图 3.3.6.4 聚类算法流程图

    建模程序设计及算法说明: KMeans.py 聚类算法文件。

    聚类算法设计接口如图 3.3.6.5:

    图3.3.6.5 聚类算法设计接口和类图

    K-Means聚类算法设计源码如下:

    #-*- coding: utf-8 -*-
    import pandas as pd
    from sklearn.cluster import KMeans
    import xlrd
    import openpyxl
    import matplotlib.pyplot as plt
    
    class Kmeans:
        '''数据聚类'''
    
        k = 3                   #聚类的类别数(内置)
        iteration = 500         #聚类最大循环次数(内置)
        jobs = 4                #设置并发数(内置)
    
        def readData(self, inputfile):
            '''从磁盘读取数据'''
            self.inputfile = inputfile
            #读取数据
            data = pd.read_excel(self.inputfile)
            # 去掉无用字段
            data.drop(['事件名称','开始时间'], 1, inplace=True)
            return data
    
        def writeData(self, outputfile, data):
            '''写入文件'''
            self.outputfile = outputfile
            data.to_excel(self.outputfile)
    
    
        def KMeansCompute(self, data):
            '''K-Means聚类计算'''
              
            #数据标准化
            data_zs = 1.0 * (data - data.mean())/data.std()
    
            #分析为K类, 并发数4
            model = KMeans(n_clusters = self.k, n_jobs = self.jobs, max_iter = self.iteration)
            model.fit(data_zs)  #开始聚类
    
            r1 = pd.Series(model.labels_).value_counts()
            r2 = pd.DataFrame(model.cluster_centers_)   #找出聚类中心
          
            r = pd.concat([r2, r1], axis = 1)   #横向连接
            r.columns = list(data.columns) + ['类别数目']
            
            #详细输出
            r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1)
            r.columns = list(data.columns) + ['聚类类别']   #重命名表头
            
            return r
    

    聚类完成后,根据事件的主办方级别、主办方类型及影响范围属性对聚类热度进行加权,得到热度属性。

    3.3.6.2 搜索引擎收录数

    在抓取其他数据源的时候会遇到热度相关字段的缺失,搜索引擎收录数一定程度上映射了事件的热度属性,既越热门的事件收录数越多,我们对百度搜索引擎事件收录数进行量化,根据事件的主办方级别、主办方类型及影响范围属性对聚类热度进行加权值来得出该事件的热度值。

    获取搜索引擎收录数文件:GetSearchEngineResult.py

    import re
    import requests
    
    class GetSearchEngineResult:
    #获取百度搜索搜索引擎结果数
        def getHTMLText(self, url):
            try:
                r = requests.get(url, timeout = 10, headers = {'user-agent' : 'Mozilla/5.0'})
                r.raise_for_status()
                return r.text
            except:
                print("解析百度结果异常")
    
        def getBaiduResult(self, title):
            baseURL = 'http://www.baidu.com/'
            url = baseURL + 's?' + 'wd=' + title
    
            html = self.getHTMLText(url)
            regex = r'百度为您找到相关结果.*?个'
            numRegex = r'[0-9]'
            data = re.search(regex, html)
            heatStr = ''
            if data:
                num = re.findall(numRegex, data.group())
                for i in num:
                    heatStr += i
            heat = self.getBaiduHeat(eval(heatStr))
    
            return heat
                 
    
    
    
     
    
    
        
    
    

    3.3.7 事件画像

    3.3.7.1 事件画像系统设计

    事件画像系统集成了事件画像管理脚本、数据样本初始化、事件样本输出、数据建模、事件画像等功能。事件画像系统调用数据建模模块,提取各类事件的属性,生成事件样本。
    事件画像系统设计如图 3.3.7.1:

    图 3.3.7.1事件画像系统设计图

    3.3.7.2事件画像

    事件画像模块的主要类是实体类、数据访问接口和功能类。

    实体类保存了事件的基本属性数据,访问接口连接数据库,功能类 对事件提取属性。

    事件画像设计及接口类如图 3.3.7.2:

    图 3.3.7.2 事件画像模块接口和类图

    3.3.8 可视化展示

    我们使用阿里的DataV做可视化展示,通过DataV建立云端数据库的连接,实现数据流映射到DataV。从而生成数据大屏。

    可视化展示预览图如图 3.3.8:

    图 3.3.8 数据大屏

    3.4数据库设计

    3.4.1 数据库说明

    考虑到程序的稳定性和团队协同工作等特性,我们将数据库部署在云服务器,实现了实时访问、高性能、高扩展性等特点。

    数据库软件:MongoDB
    建立的数据库名称: Spider、Config、DataV、Log
    存储爬虫抓取的数据: Spider
    系统配置数据库: Config
    存储可视化展示数据的库: DataV
    存储日志数据: Log

    3.4.2 数据库操作

    将对数据库的操作封装为一个模块。各个模块都要进行数据的存储,将数据的存储单独划分出来做成一个模块的好处是显而易见的,实现了系统模块间的弱耦合,方便数据的写入、读取等操作。

    ** ** ConnectMongoDB.py 功能:连接mongodb数据库

    连接数据库接口源码:

    from pymongo import MongoClient
    
    class ConnectMongo:
        '''连接数据库'''
    
        client = None
        
        # ipaddr:IP地址, port:端口号
        def connect(self, ipaddr, port):    #建立连接
            self.client = MongoClient(ipaddr, port)
    
        def close(self):                      #关闭连接
            return self.client.disconnect()
        
        def getConn(self):                  #返回连接
            return self.client
    
            
    
    
    

    OperatingDB.py 功能:封装了对数据库的操作,创建表\集合、插入数据、删除数据、查询数据、关闭数据库连接。

    from ConnectMongoDB import ConnectMongo
    
    class OperatingDB:
        
        '''操作Mongodb数据库'''
      
        def __init__(self, ipaddr, port):
            conn = ConnectMongo()
            conn.connect(ipaddr, port)
            self.client = conn.getConn()
    
        #tableName:表名, base:数据库名
        def createTable(self, tableName, base):
            '''创建数据库和表'''
            self.crawl = self.client[base]
            self.table = self.crawl[tableName]
            return self.table
    
        #data:插入的数据
        def insertDatas(self, data):
            self.table.insert(data)
                  
        def deleteData(self, data):
            '''删除数据'''
            self.table.remove(data)
        
        #q:查询条件,projecttion:查询字段。
        def query_one(self, q = {}, projection = {'_id' : 0}):
            '''查询一条数据'''
            return self.table.find_one(q, projection)
            
        def query(self, q = {}, projection = {'_id' : 0}):
            '''查询数据'''
            return self.table.find(q, projection)
    
        def closeConn(self):
            '''关闭连接'''
            self.client.close()
            
    

    3.4.3数据库结构

    由于NoSQL型数据库不同于传统的关系型数据库,在建立表结构、索引这些操作时没有像关系型的关联、约束等关系。结构设计也相对简单。

    数据库设计如下表

    数据库
    Spider CityWeather
      DamaiConcert
      DamaiSports
      JuchengConcert
      WaringWeahter
      XishiquSports
      YongleConcert
      YongleSports
      cnena
      eshow
      people
      trafficcontrol
      xinhuanet
      XishiquConcert
    Config timer
    Log CityWeather
      ConcertAttr
      CrawlAdmin
      DaMaiPW
      DaMaiWang
      EventPortraitAdmin
      ExhibitionAttr
      JuChenSpider
      SportAttr
      TimerAdmins
      WarningCrawl
      XishiquConcert..
      XishiquSports
      people
      xinhuanet
      yonglePW
    DataV DataV

    3.4.4 表结构

    MongoDB 将数据存储为一个文档/表,数据结构由键值(key=>value)对组成。MongoDB 文档/表类似于 JSON 对象。数据库各个表字段设计如下。

    数据库:Spider

    表名:CityWeather

    字段名 中文描述 数据类型
    city 城市名 String
    high 最高气温 String
    fengxiang 风向 String
    low 最低气温 String
    fengli 风力 String
    type 天气类型 String
    date 日期 String
    Wendu 温度 String
    Status 状态 String

    表名:DamaiConcert、JuchengConcert、YongleConcert

    字段名 数据类型
    事件名称 String
    举办城市 String
    举办场馆 String
    开始日期 String
    结束日期 String
    门票价格 String
    事件类型 String

    表名:DamaiSports

    字段名 数据类型
    事件名称 String
    举办城市 String
    举办场馆 String
    开始日期 String
    结束日期 String
    事件类型 String

    表名:Longitudes

    字段名 数据类型
    城市 String
    经度 String
    维度 String

    表名:WaringWeather

    字段名 数据类型
    事件名称 String
    发布时间 String
    预警城市 String
    预警类型 String
    预警详情 String

    表名:XishiquConcert、XishiquSports

    字段名 数据类型
    事件类型 String
    事件名称 String
    开始日期 String
    场馆 String
    举办城市 String
    结束日期 String
    累计成交 String
    关注人数 String
    详细热度 String

    表名:YongleSports

    字段名 数据类型
    事件名称 String
    举办场馆 String
    举办城市 String
    开始日期 String
    结束日期 String
    类型 String
    事件类型 String

    表名:cnena

    字段名 数据类型
    事件类型 String
    事件名称 String
    关注指数 String
    开始日期 String
    结束日期 String
    展会地点 String
    组织机构 String
    展会概况 String
    概览范围 String
    举办城市 String
    聚类热度 String

    表名:eshow

    字段名 数据类型
    事件类型 String
    标签 String
    事件名称 String
    开始日期 String
    结束日期 String
    举办展馆 String
    所属行业 String
    举办城市 String
    承办单位 String
    展会面积 String
    举办届数 String
    举办周期 String
    参观费用 String
    展会概况 String
    事件频率 String

    表名:people

    字段名 数据类型
    事件类型 String
    事件名称 String
    关键词 String
    来源 String
    描述 String
    开始日期 String
    会议内容 String

    表名:trafficcontrol

    字段名 数据类型
    事件类型 String
    事件名称 String
    内容 String
    开始日期 String

    表名:xinhuanet

    字段名 数据类型
    事件类型 String
    事件名称 String
    关键词 String
    开始日期 String
    会议内容 String

    数据库:Config

    表名:timer

    字段名 中文描述 数据类型
    _id ID号 ObjectId
    config 配置信息 String
    timer 时间 Date

    数据库:Log

    表名:CityWeather、ConcertAttr、CrawlAdmin、DaMaiPW、EventPortrait、EventPortraitAdmin、

    ExhibitionAttr、JuChenSpider、SportAttr、TimerAdmin、WarngingCrawl、XishiquConcert、XishiquSports、people、xinhuanet、yonglePW。

    字段名 中文描述 数据类型
    _id ID号 ObjectId
    logInfo 日志信息 String
    Grade 报错信息 String
    Time 时间 String

    数据库:DataV

    表名:DataV

    字段名 数据类型
    _id ObjectId
    热度 int
    行业性质 String
    影响人群 String
    最大影响范围 String
    事件类型 String
    影响商务和群众占比 String
    组织性质 String

     

    展开全文
  • 【软件工程】——详细设计说明

    万次阅读 多人点赞 2020-07-11 07:51:35
    该文档在概要设计的基础上,进一步的细化系统结构,展示了软件结构的图标,物理设计、数据结构设计、及算法设计、详细的介绍了系统各个模块是如何实现的,包括涉及到的算法,逻辑流程等。 预期的读者:程序员 1.2...
  • 一、软件需求说明书 1引言 2 1.1编写目的 2 1.2背景 2 1.3定义 2 1.4参考资料 2 2任务概述 2 2.1目标 2 2.2用户的特点 3 2.3假定和约束 3 3需求规定 3 3.1对功能的规定 3 3.2对性能的规定 3 3.2.1精度 ...
  • 概要设计和详细设计说明书的区别

    万次阅读 2015-04-21 10:16:07
    概要设计--产生软件概要设计说明书,说明系统模块划分、选择的技术路线等,整体说明软件的实现思路。并且需要指出关键技术难点等。   3.详细设计--产生软件详细设计说明书,对概要设计的进一步细化,一般由各部
  • 图书馆管理系统设计说明

    万次阅读 2014-11-06 13:05:14
    软件设计说明书 文档编号:QY2014007-LY7 文档信息:图书馆信息管理系统软件设计说明书 文档类别:管理文档 密 级:机密 版本信息:1.0 建立日期:2014-05-20   创 建 人: 审 核 者: 批 准 人:...
  • 数据库设计说明

    万次阅读 热门讨论 2013-12-05 14:30:11
    数据库设计说明书 1引言 1.1编写目的  数据库的设计是为了以后编码、测试以及维护阶段的后台数据的存储做准备。应用于系统开发前期,为后期数据库设计指引方向。  预期的读者:系统开发人员、系统测试...
  • APP设计说明书概述

    万次阅读 2016-02-27 09:37:39
    文档说明 本文档描述的是某某某APP各页面的显示内容和功能要求。 APPV1.0更新说明 APP页面全部重新设计某页面的Banner某明细页面我的等级页面常见问题页面通知栏用户数据统计...注册页设计说明 填写手机号码校
  • 软件设计说明书模板

    万次阅读 2018-12-29 09:46:48
    软件项目的设计说明书是软件开发测试中重要的环节,一份好的设计说明不仅可以为系统设计、开发、测试提供指导,还可以收获研发领导、甲方、技术合作交流人员的信任。 设计模板 封面 包含系统项目名、版本、时间等 ...
  • 转自:https://www.cnblogs.com/peizhe123/p/5511505.html 一、软件需求说明...
  • 银行账户管理系统详细设计说明

    万次阅读 多人点赞 2019-07-28 17:36:57
    银行账户管理系统详细设计,附源码于博主的GitHub个人主页中。
  • 正确编写概要设计说明

    千次阅读 2016-04-22 14:36:46
    在需求明确、准备开始编码之前,要做概要设计,而详细设计可能大部分公司没有做,有做的也大部分是和编码同步进行,或者在编码之后。因此,对大部分的公司来说,概要设计文档是唯一的设计文档,对后面的开发、测试、...
  • 软件概要设计说明书—模板

    万次阅读 2015-07-30 13:41:34
    1 引言 1.1 目的 介绍编写本文档的目的,主要内容及读者。 1.2 需求概述 描述所要实现的功能和性能等。... 需求规格说明书; d. 文档所引用的资料、标准和规范。列出这些资料的作者、标题、编
  • 到底该如何书写概要设计说明

    千次阅读 热门讨论 2013-12-28 21:56:14
    一、概要设计的目的  1.将软件系统需求转换为未来系统的设计;  2.逐步开发强壮的系统构架;  3.使设计适合于实施环境,为提高性能而进行设计;  4.结构应该被分解为模块和库。 二、概要设计的任务  1.制定规范...
  • 详细设计说明书编写规范

    千次阅读 2015-06-27 21:23:23
     使项目详细设计说明书的编写规范化,从而规范软件管理。 尽可能详细地描述程序的各成份的设计考虑,以利于编制程序。  [此处加入编写目的]  1.2 背景  说明该软件系统名称,开发者,详细设计原则和方案  ...
  • 概要设计说明

    千次阅读 2016-04-22 15:20:59
    一、概要设计的目的  将软件系统需求转换为未来系统的设计;  逐步开发强壮的系统构架;  使设计适合于实施环境,为提高性能而进行设计;  结构应该被分解为模块和库。 二、概要设计的任务  制定规范: ...
1 2 3 4 5 ... 20
收藏数 1,368,167
精华内容 547,266
关键字:

设计说明