精品c课程设计数据结构文章编辑.docx

上传人:b****8 文档编号:10200567 上传时间:2023-02-09 格式:DOCX 页数:21 大小:196.33KB
下载 相关 举报
精品c课程设计数据结构文章编辑.docx_第1页
第1页 / 共21页
精品c课程设计数据结构文章编辑.docx_第2页
第2页 / 共21页
精品c课程设计数据结构文章编辑.docx_第3页
第3页 / 共21页
精品c课程设计数据结构文章编辑.docx_第4页
第4页 / 共21页
精品c课程设计数据结构文章编辑.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

精品c课程设计数据结构文章编辑.docx

《精品c课程设计数据结构文章编辑.docx》由会员分享,可在线阅读,更多相关《精品c课程设计数据结构文章编辑.docx(21页珍藏版)》请在冰豆网上搜索。

精品c课程设计数据结构文章编辑.docx

精品c课程设计数据结构文章编辑

课程设计报告

 

课程设计题目:

文章编辑

 

学院:

姓名:

班级:

学号:

专业:

指导教师:

2012年06月04日

一、需求分析说明

我们编此程序为了便于统计文章中的字数,标点数,以及数字的个数,因此它的功能要求也就应该包含这些。

主要的是如下几点:

1)、分别统计出其中英文字母数和空格数及整篇文章总字数;

2)、统计某一字符串在文章中出现的次数,并输出该次数;

3)、删除某一子串,并将后面的字符前移。

存储结构使用线性表,分别用几个子函数实现相应的功能(要求用菜单选择操作);

输入数据的形式和范围:

可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:

(1)分行输出用户输入的各行字符;

