代码比较器设计文档.docx
《代码比较器设计文档.docx》由会员分享,可在线阅读,更多相关《代码比较器设计文档.docx(47页珍藏版)》请在冰豆网上搜索。
![代码比较器设计文档.docx](https://file1.bdocx.com/fileroot1/2023-2/9/e1717ba9-dc1d-41e2-a263-a22bb9af4e02/e1717ba9-dc1d-41e2-a263-a22bb9af4e021.gif)
代码比较器设计文档
哈尔滨学院软件学院
课程设计说明书
题目:
HSCodeComToolKit—哈软代码比较工具
院(系)
软件学院
专业
软件工程
年级
09-3
姓名
张鸣雷
学号
09033333
指导教师
王克朝
张晶
职称
2011年8月20日
摘要
哈软代码比较工具是一款实用的小软件,具有文本比较功能,和文件夹比较的功能,文本比较:
比较两个文本文件的内容。
如果两个文件完全相同,则打印“TheTwoFilesareidentical!
”;如果不完全相同,则显示不同处所在的行号及不同点;比较结果显示在屏幕的同时,写入文件。
文件夹比较:
比较两个文件夹内对应文件的异同。
如果对应的两个文件完全相同,则显示任何信息;如果不完全相同,则显示文件名、不同处所在的行号及不同点,比较结果显示在屏幕的同时,写入文件。
此文档记录了制作本软件的全过程,包括需求分析,概要设计,详细设计,和源代码。
开发此软件,为本人增加了经验,得到了锻炼。
为大家提供了一款很不错的软件,但还有一些功能不够完善,希望大家多提一些建议,一起将此软进一步完善。
关键字:
文档,源代码,分析,算法
摘要
Taketo
Hasoftcodecomparisontoolisasmallutilitysoftware,withtextcomparisonfunctions,andfoldercomparisonfunction,textcomparison:
acomparisonoftwothecontentsofatextfile.Ifthetwofilesareidentical,thenprint"TheTwoFilesareidentical!
";ifnotidentical,displaysadifferentplaceinthelinenumberanddifferentpoints;comparetheresultsdisplayedonthescreenatthesametime,writetothefile.Foldercomparison:
acomparisonoftwofolderscorrespondingdocumentsimilaritiesanddifferences.Ifthetwofilesareidentical,showinganyinformation;ifnotidentical,showthefilename,linenumberanddifferentindifferentplaces,comparetheresultsdisplayedonthescreenatthesametime,writetothefile.Thisdocumentrecordstheproductionofthewholeprocessofthesoftware,includingneedsanalysis,outlinedesign,detaileddesign,andsourcecode.Developmentofthissoftware,forIhaveincreasedexperience,getexercise.Weprovideaverygoodsoftware,buttherearesomefunctionisnotperfect,Ihopeeveryoneadvice,thissofttofurtherimprove.
Keywords:
documentation,sourcecode,analysis,algorithm
前言
随着通信和计算机技术的快速发展,以及经济全球化的推动,互联万表现出了极大的使用方便性和信息传递的快捷性,使得人们对信息网络的依赖程度越来越大,人们在传递信息的同时,又有大量的信息相同,但名称不同,浪费空间,和时间。
所以有很多人想知道文件是否相同,以及文件夹的比较是否相同,为此学校组织编写了这款小软件,即小又实用,此软件开发完成,但还有一些未知的功能需要完善,为此编写此文档,方便用户使用,在开发人员的开发,对软件进行好的管理,与应用。
第一章需求分析
1.1引言
1.1.1编写目的
对于HSCodeComToolKit—哈软代码比较工具而言,其作用是实现文本文件的比较,随着互联网的发展,越来越多的文本文件在网络中传播,有些文件文件名不同,内容却是相同的,有时自己建立的文件也可能是内容相同,名不同,为了找出这些内容相同的文件,将重复的删除,以节省空间,开发这款代码比较器,比较文本文件是否相同以及文件夹中的内容是否相同。
此规格说明书在详细的调查了客户现有的应用模块和基本的操作流程后进行编写,对HSCodeComToolKit—哈软代码比较工具以及其功能进行了详细的规划、设计,明确了软件开发中应具有的功能、性能使得系统的开发人员和维护人员能够详细清楚的了解软件是如何开发和进行维护的,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。
本规格说明书的预期读者包括客户、业务或需求分析人员、测试人员、用户文档编写者、项目管理人员等。
1.1.2项目背景
软件产品名称:
哈软代码比较工具。
代码:
HSCodeComToolKit
表1
任务提出者
王克朝张晶
项目负责人
张鸣雷
1.2项目概述
1.2.1待开发软件的一般描述
(1)项目目标
①、文本比较:
比较两个文本文件的内容。
如果两个文件完全相同,则打印“TheTwoFilesareidentical!
”;如果不完全相同,则显示不同处所在的行号及不同点;比较结果显示在屏幕的同时,写入文件。
②、文件夹:
比较两个文件夹内对应文件的异同。
如果对应的两个文件完全相同,则显示任何信息;如果不完全相同,则显示文件名、不同处所在的行号及不同点,比较结果显示在屏幕的同时,写入文件
(2)应交付成果
在项目开发完成后,交付内容有编译后的代码比较器,应用程序,开发文档,设计说明书
(3)项目开发环境
操作系统为Windows2003以上均可,使用集成开发工具vc6.0
(4)项目验收方式与依据
项目验收分为内部验收和外部验收两种方式。
在项目开发完成后,首先进行内部验收,有测试人员根据用户需求和项目目标进行验收,项目在通过内部验收后,交给客户进行验收,验收的主要依据为需求规格说明书
1.2.2待开发软件的主要功能
层次方块图
图1
流程图
图2
图5
1.2.3用户特征
需要比较文本文件异同或文件夹异同的人
1.2.4运行环境
硬件环境
486或更高档PC台式机,笔记本电脑;
运行时占用内存:
1MB;
安装所需硬盘:
5MB;
软件环境
可选软件平台:
中文Windows95
Windows95、WindowsNT4.0或更高版本;
Windowsxp及更高版本
1.3功能需求
1.3.1功能划分
(1)文本文件比较
(2)文件夹比较
1.3.2功能描述
(1)、文本比较:
比较两个文本文件的内容。
如果两个文件完全相同,则打印“TheTwoFilesareidentical!
”;如果不完全相同,则显示不同处所在的行号及不同点;比较结果显示在屏幕的同时,写入文件。
(2)、文件夹比较:
比较两个文件夹内对应文件的异同。
如果对应的两个文件完全相同,则显示任何信息;如果不完全相同,则显示文件名、不同处所在的行号及不同点,比较结果显示在屏幕的同时,写入文件。
1.4外部接口和需求
用户界面
采用dos界面驱动方式,对用户友好。
1.查询要求:
查询界面一目了然
2.信息列表:
分类明确,字体清晰好认,能快速的看到重要信息
3.操作要求:
能够响应用户命令请求
输入输出格式
输入:
根据提示输入,输入准确,主界面输入1或2或3选择比较还是退出,输入文件路径必须带扩展名,文件夹不需要扩展名。
输出:
清晰输出比较结果
1.5软件属性需求
①正确性:
高
②可靠性:
高
③效率:
高
④易使性:
要求具有较强的容错处理能力,以保证软件的可适用性,在用户误操作的情况下系统应给出相应的提示信息,高数用户如何进行恢复操作,避免无法挽回的损失
⑤可维护性:
为了保证系统的可维护性,要求具有详细的系统设计文档资料,提供全部的系统源程序,并尽量采用面向对象的程序设计方法,以提高系统的可靠性。
同时要求系统的功能在一定程度上可扩展,以满足业务变动的需求
⑥可移植性:
本系统开发完成后,要能运行于任何由windows2000/nt/98级以上版本操作系统所构成的计算机单机环境下运行
第二章开发工具介绍及数据库设计
2.1系统开发工具介绍
Dev-C++是一个Windows下的C和C++程序的集成开发环境。
它使用MingW32/GCC编译器,遵循C/C++标准。
开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,能够适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具!
多国语言版中包含简繁体中文语言界面及技巧提示,还有英语、俄语、法语、德语、意大利语等二十多个国家和地区语言提供选择。
第三章概要设计
3.1引言
3.1.1编写目的
在系统项目的前一阶段,也就是需求分析阶段中,已经将系统用户对本系统的需求做了详细的阐述本阶段已在系统的需求分析的基础上,对哈软代码比较工具系统做概要设计。
主要解决了实现该系统需求的程序模块设计问题。
包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。
在以下的概要设计报告中将对在本阶段中对系统所做的所有概要设计进行详细的说明。
在下一阶段的详细设计中,程序设计员可参考此概要设计报告,在概要设计对机票预定系统所做的模块结构设计的基础上,对系统进行详细设计。
在以后的软件测试以及软件维护阶段也可参考此说明书,以便于了解在概要设计过程中所完成的各模块设计结构,或在修改时找出在本阶段设计的不足或错误。
3.2任务概述
3.2.1目标
项目目标应当符合SMART原则,项目要完成的工作用清晰的语言描述出来,校友录系统项目目标如下:
(1)、文本比较:
比较两个文本文件的内容。
如果两个文件完全相同,则打印“TheTwoFilesareidentical!
”;如果不完全相同,则显示不同处所在的行号及不同点;比较结果显示在屏幕的同时,写入文件。
(2)、文件夹比较:
比较两个文件夹内对应文件的异同。
如果对应的两个文件完全相同,则显示任何信息;如果不完全相同,则显示文件名、不同处所在的行号及不同点,比较结果显示在屏幕的同时,写入文件。
3.2.2运行环境
客户端:
操作系统:
MicrosoftWindows98简体中文版或以上
3.2.3需求概述
代码比较器主要实现文本文件的比较,与文件夹的比较
3.3总体设计
3.3.1基本设计概念和处理流程
图6
3.4运行设计
运行模块组合
哈软代码比较工具---------1.文本文件比较---------输入文件1的路径
-----------输入文件2的路径
-----------输入比较结果存放的路径
---------2.文件夹比较-------输入文件夹1的路径
------------输入文件夹2的路径
------------输入比较结果文件存放的路径
----------3.退出
第四章详细设计
4.1引言
4.1.1编写目的
该详细设计说明书的目的在于根据哈软代码比较工具需求说明与概要设计说明提出该系统的详细设计,即系统的详细架构,主要包括程序系统的结构以及各层次中每个程序的设计考虑。
预期读者为指导老师。
4.2软件结构
4.2.1需求概述
1.文本文件比较
2.文件夹比较
4.2.2软件结构
图7
4.3程序设计说明
4.3.1输入项
表2
名称
标识
类型和格式
有效范围
输入方式
输入媒体
选择操作项
Ic
Int
1-3
手动输入
键盘
文件1的路径
File1
Char*
手动输入
键盘
文件2的路径
File2
Char*
手动输入
键盘
文本比较结果的路径
File3
Char*
手动输入
键盘
文件夹1的路径
Wfile1
Char*
手动输入
键盘
文件夹2的路径
Wfile2
Char*
手动输入
键盘
文件夹比较结果的路径
Wfile3
Char*
手动输入
键盘
4.3.2输出项
比较结果输出
4.3.3算法
(1).文本文件比较算法
分别读取文本1,文本2和比较结果写入的文本的路径,以只读的方式打开问文本1和文本2,以只写的方式打开写入比较结果文本,如果文件打开失败,输出提示,返回,打开成功则同时从文件1与文件2中读取字符,并设置行标记i,如果读取字符为换行,i++,如果读取字符为EOF则比较结束,读取来的字符进行比较是否相同,如果不相同,输出文件1文件2此行的内容,如果一个文件到达行尾另一个没有到达则,到达的停止读入,未到达的读到行尾,如果一个到达文件尾另一个未到达,则未到达的继续读取,如果相同,输出相同,同时写入文件,如果不同,相识不同的行号,和此行内容,并写入比较结果文本。
(2).文件夹比较算法
分别读取文件夹1,文件夹2和文件夹比较结果写入文本的路径,调用system命令dir,将文件夹1和文件夹2中的内容写入到file1和file2中,再将file1,file2的前五行去掉,然后写入到wfile1和wfile2,从wfile1和wfile2中分别读取时间,大小或
,文件名存到不同的数组中,从wfile1中读取一条记录,与wfile2中的所有记录比较,如果类型相同,文件名相同,并且不是文件夹类型,调用文本比较函数1比较是否相同,将结果存入以此文件名.txt的文件中,在屏幕上显示是否相同,是文件夹时不调用文本比较函数输出两个文件夹都有,如果在文件夹2中找不到,则输出时间,大小,文件名,和只有文件夹1有,wfile1中的内容比较结束后,用同样的方法比较wfile2,找出只有wfile2有的。将比较结果显示到屏幕,并写入到比较结果文本,删除file1file2,wfile1,wfile2。
4.3.4程序逻辑
图8
4.3.4注释设计
①在每一个模块首部的注释,注释本模各变量的功能,范围,缺省条件等所加的注释
②必要地方对各变量的功能,范围,缺省条件等所加的注释
③对使用的逻辑所加的注释等
4.3.6测试要点
对每一个模块进行单独测试,测试时间与空间性,不超过要求,进行模块组合测试,相互之间调用顺畅,速度快,出现错误给出提示信息
第五章系统测试运行
5.1确认软件的质量
①其一方面是确认软件做了所期望的事情,另一方面是确认软件以正确的方式来做了这个事件
②软件测试是提供信息,比如提供给开发人员或项目经理的反馈信息,为风险评估所准备的信息,
③软件测试不仅是测试软件产品本身,而且还包括软件开发的过程,如果过一个软件产品开发完成之后发现了很多问题,则说明此软件开发过程很有可能是有缺陷的,软件的目的是保证整个软件开发过程的高质量。
5.2测试方案
对程序中出现的每一种可能进行测试
5.3测试内容
(1).文本文件测试
建立不同的文本文件进行测试,文件内容相同的,不同的,一个比另一个多的,无内容的
(2).文件夹测试,建立不同的文件夹进行比较
图9
图10
图11
总结
此文档对哈软代码比较工具的设计过程进行了详细的说明,通过需求分析明确了需求,明确了该做什么,对此软件的层次进行了划分,对流程进行了划分,明确了功能,接口,和性能的要求。
对开发工具进行了介绍,通过概要设计对程序进一步划分,对各个模块进行了划分,跟细致的分工。
通过详细设计,对此软件的功能细分,各个模块细分,优化,做了程序流程图,为编码做好工作。
最后对此软件进行了全面的测试。
参考文献
[1]参考Merge、WinMergePortable212、Linux下Diff的实现等
[2]《Linux环境编程》
[3]《Linux编程技术详解》
[4]《C语言程序设计》
[5]XX知道
[6]学生大本营
[7]
附录
源代码
#include
#defineN32
//字符串拼接
char*strcat1(char*dst,constchar*src)
{
char*cp=dst;
while(*cp)
cp++;/*findendofdst*/
while(*cp++=*src++);/*Copysrctoendofdst*/
return(dst);/*returndst*/
}
//字符串比较
intstrcmp(constchar*str1,constchar*str2){
while((*str1==*str2)&&*str1!
='\0'){
str1++;
str2++;
}
if((*str1=='\0')&&(*str2=='\0'))
return1;
else
return-1;
}
//求字符串长度
intmystrlen(constchar*str){
if((str==NULL)||(*str=='\0')){
return0;
}
else{
returnmystrlen(str+1)+1;
}
}
//////////////////////
//文本比较
intcompareFile_F(constchar*filename1,constchar*filename2,constchar*filename3){
chars1[BUFSIZ];//文件1的一行缓冲
chars2[BUFSIZ];//文件2的一行缓冲
FILE*file1,//
*file2,//
*file3;//
charch1,//
ch2;//
intline=1,//
i=0,//
j=0,//
h=1,
t=1,//标记是否判断完成
f=1;//标记是否相同
file1=fopen(filename1,"r");
file2=fopen(filename2,"r");
file3=fopen(filename3,"w");
if(!
file1||!
file2||!
file3){
return;
}
ch1=fgetc(file1);
ch2=fgetc(file2);
while(t){
if(ch1==EOF&&ch2==EOF){//如果两个文件同时到达文件尾,将设置t=0停止循环,关闭文件
t=0;
fclose(file1);
fclose(file2);
fclose(file3);
}
elseif(ch1==EOF&&ch2!
=EOF){//如果文件1到达文件尾,文件2没有到达文件尾,关闭文件1继续读取文件2
t=0;
f=0;
fclose(file1);
fprintf(file3,"第%d行后不同\n",line);
fputs("文件1比文件2少:
\n",file3);
while(ch2!
=EOF){
fputc(ch2,file3);
ch2=fgetc(file2);
}
fclose(file2);
fclose(file3);
}
elseif(ch1!
=EOF&&ch2==EOF){//如果文件1没有到达文件尾,文件2到达文件尾,关闭文件2,继续读取文件1
t=0;
f=0;
fclose(file2);
fprintf(file3,"第%d行后不同\n",line);
fputs("文件1比文件2多:
\n",file3);
while(ch1!
=EOF){
fputc(ch1,file3);
ch1=fgetc(file1);
}
fclose(file1);
fclose(file3);
}
else{//文件1文件2都没有到达文件尾,判断ch1与ch2是否到达行尾
if(ch1=='\n'&&ch2=='\n'){//如果文件1此行结束并且文件2此行也同时结束,比较缓冲中的内容,如果不相同,设置f=0,输出文件1和文件2此行内容
s1[j]=ch1;
s2[j]=ch2;
j++;
s1[j]='\0';
s2[j]='\0';
i=0;
if(h==0){
i=0;
fprintf(file3,"第%d行不同\n",line);
fputs("文件1:
\n",file3);
while(s1[i]!
='\0'){
fputc(s1[i],file3);
i++;
}
i=0;
fputs("文件2:
\n",file3);
while(s2[i]!
='\0'){
fputc(s2[i],file3);
i++;
}
}
ch1=fgetc(file1);
ch2=fgetc(file2);
line++;
j=0;
h=1;
}
elseif(ch1!
='\n'&&ch2=='\n'){//如果文件1此行未结束并且文件2此行结束,设置f=0,继续读取文件1
s1[j]=ch1;
s2[j]=ch2;
j++;
s2[j]='\0';
f=0;
i