c课程设计文章编辑_第1页
c课程设计文章编辑_第2页
c课程设计文章编辑_第3页
c课程设计文章编辑_第4页
c课程设计文章编辑_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告课程设计题目:文章编辑 学 院:姓 名: 班 级:学 号:专 业: 指导教师: 2012年06月04日一、需求分析说明 我们编此程序 为了便于统计文章中的字数,标点数,以及数字的个数,因此它的功能要求也就应该包含这些。主要的是如下几点:1)、分别统计出其中英文字母数和空格数及整篇文章总字数;2)、统计某一字符串在文章中出现的次数,并输出该次数;3)、删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能(要求用菜单选择操作);输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行

2、输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;问题分析:本次程序我计划利用单链表结构实现对文章编辑的操作,因为,在实际应用中,输入的文章有很大的容量,动辄上万,如果利用顺序表不足以充分利用空间,并且可能造成溢出,使整个系统趋于崩溃,内存的资源是很宝贵的,为了尽可能利用到内存资源,所以,利用链表实现。为了利用链表控制,必须利用到大量指针,所以,建立了一个link类,通过该类,确定不同指针对象,实现操作。再建立一个类,chuan,中文名“串”的拼音,在当中实现对链表的操

3、作功能,通过对这两个类的操作实现课程设计的要求。主要功能有:1.插入字符或者文章2.删除字符串或文章3.查找字符串4.删除文章中出现的单个字符5.统计文章中数字,大写字母,小写字母以及各种符号的个数6.显示当前文章内容二、总体设计1.存储结构利用单链表存储,为线性结构,程序总体为链表,通过对链表的插入删除,统计等等实现各类功能。2. 主要功能:(1)插入字符或者文章(2)删除字符串或文章(3)查找字符串(4)删除文章中出现的单个字符(5)统计文章中数字,大写字母,小写字母以及各种符号的个数(6)显示当前文章内容1.插入字符或者文章2.删除字符串或文章3.查找字符串4.删除文章中出现的单个字符5

4、.统计文章中数字,大写字母,小写字母以及各种符号的个数6.显示当前文章内容0.退出输入1插入功能输入3查找功能输入2删除功能输入4删除单个字符功能输入5统计功能输入6显示存储内容功能输入0退出三、详细设计1.类:建立了link类,公有成员为指针,因为题目要求利用几个函数实现文章编辑的功能,所以对于文章编辑的功能没有用到类。class link/定义关于指针的类public:char data;link *next;class chuan/实现串的各类功能public:chuan();chuan();void inputlink(link* &l);void insert(link* &

5、amp;a);void delete1(link* &c);link* index(link* &head);void delete2(link* &head,char &x);void print(link* &head);void count1(link* &head);2.对象:link:void chuan:inputlink函数包括的对象(link * s,*r,*p;)void chuan:insert函数包括的对象(link *s,*q,*b;)void chuan:delete1函数包括的对象(link *p,*q;)link*

6、chuan:index函数包括的对象(link *p,*q,*r,*e;)void chuan:delete2函数包括的对象(link *p,*q;)void chuan:count1函数包括的对象(link *p,*q;)void chuan:print函数包括的对象(link *p,*q;)chuan:对象:a3.结构分析:uml图linkpublic:char data;link *next;chuanpublic:chuan();chuan();void inputlink(link* &l);void insert(link* &a);void delete1(lin

7、k* &c);link* index(link* &head);void delete2(link* &head,char &x);void print(link* &head);void count1(link* &head);4.程序测试程序运行截图:系统进入中跳入注意项目界面输入文字插入功能插入后的结果,输出79个字符统计得到的结果由于篇幅有限,剩下的各类功能请自我尝试。本程序达到了题目要求,并很好的实现了,其中还有几相自我添加的功能,在不断地完善。但在查找方面有一些不足自出,在今后中还需要不断的自我完善,查找功能通过循环扫描存储进去的字符

