




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
杭州电子科技大学信息工程学院本科毕业设计 代码管理系统设计与实现毕业论文代码管理系统设计与实现毕业论文 目录 1 引引 言言 1 1 1 课题的背景及意义 1 1 2 课题现状 1 1 3 本课题的主要工作 3 2 需求分析及可行性研究需求分析及可行性研究 4 2 1 需求分析 4 2 1 1功能要求 4 2 1 2系统基本流程图 4 2 1 3性能要求 4 2 2 可行性研究 5 3 3 开发平台与技术的选择及介绍开发平台与技术的选择及介绍 6 3 1 开发环境的介绍 6 3 2 MFC 介绍 6 3 2 1 MFC概述 6 3 2 2 MFC框架 7 3 3 SQL SERVER 2000 的使用 8 3 4 VC 6 0 开发平台简介 8 3 5 MD5 技术 9 3 5 1 MD5简介 9 3 5 2算法描述 11 4 4 总体设计总体设计 12 4 1 体系结构设计 12 4 2 功能模块划分 12 4 3 界面设计 13 4 3 1 主界面设计 13 4 3 2 提交版本界面 14 4 3 3 工程信息界面 14 5 5 详细功能设计及编码实现详细功能设计及编码实现 15 5 1 主框架及界面模块详细设计 15 5 2 数据库配置与使用模块详细设计 22 5 2 1 数据库内容详细设计 22 杭州电子科技大学信息工程学院本科毕业设计 5 2 2 数据库配置与连接详细设计 22 5 3 MD5 哈希值判定文件差异详细设计 23 5 4 检出功能模块详细设计 23 5 5 提交功能模块详细设计 24 5 6 更新功能模块详细设计 24 5 7 工程设置功能详细设计 24 5 8 刷新功能模块详细设计 25 5 9 删除功能模块详细设计 25 6 6 测试测试 26 6 1 白盒测试 26 6 2 黑盒测试 26 6 2 1 测试环境配置 26 6 2 2 功能性测试 27 6 2 3 容错性测试 27 6 2 4 性能与效率测试 27 6 2 5 易用性测试 27 7 结结 论论 29 致致 谢谢 30 参考文献参考文献 31 杭州电子科技大学信息工程学院本科毕业设计 1 1 引引 言言 1 11 1 课题的背景及意义 伴随着 IT 行业的蓬勃发展 越来越多的软件开发公司诞生 软件开发行业 发展迅速的同时 各个软件公司的竞争也越来越激烈了 各企事业单位都要求 更好又快地完成软件的制作 同时为了避免在软件开发过程中出现严重错误 一种帮助他们管理代码的软件 即代码版本管理系统软件诞生了 只会编写代码的程序员未来可能会面对大范围失业 随着软件复用普遍 很多程序和模块都不用程序员自己编写 直接调用前人的成果 这样就加快了 开发的速度 在软件开发的过程中 除了需要调用现成的代码外 还需要记录 下软件开发的过程 以便日后出错时查找原因 设想一下 你正在使用世界上 最负载的文字处理程序 它除了不具备 撤销 按钮 但具有所有你可以 想到的功能 此时 你要多么小心翼翼地键入每一个字符 尤其当一篇大文 档接近完成的时候 更须加倍地小心 因为任何一个错误都会让你不得不从 头开始 在此情况下 代码管理就像是一个 撤销 按钮 它具有回到一 小时 一天或一周前工作状态的能力 从而让你的开发小组敢于更快地工作 即使是单独工作的开发人员 也有判断失误的瞬间 需要搞清楚何时为什 么引入了某个错误或者进行了某个修改 我们都难免如此 代码管理系统能够 跟踪每个文件的历史 使我们能够 让时光倒流 问题并不在于你是否需要 从历史中寻求答案 而在于你何时需要 1 21 2 课题现状 本课题目的是设计一个代码管理系统 是代码版本管理软件的小规模版本 实现个人软件代码的管理 代码版本管理技术已经比较成熟 CVS Concurrent Versions System 是最早的代码版本管理软件 在 2006 年世界上绝大多数的 开发团队还是使用 CVS 的 但至 2009 年 CVS 的地位已被 Subversion 取代 另外 市场上使用的较多的代码版本管理软件还有 VSS Clearcase 等 Visual Sourcesafe VSS 是微软开发的易用软件 拥有标准 Windows 操作界面只要对 微软的产品熟悉 就能很快上手 VSS 的安装和配置非常简单 对于该产品 不需要外部的培训 只要参考微软完备的随机文档 就可以很快的用到实际的 杭州电子科技大学信息工程学院本科毕业设计 2 工程当中 VSS 使用起来简单 但是安全性不高 功能较少 Clearcase 是 Rational 公司的产品 也是目前使用较多的代码版本管理工具 Clearcase 提 供 VSS CVS 所支持的功能 但不提供变更管理的功能 Rational 另提供了 ClearQuest 工具提供对变更管理的功能 Clearcase 后台的数据库是专有的结 构 Clearcase 对于 windows 和 unix 平台都提供支持 Clearcase 通过多点复 制支持多个服务器和多个点的可扩展性 并擅长设置复杂的开发过程 Clearcase 功能强大 安全性高 但不易于使用 虽然在 2006 年 时 Subversion 的使用族群仍然远少于传统的 CVS 但已经有许多开放原码团体决定将 CVS 转换为 Subversion 已经转换使 用 Subversion 的包括了 FreeBSD Apache Software Foundation KDE GNOME GCC Python Samba Mono 以及许多团 体 许多开发团队换用 Subversion 是因为 Trac SourceForge CollabNet CodeBeamer 等专案协同作业软件以及 Eclipse NetBeans 等 IDE 提供 Subversion 的支援整合 除此之外 一些 自由软件开发的协作网如 SourceF 除了提供 CVS 外 现在也提供 专案开发者使用 Subversion 作为原码管理系统 JavaForge Google Code 以及 BountySource 则以 Subversion 作为官方的原码管理系统 在 SVN 之前 CVS 是使用最广泛的版本管理软件 SVN 与 CVS 对比 的优点如下 统一的版本号 CVS 是对每个文件顺序编排版本号 在某一时间各文 件的版本号各不相同 而 Subversion 下 任何一次提交都会对所有文件增 加到同一个新版本号 即使是提交并不涉及的文件 所以 各文件在某任意 时间的版本号是相同的 版本号相同的文件构成软件的一个版本 原子提交 一次提交不管是单个还是多个文件 都是作为一个整体提 交的 在这当中发生的意外例如传输中断 不会引起数据库的不完整和数据 损坏 重命名 复制 删除文件等动作都保存在版本历史记录当中 对于二进制文件 使用了节省空间的保存方法 简单的理解 就是 只保存和上一版本不同之处 目录也有版本历史 整个目录树可以被移动或者复制 操作很简单 而且能够保留全部版本记录 分支的开销非常小 优化过的数据库访问 使得一些操作不必访问数据库就可以做到 这 杭州电子科技大学信息工程学院本科毕业设计 3 样减少了很多不必要的和数据库主机之间的网络流量 2009 年 绝大多数 CVS 服务已经改用 SVN CVS 已经停止维护 1 31 3 本课题的主要工作 本课题主要工作是设计一个源代码管理系统 是一个本地机系统 实现基 本的功能 如模块更新 版本控制功能 以实现个人软件代码的管理 在本论 文中将阐述本系统的功能 特点及使用方法 且详细阐述开发本软件所用的相 关技术 具体分析本系统的各个模块的功能及实现方法 说明本系统的设计思 想及方法 杭州电子科技大学信息工程学院本科毕业设计 4 2 需求分析及可行性研究 2 12 1 需求分析 2 1 1 功能要求 该系统要实现的 1 当点击 检出 按钮时 可以把数据库中的历史版本复制到用户指 定的文件目录中 2 当点击 提交 按钮时 如果当前文件版本有改动 则可以提交生 成新的文件版本 如果当前文件没有任何修改 则提交不成功 3 当点击 更新 按钮时 恢复工程路径下的文件 如果工程路径下 的文件被删除 则可以恢复 骨骼工程路径下的文件被修改 则无 法恢复到前一版本的文件 4 当点击 工程设置 按钮时 弹出一个 工程设置 界面 可以设 置工程路径 工程名字和查看工程信息 5 当点击 删除 按钮时 界面中当前版本的某个文件显示被删除 提交后生效 被删除的文件存到数据库中 而当前版本中没有该个 文件 2 1 2 系统基本流程图 本系统的基本流程图 如图 2 1 所示 2 1 3 性能要求 首先 要求程序对所运行之系统的硬件条件要求尽可能低 运行时内存占用 尽可能小 响应速度尽可能快 比如 在使用了某个功能按键之后 程序要在 1 至 2 秒内做出响应 并且不发生内存泄漏之类影响系统运行的错误事件 并且要求易 于维护及扩展 所以应该采用模块化开发 各个模块之间不要有太多的联系 以免维护困难 杭州电子科技大学信息工程学院本科毕业设计 5 退出系统 图 2 1 代码管理系统的基本流程图 2 22 2 可行性研究 1 成本可行性分析 因为本软件只做开发学习使用 所以暂且不考虑经济成本及盈利问题 2 技术可行性分析 首先我已经搭建好开发所需要的软硬件平台 并进行了合理而完善的需求 分析 做好了充分的前期准备工作 其次因为本程序的平台将基于 WINDOWS 将要使用 SQL Server 数据库系统技术 而 SQL Server 和 WINDOWS 都是微软公 司开发的 有完善成熟的兼容性 以及与 VC 开发环境的严密契合能力 加之编 程难度也可行 所以这个程序的开发可行性在技术上是完全可行的 开启 SQL Server 服务器 各功能操作 主界面 连接数据库 检出提交更新删除 工程设置刷新 杭州电子科技大学信息工程学院本科毕业设计 6 3 3 开发平台与技术的选择及介绍 3 13 1 开发环境的介绍 我所设计的是一个在个人开发软件帮助管理源代码的系统软件 要在短时 间内开发出来并且要满足客户要求 无论是硬件还是软件都要选择合适 要求如 下 开发设备应该完备 开发机器的性能必须稳定 操作系统的选择必须恬当 开发出的程序可以在尽可能多的平台上运行 要求运行机配置尽可能低档 对 此 我们选择的硬件环境和软件环境如下 1 硬件环境 开发该系统应尽可能采用高档的硬件 因此 在应用时应采用更好的配置 处理器 Intel Pentium PIII 或更高处理器 内存 128MB 或更高 2 软件环境 选择好的操作系统和好的编程语言是系统优劣的关键 我们要求系统在尽 可能多的环境下运行 故选择 Windows XP 平台 对于一些无法在 98 中运行的 API 函数 一律不采用 并采取优化的算法编写程序 因 VC6 0 具有友好的集 成开发界面 面向对象的可视化开发模式 良好的数据库及多媒体应用支持以 及高效的软件开发与程序运行 功能更大 开发效率更高 不仅是网络环境下的 优秀前端开发语言和工具 也是服务器端 Web 编程的优秀工具 加之我本人对 本系统的操作最为熟练 所以选择该平台为开发环境 操作系统 Windows XP 或 Windows2000 开发工具 VC 6 0 SQL Server 2000 3 23 2 MFC 介绍 3 2 1 MFC 概述 MFC 微软基础类 Microsoft Foundation Classes 实际上是微软提供的 用 于在 C 环境下编写应用程序的一个框架和引擎 VC 是 Windows 下开发 人员使用的专业 C SDK SDK Standard SoftWare Develop Kit 专业软件 开发平台 MFC 就是挂在它之上的一个辅助软件开发包 MFC 是 Win API 与 C 的结合 API 即微软提供的 WindowS 下应用程序的 杭州电子科技大学信息工程学院本科毕业设计 7 编程语言接口 是一种软件编程的规范 但不是一种程序开发语言本身 可以允许 用户使用各种各样的第三方的编程语言来进行对 WindowS 下应用程序的开发 使这些被开发出来的应用程序能在 WindowS 下运行 比如 VB VC Java Dehpi 编程语言函数本质上全部源于 API 因此用它们开发出来的应用程序都能工作在 WindowS 的消息机制和绘图里 遵守 WindowS 作为一个操作系统的内部实现 这 其实也是一种必要 微软如果不提供 API 这个世上对 Win 编程的工作就不会存在 微 软的产品就会迅速从时尚变成垃圾 上面说到 MFC 是微软对 API 函数的专用 C 封装 这种结合一方面让用户使用微软的专业 C SDK 来进行 WindowS 下 应用程序的开发变得容易 因为 MFC 是对 API 的封装 微软做了大量的工作 隐藏 了好多程序 开发人员在 WindowS 下用 C 一个例 外是菜单 CMenu 不是从窗口派生的 该类很大 这里不一一列举了 2 CDocument 文档 负责内存数据与磁盘的交互 最重要的是 OnOpenDocument 读入 OnSaveDocument 写盘 Serialize 读写 3 CView 视图 负责内存数据与用户的交互 包括数据的显示 用户操 作的响应 如菜单的选取 鼠标的响应 最重要的是 OnDraw 重画窗口 通 常用 CWnd Invalidate 来启动它 另外 它通过消息映射表处理菜单 工具条 快捷键和其他用户消息 你自己的许多功能都要加在里面 你打交道最多的就 杭州电子科技大学信息工程学院本科毕业设计 8 是它 4 CDC 设备文本 无论是显示器还是打印机 都是画图给用户看 这图 就抽象为 CDC CDC 与其他 GDI 图形设备接口 一起 完成文字和图形 图像的显示工作 把 CDC 想象成一张纸 每个窗口都有一个 CDC 相联系 负 责画窗口 CDC 有个常用子类 CClientDC 窗口客户区 画图通常通过 CClientDC 完成 5 CWinApp 应用程序类 似于 C 中的 main 函数 是程序执行的入口和 管理者 负责程序建立 消灭 主窗口和文档模板的建立 最常用函数就是 InitInstance 初始化 构建一个基于 MFC 框架的程序 可以使用 MFC 的向导程序 但首先要明白 一个基于 MFC 的程序可以有几种类型 基于单文档结构的程序 基于多文档结 构的程序以及基于对话框的应用程序 不同类型的程序具有不同的程序属性 使用其向导以及控件编程 使得不论是界面编写 还是程序内核设计 都更加 的简单 其中有合理的消息映射机制 有方便的运行时类型识别功能 更有文 档 视图结构设计 文档串行化功能等非常多的优秀功能 生成一个新的文档的时候 MFC 程序同时生成一个框架窗口 并且在框架 窗口的客户区中生成一个视窗对象作为框架窗口的子窗口 这个子窗口以可视 化的方式表现文档中的内容 视窗的重要功能就是负责处理用户的鼠标 键盘 等操作 通过对视窗对象的处理达到处理文档对象的目的 3 33 3 SQLSQL ServerServer 20002000 的使用 SQL Server 是一个关系数据库管理系统 它最初是由Microsoft Sybase 和 Ashton Tate 三家公司共同开发的 于 1988 年推出了第一个 OS 2 版本 在 Windows NT 推出后 Microsoft 与 Sybase 在 SQL Server 的开发上就分 道扬镳了 Microsoft 将 SQL Server 移植到 Windows NT 系统上 专注于 开发推广 SQL Server 的 Windows NT 版本 Sybase 则较专注于 SQL Server 在 UNIX 操作系统上的应用 SQL Server 2000 是 Microsoft 公司推出的 SQL Server 数据库管理系统 该版本继承了 SQL Server 7 0 版本的优点 同时又比它增加了许多更先进的 功能 具有使用方便可伸缩性好与相关软件集成程度高等优点 可跨越从运 行 Microsoft Windows 98 的膝上型电脑到运行 Microsoft Windows 2000 的 大型多处理器的服务器等多种平台使用 3 43 4 VC 6 0VC 6 0 开发平台简介 VC 是微软公司开发的一个 IDE 集成开发环境 换句话说 就是使用 C 杭州电子科技大学信息工程学院本科毕业设计 9 的一个开发平台 VC 是 Windows 平台上的 C 编程环境 学习 VC 要了解很多 Windows 平 台的特性并且还要掌握 MFC ATL COM 等的知识 难度比较大 Windows 下编程需要了解 Windows 的消息机制以及回调函数的原理 MFC 是 Win32API 的包装类 需要理解文档视图类的结构 窗口类的结构 消息流向等等 COM 是代码共享的二进制标准 需要掌握其基本原理等等 VC 作为一个主流的开发平台一直深受编程爱好者的喜爱 但是很多人却 对它的入门感到难于上青天 究其原因主要是大家对他错误的认识造成的 严 格的来说 VC 不是门语言 虽然它和 C 之间有密切的关系 如果形象点比喻 的话 可以把 C 看作为一种 工业标准 而 VC 则是某种操作系统平台下 的 厂商标准 而 厂商标准 是在遵循 工业标准 的前提下扩展而来的 VC 应用程序的开发主要有两种模式 一种是 WIN API 方式 另一种则是 MFC 方式 传统的 WIN API 开发方式比较繁琐 而 MFC 则是对 WIN API 再 次封装 所以 MFC 相对于 WIN API 开发更具备效率优势 所以使用 MFC 方式 开发应用程序较容易 3 53 5 MD5MD5 技术 3 5 1 MD5 简介 MD5 的全称是 Message digest Algorithm 5 信息 摘要算法 用于确保信 息传输完整一致 在 90 年代初由 MIT Laboratory for Computer Science 和 RSA Data Security Inc 的 Ronald L Rivest 开发出来 经 MD2 MD3 和 MD4 发展而 来 它的作用是让大容量信息在用数字签名软件签署私人密钥前被 压缩 成一 种保密的格式 就是把一个任意长度的字节串变换成一定长的大整数 不管 是 MD2 MD4 还是 MD5 它们都需要获得一个随机长度的信息并产生一个 128 位的信息摘要 虽然这些算法的结构或多或少有些相似 但 MD2 的设计与 MD4 和 MD5 完全不同 那是因为 MD2 是为 8 位机器做过设计优化的 而 MD4 和 MD5 却是面向 32 位的电脑 这三个算法的描述和 c 语言源代码在 Internet RFC 1321 中有详细的描述 http www ietf org rfc rfc1321 txt 这是一 份最权威的文档 由 Ronald L Rivest 在 1992 年 8 月向 IETF 提交 Rivest 在 1989 年开发出 MD2 算法 在这个算法中 首先对信息进行数据 补位 使信息的字节长度是 16 的倍数 然后 以一个 16 位的检验和追加到信 息末尾 并且根据这个新产生的信息计算出散列值 后来 Rogier 和 Chauvaud 发现如果忽略了检验和将产生 MD2 冲突 MD2 算法的加密后结果是唯一的 即没有重复 杭州电子科技大学信息工程学院本科毕业设计 10 为了加强算法的安全性 Rivest 在 1990 年又开发出 MD4 算法 MD4 算法 同样需要填补信息以确保信息的字节长度加上 448 后能被 512 整除 信息字节 长度 mod 512 448 然后 一个以 64 位二进制表示的信息的最初长度被添 加进来 信息被处理成 512 位 damg rd merkle 迭代结构的区块 而且每个区块 要通过三个不同步骤的处理 Den boer 和 Bosselaers 以及其他人很快的发现了 攻击 MD4 版本中第一步和第三步的漏洞 Dobbertin 向大家演示了如何利用一 部普通的个人电脑在几分钟内找到 MD4 完整版本中的冲突 这个冲突实际上 是一种漏洞 它将导致对不同的内容进行加密却可能得到相同的加密后结果 毫无疑问 MD4 就此被淘汰掉了 尽管 MD4 算法在安全上有个这么大的漏洞 但它对在其后才被开发出来 的好几种信息安全加密算法的出现却有着不可忽视的引导作用 除了 MD5 以 外 其中比较有名的还有 sha 1 RIPEMD 以及 Haval 等 一年以后 即 1991 年 Rivest 开发出技术上更为趋近成熟的 md5 算法 它 在 MD4 的基础上增加了 安全 带子 safety belts 的概念 虽然 MD5 比 MD4 稍微慢一些 但却更为安全 这个算法很明显的由四个和 MD4 设计有少许不 同的步骤组成 在 MD5 算法中 信息 摘要的大小和填充的必要条件与 MD5 完 全相同 Den boer 和 Bosselaers 曾发现 MD5 算法中的假冲突 pseudo collisions 但除此之外就没有其他被发现的加密后结果了 Van oorschot 和 Wiener 曾经考虑过一个在散列中暴力搜寻冲突的函数 brute force hash function 而且他们猜测一个被设计专门用来搜索 MD5 冲 突的机器 这台机器在 1994 年的制造成本大约是一百万美元 可以平均每 24 天就找到一个冲突 但单从 1991 年到 2001 年这 10 年间 竟没有出现替代 MD5 算法的 MD6 或被叫做其他什么名字的新算法这一点 我们就可以看出这 个瑕疵并没有太多的影响 MD5 的安全性 上面所有这些都不足以成为 MD5 的 在实际应用中的问题 并且 由于 MD5 算法的使用不需要支付任何版权费用 的 所以在一般的情况下 非绝密应用领域 但即便是应用在绝密领域内 MD5 也不失为一种非常优秀的中间技术 MD5 怎么都应该算得上是非常安 全的了 2004 年 8 月 17 日的美国加州圣巴巴拉的国际密码学会议 Crypto 2004 上 来自中国山东大学的王小云教授做了破译 MD5 HAVAL 128 MD4 和 RIPEMD 算法的报告 公布了 MD 系列算法的破解结果 宣告了固若金汤的世 界通行密码标准 MD 的堡垒轰然倒塌 引发了密码学界的轩然大波 令世界顶尖密码学家想象不到的是 破解 MD5 之后 2005 年 2 月 王小 云教授又破解了另一国际密码 SHA 1 因为 SHA 1 在美国等国际社会有更 杭州电子科技大学信息工程学院本科毕业设计 11 加广泛的应用 密码被破的消息一出 在国际社会的反响可谓石破天惊 换句 话说 王小云的研究成果表明了从理论上讲电子签名可以伪造 必须及时添加 限制条件 或者重新选用更为安全的密码标准 以保证电子商务的安全 MD5 破解工程权威网站 是为了公开征集专门针对 MD5 的攻击而设立的 网站于 2004 年 8 月 17 日宣布 中国研究人员发现了 完整 MD5 算法的碰撞 Wang Feng Lai 与 Yu 公布了 MD5 MD4 HAVAL 128 RIPEMD 128 几个 Hash 函数的碰撞 这是近年来密码学领域最具实质性 的研究进展 使用他们的技术 在数个小时内就可以找到 MD5 碰撞 由 于这个里程碑式的发现 MD5CRK 项目将在随后 48 小时内结束 MD5 用的是哈希函数 在计算机网络中应用较多的不可逆加密算法有 RSA 公司 发明的 MD5 算法和由美国国家技术标准研究所建议的安全散列算法 SHA 3 5 2 算法描述 对 MD5 算法简要的叙述可以为 MD5 以 512 位分组来处理输入的信息 且每一分组又被划分为 16 个 32 位子分组 经过了一系列的处理后 算法的输 出由四个 32 位分组组成 将这四个 32 位分组级联后将生成一个 128 位散列值 在 MD5 算法中 首先需要对信息进行填充 使其字节长度对 512 求余的 结果等于 448 因此 信息的字节长度 Bits Length 将被扩展至 N 512 448 即 N 64 56 个字节 Bytes N 为一个正整数 填充的方法如下 在信息的后 面填充一个 1 和无数个 0 直到满足上面的条件时才停止用 0 对信息的填充 然后 在在这个结果后面附加一个以 64 位二进制表示的填充前信息长度 经过 这两步的处理 现在的信息字节长度 N 512 448 64 N 1 512 即长度恰好 是 512 的整数倍 这样做的原因是为满足后面处理中对信息长度的要求 MD5 中有四个 32 位被称作链接变量 Chaining Variable 的整数参数 他 们分别为 A 0 x01234567 B 0 x89abcdef C 0 xfedcba98 D 0 x76543210 当设置好这四个链接变量后 就开始进入算法的四轮循环运算 循环的次 数是信息中 512 位信息分组的数目 将上面四个链接变量复制到另外四个变量中 A 到 a B 到 b C 到 c D 到 d 主循环有四轮 MD4 只有三轮 每轮循环都很相似 第一轮进行 16 次 操作 每次操作对 a b c 和 d 中的其中三个作一次非线性函数运算 然后将 所得结果加上第四个变量 文本的一个子分组和一个常数 再将所得结果向右 环移一个不定的数 并加上 a b c 或 d 中之一 最后用该结果取代 a b c 杭州电子科技大学信息工程学院本科毕业设计 12 或 d 中之一 杭州电子科技大学信息工程学院本科毕业设计 13 4 4 总体设计 4 14 1 体系结构设计 通常的代码版本控制软件 都采用客户机 服务器 C S 体系结构 C S 结构 是这样的一种结构 它包括一个客户机 或前端 一个服务器 或称后端 客户机 的作用是访问和处理远程服务器上的数据 服务器的作用是接收和处理客户机的 数据请求 有时 可能有多个客户向同一个服务器同时请求服务 这就需要服务器 决定怎样处理这些请求 Client Server 结构是当前数据库应用程序中极为流行的 一种方式 尤其是网络技术的发展 使得当前很多系统都采用这种方式进行构造 其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成 这样有 利于充分合理的利用系统资源 另外它的服务器端还可以将信息集中起来 任 何客户机都可以通过访问服务器而获得所需的信息 Client Server 模型最终可归 结为一种 请求 应答 关系 一个请求总是首先被客户发出 然后服务器总是被动 地接收请求 返回客户需要的结果 在客户发出一个请求之前 服务进程一直处于 休眠状态 一个客户提出请求后 服务进程被 唤醒 并且为客户提供服务 对客户 的请求做出所需要的应答 如图 4 1 所示 数据库PC 机 接收请求 传递数据 各项操作 请求数据 图 4 1 客户机 服务器通信结构示图 我要实现的是个人软件源代码的管理 也要用到数据库服务器 本文设计 的代码管理系统是把服务器与客户端融合在一台 PC 机上即可 而不用另外单 独的服务器 4 24 2 功能模块划分 根据以上的系统需求分析 以及体系结构设计 可以对系统进行如下的功 能模块划分如图 4 2 所示 杭州电子科技大学信息工程学院本科毕业设计 14 主程序模块 连接数据库模块主功能模块 检出更新提交查看数据库读取数据库存储 图 4 2 功能模块划分示图 我觉得这样的模块划分设计符合强内聚 弱耦合的原则 并且易于实现 4 34 3 界面设计 4 3 14 3 1 主界面设计 SVN 是目前使用人数最多的代码版本管理系统 本文主要是仿照 SVN 来 设计界面的 具体如图 4 3 所示 主界面是由菜单 版本列表 信息列表和差异信息列表 4 个模块组成 1 菜单栏里设有主要功能操作按键 检出 提交 更新 工程设置 刷 新和删除 2 版本列表显示的是各个已经正式生成的历史版本和当前测试版本 3 信息列表显示文件的具体信息有 文件名称 文件状态 文件内容 MD5 哈希值 主版本号和子版本号 4 差异信息列表显示当前版本与上一版本的差异 图 4 3 SVN 主界面示意图 杭州电子科技大学信息工程学院本科毕业设计 15 4 3 24 3 2 提交版本界面 本文的提交版本界面设计也是模仿 SVN 的提交界面的模版而设计的 具体 如下图 4 4 所示 提交版本界面有 2 个模块 信息和变更列表 信息框中用户可以填写备注 信息 方便以后查看 变更列表里显示的是当前测试版本对文件进行的改变 图 4 4 SVN 提交界面示意图 4 3 34 3 3 工程信息界面 本文的工程信息界面是在现有的 SVN 日志界面的基础上 添加了一个工程 设置功能设计而成的 具体如下图 4 5 所示 工程信息界面里可以查看版本日志和进行工程设置 日志内容包括生成版 本是的备注信息和版本生成时的日期 工程设置可以设置工程名 设置工程路 径和清空工程 图 4 5 SVN 工程信息界面 杭州电子科技大学信息工程学院本科毕业设计 16 5 5 详细功能设计及编码实现 5 15 1 主框架及界面模块详细设计 一 主框架模块详细设计 由于该系统基本架构为基于对话框的 MFC WIN32 应用程序 所以以主框架 模块由许多类构成 它们都是由 MFC 应用程序向导所生成 CAboutDlg 类 CBKView 类 CLogDlg 类 CLTree 类 CMainFrame 类 CMiniSvnApp 类 CMiniSvnDoc 类 CMiniSvnView 类 Tag Verinfo 类 Tag VersionFile 类以及 Globals 类 核心的部分是 CBKView 类 CLTree 类 CMainFrame 类 CMiniSvnView 类 结构如图 5 1 所示 图 5 1MiniSvn 类结构图 其中前面为红色方块的为类成员函数 浅蓝色方块的为类成员数据 下面 对这些类的设计进行详细的说明 1 CBKView 类是显示在主界面底部的差异信息列表 这里是以一种网格 形式显示的 其列表中包括文件名称 文件内容 Md5 哈希值 主版本号 子 杭州电子科技大学信息工程学院本科毕业设计 17 版本号和状态等列名 这些属性是确定一个文件的依据 方便下用户查询 其 中状态列属性是 CBKView 类中特有的 用来表示该文件与上一版本中文件的变 更 即添加 修改 删除状态 其核心代码为 void CBKView OnInitialUpdate g pView 2 this CListView OnInitialUpdate CListCtrl listCtrl ModifyStyle 0 LVS REPORT listCtrl ModifyStyle LVS EDITLABELS 0 禁止修改列标题 listCtrl SetExtendedStyle LVS EX FULLROWSELECT LVS EX ONECLICKACTIVATE LVS EX INFOTIP LVS EX S UBITEMIMAGES LVS EX GRIDLINES listCtrl InsertColumn 0 文件名称 LVCFMT LEFT 60 listCtrl InsertColumn 1 文件内容 LVCFMT LEFT 280 listCtrl InsertColumn 2 Md5 哈希值 LVCFMT LEFT 120 listCtrl InsertColumn 3 主版本号 LVCFMT LEFT 80 listCtrl InsertColumn 4 子版本号 LVCFMT LEFT 100 listCtrl InsertColumn 5 状态 LVCFMT LEFT 100 m Imglist Create 16 16 ILC COLORDDB ILC MASK 4 4 创建图标 列表 m Imglist Add AfxGetApp LoadIcon IDI FILE OK m Imglist Add AfxGetApp LoadIcon IDI FILE ADD m Imglist Add AfxGetApp LoadIcon IDI FILE CHG m Imglist Add AfxGetApp LoadIcon IDI FILE DEL listCtrl SetImageList UpdateView void CBKView UpdateView CListCtrl listCtrl DeleteAllItems CString strInfo 2 杭州电子科技大学信息工程学院本科毕业设计 18 for int i 0 iLoadIcon IDI SYS NAME ImgTree Add AfxGetApp LoadIcon IDI LIB PRJ ImgTree Add AfxGetApp LoadIcon IDI LIB CLOSE ImgTree Add AfxGetApp LoadIcon IDI LIB OPEN CTreeCtrl CtlTree SetBkColor RGB 210 230 190 CtlTree SetImageList 设置列表视图的风格 DWORD dwStyle GetWindowLong CtlTree m hWnd GWL STYLE dwStyle TVS HASBUTTONS TVS HASLINES TVS LINESATROOT 杭州电子科技大学信息工程学院本科毕业设计 19 SetWindowLong CtlTree m hWnd GWL STYLE dwStyle UpdateView void CLTree UpdateView CTreeCtrl CtlTree DeleteAllItems int i 0 TV INSERTSTRUCT tvRoot 树根 TV INSERTSTRUCT tvSecond 树枝 TV INSERTSTRUCT tvThree 树叶 HTREEITEM item root tvRoot hParent NULL tvRoot item pszText g sPName tvRoot item mask TVIF TEXT TVIF IMAGE TVIF SELECTEDIMAGE tvRoot item iImage 1 tvRoot item iSelectedImage 1 item root CtlTree InsertItem CString str str Format 测试版本 10 tvSecond hParent item root tvSecond item pszText str GetBuffer 0 tvSecond item mask TVIF TEXT TVIF IMAGE TVIF SELECTEDIMAG E tvSecond item iImage 0 tvSecond item iSelectedImage 0 HTREEITEM item second CtlTree InsertItem CtlTree SelectItem item second for i 0 iUpdateView 1 CBKView g pView 2 UpdateView else if str 测试版本 g nSelVid g nCurVid 1 static int i 0 杭州电子科技大学信息工程学院本科毕业设计 21 if i getDBVersion 0 0 getDBVersion 2 0 getFileVer CMiniSvnView g pView 1 UpdateView CBKView g pView 2 UpdateView i 1 AfxMessageBox str pResult 0 3 CMainFrame 类是本程序的主要载体类 其他的模块都要在这里使用或 者是要借用 CMainFrame 类来实现具体可视化的操作 本程序的主要操作有检出 提交 更新 工程设置 刷新和删除 CmainFrame 类规范了检出 提交等操作 的目标与要求 检出操作只能检出已经生成的版本 即历史版本 而不能检出 当前为生成正式的测试版本 如果用户不按要求时 则程序弹出警告对话框提 示 如图 5 2 所示 图 5 2 检出出错提示 当用户在未对测试版本进行变更操作时就进行提交生成版本 则不能生成 新版本 系统会有提示 当前版本没有任何改动 您不能提交 具体如图 5 3 所示 杭州电子科技大学信息工程学院本科毕业设计 22 图 5 3 提交出错提示 4 CMiniSvnView 类是住界面中右边的信息列表的主题类 它和 CBKView 类中的列名基本一致 只相差一个状态列 CMiniSvnView 类右边信息列表显示 的鼠标指定的版本中的版本文件信息 即只存在于该版本中的文件信息 而 CBKView 底部信息列表则是显示鼠标指定的版本于前一版本的差别或者说变更 信息 具体可视化图 如下 5 4 所示 图 5 4 CMiniSvnView 类与 CBKView 类显示内容差异 二 主界面图标详细设计 主界面是由 4 个模块组成的 菜单栏 左树列表 右信息列表和底部差异 信息列表 在主界面中用到很多图标表示不同的对象和信息状态 1 显示器图标 表示测试版本 这里存储的是当前正在编写的程序文件 即有待改进的文件 2 文件夹图标 表示历史版本 这里存储的是已经生成的文件版本 用户 不能对这些文件进行修改于删除 而只能对其进行检出操作 3 绿色加号图标 表示该文件在该版本中是第一次出现 即刚添加进来 或者是表示自该文件第一次添加进来后 未曾被修改过 4 红色圆圈图标 表示该文件在该版本中被修改过 详细的修改信息可以 通过子版本号查看在第几版本中进行修改 5 红色十字叉图标 表示该文件被删除 通过子版本号得知在第几版中被 杭州电子科技大学信息工程学院本科毕业设计 23 删除 6 绿色钩图标 表示测试版本与上一次生成的版本没有差异 即未做任何 修改 由此 可得知不能对现在的测试版本进行提交操作 5 25 2 数据库配置与使用模块详细设计 5 2 15 2 1 数据库内容详细设计 代码管理系统要用到数据库存储版本信息 我使用 SQL Server 2000 来存储 各个版本信息 首先要进入 SQL Server 2000 企业管理器建立一个数据库 名称 为 MiniSvn 数据库中表选项有 5 个 分别是 project repository states tmp v 和 versions 存储过程选项也有 5 个 分别是 up CheckOut up ClrPrj up GetCurV up GetInfo 和 up VChg Project 表示 工程表 Repository 表示 版本库表 States 表示 状态表 tmp v 表示 临时表 数据中转用的 versions 表示 版本表 up CheckOut 表示 检出指定版本 带所需版本参数 up ClrPrj 表示 清除工程 清除工程中的版本文件 up GetCurV 表示 获取最新版本 up GetInfo 表示 获取工程信息 up VChg 表示 获取版本变更信息 5 2 2 数据库配置与连接详细设计 首先 要开题 SQL Server2000 的服务器 否则程序将无法打开使用 要想 正常运行 MiniSvn exe 文件 另外必须有一个数据库配置文件 MiniSvn ini MiniSvn ini 该文件是确定 MiniSvn exe 程序与数据源的连接 其代 码为 DB DataSource DSN MiniSvn UID sa PWD trasin 如果没有这个文件 MiniSvn ini 则会弹出错误 不能进入主界面 如图 5 5 所 示 杭州电子科技大学信息工程学院本科毕业设计 24 图 5 5 配置错误 有了配置文件 MiniSvn ini 程序才能正常运行 程序初始化时 将会自动 调用数据库中的工程信息内容 版本号 版本备注信息和创建时间 显示在程 序工程信息界面模块中 进入主界面后 系统默认指向测试版本 所以右边信 息列表显示的是测试版本中的内容信息 当用户鼠标点击其他的版本时 系统 自动打开数据库连接 并执行查询 SQL 语句 将结果显示在信息列表和差异信 息列表中 执行完这些后 系统自动关闭数据库连接 除了这个功能之外 其 他操作也会直接用到数据库连接 比如 检出 提交 更新和工程设置 5 35 3 Md5Md5 哈希值判定文件差异详细设计 要实现代码管理系统的难点就是如何判定一个文件是否发生改变 然而判 定文件差异对于本系统软件来说是非常重要的 通过判定文件的差异 文件状 态随之改变 通过判定文件的差异 文件图标也会改变 通过判定文件差异 系统可以判断是否可以进行提交操作 所以 判定文件差异的工作要十分谨慎 本人做的代码管理系统软件 用的是 MD5 哈希值判定文件差异 MD5 技术已 经在第三章详细介绍过 这里再做简单的说明 MD5 的典型应用是对一段信息 Message 产生信息摘要 Message Digest 以防止被篡改 比如 在 UNIX 下有很多软件在下载的时候都有一个 文件名相同 文件扩展名为 md5 的文件 在这个文件中通常只有一行文本 大 致结构如 MD5 tanajiya tar gz 0ca175b9c0f726a831d895e269332461 这就是 tanajiya tar gz 文件的数字签名 MD5 将整个文件当作一个大文本信 息 通过其不可逆的字符串变换算法 产生了这个唯一的 MD5 信息摘要 为 了让读者朋友对 MD5 的应用有个直观的认识 笔者以一个比方和一个实例来 简要描述一下其工作过程 大家都知道 地球上任何人都有自己独一无二的指纹 这常常成为公安机 关鉴别罪犯身份最值得信赖的方法 与之类似 MD5 就可以为任何文件 不管 其大小 格式 数量 产生一个同样独一无二的 数字指纹 如果任何人对文 件做了任何改动 其 MD5 值也就是对应的 数字指纹 都会发生变化 我们常常在某些软件下载站点的某软件信息中看到其 MD5 值 它的作用 就在于我们可以在下载该软件后 对下载回来的文件用专门的软件 如 Windows MD5 Check 等 做一次 MD5 校验 以确保我们获得的文件与该站点 提供的文件为同一文件 利用 MD5 算法来进行文件校验的方案被大量应用到 软件下载站 论坛数据库 系统文件安全等方面 5 45 4 检出功能模块详细设计 杭州电子科技大学信息工程学院本科毕业设计 25 检出功能是代码管理系统主功能之一 其作用是把历史版本库中的文件调 用 复制并粘贴到用户指定的目录中 用户只能对历史版本进行检出 不能对 当成的测试版本进行检出 因为测试版本 以可视化的方式存放于用户自己
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年家电行业智能家电发展前景报告
- 商场安保消防安全培训课件
- 2025年量子科技行业应用前景与技术突破研究报告
- 2025年环保科技行业环保科技应用前景研究报告
- 商场保安安全培训总结课件
- 宁波市2025年浙江宁波卫生职业技术学院招聘工作人员4名笔试历年参考题库附带答案详解
- 四川省2025年上半年四川省广安市“小平故里英才”引进急需紧缺专业人才笔试历年参考题库附带答案详解
- 南京市2025江苏南京科技职业学院招聘工作人员7人(第二批)笔试历年参考题库附带答案详解
- 2025湖南省水务规划设计院有限公司招聘25人笔试参考题库附带答案详解
- 2025河南农业投资集团子公司招聘13人笔试参考题库附带答案详解
- 边坡工程第3章 边坡工程地质勘察
- 索思医疗卓越产品系列穿戴式动态心电监测产品
- 全国医药行业特有职业技能竞赛中药调剂员赛项备赛试题库(含答案)
- 中建基础设施公司“主要领导讲质量”
- 房屋交易诚意金合同范本模板
- 《毛泽东思想的形成与发展》参考课件3
- GB/T 4706.95-2024家用和类似用途电器的安全第95部分:商用电动抽油烟机的特殊要求
- JTG 3362-2018公路钢筋混凝土及预应力混凝土桥涵设计规范
- 脑梗死知识讲解模板
- 女性中医保健智慧树知到期末考试答案章节答案2024年暨南大学
- (正式版)JTT 1497-2024 公路桥梁塔柱施工平台及通道安全技术要求
评论
0/150
提交评论