(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"

(3)输出删除某一字符串后的文章;

问题分析:

本次程序我计划利用单链表结构实现对文章编辑的操作,因为,在实际应用中,输入的文章有很大的容量,动辄上万,如果利用顺序表不足以充分利用空间,并且可能造成溢出,使整个系统趋于崩溃,内存的资源是很宝贵的,为了尽可能利用到内存资源,所以,利用链表实现。

为了利用链表控制,必须利用到大量指针,所以,建立了一个LINK类,通过该类,确定不同指针对象,实现操作。

再建立一个类,chuan,中文名“串”的拼音,在当中实现对链表的操作功能,通过对这两个类的操作实现课程设计的要求。

主要功能有:

1.插入字符或者文章

2.删除字符串或文章

3.查找字符串

4.删除文章中出现的单个字符

5.统计文章中数字,大写字母,小写字母以及各种符号的个数

6.显示当前文章内容

二、总体设计

1.存储结构

利用单链表存储,为线性结构,程序总体为链表,通过对链表的插入删除,统计等等实现各类功能。

2.主要功能:

(1)插入字符或者文章

(2)删除字符串或文章

(3)查找字符串

(4)删除文章中出现的单个字符

(5)统计文章中数字,大写字母,小写字母以及各种符号的个数

(6)显示当前文章内容

三、详细设计

1.类:

建立了LINK类,公有成员为指针,因为题目要求利用几个函数实现文章编辑的功能,所以对于文章编辑的功能没有用到类。

classlink//定义关于指针的类

{

public:

chardata;

link*next;

};

classchuan//实现串的各类功能

{

public:

chuan(){};

~chuan(){};

voidinputlink(link*&l);

voidinsert(link*&a);

voiddelete1(link*&c);

link*index(link*&head);

voiddelete2(link*&head,char&x);

voidprint(link*&head);

voidcount1(link*&head);

};

2.对象:

Link:

voidchuan:

:

inputlink函数包括的对象(link*s,*r,*p;)

voidchuan:

:

insert函数包括的对象(link*s,*q,*b;)

voidchuan:

:

delete1函数包括的对象(link*p,*q;)

link*chuan:

:

index函数包括的对象(link*p,*q,*r,*e;)

voidchuan:

:

delete2函数包括的对象(link*p,*q;)

voidchuan:

:

count1函数包括的对象(link*p,*q;)

voidchuan:

:

print函数包括的对象(link*p,*q;)

chuan:

对象:

a

3.结构分析:

UML图

link

public:

chardata;

link*next;

chuan

public:

chuan(){};

~chuan(){};

voidinputlink(link*&l);

voidinsert(link*&a);

voiddelete1(link*&c);

link*index(link*&head);

voiddelete2(link*&head,char&x);

voidprint(link*&head);

voidcount1(link*&head);

4.程序测试

程序运行截图:

系统进入中

跳入注意项目界面

输入文字

插入功能

插入后的结果,输出79个字符

统计得到的结果

由于篇幅有限,剩下的各类功能请自我尝试。

本程序达到了题目要求,并很好的实现了,其中还有几相自我添加的功能,在不断地完善。

但在查找方面有一些不足自出,在今后中还需要不断的自我完善,查找功能通过循环扫描存储进去的字符,实现查找,各类功能都是如此。

空间复杂度为O(n)

所用时间为:

四、总结

得到文本编辑器这一课程设计题目时,自己还比较害怕是制作向windows系统中记事本一样的程序。

看了任务书之后自己有了些欣慰,任务书上要求是对输入的信息进行操作,这是我们经常练习的内容,虽然是比平时练习的更为难,更有深度,但自己毕竟知道该向什么方向去努力,自己应该如何去编写这个程序。

所以自己在整个课程设计过程中还是比较轻松的,编写过程中遇到的困难及问题都通过查阅资料、向老师提问得以解决。

这都是基于对课题有一个明确的了解,清楚向什么方向去写。

所以本次课程设计自己最大的体会就是不管写什么程序,自己首先得对这个问题要分析透彻,要知道自己要干什么,然后才能让自己干什么。

今后我要多读一些关于计算机方面的书,并注重理论与实践的结合,多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的开始。

在这过程中,还是遇到不少的麻烦事的,起初,我的代码已经完成,可是在这个过程中我运用的是cin输入函数,可是,cin不接受空格字符,该字符直接跳过,不计入文章中,针对这个问题,我不断研究,找了好多这方面的资料,试了getchar(),cin.get()等不同函数,可是均不行,最终,找到了问题所在,是内存读取问题,因此,运用系统函数fflush(stdin)清除内存使程序最终运行。

费了好大功夫。

在这次课程设计中我得到了好多启示与经验,收益匪浅,懂了好多,并且充分练习了单链表,使自己有个好的升华,并明白了不同的输入函数有不同的效果!

以后遇到问题不能轻易放弃,必须细细琢磨不停前进,强化独立制作,独立思考的能力,在今后的学习工作中,更加用心!

 

源代码附录(采用分页式编写):

//类定义头文件,”链串.h”

classlink//定义关于指针的类

{

public:

chardata;

link*next;

};

classchuan//实现串的各类功能

{

public:

chuan(){};

~chuan(){};

voidinputlink(link*&l);

voidinsert(link*&a);

voiddelete1(link*&c);

link*index(link*&head);

voiddelete2(link*&head,char&x);

voidprint(link*&head);

voidcount1(link*&head);

};

 

//类功能实现文件,源文件,”文章.cpp”

#include"链串.h"

#include

#include

usingnamespacestd;

intcount=0;//通过全局变量控制链表中的个数

voidchuan:

:

inputlink(link*&head)//通过尾插法建立链表,控制头指针,通过头指针操作链表

{

cout<<"输入文字,输入#结束:

"<

inti=0;

link*s,*r,*p;

//link*p=newlink;

p=r=newlink;

p->next=NULL;

head=p;//确定头指针位置

head->data=NULL;

fflush(stdin);

for(;;i++)//尾插法循环建立链表

{

s=newlink;

s->data=getchar();

//cin.get()>>s->data;

if(s->data=='#')

{

cout<<"输入结束!

"<

break;

}

r->next=s;

r=s;

}

r->next=NULL;

}

voidchuan:

:

insert(link*&head)//插入功能,通过寻找头指针确定链表

{

intj=0,i=0,k=1;

cout<<"输入想插入的行号:

";

cin>>i;

cout<<"输入想插入的列号:

";

cin>>k;

if(((i-1)*79+k)>count)

{cout<<"插入失败,该篇文章没有这么长!

系统直接退出!

"<

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串头指针

}

else

cout<<"找不到插入位置!

"<

}

voidchuan:

:

delete1(link*&c)//删除功能

{

intg=0,j=0,i=0;

cout<<"输入想删除的行位置:

";

cin>>i;

cout<<"输入想删除的列位置:

";

cin>>g;

if(((i-1)*79+g)>count)//判断删除位置是否合法

{

cout<<"删除失败!

文章没有那么长!

"<

}

i=(i-1)*79+g;

cout<<"输入想删除字符的个数:

";

cin>>j;

link*p,*q;

intk=0;

p=c;

while((p!

=NULL)&&(k

{

k++;p=p->next;

}

q=p;

while((q!

=NULL)&&(k

{

k++;q=q->next;

}

if(p!

=NULL)

{

if(q!

=NULL)

p->next=q;

elsep->next=NULL;

}

elsecout<<"删除错误!

删除的内容不存在!

"<

}

link*chuan:

:

index(link*&head)

{

inti=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;

}

else

{r=r->next;//指针回溯

p=r;q=e->next;i=i+1;}

}

if(q==NULL)

{

cout<<"查找成功!

";

cout<<"查找的内容在第"<<((i/79)+1)<<"行;"<<"第"<<(i%79+1)<<"列!

"<

returnr;}

else{

cout<<"查找失败!

该文章中没有你所查找的内容!

";

returnNULL;}

}

voidchuan:

:

delete2(link*&head,char&x)//删除链表中一个相同字符

{

cout<<"输入想删除的字符(按回车结束):

";

cin>>x;//输入端口

link*p,*q;

if(head->next==NULL)//判断链表是否为空

cout<<"不能删除!

"<

else

{

q=head;

p=head->next;

while(p!

=NULL)//指针前进

{

if(p->data==x)

{

q->next=p->next;

deletep;

p=q->next;

cout<

"<

}

else

{

q=p;

p=p->next;

}

}

}

}

voidchuan:

:

count1(link*&head)//统计字符功能

{

inti=0;//分不同变量统计字符个数

intj=0;

ints=0;

intk=0;

intl=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;

elseif((q->data>=97)&&(q->data<=122))//小写字母

j=j+1;

elseif((q->data>=48)&&(q->data<=57))//数字

s=s+1;

elseif(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<<"大写字母的个数为:

"<

cout<<"小写字母的个数为:

"<

cout<<"数字字符的个数为:

"<

cout<<"空格字符的个数为:

"<

cout<<"其他各类字符数为:

"<

cout<<"文章字数统计,总数为:

"<

}

}

voidchuan:

:

print(link*&head)//输出功能

{

inti=0,j=0;

link*p,*q;

if(head->next==NULL)//判断文章是否为空

{

cout<<"输入的文章为空!

"<

system("pause");

}

else

{

p=head;//确定头结点

q=head->next;//指针前进

}

while(q!

=NULL)

{

i=i+1;

j=j+1;

cout<data;

if(i%79==0)

cout<

q=q->next;

}

count=j;//统计文章总字数

cout<

}

 

//主文件,main文件,源文件,”主文件.cpp”

#include"链串.h"

#include

#include

usingnamespacestd;

intmain()

{inti=0,j=0;

chuana;

charx,k;

system("color09");

cout<

cout<<"\t\t\t\t欢迎进入文章编辑系统"<

cout<<"\t\t\t\t\t请等待";

for(intt=6;t>0;t--)

{

Sleep(1000);

cout<<".";

}

system("cls");

system("color04");

cout<

cout<

cout<<"警告:

欲用此系统,必先建立自己的文章"<

cout<

system("pause");

system("cls");

system("color0F");

link*head;

a.inputlink(head);

cout<<"输入的文章为:

"<

a.print(head);

do{

cout<

cout<<"1.插入字符或者文章"<

cout<<"2.删除字符串或文章"<

cout<<"3.查找字符串"<

cout<<"4.删除文章中出现的单个字符"<

cout<<"5.统计文章中数字,大写字母,小写字母以及各种符号的个数"<

cout<<"6.显示当前文章内容"<

cout<<"0.退出本系统"<

cout<<"请输入选择的功能项:

";

cin>>k;

if((k<='0')&&(k>='7'))

{cout<<"输入错误请重新输入!

"<

{

switch(k)//实现菜单控制

{

case'1':

a.insert(head);

a.print(head);

system("pause");

system("cls");

break;

case'2':

a.delete1(head);

a.print(head);

system("pause");

system("cls");

break;

case'3':

a.index(head);

a.print(head);

system("pause");

system("cls");

break;

case'4':

a.delete2(head,x);

a.print(head);

system("pause");

system("cls");

break;

case'5':

a.count1(head);

system("pause");

system("cls");

break;

case'6':

a.print(head);

system("pause");

system("cls");

break;

case'0':

exit(0);

}

}

}while(k!

=0);

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1