8、,实现查找,各类功能都是如此。空间复杂度为o(n)所用时间为:四、总结得到文本编辑器这一课程设计题目时,自己还比较害怕是制作向windows系统中记事 本一样的程序。看了任务书之后自己有了些欣慰,任务书上要求是对输入的信息进行操作,这是我们经常练习的内容,虽然是比平时练习的更为难,更有深度,但自己毕竟知道该向什么方向去努力,自己应该如何去编写这个程序。所以自己在整个课程设计过程中还是比较轻松的,编写过程中遇到的困难及问题都通过查阅资料、向老师提问得以解决。这都是基于对课题有一个明确的了解,清楚向什么方向去写。所以本次课程设计自己最大的体会就是不管写什么程序,自己首先得对这个问题要分析透彻,要知

9、道自己要干什么,然后才能让自己干什么。 今后我要多读一些关于计算机方面的书,并注重理论与实践的结合,多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的开始。在这过程中,还是遇到不少的麻烦事的,起初,我的代码已经完成,可是在这个过程中我运用的是cin输入函数,可是,cin不接受空格字符,该字符直接跳过,不计入文章中,针对这个问题,我不断研究,找了好多这方面的资料,试了getchar(),cin.get()等不同函数,可是均不行,最终,找到了问题所在,是内存读取问题,因此,运用系统函数fflush(stdin)清除内存使程序最终运行。费了好大功夫。在这次课程设计中我得

10、到了好多启示与经验,收益匪浅,懂了好多,并且充分练习了单链表,使自己有个好的升华,并明白了不同的输入函数有不同的效果!以后遇到问题不能轻易放弃,必须细细琢磨不停前进,强化独立制作,独立思考的能力,在今后的学习工作中,更加用心!源代码附录(采用分页式编写):/类定义 头文件,”链串.h”class link/定义关于指针的类public:char data;link *next;class chuan/实现串的各类功能public:chuan();chuan();void inputlink(link* &l);void insert(link* &a);void delete1

11、(link* &c);link* index(link* &head);void delete2(link* &head,char &x);void print(link* &head);void count1(link* &head);/类功能实现文件,源文件,”文章.cpp”#include "链串.h"#include<iostream>#include<string>using namespace std;int count=0;/通过全局变量控制链表中的个数void chuan:inputli

12、nk(link* &head) /通过尾插法建立链表,控制头指针,通过头指针操作链表cout<<"输入文字,输入#结束:"<<endl;int i=0;link* s,*r,*p;/link* p=new link;p=r=new link;p->next=null;head=p;/确定头指针位置head->data=null;fflush(stdin);for(;i+)/尾插法循环建立链表 s=new link;s->data=getchar();/cin.get()>>s->data;if(s->

13、data='#')cout<<"输入结束!"<<endl;break;r->next=s;r=s; r->next=null;void chuan:insert(link* &head)/插入功能,通过寻找头指针确定链表int j=0,i=0,k=1;cout<<"输入想插入的行号:"cin>>i;cout<<"输入想插入的列号:"cin>>k;if(i-1)*79+k)>count)cout<<"插

14、入失败,该篇文章没有这么长!系统直接退出!"<<endl;exit(0);link *s,*q,*b;s=head;/控制头指针,确定头指针的位置while (s!=null)&&(j<(i-1)*79+k)j+;s=s->next;inputlink(b);/调用输入函数,再建立一个链表q=b;while(q->next!=null)q=q->next;/查找要插入的位置if(s!=null)/去掉头指针,两个指针合并为一个q->next=s->next;s->next=b->next;/去掉b串头指针el

15、secout<<"找不到插入位置!"<<endl;/找不到插入位置void chuan:delete1(link* &c)/删除功能int g=0,j=0,i=0;cout<<"输入想删除的行位置:"cin>>i;cout<<"输入想删除的列位置:"cin>>g;if(i-1)*79+g)>count)/判断删除位置是否合法cout<<"删除失败!文章没有那么长!"<<endl;i=(i-1)*79+g;c

16、out<<"输入想删除字符的个数:"cin>>j;link *p,*q;int k=0;p=c;while (p!=null)&&(k<i-1)/查找第i-1位置k+;p=p->next;q=p;while(q!=null)&&(k<i+j)/查找i+j位置k+;q=q->next;if(p!=null)if(q!=null)p->next=q;else p->next=null;else cout<<"删除错误!删除的内容不存在!"<<e

