在的行的行号,格式自行设计。待统计的“单词”在文本串中不跨行出现,它或者从行首开始,或者前置以一个空格符。
2、用户可以和已有的文本文件进行匹配,也可以自己新建一个新的文本文件并存储,将输入的单词和新建立的文本文件进行匹配。
3、只要用户不想退出,可重复输入多次且一次可以输入多个单词进行匹配,匹配结果可以返回每个词出现的次数,也可以返回出现位置所在的行的行号,及在该行出现的次数。
4、串的模式匹配算法有很多种,如串的朴素模式匹配算法、串的模式匹配KMP算法以及串的模式匹配KMP改进算法等等,用户可以根据自己的需要选择想要的算法进行匹配。 5、串的储存结构有定长顺序存储 和单链表存储,用户可以选择任意一种数据结构实现上述的所有功能。
7、用户可以保存每次匹配后的结果,在有需要的时刻可以查看历史匹配记录。 6、为了增强程序的安全性,需要有用户权限设置,只有登录成功才可以使用本程序的所有功能,否则无法使用。
三、可行性分析
根据用户需求分析,本程序可以在Windows操作系统下,通过Visual C++6.0编程实现,程序可能用到的知识主要是对串的操作,对文件的操作,以及串的模式匹配算法的掌握。在学习数据结构时对于串的操作已经有了一定得基础,且串的模式匹配算法及其改进算法在书上面已经有了一定得介绍,因此对于程序的核心算法部分已经有了参考的基础。
程序在设计的过程中可能遇到的问题主要有,一、是对于文件的操作。由于以前在学习C语言的过程中对于文件操作使用的比较少,因此可能会遇到问题。二、是对于串的几种模式匹配算法的修改,由于课本上是将串定义成一个数组,数组下标从1开始,本课程设计为了进一步领略串的魅力,决定将串定义成一个结构体,结构体由两部分组成,串的长度和串的元素,其中串的元素下标从0开始,这就为本次课程设计增加了一定得难度。三、为了增加程序的实用性和其价值性,此次课程设计还决定将所有的串的模式匹配算法基于单链表存储结构,由于《数据结构》这本书上面没有相关介绍,因此这个部分会显著增加此次课程设计的难度。四、为了更接近实际的应用程序,本次课程设计还对登录做了别出心裁的设计,此前自己还从未在C语言程序中有过应用,因此这个部分也是一个很大的挑战。五、程序设计一个很重要的部分就是用户界面设计,此前上机操作数据结构的实验报告都是很简单朴素的,在这次的课程设计当中,因为程序设计主要是为了让用户使用,为了增强程序的实用性及更加的人性化,我们还需要考虑整个程序的用户界面设计,以及菜单设计,这些都将是课程当中会遇到的问题。
进一步分析,在这次的课程设计当中会遇到很多此前从来没有用到的知识,因此难度会比较大,当时此次课程设计的所有基本技术我已经基本掌握,如C语言的相关操作,串的几种模式匹配算法等等,另外再考虑到可以参考丰富的网络资源以及可以请教老师等等,因此本次课程设计虽然有一定的难度,但是还是可行的。
四、概要设计
4
1、功能设计要求
设计要求实现的功能较多,应将它们分为几个部分叙述。
(0)登录
① 用户进入系统后提示用户输入密码进行登录。
② 用户有三次输入密码的机会,如果三次输入密码失败,则程序自动终止。 ③ 如果密码正确,则可进入主程序功能界面。
⑴ 选择串的数据存储结构
用户可以选择本次操作串的存储结构,当用户选定一种存储结构后程序继续运行,接下来的所有有关串的操作都是基于用户选择的存储结构。
⑵ 建立文本文件
① 如果用户想要和子串匹配的文本文件不存在,则可以重新建立一个新的文本文
件。
② 新的文本文件,用户可以选择输入一行,也可以选择重复输入多行文本,新增加
的行追加到这个新建立的文本文件中。
⑶ 打开文本文件并匹配
① 用户可以输入一个文本文件名,打开一个文本文件,将子串与文本文件进行匹
配。
② 根据需要,打开文本文件后用户可以选择简单一点的单词计数功能,也可以选择
负责一点的单词子串的定位与计数功能。
③ 如果用户输入文本文件名错误,则提示打开文本文件失败,程序结束。
④ 在进行匹配的过程中,用户可以选择一次匹配一个单词,可以一次选择匹配多个
单词。程序分别返回对应操作的结果。
⑷ 选择相应的串的模式匹配算法
① 串的模式匹配算法有多种,常见的有串的朴素匹配算法,串的模式匹配KMP算
法,串的模式匹配KMP改进算法等,用户可以选择自己想要采用的算法进行下一步操作。
② 根据用户选择的功能,程序会采用用户选择的算法得出相应的运行结果。
③ 第一次串的模式匹配完成后程序继续执行,用户可以选择继续进行下一次匹配,
也可以选择终止程序。
⑸ 保存记录并查询
① 每次操作完成后用户可以选择是否保存此次查询记录。 ② 每次程序开始时用户都可以选择查看历史匹配记录。
⑹ 退出程序
如果用户想要不想继续操作,可随时提出终止本程序运行的请求。
5
⑺ 整体性能
① 要求整个程序界面设计美观且合理。
② 整程序要有必要的提示,程序界面菜单设计要美观大方。程序的流程必须逻辑严
密。
⑻ 测试程序
① 应列出大纲对程序进行测试。
② 应保证测试用例测试到程序的各种便捷情况。
2、总体结构设计
①文件及函数组成
源文件 StrMSPP.h
函数名或其他成分 ASK(自定义宏) 结构声明
库函数及函数声明 ProgBar()
EnterPassword() Enter()
IninLinkList(LinkList &)
ListInsertfreg(LinkList &)
ListInsertline(LinkList &,int)
getnext(char *,int *) Index(char *,char
*,LinkList &,int,int *) printlines(LinkList &) GetNext(SeqString T,int (&next)[64])
IndexKMP1(SeqString S,SeqString
T,int(&next)[64],int pos)
IndexBF(SeqString S,SeqString T,int k) CreateTextFile() lenth(char
str[MAXSTRLEN]) Count() StrPP()
功能
宏定义申请内存
串的定长顺序存储和链式存储等
应用库函数及函数 进度条线程函数 输入密码 登录系统 初始化链表
更新链表的第一个结点 更新链表的第二个及其后的结点
此函数求串的next函数值 KMP匹配函数
打印行号的函数主函数 求模式串T中的next函数值
KMP算法
PATH.h
strLianScc.cpp
MSPPSF.cpp
串的朴素模式匹配算法 建立文本文件函数 求串长
对文本文件中的单词计数 检索单词出现在文本文件中的行号、位置及在该行中出现的次数函数
6
strmspp.cpp
MSPP_main.cpp Main
②程序流程图
总控函数、菜单选择、菜单处理等
7
开始 登录 Y 存储结构选择选择 N 结束 顺序存储 命令选择 链式存储 命令选择 并并新匹建配文本新匹建配匹配 匹查配询历史 退并出 并新匹建配文本 新匹建配匹配 匹查配询历史 退出 退出 单词计数 命令选择 朴素匹配算法 命令选择 单词计数 退出 单词定位及计数 命令选择 单词定位及计数 命令选择 命令选择 KMPKMP算法改进算法朴素匹配算法算法改进算法朴素匹配算法KMPKMPKMPKMP算法改进算法 结束 朴素匹配算法算法KMP 改进算法KMP结束 8