数据结构课程设计文章编辑系统剖析.docx
《数据结构课程设计文章编辑系统剖析.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计文章编辑系统剖析.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构课程设计文章编辑系统剖析
《数据结构》课程设计说明书
文章编辑
班级
计科卓越1401
组别:
4
指导老师:
彭代文
完成时间:
2016年6月15日
组长:
李光耀
学号:
14020340316
组员1:
李达
学号:
1460140311
成绩:
1系统需求分析……………………………………………………………………5
2系统设计…………………………………………………………………………6
2.1输入模块……………………………………………………………………6
2.2统计模块……………………………………………………………………6
2.3删除模块……………………………………………………………………6
3程序设计流程图…………………………………………………………………7
4测试结果及运行效果……………………………………………………………9
5测试过程中的问题及注意事项…………………………………………………13
5.1问题…………………………………………………………………………13
5.2注意事项……………………………………………………………13总结…………………………………………………………………………………14
参考文献……………………………………………………………………………15
1系统需求分析
本实验所要实现的功能:
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;
要求:
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"和"文章总字数"
输出删除某一字符串后的文章;
用链表存放数据非常灵活,只要内存足够大,对链表可以做任意扩充和修改。
主要的手段为链表的遍历。
定义一个头指针head,每个结点的数据域存放数据本身,指针域存放下一个结点地址,所以,我们只要知道head,就可以遍历整个链表,找到我们所需要的字符(串),进行相应的操作。
2 系统设计
2.1输入模块
存储结构:
采用单链表结构存储文章,每个结点存储一行,每行最长不超过80个字符。
结构定义:
typedefstructline{
char*data;//字符串指针需要时动态分配内存
structline*next;
}LINE;
算法描述:
用gets函数接收输入,每遇到一个回车换行就新建一个结点,将当前行存入其data域。
当发现输入为^E时,在Data的最后加上字符串结束标志,并置当前结点的Next指针域为NULL。
2.2统计模块
统计模块包括统计全部字母数,统计数字个数,统计空格个数,以及统计文章总字数,这四个部分的实现算法大体相同,四者的关系是:
全部字母数+数字个数+空格个数=文章总字数,也就是说可以在统计出其中三者的前提下计算出第四个的数量。
另外一个重要的统计功能是统计某一字符串在整篇文章中出现的次数,这个需要用到串的模式匹配算法来实现。
2.3删除模块
删除模块的算法思想类同统计字符串的算法思想,由于采用了链表的存储结构,使得删除算法的时间复杂度大大减少。
voidDel_String(LINE*&head,char*sch){//删除指定的字符串
LINE*p=head;
do{
while(strstr(p->data,sch)!
=NULL)del_string_word(p->data,sch);
}while((p=p->next)!
=NULL);//遍历链表
3程序设计流程图
根据题目与上述分析,可得主程序设计流程图如下所示:
图3-1主程序设计流程图
文章输入、浏览、统计串、统计及删除的详细流程如图1—2所示:
回车回车回车
Ctrl+E
回车
回车
回车
回车
回车回车
回车
回车
回车
回车回车
图3-2详细流程图
4测试结果及运行效果
程序运行,首先显示选择菜单,如图示:
图4-1选择菜单
选择1,输入文章,界面运行结果如下:
图4-2输入界面
按回车,调出开始菜单,输入2,选择浏览,可以原样显示出刚才输入的文本:
图4-3文章浏览界面
回车后输入3,可以看到文章统计信息结果:
图4-4统计结果界面
根据页面提示,回车
统计字符串模块,输入要统计的字符串,可以查找出该字符串在文章中出现过的次数。
运行情况如下图示:
图4-5统计字符串出现次数界面
根据页面提示,回车
删除模块,输入要删除的字符串,执行删除后可以显示删除后的文本。
界面如下:
图4-6删除字符串后的界面
根据页面提示,回车:
退出页面,执行后的结果如下:
图4-7退出界面
5测试过程中的问题及注意事项
5.1问题
1.主流程进入死循环。
.
解决方案:
每个循环都加break,每跳出一个模块,opt重新赋值为0。
2输入多个变量,需要空格间隔时,程序只读空格前的变量
解决方案:
输.入函数用get()函数,形式为:
get(tmp),即可解决着个问题。
3.不识别自定义函数。
解决方案:
函数定义前要函数声明,若不声明,则调用函数必须在函数定义之后,否则不识别。
4,程序结束之后,链表仍占空间。
解决方案:
在建立链表是所申请的内存空间在程序结束之前用free_link(LINE*&head)函数释放,即删除链表中的全部结点,且将链表头指针置为空。
5.2注意事项
(1)opt代表选项(共六个,多于六个显示“不可识别选项”)。
(2)建立文章,用链表存储,p=p->next=newLINE,即文章的每一行存储在一个结点中。
(3)Ctrl+E为结束标志。
(4)了解常用ASⅡ码。
总结
本实验采用链式顺序表结构实现了文章编辑的基本功能,实验过程中遇到了很多或大或小的问题,在这些问题的解决过程中,加深了对链表的理解,使我对链表操作的字符串的模式匹配有了更深更全面的认识。
本实验提高了我对数据逻辑结构的特点和存储表示方式的认识,培养了我在具体应用中选择合适的数据结构和存储结构的能力。
通过该实验,使我熟悉了软件开发的基本过程,初步掌握了软件开发过程的问题分析、系统设计、程序编码测试等阶段的基本任务和技能方法。
使我的算法设计和算法分析能力以及运用所学理论知识和方法独立分析问题的能力得到全面的提高。
训练了我用系统的观点和软件开发的一般规范。
使我认识到一个软件工作者所应该具备的科学的工作方法、作风和相互合作精神。
本实验的模块化比较强,各个模块之间用指针head连接。
认清模块化的概念给程序的顺利编制起到了很大的作用。
分模块各个调试,可以减少很多不必要的麻烦。
参考资料
[1]严蔚敏,吴伟民.数据结构[M].清华大学出版社,2002.
[2]殷人昆.数据结构[M].清华大学出版社,2001.
[3]金远平.数据结构[M].清华大学出版社,2005.
[4]许卓群等.数据结构与算法[M].高等教育出版社,2004.
[5]FrankM.Carrano.数据结构与C++高级教程[M].清华大学出版社,2004.