17、ndl;link* chuan:index(link* &head)int i=0;link *p,*q,*r,*e;/假设不同的链串inputlink(e);p=head->next;q=e->next;r=p;while (p!=null)&&(q!=null)if (p->data=q->data)p=p->next;q=q->next;elser=r->next;/指针回溯p=r;q=e->next;i=i+1;if(q=null)cout<<"查找成功!"cout<<&

18、quot;查找的内容在第"<<(i/79)+1)<<"行;"<<"第"<<(i%79+1)<<"列!"<<endl;/确定位置,查找成功return r;else cout<<"查找失败!该文章中没有你所查找的内容!"return null;void chuan:delete2(link* &head,char &x)/删除链表中一个相同字符cout<<"输入想删除的字符(按回车结束)

19、:"cin>>x;/输入端口link *p,*q;if(head->next=null)/判断链表是否为空cout<<"不能删除!"<<endl;elseq=head;p=head->next;while(p!=null)/指针前进if(p->data=x)q->next=p->next;delete p;p=q->next;cout<<x<<"字符已删除!"<<endl;else q=p;p=p->next;void chuan:

20、count1(link* &head)/统计字符功能int i=0;/分不同变量统计字符个数int j=0;int s=0;int k=0;int l=0;link *p,*q;p=head;q=head->next;if(q!=null)while(q!=null)if(q->data>=65)&&(q->data<=90)/大写字母i=i+1;else if(q->data>=97)&&(q->data<=122)/小写字母j=j+1;else if(q->data>=48)&

21、&(q->data<=57)/数字s=s+1;else if(q->data=32)/空格l=l+1;else /(q->data>=33)&&(q->data<=47)|(q->data>=58)&&(p->data<=64)|(q->data>=91)&&(q->data<=96)|(q->data>=123)&&(q->data<=127)/其他字符k=k+1;q=q->next;cout<&

22、lt;"大写字母的个数为:"<<i<<endl;cout<<"小写字母的个数为:"<<j<<endl;cout<<"数字字符的个数为:"<<s<<endl;cout<<"空格字符的个数为:"<<l<<endl;cout<<"其他各类字符数为:"<<k<<endl;cout<<"文章字数统计,总数为:"

23、;<<count<<endl;void chuan:print(link * &head)/输出功能int i=0,j=0;link *p,*q;if(head->next=null)/判断文章是否为空cout<<"输入的文章为空!"<<endl;system("pause");elsep=head;/确定头结点q=head->next;/指针前进while(q!=null)i=i+1;j=j+1;cout<<q->data;if(i%79=0)cout<<

24、endl;/每行输出不多于80个字符,完成输出功能q=q->next;count=j;/统计文章总字数cout<<endl;/主文件,main文件,源文件,”主文件.cpp”#include"链串.h"#include<iostream>#include <windows.h>using namespace std;int main()int i=0,j=0;chuan a;char x,k;system("color 09");cout<<endl;cout<<endl;cout<

25、<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<"tttt欢迎进入文章编辑系统"<<endl;cout<<"ttttt请等待"for(int t=6;t>0;t-)sleep(1000);cout<<"."system("cls");system("color 04");cout<<endl;cout<<

26、;endl;cout<<endl;cout<<endl;cout<<endl;cout<<" 警告:欲用此系统,必先建立自己的文章"<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;cout<<endl;system("pause");system("cls");system("color

27、 0f");link *head;a.inputlink(head);cout<<"输入的文章为:"<<endl;a.print(head);docout<<endl;cout<<" 1.插入字符或者文章"<<endl;cout<<" 2.删除字符串或文章"<<endl;cout<<" 3.查找字符串"<<endl;cout<<" 4.删除文章中出现的单个字符"<

28、;<endl;cout<<" 5.统计文章中数字,大写字母,小写字母以及各种符号的个数"<<endl;cout<<" 6.显示当前文章内容 "<<endl;cout<<" 0.退出本系统"<<endl;cout<<"请输入选择的功能项:"cin>>k;if(k<='0')&&(k>='7')cout<<"输入错误请重新输入!"<<endl;switch(k)/实现菜单控制case '1':a.insert(head);a.print(head);system("pause");system("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论