- VTK用户指南 版本4.0 William J. Schroeder 1998-2000 第一部分 VTK 介绍 第1章 欢迎 机构-----------------------------------------------------------------------------------------------8 怎样使用VTK----------------------------------------------------------------------------------8 附加资源-----------------------------------------------------------------------------------------8 第2章 安装 2.1 概述-----------------------------------------------------------------------------------------------9 2.2 安装VTK到Windows9x/NT/ME/2000/XP------------------------------------------------9 二进制安装-------------------------------------------------------------------------------------9 源代码安装-------------------------------------------------------------------------------------9 2.3 安装VTK到Unix操作系统 源代码安装------------------------------------------------------------------------------------10 运行CMake------------------------------------------------------------------------------------11 编译源代码 建立VTK多平台 安装VTK 第3章 系统概述 3.1 系统设计---------------------------------------------------------------------------------------12 图形模型--------------------------------------------------------------------------------------13 可视化模型-----------------------------------------------------------------------------------15 3.2 创建一个应用---------------------------------------------------------------------------------19 用户方法、对象和命令--------------------------------------------------------------------19 Tcl----------------------------------------------------------------------------------------------19 C++---------------------------------------------------------------------------------------------20 Java Phthon Visual Basic/COM/ActiveX 3.3 在两种语言间转换 第二部分 通过例子学习VTK 第4章 基础 4.1 创建1个简单的模型-------------------------------------------------------------------------24 程序化源对象---------------------------------------------------------------------------------24 读取源对象------------------------------------------------------------------------------------26 4.2 使用VTK交互器-----------------------------------------------------------------------------27 vtk绘制窗口交互器 交互风格 4.3 滤波数据---------------------------------------------------------------------------------------29 4.4 控制相机---------------------------------------------------------------------------------------30 安装相机 简单操作方法 控制视角方向 透视与正交视 保存与恢复相机状态 4.5 控制光线---------------------------------------------------------------------------------------32 位置光 4.6 控制3D道具-----------------------------------------------------------------------------------32 指定vtk道具3D位置 演员 演员的详细级 装配 体 vtk装载3D道具 4.7 作用纹理---------------------------------------------------------------------------------------37 4.8 拾取---------------------------------------------------------------------------------------------38 vtk装配路线 例子 4.9 vtk坐标和坐标系---------------------------------------------------------------------------40 4.10 控制vtk演员2D----------------------------------------------------------------------------41 4.11 注释--------------------------------------------------------------------------------------------41 2D注释 3D注释和vtk跟踪 4.12 特殊绘图类-----------------------------------------------------------------------------------44 尺度棒 X-Y绘制 边界盒轴 标记数据 4.13 变换数据--------------------------------------------------------------------------------------48 高级变换 第5章 可视化技术 5.1 可视化VTK数据集vtkDataSet(和子类) -------------------------------------------------50 使用数据属性进行工作 颜色映射 轮廓化 浮雕化 流线图 流线表面 剪裁 融合数据 附加数据 用另外一个尺度给等值面赋颜色 抽取单元格子集 抽取单元格作为多边形数据 5.2 可视化多边形数据---------------------------------------------------------------------------67 手工产生多边形数据 产生表面当量 十比一抽取 平滑网格 粘贴数据 产生纹理坐标 5.3 可视化结构网格-----------------------------------------------------------------------------74 手工产生结构化网格 抽取计算平面 结构网格子样化 5.4 可视化直线网格-----------------------------------------------------------------------------76 手工产生VTK直线网格 抽取计算平面 5.5 可视化非结构网格--------------------------------------------------------------------------77 手工产生VTK非结构网格 抽取部分网格 非结构网格轮廓化 第6章 可视化图像和体数据 6.1 VTK结构化点的历史表示-----------------------------------------------------------------80 6.2 手工产生VTK图像数据-------------------------------------------------------------------80 6.3 抽取图像数据子样--------------------------------------------------------------------------81 6.4 基于尺度值的弯曲--------------------------------------------------------------------------83 6.5 图像显示--------------------------------------------------------------------------------------83 图像观察者 图像演员 6.6 图像源-----------------------------------------------------------------------------------------85 2D帆布图像源 3D椭圆体图像源 高斯图像源 网格图像源 噪声图像源 正弦曲线源 6.7 图像处理--------------------------------------------------------------------------------------88 梯度化 高斯平滑 直方图 图像逻辑 重新切片 6.8 体绘制-----------------------------------------------------------------------------------------92 一个简单的例子 为什么会有多种体绘制技术? 产生一个VTK体 使用片层化函数 使用颜色变换函数 在一个体属性中控制颜色和透明度 在一个体属性中控制阴影 产生一个体映射 裁剪一个体 粘贴一个体 对一个体应用3D纹理 控制标准编码 体素光线计算 2D纹理映射 VolumePro绘制硬件 速度和精确度交替使用 使用vtkLODProp3D改善性能 可行性/局限性技术 第7章 建立模型 7.1 隐模型----------------------------------------------------------------------------------------114 定义隐函数 对隐函数进行抽样 7.2 挤压-------------------------------------------------------------------------------------------117 7.3 构建表面-------------------------------------------------------------------------------------119 Delaunay三角形化 高斯油彩 无组织点产生表面 第三部分 VTK研发者指南 第8章 数据接口和其他 8.1 读入器----------------------------------------------------------------------------------------130 多边形数据读入器 图像和体素读入器 数据集读入器 结构化网格读入器 线性网格读入器 非结构化网格读入器 8.2 写入器----------------------------------------------------------------------------------------131 多边形数据读入器 图像和体素读入器 结构化网格读入器 线性网格读入器 非结构化网格读入器 8.3 输入者----------------------------------------------------------------------------------------132 8.4 输出者----------------------------------------------------------------------------------------132 8.5 创建硬拷贝----------------------------------------------------------------------------------132 保存图像 保存大(高分辨率)图像 8.6 产生动画(使用样条) -----------------------------------------------------------------------134 8.7 使用现场数据工作--------------------------------------------------------------------------136 第9章 贡献编码 9.1 编码补偿--------------------------------------------------------------------------------------141 为VTK贡献编码的条件 编码风格 如何贡献编码 9.2 标准方法: 创建和消除对象---------------------------------------------------------------142 9.3 拷贝对象和受保护的方法------------------------------------------------------------------143 9.4 写一个VTK类: 综述-----------------------------------------------------------------------144 找到一个相似类 识别一个超类 单个类Per.h 文件 必需的方法 文档编码 使用SetGet宏 向VTK中添加类 9.5 对象工厂--------------------------------------------------------------------------------------145 综述 如何写一个工厂 如何安装一个工厂 例子工厂 第10章 流水线执行管理 10.1 执行过程--------------------------------------------------------------------------------------151 概述和术语 更新信息通道 传播更新扩展通道 触发异步更新通道 更新数据通道 10.2 使用流---------------------------------------------------------------------------------------162 第11章 VTK数据对象接口 11.1 数据组---------------------------------------------------------------------------------------166 方法 11.2 数据集---------------------------------------------------------------------------------------169 11.3 VTK数据集接口---------------------------------------------------------------------------170 方法 例子 11.4 VTK图像数据接口-----------------------------------------------------------------------174 方法 例子 11.5 VTK点集接口-----------------------------------------------------------------------------176 方法 例子 11.6 VTK结构化网格接口---------------------------------------------------------------------178 方法 例子 11.7 VTK线性网格接口-----------------------------------------------------------------------178 方法 例子 11.8 VTK多边形数据接口---------------------------------------------------------------------179 方法 例子 11.9 VTK非结构化网格接口-----------------------------------------------------------------184 方法 例子 11.10 单元格接口(VTK单元格子类) ------------------------------------------------------185 11.11 其他接口----------------------------------------------------------------------------------187 点 单元格数组 单元格类型 单元格连接 11.12 现场和属性数据接口------------------------------------------------------------------193 现场数据方法 数据集属性方法 第12章 如何写一个过程方法 12.1 概述----------------------------------------------------------------------------------------196 永远不要修改输入数据 参考计数数据 使用Debug宏 回收/删除截入的内在 修改时间 过程事件和异常终止执行 12.2 如何写一个绘图过滤器---------------------------------------------------------------199 概述 简单过滤器 复杂过滤器和流水线执行 抽取绘图过滤器 程序过滤器 重载流水执行方法 12.3 如何写一个图像过滤器---------------------------------------------------------------210 实现一个图像过滤器 第13章 用窗口系统集成 13.1 绘制窗口交互风格--------------------------------------------------------------------------216 13.2 GUI交互的总指导线------------------------------------------------------------------------217 13.3 X Window, Xt, and Motif--------------------------------------------------------------------221 13.4 MS Windows/Microsoft Foundation Classes---------------------------------------------226 13.5 Tcl/Tk-------------------------------------------------------------------------------------------227 13.6 Java 第14章 编码资源 14.1 对象图表--------------------------------------------------------------------------------------230 基础 单元格 数据集 流水线 源 过滤器 映射器 图形 体绘制 成像 OpenGL绘制器 拾取 变换塔形结构 14.2 过滤器总结-----------------------------------------------------------------------------------237 可视化过滤器 映射者对象 演员对象 14.3 VTK文件格式--------------------------------------------------------------------------------244 二进制文件 数据集属性格式 例子 第15章 光盘 15.1 源代码 15.2 例子代码 15.3 Window 9x/NT/ME/2000/XP 预编译二进制 15.4 数据 15.5 文档 15.6 退化测试图像 15.7 Kitware 应用5 4252浏览会员免费
- Iris数据集 模式识别 模糊聚类 数据测试 比较完整的数据集4 1629浏览会员免费
- edp1.4协议 中文版本 非常难得0 9023浏览会员免费
- 提供了对人脸识别数据集(1)Youtube Face(2)LFW (Labeling Faces Wild)(3)CelebFaces(A)(4)MegaFace(5)CASIA WebFace的说明,及提供了下载方式4 1674浏览会员免费
- EasyHadoop集群部署入门文档 2 目录 2 1. 文档概述 3 2. 背景 3 3. 名词解释 4 4. 服务器结构 4 #Hadoop试验集群的部署结构 4 #系统和组建的依赖关系 5 #生产环境的部署结构 6 5. Red hat Linux基础环境搭建 6 #linux 安装 (vm虚拟机) 6 #配置机器时间同步 6 #配置机器网络环境 7 #配置集群hosts列表 10 #下载并安装 JAVA JDK系统软件 10 #生成登陆密钥 11 #创建用户账号和Hadoop部署目录和数据目录 11 #检查基础环境 12 6. Hadoop 单机系统 安装配置 13 #Hadoop 文件下载和解压 13 #配置 hadoop-env.sh 环境变量 13 #Hadoop Common组件 配置 core-site.xml 13 #HDFS NameNode,DataNode组建配置 hdfs-site.xml 14 #配置MapReduce - JobTracker TaskTracker 启动配置 15 #Hadoop单机系统,启动执行和异常检查 17 #通过界面查看集群部署部署成功 18 #通过执行 Hadoop pi 运行样例检查集群是否成功 19 #安装部署 常见错误 20 7. Hadoop 集群系统 配置安装配置 20 #检查node节点linux 基础环境是否正常,参考 [ linux 基础环境搭建]一节。 20 #配置从master 机器到 node 节点无密钥登陆 20 #检查master到每个node节点在hadoop用户下使用密钥登陆是否正常 21 #配置master 集群服务器地址 stop-all.sh start-all.sh 的时候调用 21 #通过界面查看集群部署部署成功 22 #通过执行 Hadoop pi 运行样例检查集群是否成功 24 8. 自动化安装脚本 25 #master 服务器自动安装脚本 25 Hive仓库集群部署入门文档 27 1. 名词解释 27 2. Hive的作用和原理说明 27 #数据仓库结构图 27 #Hive仓库流程图 27 #hive内部结构图 27 3. Hive 部署和安装 27 #安装Hadoop集群,看EasyHadoop安装文档。 27 #安装Mysql,启动Mysql,检查gc++包。 27 #解压Hive包并配置JDBC连接地址。 27 #启动Hive thrift Server。 27 #启动内置的Hive UI。 27 4. Hive Cli 的基本用法 28 #登陆查询 28 #查询文件方式 28 #命令行模式 28 5. HQL基本语法 (创建表,加载表,分析查询,删除表) 28 #创建表 28 6. 使用Mysql构建简单数据集市 29 #Mysql的两种引擎介绍 29 #创建一个数据表使用Hive cli 进行数据分析 29 #使用shell 编写Hsql 并使用HiveCli导出数据,使用Mysql命令加载到数据库中。 29 #使用crontab 新增每日运行任务定时器 29 7. 使用FineReport 数据展现数据 29 #安装FineReport,使用注册码! 29 #使用FineReport,快速展现数据报表。 29 #FineReport 的问题和局限 295 12浏览会员免费
- 第一章 起步篇 8 本章概述 8 书写本书的背景 8 运用本书 9 IDL所需的版本 9 IDL运行期间所需颜色的数量 9 本书的风格习惯 10 本书中所用的IDL程序和数据文件 12 获取更多的帮助 14 使用IDL命令 14 IDL命令解析 14 创建变量 17 使用IDL图形窗口 22 第二章 简单的图形显示 25 本章概述 25 IDL中简单的图形显示 25 创建线画图 25 定制线画图 28 改变线条的线型和粗细 28 用符号代替线条显示数据 29 用不同的颜色绘制线画图 31 限定线画图的范围 31 改变线画图的风格 32 在线画图上绘出多种数据集 34 在多个轴的图上显示数据 35 创建曲面图 36 定制曲面图 38 旋转曲面图 38 为曲面赋色 39 修改曲面图外观 40 创建阴影曲面图 41 改变阴影处理参数 41 用其它数据集为阴影处理提供参数 42 创建等值线图 43 选择等值线数目 45 修改等值线图 46 改变等值线图的外观 47 给等值线图赋色 48 创建填充的等值线图 49 在显示窗口定位图形输出 51 设置图形边缘 52 设置图形位置 52 设置图形区域 53 创建多个图形 53 给图形显示添加文本 57 找出可用字体的名称 58 用XYOutS命令添加文本 58 用矢量字体使用XYOut 59 排列文本 60 删除文本 61 改变文本的方向 61 给图形显示添加线和符号 61 图形显示添加色彩 62 第三章 图像数据处理 65 本章概要 65 图像处理 65 显示图像 65 调整图像数据 67 显示24位图像 69 控制图像显示顺序 70 改变图像尺寸 70 在显示窗口中定位图像 72 从显示器中读取图像 75 IDL中基本的图像处理 75 直方图均衡化 76 平滑图像 77 增强图像棱边 79 图像的频域滤波 80 第四章 图形显示技术 83 本章概要 83 IDL的颜色运用 83 使用索引颜色模式和RGB颜色模式 83 在24位显示设备上装载色谱表 88 获得色谱表的拷贝 88 修改和创建色谱表 89 保存自己的色谱表 90 创建自己的轴标注 91 调整轴刻度间隔 91 格式化轴的标注 92 用IDL处理残缺的数据 95 用IDL建立三维坐标系 97 建立三维散点图 97 从图形原点定位3D坐标轴 99 组合简单图形显示 100 IDL中的动画数据 102 建立动画工具 103 装载动画缓冲区 103 运行动画工具 103 动画的控制 103 存储动画的像素映射图 104 其它类型图形数据的动画 104 网格化数据以便图形显示 105 德洛内三角形法网格化 106 数据的球形网格化 108 第五章 图形显示技巧 110 本章概要 110 将光标用于图形显示 110 什么时候返回的光标位置? 110 哪一个鼠标键和光标共同作用呢? 111 用光标标注图形输出 111 在图像上使用Cursor命令 113 在循环中使用Cursor命令 113 从显示中删除注释 114 删除注释的异或法 114 删除注释的设备拷贝法 116 Z图形缓冲区中的图形显示技巧 120 Z图形缓冲区的实现 121 一个Z图形缓冲区实例:两个曲面 121 用Z图形缓冲区使图像变形 123 Z图形缓冲区中的透明效果 126 将Z图形缓冲区效果与体数据着色相结合 127 第六章 在IDL中读写数据 129 本章概要 129 打开文件进行读写 129 查找和选择数据文件 130 获取逻辑设备号 131 读写格式化数据 132 写自由格式文件 133 读写自由格式文件的实例 136 用确定的文件格式写入 139 从字符串中读取格式数据 141 读写非格式化数据 141 读取非格式化图像数据文件 142 写非格式化图像数据文件 142 非格式化数据文件的一些问题 144 用关联变量存取非格式化数据文件 144 读写常用文件格式的文件 147 创建彩色GIF文件 147 创建彩色JPEG文件 148 查询图像文件信息 150 第七章 图形硬拷贝输出 151 本章概要 151 选择图形硬拷贝输出设备 151 配置图形硬拷贝输出设备 152 常用的Device命令关键字 153 创建PostScript文件 154 将图形送到硬拷贝设备中 154 打印PostScript文件 155 在运行MacOS系统的计算机上打印PostScript文件 156 在Windows计算机上打印PostScript文件 156 生成封装的PostScript文件输出 156 封装PostScript图形的预览 157 生成彩色的PostScript输出 157 PostScript中的彩色图像与灰度图像 158 在PostScript设备上创建高质量的输出 159 显示设备和PostScript设备之间的相同点 159 显示设备与PostScript设备之间的不同点 159 在横向输出模式中计算PostScript的偏移量 172 用PS_Form配置PostScript设备 173 配置和使用打印设备 174 用打印设备定位图形 175 第八章 IDL编程基础 178 本章概述 178 编写IDL批处理文件 178 编写IDL主程序 179 过程和与函数中变量的作用范围 181 创建定位参数 181 定义可选的或必须的定位参数 182 定义关键字 183 创建输出型参数 186 编写IDL函数 189 方括号和函数的调用 190 使用程序控制语句 191 IDL中表达式的真和假 191 将多个语句处理成单个语句 192 If…Then…Else控制语句 192 条件表达式 194 FOR循环控制语句 194 WHILE循环控制语句 194 REPEAT...UNTIL 循环控制语句 194 CASE控制语句 195 GOTO控制语句 195 错误处理控制语句 196 编译和执行IDL程序模块 198 程序编译规则: 198 程序编译和自动运行规则 199 特殊编译命令 199 第九章 编写 IDL 程序 201 本章概述 201 基本的ImageBar程序 201 给程序ImageBar增加一个“先擦除”功能 205 向ImageBar程序增加颜色敏感功能 205 给ImageBar中的命令传递关键字 207 根据窗口大小改变字符大小 209 程序ImageBar的最终代码 210 在图形用户界面中包装ImageBar 211 第十章 编写简单的组件程序 212 本章概述 212 组件程序的结构 212 组件程序如何对事件作出反应 213 编写组件定义模块 213 定义和创建程序组件 214 在屏幕上实现组件 216 使绘图组件成为当前图形窗口 216 在绘图组件窗口上显示图形 216 保存程序运行时所需要的信息 216 创建事件循环和注册程序 217 运行程序 218 创建无阻塞组件程序 219 编写事件处理模块 219 事件结构中的公共字段 219 事件处理函数 220 将事件处理程序和组件联系起来 221 编写Quit按钮的事件处理程序 222 编写改变图形窗口大小的事件处理程序 223 进行小量地修改 224 添加颜色敏感 224 采用更高效的内存管理 225 第十一章 组件编程技巧 229 本章概述 229 改变颜色表 229 保护公共块 230 一个可选择颜色表的工具 230 指定Group Leader 233 给组件程序增加Group Leader 234 在24位显示器上改变颜色表 235 在组件程序中使用指针 237 使用Cleanup过程防止内存泄露 238 使用伪事件进行程序通信 239 创建一个具有“记忆功能”的程序 240 保护组件程序的颜色 243 通过组件跟踪事件来保护颜色 244 通过绘图组件事件来保护颜色 245 保存或者发布程序的图形 245 第十二章 对话框程序 249 本章概述 249 创建模式对话框 249 阻塞的组件程序 249 模式组件程序 250 编写模式对话框的定义模块 250 编写模式对话框的事件处理模块 254 测试模式对话框程序 255 创建非模式的对话框 256 编写非模式对话框程序 256 编写非模式对话框的事件处理模块 258 测试非模态对话程序 259 附录A 组件的事件结构 261 事件结构的定义 261 公共字段的定义 261 基本组件的事件结构 261 base组件 261 按钮组件 261 绘图组件 262 下拉式列表组件 262 标签组件 262 列表组件 262 滑动条组件 262 表单组件 263 文本组件 264 复合组件的事件结构 265 CW_Animate 265 CW_Arcball 265 CW_BGroup 265 CW_Clr_Index 265 CW_Color_Sel 265 CW_DefROI 266 CW_Field 266 CW_Form 266 CW_Flisder 266 CW_Orient 266 CW_PDMenu 266 CW_RGBSlider 266 CW_Zoom 267 组件程序的事件结构 267 Xcolors 267 其他组件的事件结构 267 键盘焦点事件 267 组件退出请求事件 267 组建计时器事件 268 组件跟踪事件 268 附录B 数据文件描述 2695 1044浏览会员免费
- arcgis大小:5MB目 录 1 ArcGIS 简介 ..................................................................................................................................4 1.1 安装说明.............................................................................................................................4 1.1.1ArcView(单用户使用许可)的安装 ....................................................................4 1.1.2ArcGIS(浮动使用许可)的安装 ..........................................................................5 1.2 ArcGIS 体系结构 ...............................................................................................................6 1.2.1 服务器端..................................................................................................................7 1.2.2 客户端......................................................................................................................7 2 数据格式的转换.........................................................................................................................11 2.1 e00 格式转换成其他格式................................................................................................11 2.2 CAD 格式转换成 Geodatabase........................................................................................12 3 数据的显示和查询......................................................................................................................13 3.1 数据的打开和显示...........................................................................................................13 3.1.1 数据的打开............................................................................................................13 3.1.2 数据视图和版面视图............................................................................................14 3.1.3 图层、数据集、地图............................................................................................15 3.1.4 管理内容表............................................................................................................16 3.1.5 修改符号属性........................................................................................................16 3.1.6 符号的定制............................................................................................................18 3.1.7 标记要素................................................................................................................19 3.1.8 自动标记要素........................................................................................................21 3.1.9 设置显示阀值........................................................................................................22 3.2 数据的选择与查询...........................................................................................................23 3.2.1 设置可选图层........................................................................................................23 3.2.2 属性选择查询........................................................................................................24 3.2.3 空间选择查询........................................................................................................25 3.2.4 查询结果的保存....................................................................................................26 3.2.5 创建查询结果的统计............................................................................................27 4 数据的编辑..................................................................................................................................28 4.1 编辑环境...........................................................................................................................28 4.1.1 Editor 工具条.........................................................................................................28 4.1.2 开始和结束编辑会话............................................................................................28 4.1.3 选取、拖动和旋转要素........................................................................................28 4.2 创建新要素.......................................................................................................................29 4.2.1 创建线要素............................................................................................................29 4.3 编辑存在要素...................................................................................................................30 4.3.1 编辑节点................................................................................................................30 4.3.5 要素的合并............................................................................................................31 4.3.6 要素的延伸和裁剪.............................................................................................31 4.4 编辑属性........................................................................................................................31 4.4.1 查看属性.............................................................................................................31 4.4.2 添加和修改属性.................................................................................................32 4.4.3 复制和粘贴属性.................................................................................................32 4.5 空间配准...........................................................................................................................33 4.5.1 使用地理参考工具栏............................................................................................33 5 数据的管理..................................................................................................................................34 5.1 内容标签...........................................................................................................................34 5.2 预览标签...........................................................................................................................35 5.3 元数据标签.......................................................................................................................36 5.4 设置显示数据类型...........................................................................................................36 5.5 创建新 ShapeFile 等.........................................................................................................37 6 制图与输出.................................................................................................................................38 6.1 地图输出..........................................................................................................................38 6.2 矢量数据的获取,从纸质地图到矢量地图 ..................................................................39 7 空间数据处理..............................................................................................................................43 7.1 坐标系统..........................................................................................................................43 7.2 投影的实质......................................................................................................................46 7.3 投影分类..........................................................................................................................47 7.4 GIS 中的地图投影 ...........................................................................................................48 7.5 投影变换..........................................................................................................................52 7.6 实例一:影像配准和坐标系转换 ..................................................................................52 7.7 实例二:矢量数据的校准、匹配。 ..............................................................................53 8 3D 分析.....................................................................................................................................54 Exercise 1:Draping an image over a terrain surface.............................................................54 专题一:TIN 与 DEM ...........................................................................................................55 Exercise 2:Visualizing contamination in an aquifer.............................................................57 专题二:如何将 2D Feature 显示为 3D ...............................................................................57 Exercise 3:Visualizing soil contamination and thyroid cancer rates ....................................57 专题三:空间内插方法.........................................................................................................58 Exercise 4:Building a TIN to represent terrain.....................................................................59 专题四:创建 TIN .................................................................................................................60 Exercise 5:Working with animations in ArcScene ...............................................................61 专题五:三维动画制作.........................................................................................................61 9 空间分析模块.............................................................................................................................63 9.1 空间分析简介..................................................................................................................63 9.2 显示数据和功能简介......................................................................................................64 9.3 选址分析..........................................................................................................................65 9.4 最佳路径..........................................................................................................................66 9.5 如何获得连续的栅格数据..............................................................................................67 9.6 其他功能..........................................................................................................................67目 录 1 ArcGIS 简介 ..................................................................................................................................4 1.1 安装说明.............................................................................................................................4 1.1.1ArcView(单用户使用许可)的安装 ....................................................................4 1.1.2ArcGIS(浮动使用许可)的安装 ..........................................................................5 1.2 ArcGIS 体系结构 ...............................................................................................................6 1.2.1 服务器端..................................................................................................................7 1.2.2 客户端......................................................................................................................7 2 数据格式的转换.........................................................................................................................11 2.1 e00 格式转换成其他格式................................................................................................11 2.2 CAD 格式转换成 Geodatabase........................................................................................12 3 数据的显示和查询......................................................................................................................13 3.1 数据的打开和显示...........................................................................................................13 3.1.1 数据的打开............................................................................................................13 3.1.2 数据视图和版面视图............................................................................................14 3.1.3 图层、数据集、地图............................................................................................15 3.1.4 管理内容表............................................................................................................16 3.1.5 修改符号属性........................................................................................................16 3.1.6 符号的定制............................................................................................................18 3.1.7 标记要素................................................................................................................19 3.1.8 自动标记要素........................................................................................................21 3.1.9 设置显示阀值........................................................................................................22 3.2 数据的选择与查询...........................................................................................................23 3.2.1 设置可选图层........................................................................................................23 3.2.2 属性选择查询........................................................................................................24 3.2.3 空间选择查询........................................................................................................25 3.2.4 查询结果的保存....................................................................................................26 3.2.5 创建查询结果的统计............................................................................................27 4 数据的编辑..................................................................................................................................28 4.1 编辑环境...........................................................................................................................28 4.1.1 Editor 工具条.........................................................................................................28 4.1.2 开始和结束编辑会话............................................................................................28 4.1.3 选取、拖动和旋转要素........................................................................................28 4.2 创建新要素.......................................................................................................................29 4.2.1 创建线要素............................................................................................................29 4.3 编辑存在要素...................................................................................................................30 4.3.1 编辑节点................................................................................................................30 4.3.5 要素的合并............................................................................................................31 4.3.6 要素的延伸和裁剪.............................................................................................31 4.4 编辑属性........................................................................................................................31 4.4.1 查看属性.............................................................................................................31 4.4.2 添加和修改属性.................................................................................................32 4.4.3 复制和粘贴属性.................................................................................................32 4.5 空间配准...........................................................................................................................33 4.5.1 使用地理参考工具栏............................................................................................33 5 数据的管理..................................................................................................................................34 5.1 内容标签...........................................................................................................................34 5.2 预览标签...........................................................................................................................35 5.3 元数据标签.......................................................................................................................36 5.4 设置显示数据类型...........................................................................................................36 5.5 创建新 ShapeFile 等.........................................................................................................37 6 制图与输出.................................................................................................................................38 6.1 地图输出..........................................................................................................................38 6.2 矢量数据的获取,从纸质地图到矢量地图 ..................................................................39 7 空间数据处理..............................................................................................................................43 7.1 坐标系统..........................................................................................................................43 7.2 投影的实质......................................................................................................................46 7.3 投影分类..........................................................................................................................47 7.4 GIS 中的地图投影 ...........................................................................................................48 7.5 投影变换..........................................................................................................................52 7.6 实例一:影像配准和坐标系转换 ..................................................................................52 7.7 实例二:矢量数据的校准、匹配。 ..............................................................................53 8 3D 分析.....................................................................................................................................54 Exercise 1:Draping an image over a terrain surface.............................................................54 专题一:TIN 与 DEM ...........................................................................................................55 Exercise 2:Visualizing contamination in an aquifer.............................................................57 专题二:如何将 2D Feature 显示为 3D ...............................................................................57 Exercise 3:Visualizing soil contamination and thyroid cancer rates ....................................57 专题三:空间内插方法.........................................................................................................58 Exercise 4:Building a TIN to represent terrain.....................................................................59 专题四:创建 TIN .................................................................................................................60 Exercise 5:Working with animations in ArcScene ...............................................................61 专题五:三维动画制作.........................................................................................................61 9 空间分析模块.............................................................................................................................63 9.1 空间分析简介..................................................................................................................63 9.2 显示数据和功能简介......................................................................................................64 9.3 选址分析..........................................................................................................................65 9.4 最佳路径..........................................................................................................................66 9.5 如何获得连续的栅格数据..............................................................................................67 9.6 其他功能..........................................................................................................................674 1311浏览会员免费
- 文档主要对dhtmlxGrid 实现的功能进行介绍,以及API操作中文手册。 文档大致目录如下: 一、 dhtmlxGrid 介绍 7 1. 自定义XML: 7 2. 支持多行表头、表尾展现 7 3. 移动、添加、删除列 8 4. 处理大型数据集-支持分页 8 5. 处理大型数据集-智能渲染 9 6. 与数据库交互 9 7. 扩展单元格-EXCEL 10 8. 拆分模式(冻结栏) 10 9. 控制于一体的网络和树 11 二、 dhtmlxgrid 配置部分 12 2.1 表格操作API 12 2.2 表格样式API 19 三、 数据处理部分 30 3.1 dhtmlxgrid 数据加载部分 30 四、 Dhtmlxgrid操作 39 4.1 dhtmlxgrid 行操作 39 4.2 dhtmlxgrid 列操作 48 4.3 dhtmlxgrid 单元格操作 55 4.4 dhtmlxgrid 选择过滤操作 615 590浏览会员免费
- 餐饮管理系统 一、需求分析 随着社会服务行业的发展,餐饮业对自身服务的质量和能力也有了更高的要求。餐饮管理系统正是在这样的情况之下越来越受到重视。餐厅的内部服务项目众多,既需要完成前台的服务工作,还需要完成后台的管理工作,如果没有一套可靠的餐饮管理系统,单凭手工操作,不仅效率低,而且会极大地影响到酒店的服务质量。 设计的目标:实现餐饮管理的科学化、自动化,提高各个模版的办公效率,为高质量的餐饮服务提供保证。 系统功能概述 民以食为天,随着人民生活水平的提高,餐饮业在服务行业中占有越来越重要的地位。经过多年发展,餐饮管理已经逐渐由定性管理,进入到重视定量管理的科学阶段。众所周知,在定量管理的具体实现方法和手段方面,最有效的工具就是计算机管理。 传统的手工操作管理存在着许多无法避免的问题,例如: 人工计算机账单金额出现差错; 收银工作中跑单、漏单、偷钱现象普遍; 个别服务员作弊、改单、宰客情形时有发生; 客人消费单据难以保存和查询。 如果借助计算机来管理,就可以轻松的解决处理这些问题。一个餐饮管理信息系统应该包括基本的餐厅的服务管理、管理人员信息的维护等,以及与之相应的操作。所以整个餐饮管理信息系统分为两个大部分,即后台的数据管理维护和前台的操作。后台数据库的管理能保证系统各项功能正常运行,前台操作能提供给客户尽可能方便快捷的服务。 功能模块划分 1. 前台操作系统 订餐管理模块:点菜(输入桌台代码和食物代码)、加菜、下单。 结账管理模块:结账(输入桌台代码)、结账方式选择(包括现金结账、信用卡结账、支票结账、签单等)。 交班管理模块:统计当班数据(包括桌台数、人民币结账金额以及总金额等),为下班操作作准备。 2. 后台管理维护系统 用户权限设置:可以查询员工的基本资料(姓名、性别、年龄、出生年月、籍贯、家庭住址等),员工登录名称、密码、员工操作权限等,可以根据需要进行设置。 菜谱设置:新菜单录入(包括菜式名称、代码、类型、价格、成本等)、菜式修改、删除等菜式维护。 付款方式设置:分为人民币付款、信用卡、支票签单等,可以根据需要进行添加和删除。 系统流程分析 系统流程图1所示。当用户进入系统主界面以后,新用户经过注册后才能凭借其用户名和密码登录,老用户可以直接登录。用户登录以后,系统自动判断出其操作权限。操作权限包括普通员工和管理人员。新用户的操作权限默认为是普通员工。普通员工只能进行订餐、结账操作,而管理人员除此之外还可以进行系统设置与营业分析。 • 图1 当有顾客订餐的时候,员工输入桌台号和食物代码即可进行点菜,在结账以前,加菜是允许的。当顾客结账的时候,员工输入桌台号,选择顾客的付款方式,即可完成结账。 在下班时间,员工可以统计当班期间的消费情况。这样,员工注销此次登录,退出系统,一天的工作就到此结束。 管理人员可以随时进行系统设置,包括菜谱设置、用户权限设置、付款方式设置等。 功能模块调用 餐饮管理系统调用了以下功能模块: 用户注册模块、用户登录模块、数据显示模块。 二、概念设计 图2 给出了餐饮管理系统的E-R实体关系图。收银员、餐桌、菜单三者之间的关系是订餐,其中订餐关系包括的属性有:餐桌编号、菜肴编号、菜肴名称、菜肴单价、菜肴数量、菜肴价格、菜肴折扣、是否结账、结账时间。 三、逻辑设计 将E-R关系模型转化为二维表。本系统主要需要6个表,分别为用户信息表(UserInfo)、菜谱信息表(MenuInfo)、订餐信息表(OrderInfo)、桌台信息表(DeskInfo)、付款方式表(PayModeInfo)、当班统计表(CaldayInfo),各个表中字段的类型以及说明如表1-表6所示。 表1 用户信息表 表2 菜谱信息表 表3 订餐信息表 表4 桌台信息表 表5 付款方式表 表6 当班统计表 其中,用户信息表主要存储用户的基本信息,权限项决定了用户的操作权限。菜谱信息表存储食物的基本信息。价格项为结账与结算提供依据。桌台信息表存储各个桌台的消费情况,如消费金额、是否结账等。订餐信息表存储各个桌台的点菜情况。付款方式表存储了基本的付款方式,供结账时选择。当班统计表存储员工当班期间的营业情况。 四、数据库设计 数据库管理系统采用Microsoft SQL Server 2000作为后台数据库。首先,在企业管理器中建立一个名为MenuManageSys的数据库,然后建立以上6个数据库表,并设定主键、长度。这样,数据库的设计已经完成。 五、详细设计 本餐饮管理系统采用Visual C++ + SQL Server来开发。利用ADO技术调用后台数据库,使用了两个ADO智能指针_ConnectionPtr和_RecordsetPtr,其中_ConnectionPtr用来连接后台SQL Server数据库,_RecordsetPtr指针用来对数据库的表中的记录集进行操作。工程使用的是基于对话框的程序,每个对话框为一个类,父类为CDialog,实现的一些功能都封装在类的函数中,体现了面向对象编程语言C++的特性。 导入ADO接口:在工程的stdafx.h文件里直接引入符号#import引入ADO库文件,加入下面一行代码,以使编译器能正确编译: #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF","adoEOF") 用_ConnectionPtr指针连接数据库:在CmenuManageSysApp类的BOOL InitInstance()函数中加入以下代码: m_pConnection.CreateInstance("ADODB.Connection"); try { m_pConnection->ConnectionTimeout = 8; m_pConnection->PutCursorLocation(adUseClient); m_pConnection->Open("driver={SQL Server};Server=172.29.130.47; DATABASE=MenuManageSys;UID=;PWD=","","",adModeUnknown); } catch(_com_error e) { AfxMessageBox("数据库连接失败!"); return FALSE; } 1.设计工程框架 餐饮管理系统的框架是一个对话框类型的操作界面,用户注册、登录后,可对餐饮管理的各个功能模块进行操作。 1.1设置主界面 系统主界面如图3: 图3 每个事件的对应代码如下: (1) 单击“注册”菜单,弹出“注册”对话框,代码如下: void CMenuManageSysDlg::OnRegister() { CRegisterDlg dlg(this); dlg.DoModal(); } (2) 单击“登录”菜单,弹出“登录”对话框,代码如下: void CMenuManageSysDlg::OnLogin() { CLoginDlg dlg(this); dlg.DoModal(); } (3) 单击“订餐”菜单,判断用户是否登录,代码如下: void CMenuManageSysDlg::OnUpdateOrderSystem(CCmdUI* pCmdUI) { if(theApp.m_Level==0||theApp.m_Level==1) { pCmdUI->Enable(true); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); } } (4) 如果用户已经登录,弹出“餐桌信息”对话框,否则提示用户登录,代码如下: void CMenuManageSysDlg::OnOrderSystem() { CDeskDlg dlg; dlg.DoModal(); } (5) 单击“结账”菜单,判断用户是否登录,代码如下: void CMenuManageSysDlg::OnUpdatePayCheck(CCmdUI* pCmdUI) { if(theApp.m_Level==0||theApp.m_Level==1) { pCmdUI->Enable(true); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); } } (6) 如果用户已经登录,弹出“结账”对话框,否则提示用户先登录,代码如下: void CMenuManageSysDlg::OnPayCheck() { CPayDlg dlg; dlg.DoModal(); } (7) 单击“下班”菜单,判断用户是否登录,代码如下: void CMenuManageSysDlg::OnUpdateChangeDuty(CCmdUI* pCmdUI) { if(theApp.m_Level==0||theApp.m_Level==1) { pCmdUI->Enable(true); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); } } (8) 如果用户已经登录,弹出“交接班”对话框,否则提示用户先登录,代码如下: void CMenuManageSysDlg::OnChangeDuty() { COffdutyDlg dlg; dlg.DoModal(); } (9) 单击“用户权限设置”菜单,判断用户是否登录及其权限,代码如下: void CMenuManageSysDlg::OnUpdateSetLevel(CCmdUI* pCmdUI) { if(theApp.m_Level==1) { pCmdUI->Enable(true); } else if(theApp.m_Level==0) { pCmdUI->Enable(false); AfxMessageBox("您无权进行用户级别设置"); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); } } (10) 如果权限是管理人员,弹出“权限设置”对话框,如果是普通员工会提示无权进行用户级别设置,代码如下: void CMenuManageSysDlg::OnSetLevel() { CLevelDlg dlg; dlg.DoModal(); } (11) 单击“菜谱设置”菜单,判断用户是否登录及其权限,代码如下: void CMenuManageSysDlg::OnUpdateSetMenu(CCmdUI* pCmdUI) { if(theApp.m_Level==1) { pCmdUI->Enable(true); } else if(theApp.m_Level==0) { pCmdUI->Enable(false); AfxMessageBox("您无权进行菜谱设置"); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); } } (12)如果权限是管理人员,弹出“菜谱设置”对话框,如果是普通员工会提示无权进行用户级别设置,代码如下: void CMenuManageSysDlg::OnSetMenu() { CMenuSetDlg dlg; dlg.DoModal(); } (13)单击“付款方式设置”菜单,判断用户是否登录及其权限,代码如下: void CMenuManageSysDlg::OnUpdatePaymodeSet(CCmdUI* pCmdUI) { if(theApp.m_Level==1) { pCmdUI->Enable(true); } else if(theApp.m_Level==0) { pCmdUI->Enable(false); AfxMessageBox("您无权进行付款方式设置"); } else { pCmdUI->Enable(false); AfxMessageBox("请您先登录"); } } (14)如果权限是管理人员,弹出“设置付款方式”对话框,如果是普通员工会提示无权进行用户级别设置,代码如下: void CMenuManageSysDlg::OnPaymodeSet() { CSetPaymodeDlg dlg; dlg.DoModal(); } (15)单击“注销”菜单,提示用户本次登录已注销,代码如下: void CMenuManageSysDlg::OnLogout() { if(MessageBox("您确定要注销吗","注销询问",MB_OKCANCEL|MB_ICONQUESTION)==IDOK) { theApp.m_Level=-1; AfxMessageBox("本次登录已注销"); } } (16)单击“退出系统”,在确定退出后,关闭系统,代码如下: void CMenuManageSysDlg::OnExitSystem() { if(MessageBox("真的要退出系统吗","退出询问",MB_OKCANCEL|MB_ICONQUESTION)==IDOK) { CDialog::OnOK(); } } 1.2设计注册模块 注册模块如图4: 图4 注册模块 在输入了完整的信息,按下“确定”按钮后,如果没有重复用户,则注册成功,代码如下: void CRegisterDlg::OnRegisterBtn() { // TODO: Add your control notification handler code here UpdateData(TRUE); if(!m_strUserName.IsEmpty()&&!m_strUserNative.IsEmpty() &&!m_strUserAdddress.IsEmpty() &&!m_strUserPwd.IsEmpty()&& !m_strUserPwdAgain.IsEmpty() && !m_strUserNum.IsEmpty() &&m_nUserAge != 0) { if(m_strUserPwd.CompareNoCase(m_strUserPwdAgain) != 0 ) { MessageBox("密码有误,请重新输入密码。","系统注册"); } else { try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("SELECT*FROMUserInfo",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); } catch(_com_error e) { CString temp; temp.Format("连接数据库错误信息:%s",e.ErrorMessage()); AfxMessageBox(temp); return; } m_pRecordset->AddNew(); m_pRecordset->PutCollect("UserName",_variant_t(m_strUserName)); m_pRecordset->PutCollect("UserPwd",_variant_t(m_strUserPwd)); m_pRecordset->PutCollect("UserNative",_variant_t(m_strUserNative)); m_pRecordset->PutCollect("UserAddress",_variant_t(m_strUserAdddress)); m_pRecordset->PutCollect("UserNum",_variant_t(m_strUserNum)); CString str; if(m_nUserSex==0) { m_pRecordset->PutCollect("UserSex",_variant_t("男")); } else m_pRecordset->PutCollect("UserSex",_variant_t("女")); str.Format("%d",m_nUserAge); m_pRecordset->PutCollect("UserAge",_variant_t(str)); str.Format("%d",0); m_pRecordset->PutCollect("UserLevel",_variant_t(str)); m_pRecordset->Update(); m_pRecordset->Close(); m_pRecordset = NULL; MessageBox("恭喜您注册成功","系统注册"); CDialog::OnOK(); return; } } else { MessageBox("请输入完整注册信息","系统注册"); } } 登录模块如图5: 图5 登录模块 输入完整信息,并单击“确定”按钮后,如果用户名不存在,则重新输入;如果密码错误,则重新输入,在重新输入三次密码后还不正确,则退出登录界面,登录失败。代码如下: void CLoginDlg::OnOK() { UpdateData(TRUE); if(!m_strUserName.IsEmpty() && !m_strPassword.IsEmpty()) { try { CString sql,str; // str.Format("%d",m_nUserNum); sql = "SELECT * FROM UserInfo WHERE UserName='"+m_strUserName+"' and UserNum='"+m_strUserNum+"' and UserPwd = '"+m_strPassword+"' "; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); if(m_pRecordset->adoEOF) { m_pRecordset->Close(); sql= "SELECT * FROM UserInfo WHERE UserName='"+m_strUserName+"' AND UserNum='"+m_strUserNum+"' "; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); if(m_pRecordset->adoEOF) { MessageBox("此用户不存在!","登录系统"); } else { if(count>=2) { MessageBox("登录次数过多,系统关闭","系统登录错误",MB_OK|MB_ICONWARNING); CDialog::OnOK(); } else { MessageBox("密码错误!","登录系统"); count++; } return; } } catch(_com_error e)///捕捉异常 { CString temp; temp.Format("连接数据库错误信息:%s",e.ErrorMessage()); AfxMessageBox(temp); return; } } else { theApp.m_Level = m_pRecordset->GetCollect("UserLevel").lVal; theApp.m_name = m_strUserName; MessageBox("登录成功!","登录系统",MB_OKCANCEL|MB_ICONQUESTION); CDialog::OnOK(); return; } } catch(_com_error e)///捕捉异常 { CString temp; temp.Format("连接数据库错误信息:%s",e.ErrorMessage()); AfxMessageBox(temp); return; } m_pRecordset->Close(); m_pRecordset = NULL; } else { MessageBox("请输入用户名和密码","登录系统"); } } 到此,注册模块与登录模块就设计完成。新用户注册以后,凭借其用户名和密码可以登陆,从而对系统进行操作。 3.功能模块设计 根据功能模块划分,可以将餐饮管理系统的功能模块划分为值班员管理模块、菜谱管理模块、用户管理模块、订餐模块、结账模块,下面对工程各个功能进行介绍。 3.1订餐模块设计 订餐模块的功能是员工输入桌台号码和食物代码进行点菜、根据需要加菜、下单。订餐模块如图6所示: 图6 订餐模块 为对话框类添加3个数据集对象: _RecordsetPtr m_pRecordset_Desk; _RecordsetPtr m_pRecordset_Order; _RecordsetPtr m_pRecordset_Menu; 对话框类的各成员函数的代码如下: CDeskDlg::CDeskDlg(CWnd* pParent /*=NULL*/) : CDialog(CDeskDlg::IDD, pParent) { //{{AFX_DATA_INIT(CDeskDlg) m_nOrderDeskNumber = 0; m_nOrderFoodNumber = 0; m_nOrderFoodRebate = 100; m_nOrderFoodAcount = 1; //}}AFX_DATA_INIT } BOOL CDeskDlg::OnInitDialog() //对话框初始化函数 { CDialog::OnInitDialog(); GetDlgItem(IDOK)->EnableWindow(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDeskDlg::OnOrderBtn() //点菜消息按钮 { UpdateData(TRUE); CString str; CString sql; if(m_nOrderDeskNumber == 0) { AfxMessageBox("请输入餐桌编号"); return; } if(m_nOrderFoodNumber != 0 ) { str.Format("%d",m_nOrderFoodNumber); sql = "SELECT * FROM MenuInfo WHERE FoodNum = "+str+" "; m_pRecordset_Menu.CreateInstance("ADODB.Recordset"); m_pRecordset_Menu->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Menu->GetRecordCount()==0) { AfxMessageBox("该菜肴编号不存在,请重新输入编号"); return; } else { int m_nTempPrice; CString m_strTempName; m_nTempPrice = m_pRecordset_Menu->GetCollect("FoodPrice").lVal;//食物价格 m_strTempName = m_pRecordset_Menu->GetCollect("FoodName").bstrVal;//食物名称 m_pRecordset_Menu->Close(); str.Format("%d",m_nOrderDeskNumber);//桌子编号 sql = "SELECT * FROM OrderInfo WHERE DeskNum = "+str+" "; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_pRecordset_Order->AddNew(); str.Format("%d",m_nOrderDeskNumber); m_pRecordset_Order->PutCollect("DeskNum" ,_variant_t(str));//餐桌编号 str.Format("%d" , m_nOrderFoodNumber); m_pRecordset_Order->PutCollect("FoodNum" ,_variant_t(str));//食物编号 str.Format("%d",m_nTempPrice); m_pRecordset_Order->PutCollect("FoodSignalPrice" ,_variant_t(str));//食物单价 str.Format("%d",m_nOrderFoodAcount); m_pRecordset_Order->PutCollect("FoodAcount" ,_variant_t(str));//食物数量 m_nTempPrice *=m_nOrderFoodAcount; str.Format("%d",m_nTempPrice); m_pRecordset_Order->PutCollect("FoodPrice" ,_variant_t(str));//食物价格 str.Format("%d",m_nOrderFoodRebate); m_pRecordset_Order->PutCollect("FoodRebate" ,_variant_t(str));//食物折扣 int m_nTempRePrice; m_nTempRePrice = (int)m_nTempPrice*m_nOrderFoodRebate/100; str.Format("%d",m_nTempRePrice); m_pRecordset_Order->PutCollect("FoodRePrice" ,_variant_t(str)); //折后价格(小计) m_pRecordset_Order->PutCollect("FoodName" ,_variant_t(m_strTempName));//食物名称 int m_nTempCheck; m_nTempCheck = 0; str.Format("%d",m_nTempCheck); m_pRecordset_Order->PutCollect("FoodCheck" ,_variant_t(str));//是否结帐 CString paytime; CTime now=CTime::GetCurrentTime(); paytime=now.Format(_T("%Y-%m-%d %H:%M:%S")); m_pRecordset_Order->PutCollect("FoodTime",_variant_t(paytime));//点菜时间 m_pRecordset_Order->Update(); m_pRecordset_Order ->Close(); str.Format("%d",m_nOrderDeskNumber); CString str1; str1.Format("%d" , 0); sql = "SELECT * FROM OrderInfo WHERE DeskNum = "+str+" and FoodCheck = "+str1+" "; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbFood.SetRefDataSource(NULL); m_dbFood.SetRefDataSource((LPUNKNOWN)m_pRecordset_Order); m_dbFood.SetColumnHeaders(2) ; m_dbFood.Refresh(); GetDlgItem(IDOK)->EnableWindow(TRUE); } } else { AfxMessageBox("请输入菜肴编号"); return; } } void CDeskDlg::OnOK() //下单消息按钮 { CString str,sql,str1; int m_nTempRePrice; m_nTotalPrice = 0; while(!m_pRecordset_Order->adoEOF) { m_nTempRePrice=m_pRecordset_Order->GetCollect("FoodRePrice").lVal; m_nTotalPrice += m_nTempRePrice; m_pRecordset_Order->MoveNext(); } if(m_nTotalPrice>0) { int temp=0; str1.Format("%d",temp); str.Format("%d",m_nOrderDeskNumber); sql = "SELECT * FROM DeskInfo WHERE DeskNum = "+str+" and DeskCheck = "+str1+""; m_pRecordset_Desk.CreateInstance("ADODB.Recordset"); m_pRecordset_Desk->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Desk->GetRecordCount()==0) { m_pRecordset_Desk->AddNew(); str.Format("%d",m_nOrderDeskNumber); m_pRecordset_Desk->PutCollect("DeskNum",(_variant_t)str); str.Format("%d",m_nTotalPrice); m_pRecordset_Desk->PutCollect("DeskPrice",(_variant_t)str); temp = 0; str.Format("%d" , temp); m_pRecordset_Desk->PutCollect("DeskCheck",(_variant_t)str); } else { str.Format("%d",m_nTotalPrice); m_pRecordset_Desk->PutCollect("DeskPrice",(_variant_t)str); } m_pRecordset_Desk->Update(); m_pRecordset_Desk->Close(); } CDialog::OnOK(); } void CDeskDlg::OnUpdateOrderDeskNumber() //根据餐桌号自动将原来已点的食物信息绑定到数据列表 { UpdateData(TRUE); CString str,sql; str.Format("%d",m_nOrderDeskNumber); CString str1; int temp=0; str1.Format("%d" , temp); sql = "SELECT * FROM OrderInfo WHERE DeskNum = "+str+" and FoodCheck = "+str1+" "; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbFood.SetRefDataSource(NULL); m_dbFood.SetRefDataSource((LPUNKNOWN)m_pRecordset_Order); m_dbFood.SetColumnHeaders(2) ; m_dbFood.Refresh(); } 3.2结账模块设计 结账模块的功能是员工输入桌台代码进行结账、选择结账方式(包括现金结账、信用卡结账、支票结账、签单等)、自动找零。结账模块如图7所示: 图7 结账模块 为对话框类添加3个数据集对象,代码如下: _RecordsetPtr m_pRecordset_Paymode; _RecordsetPtr m_pRecordset_Order; _RecordsetPtr m_pRecordset_Desk; 对话框类的各成员函数的代码如下: CPayDlg::CPayDlg(CWnd* pParent /*=NULL*/) : CDialog(CPayDlg::IDD, pParent) { //{{AFX_DATA_INIT(CPayDlg) m_strPaymode = _T(""); m_strPayUserName = _T(""); m_nPayDeskNumber = 0; m_nPayTotalPrice = 0; m_nPayRealPrice = 0; m_nPayRePrice = 0; m_timePay = COleDateTime::GetCurrentTime(); //}}AFX_DATA_INIT } BOOL CPayDlg::OnInitDialog() //对话框初始化函数 { CDialog::OnInitDialog(); m_strPayUserName=theApp.m_name; CString sql; sql="SELECT * FROM PayModeInfo"; m_pRecordset_Paymode.CreateInstance("ADODB.Recordset"); m_pRecordset_Paymode->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Paymode->GetRecordCount()!=0) { while(!m_pRecordset_Paymode->adoEOF) { m_coPaymode.AddString((LPCTSTR)(_bstr_t)m_pRecordset_Paymode->GetCollect("NAME")); m_pRecordset_Paymode->MoveNext(); } m_pRecordset_Paymode->Close(); m_coPaymode.SetCurSel(0); } UpdateData(FALSE); return TRUE; } void CPayDlg::OnUpdatePayDeskNumber() //自动将对应桌号的点菜信息以及消费情况显示在桌面上 { UpdateData(TRUE); CString sql,str,str1; int temp=0; str.Format("%d",m_nPayDeskNumber); str1.Format("%d",temp); sql="SELECT * FROM DeskInfo WHERE DeskNum="+str+" AND DeskCheck="+str1+" "; m_pRecordset_Desk.CreateInstance("ADODB.Recordset"); m_pRecordset_Desk->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Desk->GetRecordCount()!=0) { m_nPayTotalPrice=m_pRecordset_Desk->GetCollect("DeskPrice").lVal; } m_pRecordset_Desk->Close(); sql="SELECT * FROM OrderInfo WHERE DeskNum="+str+" AND FoodCheck="+str1+" "; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbPay.SetRefDataSource(NULL); m_dbPay.SetRefDataSource((LPUNKNOWN)m_pRecordset_Order); m_dbPay.SetColumnHeaders(1); m_dbPay.Refresh(); UpdateData(FALSE); } void CPayDlg::OnUpdatePayRealprice() //根据实收金额自动计算找零金额 { UpdateData(TRUE); m_nPayRePrice=m_nPayRealPrice-m_nPayTotalPrice; UpdateData(FALSE); } void CPayDlg::OnOK() //确定按钮消息函数,将数据写回DESK表和ORDER表,结账完成 { UpdateData(TRUE); if(!m_strPaymode.IsEmpty()&&m_nPayRealPrice!=0) { CString sql,str,str1; int temp=0; str.Format("%d",m_nPayDeskNumber); str1.Format("%d",temp); sql="SELECT * FROM DeskInfo WHERE DeskNum="+str+" AND DeskCheck="+str1+" "; m_pRecordset_Desk.CreateInstance("ADODB.Recordset"); m_pRecordset_Desk->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Desk->GetRecordCount!=0) { temp=1; str.Format("%d",temp); m_pRecordset_Desk->PutCollect("DeskCheck",(_variant_t)str); int selmode; selmode=m_coPaymode.GetCurSel(); m_coPaymode.GetLBText(selmode,m_strPaymode); m_pRecordset_Desk->PutCollect("DeskPaymode",_variant_t(m_strPaymode)); CString paytime; CTime now=CTime::GetCurrentTime(); paytime=now.Format(_T("%Y-%m-%d %H:%M:%S")); m_pRecordset_Desk->PutCollect("DeskDateTime",(_variant_t)paytime); m_pRecordset_Desk->PutCollect("DeskName",(_variant_t)m_strPayUserName); } m_pRecordset_Desk->Update(); m_pRecordset_Desk->Close(); str.Format("%d",m_nPayDeskNumber); sql="SELECT * FROM OrderInfo WHERE DeskNum="+str+" AND FoodCheck="+str1+" "; m_pRecordset_Order.CreateInstance("ADODB.Recordset"); m_pRecordset_Order->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Order->GetRecordCount()!=0) { temp=1; str.Format("%d",temp); while(!m_pRecordset_Order->adoEOF) { m_pRecordset_Order->PutCollect("FoodCheck",(_variant_t)str); m_pRecordset_Order->Update(); m_pRecordset_Order->MoveNext(); } } m_pRecordset_Order->Close(); str.Format("%d",m_nPayDeskNumber); str+="号桌已结账"; AfxMessageBox(str); CDialog::OnOK(); } else { AfxMessageBox("请输入完整信息"); } } 到此,结账模块已经设计完成。 3.3交接班模块设计 交接班模块的功能是管理员统计当班数据(包括桌台数、人民币结账金额以及总金额等),为下班操作做准备。交接班模块如图8所示: 图8 交接班模块 为对话框类添加两个数据集对象,代码如下: _RecordsetPtr m_pRecordset_Off; _RecordsetPtr m_pRecordset_Desk; 对话框类的各成员函数的代码如下: COffdutyDlg::COffdutyDlg(CWnd* pParent /*=NULL*/) : CDialog(COffdutyDlg::IDD, pParent) { //{{AFX_DATA_INIT(COffdutyDlg) m_strDayName = _T(""); m_nTotalAcount = 0; m_timeDay = 0; //}}AFX_DATA_INIT } BOOL COffdutyDlg::OnInitDialog() //对话框初始化 { CDialog::OnInitDialog(); m_timeDay=CTime::GetCurrentTime(); m_strDayName=theApp.m_name; UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void COffdutyDlg::OnCalDayBtn() //统计按钮,负责当班统计 { CString sql,str; int temp=1; str.Format("%d",temp); sql="SELECT * FROM DeskInfo WHERE DeskCheck="+str+" AND DeskName='"+m_strDayName+"' "; m_pRecordset_Desk.CreateInstance("ADODB.Recordset"); m_pRecordset_Desk->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); int renminbi_jine=0,qita_jine=0,total_jine=0,acount=0; if(m_pRecordset_Desk->GetRecordCount!=0) { while(!m_pRecordset_Desk->adoEOF) { str=m_pRecordset_Desk->GetCollect("DeskPaymode").bstrVal; if(str.CompareNoCase("人民币")==0) { renminbi_jine+=m_pRecordset_Desk->GetCollect("DeskPrice").lVal; } else { qita_jine+=m_pRecordset_Desk->GetCollect("DeskPrice").lVal; } acount++; m_pRecordset_Desk->MoveNext(); } } m_pRecordset_Desk->Close(); total_jine=renminbi_jine+qita_jine; m_pRecordset_Off.CreateInstance("ADODB.Recordset"); m_pRecordset_Off->Open("SELECT * FROM CalDayInfo",_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset_Off->GetRecordCount!=0) { while(!m_pRecordset_Off->adoEOF) { m_pRecordset_Off->Delete(adAffectCurrent); m_pRecordset_Off->Update(); m_pRecordset_Off->MoveNext(); } } m_pRecordset_Off->AddNew(); m_pRecordset_Off->PutCollect("mode",_variant_t("人民币")); str.Format("%d",renminbi_jine); m_pRecordset_Off->PutCollect("money",_variant_t(str)); m_pRecordset_Off->AddNew(); m_pRecordset_Off->PutCollect("mode",_variant_t("其他")); str.Format("%d",qita_jine); m_pRecordset_Off->PutCollect("money",_variant_t(str)); m_pRecordset_Off->AddNew(); m_pRecordset_Off->PutCollect("mode",_variant_t("合计")); str.Format("%d",total_jine); m_pRecordset_Off->PutCollect("money",_variant_t(str)); m_dbTotalDay.SetRefDataSource(NULL); m_dbTotalDay.SetRefDataSource((LPUNKNOWN)m_pRecordset_Off); m_dbTotalDay.SetColumnHeaders(2); m_dbTotalDay.Refresh(); m_pRecordset_Off->Update(); m_nTotalAcount=acount; UpdateData(FALSE); } 3.4用户权限管理模块设计 用户权限模块的功能是方便管理人员查询员工的基本资料,设置员工的操作权限。用户权限设置模块的设计如图9: 图9 权限设置模块 对话框类的各成员函数的代码如下: CLevelDlg::CLevelDlg(CWnd* pParent /*=NULL*/) : CDialog(CLevelDlg::IDD, pParent) { //{{AFX_DATA_INIT(CLevelDlg) m_strUserName = _T(""); m_strUserNum = _T(""); m_strLevelSelect = _T(""); //}}AFX_DATA_INIT } BOOL CLevelDlg::OnInitDialog() { CDialog::OnInitDialog(); m_coLevelSelect.AddString("管理员"); m_coLevelSelect.AddString("用户"); GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(FALSE); GetDlgItem(IDC_CONFIRM)->EnableWindow(FALSE); UpdateData(FALSE); CString sql; sql="SELECT * FROM UserInfo "; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CLevelDlg::OnChange() { GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(TRUE); GetDlgItem(IDC_CONFIRM)->EnableWindow(TRUE); UpdateData(TRUE); CString sql; sql="SELECT UserName,UserNum,UserLevel,UserPwd FROM UserInfo WHERE UserName='"+m_strUserName+"' AND UserNum='"+m_strUserNum+"' "; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); } void CLevelDlg::OnConfirm() { UpdateData(TRUE); if(!m_strLevelSelect.IsEmpty()) { if(m_strLevelSelect.CompareNoCase("管理员")==0) { CString str,sql; int temp=1; str.Format("%d",temp); sql="SELECT UserName,UserNum,UserLevel,UserPwd FROM UserInfo WHERE UserName='"+m_strUserName+"' AND UserNum='"+m_strUserNum+"' "; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_pRecordset->PutCollect("UserLevel",_variant_t(str)); m_pRecordset->Update(); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); AfxMessageBox("权限修改成功"); GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(FALSE); GetDlgItem(IDC_CONFIRM)->EnableWindow(FALSE); } else { CString str,sql; int temp=0; str.Format("%d",temp); sql="SELECT UserName,UserNum,UserLevel,UserPwd FROM UserInfo WHERE UserName='"+m_strUserName+"' AND UserNum='"+m_strUserNum+"' "; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_pRecordset->PutCollect("UserLevel",_variant_t(str)); m_pRecordset->Update(); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); AfxMessageBox("权限修改成功"); GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(FALSE); GetDlgItem(IDC_CONFIRM)->EnableWindow(FALSE); } } else { AfxMessageBox("请选择权限"); } } void CLevelDlg::OnShowAll() { CString sql; sql="SELECT * FROM UserInfo "; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbUserInfo.SetRefDataSource(NULL); m_dbUserInfo.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbUserInfo.SetColumnHeaders(2); m_dbUserInfo.Refresh(); GetDlgItem(IDC_LEVEL_SELECT)->EnableWindow(FALSE); GetDlgItem(IDC_CONFIRM)->EnableWindow(FALSE); } 至此,权限设置模块设计完成。 3.5菜谱管理模块设计 菜谱管理模块的功能是管理人员进行新菜式的录入、菜式修改、删除等菜式维护。菜谱管理模块如图10: 图10 菜单管理模块 对话框类的各成员函数的代码如下: CMenuSetDlg::CMenuSetDlg(CWnd* pParent /*=NULL*/) : CDialog(CMenuSetDlg::IDD, pParent) { //{{AFX_DATA_INIT(CMenuSetDlg) m_nInputNum = 0; m_nCost = 0; m_strName = _T(""); m_nNum = 0; m_nPrice = 0; m_strRemark = _T(""); m_strType = _T(""); //}}AFX_DATA_INIT } BOOL CMenuSetDlg::OnInitDialog() //对话框初始化 { CDialog::OnInitDialog(); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NUM)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(FALSE); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_INQUIRY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_ADDSAVE)->EnableWindow(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CMenuSetDlg::OnUpdateEditInputNum() { UpdateData(TRUE); if(m_nInputNum!=0) { GetDlgItem(IDC_INQUIRY)->EnableWindow(TRUE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(FALSE); } } void CMenuSetDlg::OnInquiry() //查询 { UpdateData(TRUE); CString sql,str; str.Format("%d",m_nInputNum); sql="SELECT * FROM MenuInfo WHERE FoodNum="+str+" "; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset->GetRecordCount()!=0) { m_nInputNum=0; m_nNum=m_pRecordset->GetCollect("FoodNum").lVal; m_strName=m_pRecordset->GetCollect("FoodName").bstrVal; m_strType=m_pRecordset->GetCollect("FoodType").bstrVal; m_nPrice=m_pRecordset->GetCollect("FoodPrice").lVal; m_nCost=m_pRecordset->GetCollect("FoodCost").lVal; m_strRemark=m_pRecordset->GetCollect("FoodRemark").bstrVal; GetDlgItem(IDC_EDIT_NUM)->EnableWindow(FALSE); GetDlgItem(IDC_DEL)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(FALSE); GetDlgItem(IDC_INQUIRY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(TRUE); GetDlgItem(IDC_ADDSAVE)->EnableWindow(FALSE); } else { // m_nInputNum=0; AfxMessageBox("您所查找的菜肴不存在"); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_INQUIRY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_ADDSAVE)->EnableWindow(FALSE); } UpdateData(FALSE); } void CMenuSetDlg::OnAddNew() //新增 { m_nCost = 0; m_strName = _T(""); m_nNum = 0; m_nPrice = 0; m_strRemark = _T(""); m_strType = _T(""); GetDlgItem(IDC_ADDSAVE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_NUM)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(TRUE); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(FALSE); GetDlgItem(IDC_INQUIRY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_INPUT_NUM)->EnableWindow(TRUE); UpdateData(FALSE); } void CMenuSetDlg::OnAddSave() //保存所增加项 { UpdateData(TRUE); if(m_nCost!=0 && m_nNum!=0 && m_nPrice!=0 && !m_strName.IsEmpty() && !m_strRemark.IsEmpty() && !m_strType.IsEmpty()) { GetDlgItem(IDC_EDIT_NUM)->EnableWindow(FALSE); GetDlgItem(IDC_ADDSAVE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_INPUT_NUM)->EnableWindow(TRUE); CString str,sql; str.Format("%d",m_nNum); sql="SELECT * FROM MenuInfo WHERE FoodNum="+str+""; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset->GetRecordCount()!=0) { AfxMessageBox("菜肴号码已存在"); } else { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("SELECT * FROM MenuInfo",_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_nNum==0) { AfxMessageBox("菜肴号码不能为0"); return; } else { m_pRecordset->AddNew(); str.Format("%d",m_nNum); m_pRecordset->PutCollect("FoodNum",_variant_t(str)); m_pRecordset->PutCollect("FoodName",_variant_t(m_strName)); m_pRecordset->PutCollect("FoodType",_variant_t(m_strType)); str.Format("%d",m_nPrice); m_pRecordset->PutCollect("FoodPrice",_variant_t(str)); str.Format("%d",m_nCost); m_pRecordset->PutCollect("FoodCost",_variant_t(str)); m_pRecordset->PutCollect("FoodRemark",_variant_t(m_strRemark)); m_pRecordset->Update(); m_pRecordset->Close(); AfxMessageBox("已保存"); m_nCost = 0; m_strName = _T(""); m_nNum = 0; m_nPrice = 0; m_strRemark = _T(""); m_strType = _T(""); UpdateData(FALSE); } } } else AfxMessageBox("请输入完整信息"); } void CMenuSetDlg::OnModify() //修改 { GetDlgItem(IDC_EDIT_NUM)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_TYPE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_PRICE)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_COST)->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_REMARK)->EnableWindow(TRUE); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(TRUE); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); m_nCost = 0; m_nPrice = 0; m_strRemark = _T(""); m_strType = _T(""); UpdateData(FALSE); } void CMenuSetDlg::OnModifysave() //保存修改 { UpdateData(TRUE); if(!m_strType.IsEmpty()&&m_nPrice!=0&&m_nCost!=0&&!m_strRemark.IsEmpty()) { CString str,sql; str.Format("%d",m_nNum); // m_pRecordset->PutCollect("FoodNum",_variant_t(str)); // m_pRecordset->PutCollect("FoodName",_variant_t(m_strName)); m_pRecordset->PutCollect("FoodType",_variant_t(m_strType)); str.Format("%d",m_nPrice); m_pRecordset->PutCollect("FoodPrice",_variant_t(str)); str.Format("%d",m_nCost); m_pRecordset->PutCollect("FoodCost",_variant_t(str)); m_pRecordset->PutCollect("FoodRemark",_variant_t(m_strRemark)); m_pRecordset->Update(); AfxMessageBox("修改成功"); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFYSAVE)->EnableWindow(FALSE); } else { AfxMessageBox("请输入完整信息"); } } void CMenuSetDlg::OnDel() { m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Close(); AfxMessageBox("删除成功"); GetDlgItem(IDC_DEL)->EnableWindow(FALSE); GetDlgItem(IDC_MODIFY)->EnableWindow(FALSE); } 至此,菜谱管理模块设计完成。 3.6付款方式设置模块设计 付款方式设置模块如图11: 图11 付款方式模块 对话框类的各成员函数的代码如下: CSetPaymodeDlg::CSetPaymodeDlg(CWnd* pParent /*=NULL*/) : CDialog(CSetPaymodeDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSetPaymodeDlg) m_strPaymode = _T(""); //}}AFX_DATA_INIT } BOOL CSetPaymodeDlg::OnInitDialog() //对话框初始化 { CDialog::OnInitDialog(); m_bAdd=FALSE; m_bDel=FALSE; m_sInputPaymode.ShowWindow(SW_HIDE); m_editPaymode.ShowWindow(SW_HIDE); m_btnSure.ShowWindow(SW_HIDE); CString sql; sql="SELECT * FROM PayModeInfo"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbPaymode.SetRefDataSource(NULL); m_dbPaymode.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbPaymode.SetColumnHeaders(1); m_dbPaymode.Refresh(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CSetPaymodeDlg::OnPaymodeAddBtn() //单击按钮后,开始新增 { m_sInputPaymode.ShowWindow(SW_SHOW); m_editPaymode.ShowWindow(SW_SHOW); m_btnSure.ShowWindow(SW_SHOW); m_bAdd=TRUE; m_bDel=FALSE; } void CSetPaymodeDlg::OnPaymodeDelBtn() //单击按钮后,开始删除 { m_sInputPaymode.ShowWindow(SW_SHOW); m_editPaymode.ShowWindow(SW_SHOW); m_btnSure.ShowWindow(SW_SHOW); m_bAdd=FALSE; m_bDel=TRUE; } void CSetPaymodeDlg::OnOK() //确定添加或者删除 { UpdateData(TRUE); if(!m_strPaymode.IsEmpty()) { if(m_bAdd==TRUE) { CString str; BOOL flag=0; m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { str=m_pRecordset->GetCollect("NAME").bstrVal; if(str.CompareNoCase(m_strPaymode)==0) { MessageBox("您输入的付款方式已存在","输入错误",MB_OK|MB_ICONWARNING); flag=1; break; } else m_pRecordset->MoveNext(); } /* CString sql; sql="SELECT * FROM PayModeInfo WHERE NAME='"+m_strPaymode+"' "; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset->GetRecordCount()==0) { MessageBox("您输入的付款方式已存在","输入错误",MB_OK|MB_ICONWARNING); flag=1; } */ if(flag==0) { m_pRecordset->MoveLast(); m_pRecordset->AddNew(); m_pRecordset->PutCollect("NAME",_variant_t(m_strPaymode)); m_pRecordset->Update(); m_dbPaymode.SetRefDataSource(NULL); m_dbPaymode.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbPaymode.SetColumnHeaders(1); m_dbPaymode.Refresh(); m_bAdd=FALSE; } } if(m_bDel==TRUE) { BOOL flag=0; UpdateData(TRUE); CString str; int newid; /* m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { str=m_pRecordset->GetCollect("NAME").bstrVal; if(str.CompareNoCase(m_strPaymode)==0) { flag=1; m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Update(); break; } else m_pRecordset->MoveNext(); } */ CString sql; sql="SELECT * FROM PayModeInfo WHERE NAME='"+m_strPaymode+"'"; m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); if(m_pRecordset->GetRecordCount()!=0) { flag=1; m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Update(); m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open("SELECT * FROM PayModeInfo",_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText); m_dbPaymode.SetRefDataSource(NULL); m_dbPaymode.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_dbPaymode.SetColumnHeaders(1); m_dbPaymode.Refresh(); m_bDel=FALSE; } if(flag==0) { MessageBox("您输入的付款方式不存在,请查询后确认","输入错误",MB_OK|MB_ICONWARNING); } m_dbPaymode.Refresh(); m_bDel=FALSE; } m_editPaymode.SetWindowText(""); m_sInputPaymode.ShowWindow(SW_HIDE); m_editPaymode.ShowWindow(SW_HIDE); m_btnSure.ShowWindow(SW_HIDE); } else { AfxMessageBox("请输入付款方式"); } } 至此,付款方式设置模块设计完成。 六、系统演示 系统设计并编写完成后,编译运行程序,初始界面如图12所示: 图12 1. 系统登录 单击“登录”菜单,弹出登录界面,在登陆界面输入框中分别输入用户编号、用户名和密码,如图13所示。 如果用户名和密码都正确,那么就可以登陆系统,系统提示如图14所示。 图13 图14 如果用户名不存在或密码输入不正确,系统提示如图15和图16所示,将无法进入系统。 图15 图16 如果未登录就进行其他操作,系统提示如图17所示。只有登录后才能操作其他功能。单击“注册”菜单,弹出注册对话框如图18所示。 按要求填写完注册信息,如果注册名未被注册,并且前后两次输入的密码一致,那么系统给出如图19所示提示。 如果前后两次输入密码不一致,系统给出如图20所示提示,此时注册不成功。 图19 图20 2.订餐操作 系统登录后,单击“订餐”菜单,弹出“餐桌信息”对话框,如图21所示。 餐桌第一次订餐时,输入餐桌编号、食物编号、数量以及折扣,单击“点菜”按钮,在右侧点菜信息栏中列举了该餐桌所点的菜肴,如图22所示。 图21 图22 如果餐桌已经订过餐,但是还没有结账,则在餐桌编号输入框输入餐桌号,在点菜信息栏中显示该桌已点的菜。 单击“下单”按钮,即可把点菜信息记录下来。 3.结账操作 单击“结账”菜单,弹出“结账单”对话框。输入桌台号,自动显示对应的点菜信息以及消费金额。选取付款方式和实收金额后,界面会自动显示找零金额,结果如图23所示。 图23 4.用户权限设置 单击“管理”|“用户权限设置”,弹出“权限设置”对话框,如图24所示,所有用户的信息都显示在数据列表中。 输入要查询的用户编号和名称,单击“更改”,该用户的信息就显示在列表中,结果如图25所示。 图24 图25 选择权限,单击确定后,如图26所示,用户权限已被修改。 图26 单击“显示全部”,结果如图27所示。 图27 5.菜谱管理 单击“管理”|“菜谱设置”菜单,弹出“菜谱设置”对话框,如图28所示。 图28 在“菜谱设置”对话框中可以对菜谱进行查找、添加、删除、修改等操作。 6.付款方式设置 单击“管理”|“付款方式设置”菜单,弹出“付款方式”对话框,如图29所示。 单击“新增”或“删除”按钮,显示新增付款方式文本框和“确定”按钮,如图30所示。 图29 图30 在文本框中输入要增加/删除的付款方式,并单击“确定”按钮,将新增或删除所选择的付款方式。 7.注销用户 单击“注销”菜单,弹出“注销询问”对话框如图31所示。选择“确定”,注销成功,如图32所示。 图31 图32 8.系统退出 单击“退出系统”菜单,弹出“退出询问”对话框如图33所示。选择“确定”,则系统退出。 图33 至此,系统的全部功能已经演示完毕。 七、结束语 经过两个多星期的时间,终于完成了本系统的设计。虽然本系统有一些漏洞和不完善的地方,但是本系统结合餐饮管理的实际情况,基于数据库设计通用的模块,对餐饮管理的前台和后台操作进行功能模块的设计,实现了餐饮管理的基本功能。 在设计的过程中,遇到了很多的技术上的问题。例如,第一次接触ADO数据库访问技术,对用ADO来连接数据库不是很了解,出现了很多的问题,设计受到了很大的阻碍。经过向专业指导老师请教和参阅了有关书籍后,终于把一些问题解决了。在本次设计中,我懂得了“书到用时方恨少”的道理,发现了自己在专业方面还有很多要提高的地方,在今后的学习中,我一定努力进步! 参考文献: [1] 萨师煊,王珊.数据库系统概论[M]第3版.北京:高等教育出版社,2000 [2] 侯其锋,李晓华,李莎.Visual C++数据库通用模块开发与系统移植.北京:清华大学出版社,2007 致 谢 在这次课程设计中,戴小鹏老师给了我很大的帮助。他对我的精心指导和关心,使我在设计的过程中受到了很大的启发。特别是他的那份耐心和责任心,使我在今后的学习和工作中受益匪浅。在此,特向戴小鹏老师表示衷心的感谢!5 2178浏览会员免费
- SCI投稿中用到的Title page, highlights, Cover letter模板,适合IEEE,elsevier等各大期刊。0 1w+浏览会员免费
- Map/Reduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的,Google已经将它完整的MapReduce论文公开发布了。其中对它的定义是,Map/Reduce是一个编程模型(programming model),是一个用于处理和生成大规模数据集(processing and generating large data sets)的相关的实现。用户定义一个map函数来处理一个key/value对以生成一批中间的key/value对,再定义一个reduce函数将所有这些中间的有着相同key的values合并起来。很多现实世界中的任务都可用这个模型来表达。5 275浏览会员免费
- VTK 编程简介 VTK数据类型 VTK教程之一 可视化管线 VTK教程之二 可视化管线的执行 VTK教程之三 数据集 VTK教程之四 单元和点集 VTK教程之五 数据集的类型和数据集的属性数据 VTK教程之六 构建数据集的例子程序 VTK教程之七 可视化基础算法-概述 VTK教程之八 可视化基础算法-颜色映射 VTK教程之九 可视化基础算法-二维轮廓线(等值线)提取 VTK教程之十 可视化基础算法-三维轮廓面(等值面)提取 VTK教程之十一 可视化基础算法-方向线 VTK教程之十二 可视化基础算法-几何体变形 VTK教程之十三 可视化基础算法-位移图 VTK教程之十四 可视化基础算法-用隐函数构建几何体 VTK培训教程之十五 可视化基础算法-用隐函数提取数据集中的数据 VTK培训教程之十六 可视化基础算法-用隐函数可视化随机或离散运动的物体4 2275浏览会员免费
- 一段简单代码描述了用geoserver wfs服务获取图层数据并返回geojson数据5 1888浏览会员免费
- 电子采购平台技术要求 建立面向企业内部的采购业务管理平台、面向供应商的采购交易平台、支撑系统运行的IT基础设施平台 实现与集团财务、CRM等其他系统的业务、数据集成0 99浏览会员免费
- ChatGPT是一种基于预训练语言模型的对话生成算法,它使用GPT-2或GPT-3等先进的深度学习技术来生成有意义的文本。在这篇文章中,我们将深入分析ChatGPT的原理以及它是如何工作的。 ChatGPT基本原理 什么是ChatGPT GPT模型结构 ChatGPT的应用场景 ChatGPT的发展趋势5 1w+浏览会员免费
- 目录 第一章 HDF介绍 1.1. 本章概况 1.2. 什么是HDF 1.3. 为什么创建HDF 1.4. HDF的6个基本数据结构 1.5. HDF文件的3层交互 1.6. HDF文件格式 1.7. HDF4和HDF5 第二章 HDF库 2.1 本章简介 2.2 获得和安装HDF库 2.3 支持的程序语言 2.4 应用编程接口 2.5 id文件信息 2.6 编译介绍 第三章 常规光栅图像应用编程接口(GR API) 3.1 本章简介 3.2 General Raster Image(常规光栅图像)数据模型 3.3 GR API 3.4 把Raster Image(光栅图像)写入一个HDF文件中 3.5 从一个HDF文件里读取Raster Image(光栅图像) 第四章 科学数据集应用编程接口(SDS API) 4.1 本章简介 4.2 科学数据集数据模型 4.3 SD API 4.4 把科学数据集写入HDF文件里 4.5 从HDF文件中读取科学数据集 第五章 虚拟数据应用编程接口(VS API) 5.1 本章简介 5.2 Vdata数据模型 5.3 VS API 5.4 把Vdata写入一个HDF文件中 5.5 从一个HDF文件中读取Vdata 第六章 注解应用编程接口(AN API) 6.1 本章简介 6.2 注解数据模型 6.3 AN API 6.4 把注解写入HDF文件里 6.5 从HDF文件中读取注解 第七章 虚拟组结构应用编程接口(V API) 7.1 本章简介 7.2 Vgroups 数据模型 7.3 V API 7.4 创建Vgroups和添加数据对象 7.5 获取有关Vgroup的信息和删除数据对象 第八章 HDF命令行工具 8.1 本章简介 8.2 HDF命令行工具介绍 8.3 HDF查询工具 8.4 HDF数据格式转换工具 8.5 HDF数据压缩工具 第九章 使用JHV浏览HDF文件 9.1 本章简介 9.2 什么是JHV 9.3 获取和安装JHV 9.4 显示HDF对象的树状结构 9.5 显示文件和数据对象的注解 9.6 显示Vdatas 9.7 显示光栅图像 9.8 显示科学数据集5 901浏览会员免费
- 本报告是对某某项目 V1.0版本系统测试活动的总结,整个活动进行了较全面的系统测试 第一章节:概述 第二章节:测试时间、地点及人员 第三章节:环境描述 第四章节:总结和评价 4.1测试过程统计 4.1.1用例数统计 4.1.2用例对需求的覆盖度 4.1.3用例的稳定性 4.1.4用例的有效性 4.1.5测试执行工作量统计 4.1.6测试执行的效率 4.1.7版本缺陷统计 4.1.8测试过程综合评价 4.2被测系统质 量评估 4.2.2缺陷个数 4.2.3缺陷严重等级评估 4.2.4缺陷原因分布 4.2.5测试用例的通过率 4.2.6软件质量评价 4.3测试总结和改进建议 第五章节:遗留问题报告 第六章节:附件 交付的测试工作产品0 2804浏览会员免费
- 数据库课后习题答案 --<王珊.萨师煊>第四版 第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据也越来越复杂。数据与其语义是不可分的。 500 这个数字可以表示一件物品的价格是 500 元,也可以表示一个学术会议参加的人数有 500 人,还可以表示一袋奶粉重 500 克。 ( 2 )数据库( DataBase ,简称 DB ) :数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。 ( 3 )数据库系统( DataBas 。 Sytem ,简称 DBS ) :数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。解析数据库系统和数据库是两个概念。数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。5 134浏览会员免费
- 基于pytorch的UNet分割网络demo实现,及训练自己的数据集。包括对相关报错的分析。收集了几个比较好的前辈的网址。2 6685浏览会员免费
- 三. 系统功能 学生用户通过输入学生基本信息、课程基本信息等,由系统自行生成相应的数据以供学生查询,另外人事处的管理用户还可以对这些基本信息进行更新和删除, 学校学生管理信息系统力求给用户方便快捷的途径去管理这些繁琐的数据。 具体系统功能需求描述如下: (1) 班级信息管理 实现班级的添加、删除、更新。查询班级的所在系别,辅导员等。 (2) 学籍信息管理 每年的大量新生入学,老生毕业都需要处理大量的学生信息。通过这一模块,可以实现学生基本情况的添加、删除、更新。还能查询各个学生的情况,姓名、家庭电话、家庭住址、学号等各个消息 (3)课程信息管理 每个学期都会增加一些新的科目,通过本模块可以轻松的添加以及更新课程。可以根据学期条件或者班级条件的选择,也可根据课程名、课程号或者班级的选择,并对值的输入,可以看到数据集中显示符合条件的课程数据信息,而且可以根据教工的修改要求进行数据的添加、删除、修改的操作。 该项管理对课程的属性进行了具体化的分类,比如可以分辨是考试科还是考察课,而且根据条件的选择大大得提高了对各学期课程数据的记录操作,很大得帮助了教工们工作效率的提高。 (4)信息信息管理 本模块实现了信息的输入、删除、更新。还能查询到平均信息以及单科最高最低信息以及个人信息。把信息统计这个繁琐的工作简单化,为学生信息的管理方面提高工作效率。5 372浏览会员免费
- 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据也越来越复杂。数据与其语义是不可分的。 500 这个数字可以表示一件物品的价格是 500 元,也可以表示一个学术会议参加的人数有 500 人,还可以表示一袋奶粉重 500 克。 ( 2 )数据库( DataBase ,简称 DB ) :数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。5 177浏览会员免费
- Modbus大小:648KBModbus slave和Modbus poll使用中文教程,图形示例,图文并茂Modbus slave和Modbus poll使用中文教程,图形示例,图文并茂1 5463浏览会员免费
- webMethods是时下欧洲比较流行的EDI开发集成平台,国内比较少用到。 webMethods现在还没有一份中文文档可供参考的,有的话也估计是一些企业内部总结或者翻译的一些文档,不对外。所以这可能是第一篇了。5 1168浏览会员免费
- 1. 九八年秋季试题 5 1.1. 概念题 5 1.1.1. 比较半连接方法和枚举法的优缺点。 5 1.1.2. 2PL协议的基本思想。 5 1.1.3. WAL协议的主要思想。 5 1.1.4. SSPARC三级模式体系结构。 5 1.1.5. 设计OID的数据结构时应考虑哪些问题。 6 1.2. 某个大学中有若干系,且每个系有若干个班级和教研室,每个教研室有若干个教员,其中教授、副教授每个人带若干名研究生。每个班有若干名学生,每个学生可选修若干门课程,每门课程可由若干学生选修。完成下列各种要求: 6 1.3. 下面是某学院的一个学生档案数据库的全局模式: 7 1.3.1. 将全局模式进行分片,写出分片定义和分片条件。 7 1.3.2. 指出各分片的类型,并画出分片树。 8 1.3.3. 假设要求查询系号为1的所有学生的姓名和成绩,写出在全局模式上的SQL查询语句,并要求转换成相应的关系代数表示,画出全局查询树,请依次进行全局优化和分片优化,画出优化后的查询树。要求给出优化变换过程。 8 1.4. 设数据项x,y存放在S1场地,u,v存放在S2场地,有分布式事务T1和T2,T1在S1场地的操作为R1(x)W1(x)R1(y)W1(y),T2在S1场地的操作为R2(x)R2(y)W2(y);T1在S2场地上的操作作为R1(u)R1(v)W1(u),T2在S2场地上的操作作为W2(u)R2(v)W2(v)。对下述2种情况,各举一种可能的局部历程(H1和H2),并说明理由。 9 1.4.1. 局部分别是可串行化,而全局是不可串行化的 9 1.4.2. 局部和全局都是可串行化的。要求按照严格的2PL协议,加上适当的加锁和解锁命令,(注意,用rl(x)表示加读锁,wl(x)表示加对x加写锁,ul(x)表示解锁) 9 1.5. 试述面向对象的数据库系统中页面服务器和对象服务器两种Client/Server体系结构的主要特点, 10 2. 九九年春季试题 10 2.1. DBMS解决了信息处理技术中的哪些挑战? 10 2.2. 在关系数据库应用设计中,为什么要对数据库模式进行规范化? 10 2.3. 简述ACID特性。 11 2.4. 长事务处理有哪些特性,如何解决? 12 2.5. 数据库系统体系结构有哪几类,每种类型的特点是什么,关键技术有哪些? 12 2.6. 决策支持类应用与OLTP应用对于数据库系统的要求有哪些不同,支持前者的关键技术有哪些,并简述之。 12 2.7. 面向对象的数据库是如何产生的,其基本原理是什么?有哪些创新特性? 13 2.8. r r 一定等于r r 吗?在什么条件下r r = r r 成立? 14 2.9. 为了设计一个健壮的分布式系统,你必须知道可能发生哪种类型的失败。 14 2.9.1. 请列出在分布式系统中可能的失败类型: 14 2.9.2. 在你列出的失败类型中,哪些也可能发生在集中式系统中? 14 2.9.3. 对于每一种失败类型,在失败发生情况下,两段提交机制如何保证事务的原子性? 14 3. 九九年秋季试题 14 3.1. 问答题 14 3.1.1. 分布式数据库系统在系统结构、模式结构、功能模块等方面有何特点? 14 3.1.2. 给出两种2PL协议,并比较它们的优点缺点? 14 3.1.3. 解释为什么对象类的多继承存在二义性,并通过例子加以说明。 15 3.1.4. 对于下述情况,哪种并行性(查询间并行性、操作间并行性、操作内并行性)有助于正加系统的吞吐量: 15 3.2. 下面是某个公司人事数据库的两个全局关系 15 3.2.1. 将全局模式进行分片,写出分片定义和分片条件。 15 3.2.2. 指出各分片的类型,并画出分片树 15 3.2.3. 进行全局优化,画出优化后的全局查询树。 16 3.2.4. 进行分片优化,画出优化后的分片查询树。 16 3.3. 对3个关系R,S和T的分布式连接,已知有如下的剖视图: 19 3.3.1. 按照SDD-1半连接优化算法,逐步求出半连接优化集和最终执行场地; 19 3.3.2. 对以上结果做相应的优化处理。 23 3.4. 用下面的关键字值的集合构造一颗B+树:(2,3,5,7,11,17,19,23,29,31)。假定树开始是空的,且关键字的值是以升序插入到B+树中去的,B+树每个节点中含的指针数为4。 24 3.5. 考虑关系r (A,B,C),r (C,D,E),r (E,F),假设不存在主关键字。设V(C, r )=900, 24 3.6. 假设一个存储块中仅能存放一个记录且在内存中最多只有三个页框。请 出在排序合并算法中每遍形成的Runs,排序属性为第一个属性:(kangaroo,17),(wallaby,21),(emu,1),(wombat,13),(platypus,3),(lion,8),(warthg,4),(zebra,11),(meerkat,6),(hornbill,2),(baboon,12)。 24 4. 二零年春季试题 24 4.1. 24 4.1.1. 分布库管理系统有哪些主要功能模块及其作用. 24 4.1.2. 半连接方法和枚举法各适用于何种查询优化情况. 25 4.1.3. 分布式事务有哪些基本性质. 25 4.1.4. 什么是2PL协议 25 4.2. 下面是某个公司的人事关系数据库的全局模式: 25 4.2.1. 将全局模式进行分片,写出分片定义和分片条件。 26 4.2.2. 指出分片的类型,并画出分片树。 26 4.3. 对题4.2所确定的分片模式,要求查询级别高于“6”的所有职员的姓名和工资,写出的在全局模式上的SQL查询语句,并要求转换成相应的关系代数表示,画出全局查询树。 26 4.3.1. 进行全局优化,画出各步优化后的全局查询树。 26 4.3.2. 进行分片优化,画出各步优化后的分片查询树。 27 4.4. 下面是一个数据库系统出现故障是,日志文件中记录的信息; 27 4.4.1. 找出发生故障时系统中的活动事务,确定出反做和重做事务集。 27 4.4.2. 用C或其他语言定义出数据库记录(D记录)和检查点记录(K记录)的数据结构。 28 4.5. 设数据项x,y存放在S1场地,u,v存放在S2场地,有分布式事务T1和T2,T1在S1场地的操作为R1(x)W1(x)R1(y)W1(y),T2在S1场地的操作为R2(x)R2(y)W2(y);T1在S2场地上的操作作为R1(u)R1(v)W1(u),T2在S2场地上的操作作为W2(u)R2(v)W2(v)。对下述2种情况,各举一种可能的局部历程(H1和H2),并说明理由 28 4.5.1. 局部分别是可串行化,而全局是不可串行化的 28 4.5.2. 局部和全局都是可串行化的。 28 4.5.3. 要求按照严格的2PL协议,加上适当的加锁和解锁命令,(注意,用rl(x)表示加读锁,wl(x)表示加对x加写锁,ul(x)表示解锁) 28 5. 二零年秋试题 29 5.1. 概念题 29 5.1.1. 解释对象数据库系统中面向对象的相关概念 29 5.1.2. 从概念上比较对象数据库模型与对象关系模型 29 5.1.3. 利用左深树、右深树、浓密树来进行查询优化的各自特点 29 5.1.4. 试解释影响并行数据库系统中并行算法性能的三个因数 30 5.1.5. 简述用爬山算法进行查询优化的基本思想 30 5.2. 下面是某个公司一个人事关系数据库的全局模式: EMP={ENO*,ENAME,POSITION,PHONE} PAY={POSITION*,SALARY} ENO为职员号,POSITION为岗位。SALARY表示岗位对应的工资,*对应的属性表示主关键字。该公司分布在两个场地上,其中,在场地1经常处理所有职员数据,而场地2只处理工资低于1000的职员数据,为了节省磁盘空间和增大处理局部性: 30 5.2.1. 将以上全局关系进行分片设计,写出分片定义和分片条件。 30 5.2.2. 指出分片的类型,并画出分片树。 30 5.2.3. 给出分配设计。 31 5.3. 对题二所确定的分片模式,要求查询岗位为“salesman”的所有职员的姓名和工资,写出的在全局模式上的SQL查询语句,并要求转换成相应的关系代数表示,画出全局查询树。假设“salesman”的工资为800元。要求给出中间转换过程。 31 5.3.1. 进行全局优化,画出优化后的全局查询树。 31 5.3.2. 进行分片优化,画出优化后的分片查询树。 31 5.4. 按如下给出的条件,求出半连接优化计划和执行场地,并作后优化处理 32 5.5. 下面是当一个数据库系统出现故障时,日志文件中的信息 36 5.5.1. 画出对应的事务并发执行图。 37 5.5.2. 找出发生故障时系统中的活动事务,确定出反做和重做事务集。 37 5.5.3. 指出需要undo的和redo的数据记录。 37 5.6. 设数据项x,y存放在S1场地,u,v存放在S2场地,有分布式事务T1和T2。T1在S1场地的操作为R1(x)W1(x)R1(y)W1(y),T2在S1场地的操作为R2(x)R2(y)W2(y);T1在S2场地上的操作作为R1(u)R1(v)W1(u),T2在S2场地上的操作作为W2(u)R2(v)W2(v)。对下述2种情况,各举一种可能的局部历程(H1和H2),如果是可串行化的,指出事务的执行次序。对第3种情况,给出符合基本2PL协议的调度。(T1 加锁命令用L1(X)表示,开锁命令U1(X)表示。对任何数据的加锁可在事务开始后立即进行)。 38 5.6.1. 局部是不可串行化的。 38 5.6.2. 局部是可串行化的,而全局是不可串行化的。 38 5.6.3. 局部是可串行化的,全局也是可串行化的。 39 5.7. 设计一种满足下列要求的索引结构。 39 5.7.1. 被索引的数据集合为有序集 39 5.7.2. 在有序集上的查询操作都是基于位置来进行的 39 5.7.3. 当往有序集中插入或删除一个元素时,与该元素相关的后续元素的位置均要发生变化 39 5.7.4. 元素的类型可为任意类型(这一个小问题的解决需要考虑语言的特征) 39 6. 二零一春季试题 39 6.1. 39 6.1.1. 讨论集中式数据库和分布式数据库各自的优缺点。 39 6.1.2. 讨论在局域网和广域网两种情况下分布库设计的区别。 39 6.1.3. 解释分片透明性、复制透明性和位置透明性等三级透明性的区别。 39 6.1.4. 解释2PC协议如何在故障情况下保证事务的原子性的 40 6.1.5. 解释严格2PL协议与基本2PL协议的区别 40 6.2. 下面是某个公司一个人事关系数据库的全局模式: EMP={ENO*,ENAME,POSITION,PHONE} PAY={POSITION*,SALARY} ENO为职员号,POSITION为岗位。SALARY表示岗位对应的工资,*对应的属性表示主关键字。该公司分布在两个场地上,其中,在场地1经常处理所有职员数据,而场地2只处理工资低于1000的职员数据,为了节省磁盘空间和增大处理局部性: 41 6.2.1. 将以上全局关系进行分片设计,写出分片定义和分片条件。 41 6.2.2. 指出分片的类型,并画出分片树。 41 6.2.3. 给出分配设计。 41 6.3. 对题二所确定的分片模式,要求查询岗位为“salesman”的所有职员的姓名和工资,写出的在全局模式上的SQL查询语句,并要求转换成相应的关系代数表示,画出全局查询树。假设“salesman”的工资为1500元。要求给出中间转换过程。 41 6.3.1. 进行全局优化,画出优化后的全局查询树 42 6.3.2. 进行分片优化,画出优化后的分片查询树。 42 6.4. 下面是当一个数据库系统出现故障时,日志文件中的信息 43 6.4.1. 画出对应的事务并发执行图。 44 6.4.2. 找出发生故障时系统中的活动事务,确定出反做和重做事务集。 44 6.4.3. 指出需要undo的和redo的数据记录。 44 6.5. 设数据项x,y存放在S1场地,u,v存放在S2场地,有分布式事务T1和T2,T1在S1场地的操作为R1(x)W1(x)R1(y)W1(y),T2在S1场地的操作为R2(x)R2(y)W2(y);T1在S2场地上的操作作为R1(u)R1(v)W1(u),T2在S2场地上的操作作为W2(u)R2(v)W2(v)。对下述2种情况,各举一种可能的局部历程(H1和H2),如果是可串行化的,指出事务的执行次序。对第3种情况,给出符合基本2PL协议的调度。(T1 加锁命令用L1(X)表示,开锁命令U1(X)表示。对任何数据的加锁可在事务开始后立即进行)。 44 6.5.1. 局部是不可串行化的。 44 6.5.2. 局部是可串行化的,而全局是不可串行化的。 45 6.5.3. 局部是可串行化的,全局也是可串行化的。 455 1539浏览会员免费
- 本系统的主要功能是通过与数据库链接来实现教务信息、出勤信息、系统信息的管理功能。 本系统主要技术有: 1.数据库的建立和维护,采用SQL Server 2000来实现。 2.应用程序的开发,采用Delphi 7来实现。 3.系统的数据库连接,是采用ADO技术数据源连接方式; 4.数据库的具体操作,主要是在要使用数据库的界面使用了Adoconnection/AdoQuery、 AdoDatasource等数据集组件,并在此基础上对相应组件的属性、方法和事件进行了设置。本系统分为六个不同的界面: 用户登陆界面、系统主界面、出勤记录子界面、奖惩信息子界面、工资信息查看和查询子界面、用户信息管理子界面。5 618浏览会员免费
- (完整word版)软件需求规格说明书(实例).doc0 1834浏览会员免费
- IPD集成产品开发各阶段评审要素说明(3p) IPD-DCP和TR各阶段评审要素表完整(模板)5 1989浏览会员免费
- 空间参考(Spatial Reference)是GIS数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标。 在同一个地图上显示的地图数据的空间参考必须是一致的,如果两个图层的空间参考不一致,往往会导致两幅地图无法正确拼合,因此开发一个GIS系统时,为数据选择正确的空间参考非常重要。 在 ArcGIS 中,每个数据集都具有一个坐标系,该坐标系用于将数据集与通用坐标框架(如地图)内的其他地理数据图层集成。通过坐标系可在地图中集成数据集,以及执行各种集成的分析操作,例如叠加不同的源和坐标系中的数据图层。0 2707浏览会员免费
- 网络安全攻防演练防守方方案 网络安全攻防演练防守方方案全文共26页,当前为第1页。网络安全攻防演练防守方方案全文共26页,当前为第1页。 网络安全攻防演练防守方方案全文共26页,当前为第1页。 网络安全攻防演练防守方方案全文共26页,当前为第1页。 目录 1、攻防演习概述 2 1.1.攻防演习背景 2 1.2.攻击角度看防守 2 1.3.演习防守方法论 3 2.组织及职责分工 4 2.1.攻防演习组织 4 2.2职责分工 5 2.3.各阶段工作任务 6 3.防守工作方案 9 3.1.第一阶段:准备阶段 9 3.1.1.防守方案编制 10 3.1.2.防守工作启动会 10 3.1.3.重要工作开展 10 3.2.第二阶段:安全自查和整改阶段 11 3.2.1.网络安全检查 11 3.2.2.主机安全检查 12 3.2.3.应用系统安全检查 12 3.2.4.运维终端安全检查 13 3.2.5.日志审计 13 3.2.6.备份效性检查 14 3.2.7.安全意识培训 14 3.2.8.安全整改加固 15 3.3.第三阶段:攻防预演习阶段 15 3.3.1.预演习启动会 15 3.3.2.授权及备案 16 3.3.3.预演习平台 16 3.3.4.预演习攻击 16 3.3.5.预演习防守 17 3.3.6 预演习总结 18 3.4 第四阶段:正式防护阶段 18 3.4.1.安全事件实时监测 19 3.4.2.事件分析与处置 19 3.4.3.防护总结与整改 19 4.演习组织及工作计划 20 4.1.演习工作单位和组织分工 20 4.1.1.明确参演单位 20 4.1.2.演习工作组织架构 20 4.1.3.演习工作职责分工 20 4.2.初步工作计划 21 5.流量安全监测分析系统部署 23 6.主机加固实施 25 网络安全攻防演练防守方方案全文共26页,当前为第2页。网络安全攻防演练防守方方案全文共26页,当前为第2页。1、攻防演习概述 网络安全攻防演练防守方方案全文共26页,当前为第2页。 网络安全攻防演练防守方方案全文共26页,当前为第2页。 1.1.攻防演习背景 网络安全实战攻防演习(以下简称"攻防演习")是以获取目标系统的最高控制权为目标,由多领域安全专家组成攻击队,在保障业务系统安全的前提下,采用"不限攻击路径,不限制攻击手段"的攻击方式,而形成的"有组织"的网络攻击行为。 攻防演习通常是在真实环境下对参演单位目标系统进行可控、可审计的网络安全实战攻击,通过攻防演习检验参演单位的安全防护和应急处置能力,提高网络安全的综合防控能力。 近几年我国较大规模的攻防演习主要包括公安机关组织的针对关键信息基础设施的攻防演习、各部委组织的对各省和直属单位重要系统的攻防演习和大型企业组织的对下属单位重要系统的攻防演习。其中,公安部组织的"护网行动"是面向国家重要信息系统和关键信息基础设施的网络安全实战演习,通过实战网络攻击的形式检验我国关键信息基础设施安全防护和应急处置能力,"护网行动"已开展了3年,取得了十分显著的效果,督促各单位有效提升了网络安全防护水平。 1.2.攻击角度看防守 在攻防演习中,为充分检验参演单位及目标系统的安全防护、监测和应急处置能力,演习组织方通常会选择由经验丰富的安全专家组成攻击队开展网络攻击,在确保不影响业务的前提下,选择一切可利用的资源和手段,采用多变、灵活、隐蔽的攻击力求取得最大战果参演单位作为防守方,面对"隐蔽"的网络攻击,如何才能有效防御呢?"知彼知己,百战不殆",只有了解攻击方是如何开展攻击的,才能根据攻击特点建立完善的安全防护体系,有效抵御网络攻击。攻击方在组织入侵攻击时,通常会首先制定攻击策略、规划攻击线路,攻击者分工合作,力争在短时间内取得最大战果,常见的攻击步骤为信息收集、漏洞分析、渗透攻击和后渗透攻击 网络安全攻防演练防守方方案全文共26页,当前为第3页。网络安全攻防演练防守方方案全文共26页,当前为第3页。1.3.演习防守方法论 网络安全攻防演练防守方方案全文共26页,当前为第3页。 网络安全攻防演练防守方方案全文共26页,当前为第3页。 "护网"行动的防护应是基于"战时"的防护工作模式,根据护网行动要求,会有防守方和攻击方,同时对防守方设计了加分事宜,基于我司长期积累的攻击方的攻击路径和攻击手段,我司建议采用在主动防御架构下,建立基于可持续监测分析和响应的协同防护模式,分成事前阶段、事中阶段和时候阶段。 事前阶段是针对护网行动的前期准备阶段,重点是协助客户模式"护网"进行实战预演习,旨在发现隐患、检验防护和协同应急处置流程,同时协助客户减少被攻击面,开展专项安全检测,重点针对"攻击方"可能利用的安全漏洞进行安全检测,并提供安全建议。客户要基于已有的安全运营工作,进一步加强网络安全策0 2431浏览会员免费
- modflow说明书 以及一些操作手册 .整体特征 Visual MODFLOW 主要由四个用户界面组成:主菜单、输入模块、运行模块和输出模块,另外还有设置和帮助系统。 主菜单下包括以下选项: [文件]选择或退出Visual MODFLOW文件。 [输入]进入输入模块修改当前的Visual MODFLOW数据集。 [运行]进入运行模块修改时间参数及数值模拟。 [输出]进入输出模块对数值模拟结果后处理。 [设置]选择变量及溶质运移模型。 [帮助]关于Visual MODFLOW的主要信息。 在[文件]下有七个选项可供选择:[打开]打开一个已经存在的文件,[新建]建立一个新的数据集,[另存为]将当前模型赋与一个新的文件名,[输入]输入一个已经存在的MODFLOW数据集(其扩展名为.BAS),[输出]输出图形为世界坐标系下的AutoCAD DXF格式或模型坐标系下的EMF格式。[打印],[退出]。4 231浏览会员免费
- IPD-PDCP计划决策评审要素表 IPD-DCP和TR各阶段评审要素表完整(模板) IPD-PDCP计划决策评审要素表 IPD-DCP和TR各阶段评审要素表完整(模板)1 1829浏览会员免费
- Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。3 197浏览会员免费
- 英文版百度自动翻译,再校对了大部分翻译内容。2 1057浏览会员免费
- 第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据也越来越复杂。数据与其语义是不可分的。 500 这个数字可以表示一件物品的价格是 500 元,也可以表示一个学术会议参加的人数有 500 人,还可以表示一袋奶粉重 500 克。 ( 2 )数据库( DataBase ,简称 DB ) :数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。 ( 3 )数据库系统( DataBas 。 Sytem ,简称 DBS ) :数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统------4 145浏览会员免费
- 润乾报表函数文档,最全,最新的报表内部函数文档,包括数据集函数,时间函数,数学函数,字符串函数,并有详细的示例和说明5 136浏览会员免费
- 爱斯维尔word模板Elsevier5 2439浏览会员免费
- 帮助在java中调用weka中的数据集的源代码,java写的代码5 317浏览会员免费
- 本文严格按照官方对报告的内容要求,格式要求所写,为原创自制,请勿盗卖转载。本“运动目标控制与自动追踪系统”以MSP432P401R为控制核心,OpenMV作为视觉系统主要元件来实现对摄像头中出现的红色激光、绿色激光、屏幕边线、黑色胶带进行识别并处理,将处理结果发送给MSP432P401R控制核心。在本系统中采用两块MSP432P401R控制核心,分别控制一台二维电控云台。第一台云台上安装红色激光笔,主控根据接收到的屏幕边线的坐标信息控制电控云台带动红色激光在屏幕边线上进行移动。第二台云台上安装绿色激光笔,主控根据接收到的红色激光的坐标位置控制电控云台带动绿色激光进行追踪。在该系统中采用增量式PID算法对坐标信息进行处理,减少目标位置与实际位置的误差,以此对云台进行控制,使得运动目标控制与自动追踪功能更加稳定。0 3396浏览会员免费
- AHB大小:7MB很详细的AHB to APB Bridge面试总结很详细的AHB to APB Bridge面试总结0 2714浏览会员免费
- 第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据也越来越复杂。数据与其语义是不可分的。 500 这个数字可以表示一件物品的价格是 500 元,也可以表示一个学术会议参加的人数有 500 人,还可以表示一袋奶粉重 500 克。 ( 2 )数据库( DataBase ,简称 DB ) :数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。0 96浏览会员免费
- 第一章 1 数据库 Database 简称DB 是长期储存在计算机内 有组织的 可共享的大量数据集合 2 数据库的特征:数据按一定的数据模型组织 描述和储存;可为各种用户共享;冗余度较小;数据独立性较高;易扩展 3 数据库管理系统(简称DBMS)是位于用户与操作系统之间的一层数据库管理软件 DBMS的用途:科学地组织和存储数据 高效地获取和维护数据 DBMS的主要功能:数据定义功能;数据操纵功能;数据组织 存储和管理;数据库的事务管理和运行管理;数据库的建立和维护功能 4 数据库系统(Database System DBS)是实现有组织地 动态地存储大量关联数据 方便多用户访问的计算机软件 硬件和数据资源组成的系统 即采用了数据库技术的计算机系统 数据库系统的特点:数据独立性;数据结构化;数据共享性高 冗余度低 易扩充; 数据由DBMS统一管理和控制 ">第一章 1 数据库 Database 简称DB 是长期储存在计算机内 有组织的 可共享的大量数据集合 2 数据库的特征:数据按一定的数据模型组织 描述和储存;可为各种用户共享;冗余度较小;数据独立性较高;易扩展 3 数 [更多]4 1322浏览会员免费
- ESD -S20.20 -2021年,最新中文版 静电防护,最新版5 3660浏览会员免费
- 商用300KW储能方案 1技术要求及参数 放电倍率0.5C; 储能系统配置容量:300kWh。 2电池系统方案 2.1术语定义 电池采集均衡单元:管理一定数量串联电池模块单元,进行电压和温度的采集,对本单元电池模块进行均衡管理。在本方案中管理5并12串共计60支的电池。 电池簇管理单元:管理一个串联回路中的全部电池采集均衡单元,同时检测本组电池的电流,在必要时采取保护措施。在本方案中管理17台电池采集均衡单元。 电池阵列管理单元:管理PCS下辖全部电池簇管理单元,同时与PCS和后台监控系统通信,根据电池组状态请求PCS调整充放电功率。在本方案中管理2个并联的电池簇。 电池模块:由10支5并2串的单体电池组成。 图1 电池成组示意图 2.2电池系统集成设计方案 2.2.1电池系统构成 按照系统配置300kWh储存能量的技术需求,本储能系统项目方案共使用1台150kW的PCS。储能单元由一台PCS和2个电池簇组成,并配备一台电池阵列管理单元设备。每个电池簇由一台电池簇管理设备和17 个电池组组成。 储能系统方案设计全文共5页,当前为第1页。 储能系统方案设计全文共5页,当前为第1页。 2.2.2 电池系统计算书 项 目 单体 电池模块 电池组 电池簇 电池阵列 单体电池数目 1 10 60 1020 2040 标称电压(V) 3.2 6.4 38.4 652.8 652.8 容量(Ah) 55 275 275 275 -- 额定能量(kWh) 0.176 1.76 10.56 179.52 359.04 最低工作电压(V) 2.5 5 30 510 510 最高充电电压(V) 3.6 7.2 43.2 734.4 734.4 系统配置裕量 (359.04kWh -300 kWh)/300 kWh =19.68% 基于以上各项分析设计,300kWh 电池系统计算如下。 2.2.3电池柜设计方案 电池机柜内部主要安装电池箱和BMS主控管理系统、配套电线电缆、高低压电气保护部件等。机柜采用分组分层设计,机柜外观美观大方。机柜采用免维护技术、模数化组合的装配式结构,保证柜体结构具有良好的机械强度,整体结构能最大程度地满足整个系统的可靠性、安全性。 其中,三个电池架组成的示意图如图3所示,尺寸为3600mm×700mm×2300mm。 储能系统方案设计全文共5页,当前为第2页。 储能系统方案设计全文共5页,当前为第2页。 图3电池架及插箱 2.2.4集装箱设计方案 整个储能系统放置在20英尺集装箱中,集装箱尺寸为: 6058mm×2438 mm×2896mm;系集装箱外部结构如图4所示。 储能系统方案设计全文共5页,当前为第3页。 储能系统方案设计全文共5页,当前为第3页。 2.3 BMS系统管理配置方案 2.3.1系统架构 本项目所用BMS采用三层架构进行设计,分别是电池采集均衡单元、电池簇管理单元、电池阵列管理单元。 储能系统方案设计全文共5页,当前为第4页。 储能系统方案设计全文共5页,当前为第4页。 图5 电池管理系统结构图 电池采集均衡单元CABU:负责管理12 支串联电池,主要功能包括监测单体电池电压、温度以及均衡管理,以CAN 总线方式与BCMU 进行通信。 电池簇管理单元BCMU:主要负责管理单个串联回路中的电池采集均衡单元CABU 和电池电量标定单元BFGU,主要功能RS485 通信、CAN 通信、串联回路各组电池状态显示以及估算电池的SOC 等,在异常出现时采取报警或保护措施,并将相关采集的电池信息、异常信息、SOC 上传至BAMU。 BCMU 与BAMU 通信,通过CAN 总线将采集的单体电池电压、温度、电流、总电压和绝缘检测等级等上传至BAMU,并上传如表1 所列系统参数至BAMU。 MU 与BFGU 通信,通过RS485 总线接收 BFGU 上传的电流、总电压、绝缘检测等级、I/O 状态以及对外部状态进行控制。 BCMU 与CABU 通信,通过CAN 总线接收CABU 上传的单体电池电压、温度、均衡状态。 电池阵列管理单元BAMU:负责管理一个PCS 下辖的BCMU,同时与PCS、后台监控系统通信,主要功能包括记录PCS 下辖的所有电池状态信息、控制状态信息、异常数据或事件信息并创建相应的文件;根据各组电池的SOC信息以及电池组状态调整充放电功率;与PCS、储能站测控系统通信,完成对整个电池阵列的管理。 BAMU与BCMU通信,接收BCMU发送的单体电池电压、温度、总电压、电流和绝缘检测等级,计算电池堆的最高/最低电压、最高/最低温度、显示I/O状0 1359浏览免费
- IPD7个TR评审表(5p) IPD-DCP和TR各阶段评审要素表完整(模板)5 1364浏览会员免费
- IEEE Sensors Journal期刊模板(WORD版)0 3456浏览会员免费
- 林子雨《大数据技术原理应用》测试题.docx3 3807浏览会员免费
- 网络安全防护技战法报告 一、防守技战法概述 为了顺利完成本次护网行动任务,切实加强网络安全防护能力,XXXX设立HW2019领导组和工作组,工作组下设技术组和协调组。护网工作组由各部门及各二级单位信息化负责人组成,由股份公司副总裁担任护网工作组的组长。 为提高护网工作组人员的安全防护能力,对不同重要系统进行分等级安全防护,从互联网至目标系统,依次设置如下三道安全防线: 第一道防线:集团总部互联网边界防护、二级单位企业互联网边界防护。 第二道防线:广域网边界防护、DMZ区边界防护。 第三道防线:目标系统安全域边界防护、VPN。 根据三道防线现状,梳理出主要防护内容,包括但不限于:梳理对外发布的互联网应用系统,设备和安全措施,明确相关责任人,梳理网络结构,重要的或需要重点保护的信息系统、应用系统与各服务器之间的拓扑结构,网络安全设备及网络防护情况, SSLVPN和IPSECVPN接入情况。集团广域网、集团专线边界,加强各单位集团广域网、集团专线边界防护措施,无线网边界,加强对无线WIFI、蓝牙等无线通信方式的管控,关闭不具备安全条件及不必要开启的无线功能。 结合信息化资产梳理结果,攻防演习行动安全保障小组对集团信息化资产及重点下属单位的网络安全状况进行安全风险评估和排查,确认薄弱环节以便进行整改加固。 二、 防守技战法详情 2.1 第一道防线--互联网边界及二级单位防护技战法 2.1.1 安全感知防御、检测及响应 构建从"云端、边界、端点"+"安全感知"的防御机制。相关防护思路如下: 防御能力:是指一系列策略集、产品和服务可以用于防御攻击。这个方面的关键目标是通过减少被攻击面来提升攻击门槛,并在受影响前拦截攻击动作。 网络安全防护技战法报告全文共9页,当前为第1页。检测能力:用于发现那些逃过防御网络的攻击,该方面的关键目标是降低威胁造成的"停摆时间"以及其他潜在的损失。检测能力非常关键,因为企业应该假设自己已处在被攻击状态中。 网络安全防护技战法报告全文共9页,当前为第1页。 响应能力:系统一旦检测到入侵,响应系统就开始工作,进行事 处理。响应包括紧急响应和恢复处理,恢复处理又包括系统恢复和信息恢复。 2.1.2 安全可视及治理 l 全网安全可视 结合边界防护、安全检测、内网检测、管理中心、可视化平台,基于行为和关联分析技术,对全网的流量实现全网应用可视化,业务可视化,攻击与可疑流量可视化,解决安全黑洞与安全洼地的问题。 l 动态感知 采用大数据、人工智能技术安全,建立了安全态势感知平台,为所有业务场景提供云端的威胁感知能力。通过对边界网络流量的全流量的感知和分析,来发现边界威胁。通过潜伏威胁探针、安全边界设备、上网行为感系统,对服务器或终端上面的文件、数据与通信进行安全监控,利用大数据技术感知数据来发现主动发现威胁。 2.1.3 互联网及二级单位的区域隔离 在互联网出口,部署入侵防御IPS、上网行为管理,提供网络边界隔离、访问控制、入侵防护、僵尸网络防护、木马防护、病毒防护等。 在广域网接入区边界透明模式部署入侵防御系统,针对专线接入流量进行控制和过滤。 办公网区应部署终端检测和响应/恶意代码防护软件,开启病毒防护功能、文件监测,并及时更新安全规则库,保持最新状态。 服务器区部署防火墙和WEB应用防火墙,对数据中心威胁进行防护;汇聚交换机处旁路模式部署全流量探针,对流量进行监测并同步至态势感知平台;部署数据库审计系统,进行数据库安全审计。 在运维管理区,部署堡垒机、日志审计、漏洞扫描设备,实现单位的集中运维审计、日志审计和集中漏洞检查功能。 2.1.3.1 互联网出口处安全加固 网络安全防护技战法报告全文共9页,当前为第2页。互联网出口处双机部署了因特网防火墙以及下一代防火墙进行出口处的防护,在攻防演练期间,出口处防火墙通过对各类用户权限的区分,不同访问需求,可以进行精确的访问控制。通过对终端用户、分支机构不同的权限划分保障网络受控有序的运行。 网络安全防护技战法报告全文共9页,当前为第2页。 对能够通过互联网访问内网的网络对象IP地址进行严格管控,将网段内访问IP地址段进行细化,尽量落实到个人静态IP。 开启精细化应用控制策略,设置多条应用控制策略,指定用户才可以访问目标业务系统应用,防止出现因为粗放控制策略带来的互联网访问风险。 对所有通过联网接入的用户IP或IP地址段开启全面安全防护策略,开启防病毒、防僵尸网络、防篡改等防护功能。 通过对全网进行访问控制、明确权限划分可以避免越权访问、非法访问等情况发生,减少安全事件发生概率。 护网行动开始之前,将防火墙所有安全规则库更新到最新,能够匹配近期发生的绝大部分已知威胁,并通过SAVE引擎对未知威胁进行有效防护。 攻防演练期间,通过互联网访问的用户需要进行严格的认证策略和上网策略5 2871浏览会员免费
- IPD7个TR评审表要素文字版(8P) IPD-DCP和TR各阶段评审要素表完整(模板)5 1894浏览会员免费
- hadoop集群,MapReduce是一个编程模式,它是与处理/产生海量数据集的实现相关。用户指定一个map函数,通过这个map函数处理key/value(键/值)对,并且产生一系列的中间key/value对,并且使用reduce函数来合并所有的具有相同key值的中间键值对中的值部分。现实生活中的很多任务的实现都是基于这个模式的,正如本文稍后会讲述的那样。0 97浏览会员免费
- 1. 算法的基本概念 利用计算机算法为计算机解题的过程实际上是在实施某种算法。 (1)算法的基本特征 算法一般具有4个基本特征:可行性、确定性、有穷性、拥有足够的情报。 (2)算法的基本运算和操作 算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 (3)算法的3种基本控制结构 算法的3种基本控制结构是:顺序结构、选择结构、循环结构。 (4)算法基本设计方法 算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。 (5)指令系统 所谓指令系统指的是一个计算机系统能执行的所有指令的集合。 (2)数据结构研究的3个方面 ① 数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; ② 在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; ③ 对各种数据结构进行的运算。 2. 逻辑结构 数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合中的若干关系来表示。数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D;二是D上的关系,它反映了数据元素之间的前后件关系,通常记为R。一个数据结构可以表示成:B=(D,R) 其中,B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。 例如,如果把一年四季看作一个数据结构,则可表示成:B =(D,R) D ={春季,夏季,秋季,冬季} R ={(春季,夏季),(夏季,秋季),(秋季,冬季)} 3. 存储结构 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。 由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系),在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。 顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。 链式存储结构就是在每个结点中至少包含一个指针域,用指针来体现数据元素之间逻辑上的联系。 1.2.2 线性结构和非线性结构 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。 (1)如果一个非空的数据结构满足下列两个条件: ① 有且只有一个根结点; ② 每一个结点最多有一个前件,也最多有一个后件。 则称该数据结构为线性结构。线性结构又称线性表。在一个线性结构中插入或删除任何一个结点后还应是线性结构。栈、队列、串等都为线性结构。 如果一个数据结构不是线性结构,则称之为非线性结构。数组、广义表、树和图等数据结构都是非线性结构。 (2)线性表的顺序存储结构具有以下两个基本特点: ① 线性表中所有元素所占的存储空间是连续的; ② 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 元素ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。 (3)顺序表的运算有查找、插入、删除3种。 1.3 栈 1. 栈的基本概念 栈(stack)是一种特殊的线性表,是限定只在一端进行插入与删除的线性表。 在栈中,一端是封闭的,既不允许进行插入元素,也不允许删除元素;另一端是开口的,允许插入和删除元素。通常称插入、删除的这一端为栈顶,另一端为栈底。当表中没有元素时称为空栈。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。 栈是按照“先进后出”或“后进先出”的原则组织数据的。例如,枪械的子弹匣就可以用来形象的表示栈结构。子弹匣的一端是完全封闭的,最后被压入弹匣的子弹总是最先被弹出,而最先被压入的子弹最后才能被弹出。 二级公共基础知识速学教程 2. 栈的顺序存储及其运算 栈的基本运算有3种:入栈、退栈与读栈顶元素。 ① 入栈运算:在栈顶位置插入一个新元素; ② 退栈运算:取出栈顶元素并赋给一个指定的变量; ③ 读栈顶元素:将栈顶元素赋给一个指定的变量。 1.4 队列 1. 队列的基本概念 队列是只允许在一端进行删除,在另一端进行插入的顺序表,通常将允许删除的这一端称为队头,允许插入的这一端称为队尾。当表中没有元素时称为空队列。 队列的修改是依照先进先出的原则进行的,因此队列也称为先进先出的线性表,或者后进后出的线性表。例如:火车进遂道,最先进遂道的是火车头,最后是火车尾,而火车出遂道的时候也是火车头先出,最后出的是火车尾。若有队列: Q =(q1,q2,…,qn) 那么,q1为队头元素(排头元素),qn为队尾元素。队列中的元素是按照q1,q2,…,qn的顺序进入的,退出队列也只能按照这个次序依次退出,即只有在q1,q2,…,qn-1都退队之后,qn才能退出队列。因最先进入队列的元素将最先出队,所以队列具有先进先出的特性,体现“先来先服务”的原则。 队头元素q1是最先被插入的元素,也是最先被删除的元素。队尾元素qn是最后被插入的元素,也是最后被删除的元素。因此,与栈相反,队列又称为“先进先出”(First In First Out,简称FIFO) 或“后进后出”(Last In Last Out,简称LILO)的线性表。 2. 队列运算 入队运算是往队列队尾插入一个数据元素;退队运算是从队列的队头删除一个数据元素。 队列的顺序存储结构一般采用队列循环的形式。循环队列s=0表示队列空;s=1且front=rear表示队列满。计算循环队列的元素个数:“尾指针减头指针”,若为负数,再加其容量即可。 1.5 链表 在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。 链式存储方式既可用于表示线性结构,也可用于表示非线性结构。 (1)线性链表 线性表的链式存储结构称为线性链表。 在某些应用中,对线性链表中的每个结点设置两个指针,一个称为左指针,用以指向其前件结点;另一个称为右指针,用以指向其后件结点。这样的表称为双向链表。 在线性链表中,各数据元素结点的存储空间可以是不连续的,且各数据元素的存储顺序与逻辑顺序可以不一致。在线性链表中进行插入与删除,不需要移动链表中的元素。 线性单链表中,HEAD称为头指针,HEAD=NULL(或0)称为空表。 如果是双项链表的两指针:左指针(Llink)指向前件结点,右指针(Rlink)指向后件结点。 线性链表的基本运算:查找、插入、删除。 (2)带链的栈 栈也是线性表,也可以采用链式存储结构。带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈。 1.6 二叉树 1.6.1 二叉树概念及其基本性质 1. 二叉树及其基本概念 二叉树是一种很有用的非线性结构,具有以下两个特点: 二级公共基础知识速学教程 ① 非空二叉树只有一个根结点; ② 每一个结点最多有两棵子树,且分别称为该结点的左子树和右子树。 在二叉树中,每一个结点的度最大为2,即所有子树(左子树或右子树)也均为二叉树。另外,二叉树中的每个结点的子树被明显地分为左子树和右子树。 在二叉树中,一个结点可以只有左子树而没有右子树,也可以只有右子树而没有左子树。当一个结点既没有左子树也没有右子树时,该结点即为叶子结点。 例如,一个家族中的族谱关系如图1-1所示: A有后代B,C;B有后代D,E;C有后代F。 典型的二叉树如图1-1所示: 详细讲解二叉树的基本概念,见表1-2。 图1-1 二叉树图 表1-2 二叉树的基本概念 父结父结点(根) 在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。例如,在图1-1中,结点A是树的根结点。 子结点和 叶子结点 在树结构中,每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。例如,在图1-1中,结点D,E,F均为叶子结点。 度 在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。例如,在图1-1中,根结点A和结点B的度为2,结点C的度为1,叶子结点D,E,F的度为0。所以,该树的度为2。 深度 定义一棵树的根结点所在的层次为1,其他结点所在的层次等于它的父结点所在的层次加1。树的最大层次称为树的深度。例如,在图1-1中,根结点A在第1层,结点B,C在第2层,结点D,E,F在第3层。该树的深度为3。 子树 在树中,以某结点的一个子结点为根构成的树称为该结点的一棵子树。 2. 二叉树基本性质 二叉树具有以下几个性质: 性质1:在二叉树的第k层上,最多有2k-1(k≥1)个结点。 性质2:深度为m的二叉树最多有2m-1个结点。 性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。 性质4:具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分。 3. 满二叉树与完全二叉树 满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有结点都有两个子结点。在满二叉树中,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树有2m-1个结点。 完全二叉树是指这样的二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。 对于完全二叉树来说,叶子结点只可能在层次最大的两层上出现:对于任何一个结点,若其右分支下的子孙结点的最大层次为p,则其左分支下的子孙结点的最大层次或为p,或为p+1。 完全二叉树具有以下两个性质: 性质1:具有n个结点的完全二叉树的深度为[log2n]+1。 性质2:设完全二叉树共有n个结点。如果从根结点开始,按层次(每一层从左到右)用自然数1,2,……,n给结点进行编号,则对于编号为k(k=1,2,……,n)的结点有以下结论: ① 若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2); ② 若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(显然也没有右子结点); ③ 若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。 1.6.2 二叉树的遍历 在遍历二叉树的过程中,一般先遍历左子树,再遍历右子树。在先左后右的原则下,根据访问根结点的次序,二叉树的遍历分为三类:前序遍历、中序遍历和后序遍历。 (1)前序遍历 先访问根结点,然后遍历左子树,最后遍历右子树;并且在遍历左、右子树时,仍需先访问根结点,然后遍历左子树,最后遍历右子树。例如,对图1-1中的二叉树进行前序遍历的结果(或称为该二叉树的前序序列)为:A,B,D,E,C,F。 (2)中序遍历 先遍历左子树、然后访问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。例如,对图1-1中的二叉树进行中序遍历的结果(或称为该二叉树的中序序列)为: D,B,E, A,C,F。 (3)后序遍历 先遍历左子树、然后遍历右子树,最后访问根结点;并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。例如,对图1-1中的二叉树进行后序遍历的结果(或称为该二叉树的后序序列)为: D, E,B, F,C,A。 1.7 查找 1.7.1 顺序查找 查找是指在一个给定的数据结构中查找某个指定的元素。从线性表的第一个元素开始,依次将线性表中的元素与被查找的元素相比较,若相等则表示查找成功;若线性表中所有的元素都与被查找元素进行了比较但都不相等,则表示查找失败。 例如,在一维数组[21,46,24,99,57,77,86]中,查找数据元素99,首先从第1个元素21开始进行比较,比较结果与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,所以查找成功。如果查找数据元素100,则整个线性表扫描完毕,仍未找到与100相等的元素,表示线性表中没有要查找的元素。 在下列两种情况下也只能采用顺序查找: ①如果线性表为无序表,则不管是顺序存储结构还是链式存储结构,只能用顺序查找; ②即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。 1.7.2 二分法查找 二分法查找,也称拆半查找,是一种高效的查找方法。能使用二分法查找的线性表必须满足用顺序存储结构和线性表是有序表两个条件。 “有序”是特指元素按非递减排列,即从小到大排列,但允许相邻元素相等。下一节排序中,有序的含义也是如此。 对于长度为n的有序线性表,利用二分法查找元素X的过程如下: 步骤1:将X与线性表的中间项比较; 步骤2:如果X的值与中间项的值相等,则查找成功,结束查找; 步骤3:如果X小于中间项的值,则在线性表的前半部分以二分法继续查找; 步骤4:如果X大于中间项的值,则在线性表的后半部分以二分法继续查找。 例如,长度为8的线性表关键码序列为:[6,13,27,30,38,46,47,70],被查元素为38,首先将与线性表的中间项比较,即与第4个数据元素30相比较,38大于中间项30的值,则在线性表[38,46,47,70]中继续查找;接着与中间项比较,即与第2个元素46相比较,38小于46,则在线性表[38]中继续查找,最后一次比较相等,查找成功。 顺序查找法每一次比较,只将查找范围减少1,而二分法查找,每比较一次,可将查找范围减少为原来的一半,效率大大提高。 对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次, 二级公共基础知识速学教程 10 而顺序查找需要比较n次。 1.8 排序 1. 交换类排序法 (1)冒泡排序法 首先,从表头开始往后扫描线性表,逐次比较相邻两个元素的大小,若前面的元素大于后面的元素,则将它们互换,不断地将两个相邻元素中的大者往后移动,最后最大者到了线性表的最后。 然后,从后到前扫描剩下的线性表,逐次比较相邻两个元素的大小,若后面的元素小于前面的元素,则将它们互换,不断地将两个相邻元素中的小者往前移动,最后最小者到了线性表的最前面。 对剩下的线性表重复上述过程,直到剩下的线性表变空为止,此时已经排好序。 在最坏的情况下,冒泡排序需要比较次数为n(n-1)/2。 (2)快速排序法 任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一次排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。 2. 插入类排序法 ① 简单插入排序法,最坏情况需要n(n-1)/2次比较; ② 希尔排序法,最坏情况需要O(n1.5)次比较。 3. 选择类排序法 ① 简单选择排序法,最坏情况需要n(n-1)/2次比较; ② 堆排序法,最坏情况需要O(nlog2n)次比较。 相比以上几种(除希尔排序法外),堆排序法的时间复杂度最小。2.1 程序设计的方法与风格 养成良好的程序设计风格,主要考虑下述因素: (1)源程序文档化 ①符号名的命名:符号名的命名应具有一定的实际含义,以便于对程序功能的理解; ②程序注释:在源程序中添加正确的注释可帮助人们理解程序。程序注释可分为序言性注释和功能性注释。语句结构清晰第一、效率第二; ③视觉组织:通过在程序中添加一些空格、空行和缩进等,使人们在视觉上对程序的结构一目了然。 (2)数据说明的方法 为使程序中的数据说明易于理解和维护,可采用下列数据说明的风格,见表2-1。 表2-1 数据说明风格 数据说明风格 详细说明 次序应规范化 使数据说明次序固定,使数据的属性容易查找,也有利于测试、排错和维护 变量安排有序化 当多个变量出现在同一个说明语句中时,变量名应按字母顺序排序,以便于查找 使用注释 在定义一个复杂的数据结构时,应通过注解来说明该数据结构的特点 (3)语句的结构程序 语句的结构程序应该简单易懂,语句构造应该简单直接。 (4)输入和输出 输入输出比较简单,这里就不作介绍。 二级公共基础知识速学教程 12 2.2 结构化程序设计 1. 结构化程序设计的原则 结构化程序设计方法引入了工程思想和结构化思想,使大型软件的开发和编程得到了极大的改善。结构化程序设计方法的主要原则为:自顶向下、逐步求精、模块化和限制使用goto语句。 ① 自顶向上:先考虑整体,再考虑细节;先考虑全局目标,再考虑局部目标; ② 逐步求精:对复杂问题应设计一些子目标作为过渡,逐步细化; ③ 模块化:把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。 限制使用goto语句:在程序开发过程中要限制使用goto语句。 2. 结构化程序的基本结构 结构化程序的基本结构有三种类型:顺序结构、选择结构和循环结构。 ① 顺序结构:是最基本、最普通的结构形式,按照程序中的语句行的先后顺序逐条执行; ② 选择结构:又称为分支结构,它包括简单选择和多分支选择结构; ③ 循环结构:根据给定的条件,判断是否要重复执行某一相同的或类似的程序段。循环结构对应两类循环语句:先判断后执行的循环体称为当型循环结构;先执行循环体后判断的称为直到型循环结构。 2.3 面向对象方法 面向对象方法涵盖对象及对象属性与方法、类、继承、多态性几个基本要素。 1. 对象 通常把对象的操作也称为方法或服务。 属性即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。属性值应该指的是纯粹的数据值,而不能指对象。 操作描述了对象执行的功能,若通过信息的传递,还可以为其他对象使用。 二级公共基础知识速学教程 13 对象具有如下特征:标识惟一性、分类性、多态性、封装性、模块独立性。 2. 类和实例 类是具有共同属性、共同方法的对象的集合。它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。 类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的一组合法操作。 3. 消息 消息是实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。 一个消息由三部分组成:接收消息的对象的名称、消息标识符(消息名)和零个或多个参数。 4. 继承 广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。 继承分为单继承与多重继承。单继承是指,一个类只允许有一个父类,即类等级为树形结构。多重继承是指,一个类允许有多个父类。 5. 多态性 对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。 二级公共基础知识速学教程 14 第3章软件工程基础 3.1 软件工程基本概念 1. 软件定义与软件特点 软件指的是计算机系统中与硬件相互依存的另一部分,包括程序、数据和相关文档的完整集合。 程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令序列。 数据是使程序能正常操纵信息的数据结构。文档是与程序的开发、维护和使用有关的图文资料。 可见,软件由两部分组成: ?? 机器可执行的程序和数据; ?? 机器不可执行的,与软件开发、运行、维护、使用等有关的文档。 根据应用目标的不同,软件可分应用软件、系统软件和支撑软件(或工具软件),见表3-1。 表3-1 软件的分类 名称 描述 应用软件 为解决特定领域的应用而开发的软件 系统软件 计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件 支撑软件(或工具软件) 支撑软件是介于两者之间,协助用户开发软件的工具性软件 2. 软件工程 为了摆脱软件危机,提出了软件工程的概念。软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科。所谓软件工程是指采用工程的概念、原理、技术和方法指导软件的开发与维护。软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。 二级公共基础知识速学教程 软件工程包括3个要素:方法、工具和过程,见表3-2。 表3-2 软件工程三要素 名称 描述 方法 方法是完成软件工程项目的技术手段 工具 工具支持软件的开发、管理、文档生成 过程 过程支持软件开发的各个环节的控制、管理 3.2 软件生命周期 1. 软件生命周期概念 软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。 软件生命周期分为3个时期共8个阶段, ?? 软件定义期:包括问题定义、可行性研究和需求分析3个阶段; ?? 软件开发期:包括概要设计、详细设计、实现和测试4个阶段; ?? 运行维护期:即运行维护阶段。 软件生命周期各个阶段的活动可以有重复,执行时也可以有迭代,如图3-1所示。 图3-1 软件生命周期 15 二级公共基础知识速学教程 16 2. 软件生命周期各阶段的主要任务 在图3-1中的软件生命周期各阶段的主要任务,见表3-3。 表3-3 软件生命周期各阶段的主要任务 任务 描述 问题定义 确定要求解决的问题是什么 可行性研究与计划制定 决定该问题是否存在一个可行的解决办法,指定完成开发任务的实施计划 需求分析 对待开发软件提出需求进行分析并给出详细定义。编写软件规格说明书及初步的用户手册,提交评审 软件设计 通常又分为概要设计和详细设计两个阶段,给出软件的结构、模块的划分、功能的分配以及处理流程。这阶段提交评审的文档有概要设计说明书、详细设计说明书和测试计划初稿 软件实现 在软件设计的基础上编写程序。这阶段完成的文档有用户手册、操作手册等面向用户的文档,以及为下一步作准备而编写的单元测试计划 软件测试 在设计测试用例的基础上,检验软件的各个组成部分。编写测试分析报告 运行维护 将已交付的软件投入运行,同时不断的维护,进行必要而且可行的扩充和删改 3.3 软件设计 3.3.1 软件设计基本概念 (1)按技术观点分 从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。 ① 结构设计定义软件系统各主要部件之间的关系; ② 数据设计将分析时创建的模型转化为数据结构的定义; ③ 接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信; ④ 过程设计则是把系统结构部件转换为软件的过程性描述。 (2)按工程管理角度分 从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。 二级公共基础知识速学教程 17 ① 概要设计将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式; ② 详细设计确立每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。 3.3.2 软件设计的基本原理 1. 软件设计中应该遵循的基本原理和与软件设计有关的概念 (1)抽象 软件设计中考虑模块化解决方案时,可以定出多个抽象级别。抽象的层次从概要设计到详细设计逐步降低。 (2)模块化 模块是指把一个待开发的软件分解成若干小的简单的部分。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。 (3)信息隐蔽 信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。 (4)模块独立性 模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。模块的独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。内聚性是信息隐蔽和局部化概念的自然扩展。一个模块的内聚性越强则该模块的模块独立性越强。一个模块与其他模块的耦合性越强则该模块的模块独立性越弱。 2. 衡量软件模块独立性使用耦合性和内聚性两个定性的度量标准 内聚性是度量一个模块功能强度的一个相对指标。内聚是从功能角度来衡量模块的联系,它描述的是模块内的功能联系。内聚有如下种类,它们之间的内聚度由弱到强排列:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。 耦合性是模块之间互相连接的紧密程度的度量。耦合性取决于各个模块之间 二级公共基础知识速学教程 18 接口的复杂度、调用方式以及哪些信息通过接口。耦合可以分为多种形势,它们之间的耦合度由高到低排列:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合。 在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。 3.4 结构化分析方法 1. 结构化分析方法的定义 结构化分析方法就是使用数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树的工具,来建立一种新的、称为结构化规格说明的目标文档。 结构化分析方法的实质是着眼于数据流、自顶向下、对系统的功能进行逐层分解、以数据流图和数据字典为主要工具,建立系统的逻辑模型。 2. 结构化分析方法常用工具 (1)数据流图(DFD) 数据流图是系统逻辑模型的图形表示,即使不是专业的计算机技术人员也容易理解它,因此它是分析员与用户之间极好的通信工具。 (2)数据字典(DD) 数据字典是对数据流图中所有元素的定义的集合,是结构化分析的核心。 数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,若没有数据流图,数据字典也难于发挥作用。 数据字典中有4种类型的条目:数据流、数据项、数据存储和加工。 (3)判定表 有些加工的逻辑用语言形式不容易表达清楚,而用表的形式则一目了然。如果一个加工逻辑有多个条件、多个操作,并且在不同的条件组合下执行不同的操作,那么可以使用判定表来描述。 (4)判定树 判定树和判定表没有本质的区别,可以用判定表表示的加工逻辑都能用判定 二级公共基础知识速学教程 3. 软件需求规格说明书 软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之一。它的特点是具有正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性。 3.5 软件测试 3.5.1 软件测试的目的和准则 1. 软件测试的目的 Grenford.J.Myers给出了软件测试的目的: 测试是为了发现程序中的错误而执行程序的过程;好的测试用例(test case)能发现迄今为止尚未发现的错误; 一次成功的测试是能发现至今为止尚未发现的错误。 测试的目的是发现软件中的错误,但是,暴露错误并不是软件测试的最终目的,测试的根本目的是尽可能多地发现并排除软件中隐藏的错误。 2. 软件测试的准则 根据上述软件测试的目的,为了能设计出有效的测试方案,以及好的测试用例,软件测试人员必须深入理解,并正确 妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。 3.5.2 软件测试的方法和实施 1. 软件测试方法 软件测试具有多种方法,依据软件是否需要被执行,可以分为静态测试和动 二级公共基础知识速学教程 态测试方法。如果依照功能划分,可以分为白盒测试和黑盒测试方法。 (1)静态测试和动态测试 ① 静态测试包括代码检查、静态结构分析、代码质量度量等。其中代码检查分为代码审查、代码走查、桌面检查、静态分析等具体形式; ② 动态测试。静态测试不实际运行软件,主要通过人工进行分析。动态测试就是通常所说的上机测试,是通过运行软件来检验软件中的动态行为和运行结果的正确性。 动态测试的关键是使用设计高效、合理的测试用例。测试用例就是为测试设计的数据,由测试输入数据和预期的输出结果两部份组成。测试用例的设计方法一般分为两类:黑盒测试方法和白盒测试方法。 (2)黑盒测试和白盒测试 ① 白盒测试。白盒测试是把程序看成装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程。它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作; ② 黑盒测试。黑盒测试是把程序看成一只黑盒子,测试者完全不了解,或不考虑程序的结构和处理过程。它根据规格说明书的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。 2. 软件测试的实施 软件测试过程分4个步骤,即单元测试、集成测试、验收测试和系统测试。 单元测试是对软件设计的最小单位——模块(程序单元)进行正确性检验测试。单元测试的技术可以采用静态分析和动态测试。 集成测试是测试和组装软件的过程,主要目的是发现与接口有关的错误,主要依据是概要设计说明书。集成测试所设计的内容包括:软件单元的接口测试、全局数据结构测试、边界条件和非法输入的测试等。集成测试时将模块组装成程序,通常采用两种方式:非增量方式组装和增量方式组装。 确认测试的任务是验证软件的功能和性能,以及其他特性是否满足了需求规格说明中确定的各种需求,包括软件配置是否完全、正确。确认测试的实施首先运用黑盒测试方法,对软件进行有效性测试,即验证被测软件是否满足需求规格 二级公共基础知识速学教程 21 说明确认的标准。 系统测试是通过测试确认的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、支撑软件、数据和人员等其他系统元素组合在一起,在实际运行(使用)环境下对计算机系统进行一系列的集成测试和确认测试。 系统测试的具体实施一般包括:功能测试、性能测试、操作测试、配置测试、外部接口测试、安全性测试等。3.6 程序的调试 在对程序进行了成功的测试之后将进入程序调试(通常称Debug,即排错)。 程序的调试任务是诊断和改正程序中的错误。调试主要在开发阶段进行。 程序调试活动由两部分组成,一是根据错误的迹象确定程序中错误的确切性质、原因和位置;二是对程序进行修改,排除这个错误。 程序调试的基本步骤: ① 错误定位。从错误的外部表现形式入手,研究有关部分的程序,确定程序中出错位置,找出错误的内在原因; ② 修改设计和代码,以排除错误; ③ 进行回归测试,防止引进新的错误。 软件调试可分为静态调试和动态调试。静态调试主要是指通过人的思维来分析源程序代码和排错,是主要的设计手段,而动态调试是辅助静态调试的。 主要的调试方法有:强行排错法、回溯法和原因排除法3种。 二级公共基础知识速学教程 22 第4章数据库设计基础 4.1 数据库的基本概念 数据是数据库中存储的基本对象,它是描述事物的符号记录。 数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技术的根本目标是解决数据共享问题。 数据库管理系统(DBMS,Database Management System)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操作、数据维护、控制及保护和数据服务等。数据库管理系统是数据系统的核心。 为完成数据库管理系统的功能,数据库管理系统提供相应的数据语言:数据定义语言、数据操纵语言、数据控制语言。 4.2 数据库系统的发展和基本特点 1. 数据库系统的发展 数据管理技术的发展经历了3个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。 关于数据管理三个阶段中的软硬件背景及处理特点,简单概括可见表4-1。 2. 数据库系统的特点 数据独立性是数据与程序间的互不依赖性,即数据库中的数据独立于应用程序而不依赖于应用程序。 数据的独立性一般分为物理独立性与逻辑独立性两种。 ①物理独立性:当数据的物理结构(包括存储结构、存取方式等)改变时,如存储设备的更换、物理存储的更换、存取方式改变等,应用程序都不用改变。 ②逻辑独立性:数据的逻辑结构改变了,如修改数据模式、增加新的数据类型、改变数据间联系等,用户程序都可以不变。 4.3 数据库系统的内部体系结构 1. 数据统系统的3级模式 ①概念模式,也称逻辑模式,是对数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。一个数据库只有一个概念模式; ②外模式,外模式也称子模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,它是由概念模式推导而出来的,是数据库用户的数据 二级公共基础知识速学教程 24 视图,是与某一应用有关的数据的逻辑表示。一个概念模式可以有若干个外模式; ③内模式,内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。 内模式处于最底层,它反映了数据在计算机物理结构中的实际存储形式,概念模式处于中间层,它反映了设计者的数据全局逻辑要求,而外模式处于最外层,它反映了用户对数据的要求。 2. 数据库系统的两级映射 两级映射保证了数据库系统中数据的独立性。 ①概念模式到内模式的映射。该映射给出了概念模式中数据的全局逻辑结构到数据的物理存储结构间的对应关系; ②外模式到概念模式的映射。概念模式是一个全局模式而外模式是用户的局部模式。一个概念模式中可以定义多个外模式,而每个外模式是概念模式的一个基本视图。 4.4 数据模型的基本概念 数据模型从抽象层次上描述了数据库系统的静态特征、动态行为和约束条件,因此数据模型通常由数据结构、数据操作及数据约束三部分组成。 数据库管理系统所支持的数据模型分为3种:层次模型、网状模型和关系模型。数据模型特点见表4-2。 表4-2 各种数据模型的特点 发展阶段 主要特点 层次模型 用树形结构表示实体及其之间联系的模型称为层次模型,上级结点与下级结点之间为一对多的联系 网状模型 用网状结构表示实体及其之间联系的模型称为网状模型,网中的每一个结点代表一个实体类型,允许结点有多于一个的父结点,可以有一个以上的结点没有父结点 关系模型 用二维表结构来表示实体以及实体之间联系的模型称为关系模型,在关系模型中把数据看成是二维表中的元素,一张二维表就是一个关系 二级公共基础知识速学教程 25 4.5 E-R模型 1. E-R模型的基本概念 ①实体:现实世界中的事物可以抽象成为实体,实体是概念世界中的基本单位,它们是客观存在的且又能相互区别的事物; ②属性:现实世界中事物均有一些特性,这些特性可以用属性来表示; ③码:唯一标识实体的属性集称为码; ④域:属性的取值范围称为该属性的域; ⑤联系:在现实世界中事物间的关联称为联系。 两个实体集间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种:一对一的关系、一对多或多对一关系、多对多关系。 2. E-R模型的的图示法 E-R模型用E-R图来表示。 ①实体表示法:在E-R图中用矩形表示实体集,在矩形内写上该实体集的名字; ②属性表示法:在E-R图中用椭圆形表示属性,在椭圆形内写上该属性的名称; ③联系表示法:在E-R图中用菱形表示联系,菱形内写上联系名。 4.6 关系模型 关系模式采用二维表来表示,一个关系对应一张二维表。可以这么说,一个关系就是一个二维表,但是一个二维表不一定是一个关系。 ? 元组:在一个二维表(一个具体关系)中,水平方向的行称为元组。元组对应存储文件中的一个具体记录; ? 属性:二维表中垂直方向的列称为属性,每一列有一个属性名; ? 域:属性的取值范围,也就是不同元组对同一属性的取值所限定的范围。 在二维表中惟一标识元组的最小属性值称为该表的键或码。二维表中可能有若干个健,它们称为表的侯选码或侯选健。从二维表的所有侯选键选取一个作为 二级公共基础知识速学教程 26 用户使用的键称为主键或主码。表A中的某属性集是某表B的键,则称该属性值为A的外键或外码。 关系模型采用二维表来表示,二维表一般满足下面7个性质: ①二维表中元组个数是有限的——元组个数有限性; ②二维表中元组均不相同——元组的唯一性; ③二维表中元组的次序可以任意交换——元组的次序无关性; ④二维表中元组的分量是不可分割的基本数据项——元组分量的原子性; ⑤二维表中属性名各不相同——属性名唯一性; ⑥二维表中属性与次序无关,可任意交换——属性的次序无关性; ⑦二维表属性的分量具有与该属性相同的值域——分量值域的统一性。 关系操纵:数据查询、数据的删除、数据插入、数据修改。 关系模型允许定义三类数据约束,它们是实体完整性约束、参照完整性约束以及用户定义的完整性约束。 4.7 关系代数 1. 传统的集合运算 (1)投影运算 从关系模式中指定若干个属性组成新的关系称为投影。 投影是从列的角度进行的运算,相当于对关系进行垂直分解。经过投影运算可以得到一个新的关系,其关系模式所包含的属性个数往往比原关系少,或者属性的排列顺序不同。 (2)选择运算 从关系中找出满足给定条件的元组的操作称为选择。 选择是从行的角度进行的运算,即水平方向抽取记录。经过选择运算得到的结果可以形成新的关系,其关系模式不变,但其中的元组是原关系的一个子集。 (3)迪卡尔积 设有n元关系R和m元关系S,它们分别有p和q个元组,则R与S的笛卡儿积记为:R×S。 二级公共基础知识速学教程 27 它是一个m+n元关系,元组个数是p×q。 2. 关系代数的扩充运算 (1)交 假设有n元关系R和n元关系S,它们的交仍然是一个n元关系,它由属于关系R且由属于关系S的元组组成,并记为R∩S,它可由基本运算推导而得: R∩S = R – (R–S) 4.8 数据库设计与原理 数据库设计中有两种方法,面向数据的方法和面向过程的方法: 面向数据的方法是以信息需求为主,兼顾处理需求;面向过程的方法是以处理需求为主,兼顾信息需求。由于数据在系统中稳定性高,数据已成为系统的核心,因此面向数据的设计方法已成为主流。 数据库设计目前一般采用生命周期法,即将整个数据库应用系统的开发分解成目标独立的若干阶段。它们是:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段和进一步修改阶段。在数据库设计中采用前4个阶段。5 2583浏览会员免费
- 本人的大学毕业论文,写了一些有关网站优化优化的东西.因为是本科的毕业论文,写得自己觉得不够深入的.还有很多东西可以去学习的.比较数据集群方面的知识..0 136浏览会员免费
- bizTalk的数据集成技术 微软的数据集成解决方案0 107浏览会员免费
- 网络安全运营体系 建设方案 目录 第1章. 网络安全运营监控工作整体构想 7 1.1. 工作目标及原则 7 1.1.1. 工作目标 7 1.1.2. 工作原则 8 1.2. 安全运营流程分析 10 1.2.1. 安全预测 11 1.2.2. 安全防御 12 1.2.3. 安全检测 13 1.2.4. 安全响应 13 1.3. 安全运营工作架构 14 1.3.1. 安全防护框架 15 1.3.2. 安全运维框架 16 1.3.3. 安全验证框架 17 1.3.4. 安全度量框架 18 1.4. 安全运营支撑架构 19 1.4.1. 安全运营管理中心 20 1.4.2. 安全防护框架 20 1.4.3. 安全管理体系 20 1.4.4. 安全服务体系 21 1.5. 安全运营运行模式 21 第2章. 安全运营监控工作详细规划方案 24 2.1. 安全运营监控工作规划思路 25 2.1.1. 提升网络安全运营监控能力 25 2.1.2. 加强网络安全运营监控手段 27 2.1.3. 完善网络安全运营监控管理 29 2.2. 安全运营监控支撑平台规划方案 30 2.2.1. 大数据安全基础平台 31 2.2.2. 网络安全运营监控态势分析平台 35 2.2.3. 情报中心 63 2.2.4. 安全控制中心 64 2.3. 安全运营服务规划方案 66 2.3.1. 威胁检测服务 67 2.3.2. 应急响应服务 70 2.3.3. 渗透测试服务 75 2.3.4. 红蓝对抗服务 78 2.3.5. 安全风险评估 84 2.3.6. 安全咨询服务 98 2.4. 安全运营管理规划方案 100 2.4.1. 安全管理架构 100 2.4.2. 安全策略和管理制度 101 2.4.3. 安全管理机构和人员 103 2.4.4. 安全网络安全运营监控工作建设管理 106 2.4.5. 安全运维管理 107 2.4.6. 文件管理 110 第3章. 网络安全运营监控保障工作实施方案 112 3.1. 安全运营监控工作实施框架 112 3.1.1. 组织机构优化 112 3.1.2. 安全运营梳理 113 3.1.3. 安全运营试点示范 114 3.1.4. 安全运营国际化路线 115 3.2. 安全运营监控工作的实施标准 115 3.3. 安全运营监控工作实施方案 116 3.3.1. 实施原则 118 3.3.2. 安全运营监控工作体系 118 第4章. 网络安全运营保障方案 123 4.1. 网络安全运营监控管理委员会 123 4.2. 网络安全运营监控管理组 124 4.3. 网络安全运营执行组 124 4.4. 网络安全运营审核组 125 4.5. 网络安全运营事件应急响应小组 126 4.6. 网络安全运营保障制度及流程 127 4.7. 信息资产的安全管理 127 4.8. 资产的安全等级分类 127 4.9. 信息的安全标记和处理制度 127 4.10. 信息资产使用的安全管理 128 4.11. 资产使用记录清单 128 4.12. 资产责任人制度 128 4.13. 资产的合格使用管理规定 128 4.14. 资产管理制度及流程示例 128 4.15. 安服人力资源安全管理 134 4.16. 人员选择的安全管理制度 134 4.17. 人员使用安全管理制度 137 4.18. 人员职责终结或变更的安全管理制度 139 4.19. 人员离岗离职网络安全运营监控管理规定示例 139 4.20. 安全区域制度 141 4.21. 设备安全制度 145 4.22. 常规控制措施 150 4.23. 通讯及系统操作安全管理 151 4.24. 防范恶意代码和移动代码 156 4.25. 信息交换 156 4.26. 监督 157 4.27. 信息备份管理策略及流程示例 158 4.28. 用户职责 160 4.29. 监控系统访问与使用 162 4.30. 信息系统的获取、开发和维护 165 4.31. 信息系统安全要求 165 4.32. 网络安全运营事故管理 165 4.33. 报告网络安全运营事件和弱点 165 4.34. 网络安全运营事故的管理和改进 166 4.35. 网络安全运营事故管理程序流程示例 166 4.36. 管理服务流程 168 4.36.1. ITIL服务 169 4.36.2. ISO20000 171 4.36.3. 网络安全运营 173 4.36.4. 网络安全运营监控工作蓝图设计 173 4.36.5. 服务模式 176 4.36.6. 远程服务 177 4.36.7. 现场服务 177 4.36.8. 值班服务 178 4.36.9. 巡检服务 178 4.36.10. 优势 178 第5章. 网络安5 549浏览会员免费
- 对于KNN,SVM,adaboost以及决策树等分类算法对数据集运行结果进行总结,代码点我博文0 3129浏览会员免费
- 文档资料大小:2MB电量计的不二选择,同样是找了全网也没有发现中文资料,特此翻译的。电量计的不二选择,同样是找了全网也没有发现中文资料,特此翻译的。4 1314浏览会员免费
- 形考作业3: 基于UML的大学图书馆图书信息管理系统设计实验.docx0 3048浏览会员免费
- 通信原理第七版课后答案樊昌信.doc1 1092浏览会员免费
- 软件工程大作业——网上订餐系统 第1章 引言 第2章 可行性分析 第3章 需求分析 第4章 系统设计 第5章 系统实现 第6章 系统测试0 2958浏览会员免费
- TIA Portal(Totally Integrated Automation Portal),是西门子工业自动化集团发布的一款全新的全集成自动化软件。它是业内首个采用统一的工程组态和软件项目环境的自动化软件,几乎适用于所有自动化任务。借助该全新的工程技术软件平台,用户能够快速、直观地开发和调试自动化系统。TIA Portal是一种集成开发环境(IDE),它提供了一个综合平台,用于在同一工程中实现西门子公司的各种控制器、驱动器和通讯设备的配置、编程和调试。该软件平台支持多种编程语言,包括Ladder、SCL(Structured Control Language)、ST(Structured Text)和CFC(Continuous Function Chart)等。 安装环境 Win10及以上版本(64bit)5 1824浏览会员免费
- 简介: 1 Birt介绍 5 1.1 报表介绍 5 1.2 基本概念 5 1.3 丰富的报表 5 1.4 BIRT报表由四部分组成 6 1.5 报表设计器 6 2 Birt插件安装 8 2.1 插件版本说明 8 2.2 插件安装 9 2.2.1 完全安装 9 2.2.2 更新安装: 9 2.2.3 分步安装 9 3 Birt报表开发实战 13 3.1 创建报表 13 3.1.1 创建报表工程 13 3.1.2 创建报表 14 3.2 数据源配置 16 3.3 创建数据集 19 3.4 网格报表 20 3.4.1 创建数据源 21 3.4.2 创建数据集 21 3.4.3 对报表进行布局 21 3.4.4 格式化与预览 23 3.5 分组报表 24 3.5.1 创建数据源 25 3.5.2 构建数据集 25 3.5.3 对报表进行布局 25 3.5.4 设定分组数据 25 3.5.5 格式化报表 27 3.6 交叉报表 28 3.6.1 构建数据源 28 3.6.2 构建数据集 28 3.6.3 在报表中加入交叉报表 28 3.6.4 数据准备 29 3.6.5 向交叉表插入数据 32 3.6.6 加入汇总 33 3.6.7 格式化报表 34 3.7 嵌套报表 35 3.7.1 构建数据源 36 3.7.2 构建数据集 36 3.7.3 布局嵌套报表 38 3.7.4 将Table绑定数据集 39 3.7.5 设定主表数据 39 3.7.6 设定子表数据 40 3.8 交互报表 42 3.8.1 创建报表、数据源 43 3.8.2 创建数据集 43 3.8.3 加入响应参数 45 3.8.4 布局报表 47 3.8.5 插入报表数据 48 3.8.6 格式化与预览 49 3.9 报表钻取 51 3.9.1 设定响应参数 51 3.9.2 预览结果 54 3.10 图表报表 55 3.10.1 为报表插入图表 55 3.10.2 设定图表属性 55 3.10.3 图表预览 60 3.11 多层交叉报表 61 3.11.1 构建数据源 61 3.11.2 构建数据集 61 3.11.3 在报表中加入交叉报表 62 3.11.4 数据准备 63 3.11.5 向交叉表插入数据 63 3.11.6 格式化与预览 64 3.12 多层交叉汇总报表 65 3.12.1 加入汇总 65 3.12.2 格式化与预览 66 3.13 其他 67 3.13.1 格式化报表 67 3.13.1.1 表头与标题 67 3.13.1.2 设定单元格格式 68 3.13.1.3 样式套用 68 3.13.1.4 数据元素格式化 69 3.13.2 分页、页眉与页脚 70 3.13.2.1 设置分页显示 70 3.13.2.2 设置分页打印 70 3.13.2.3 设置页眉页脚 71 3.13.3 隔行高亮度显示 73 3.13.4 对报告进行布局 76 3.13.4.1 添加|删除行或列 76 3.13.4.2 指定行高或列宽 76 3.13.4.3 添加图像 77 3.13.5 数据绑定 79 4 Birt报表script 82 4.1 avascript脚本编写 82 4.1.1 隔行高亮度显示 82 4.1.2 多参数查询 84 4.1.3 脚本创建数据源 85 4.2 java脚本编写 88 4.2.1 创建java类 88 4.2.2 java类与报表交互 92 4.3 BIRT脚本参考 98 5 Birt报表部署 99 5.1 直接使用运行birt-runtime-2_2_0包中的WebViewerExample 99 5.2 集成到已有web应用 100 5.3 数据库驱动位置 107 5.4 报表url说明 107 5.5 web.xml配置 113 5.6 viewer.properties说明 115 5.7 BIRT在jsp中tag使用 116 5.8 关于BIRT编码 1235 209浏览会员免费