logo资料库

简单的文章编辑器(数据结构课设).docx

第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
资料共23页,剩余部分请下载后查看
二、详细设计(实验过程)
1、数据结构定义
2、全局变量定义
3、函数说明
(1)CreatWord() 文本创建函数
(2)PrintWord() 文章显示函数
(3)CountWord() 文章内容统计函数
void CountWord()
{
LinkList *temp;
char ch;
int i,j,t;
int WORD=0,word=0,space=0,num=0,sum=0;
temp=head->next;
for(j=0;j<=NUM;j++)
{
for(i=0;(i<80)&&(temp->data[i])!='#';i++)
{
ch=temp->data[i];
if((ch>='A')&&(ch<='Z'))
WORD++;
else if((ch>='a')&&(ch<='z'))
word++;
else if((ch>='0')&&(ch<='9'))
num++;
else if(ch==' ')
space++;
}
sum=WORD+word+num;
}
while(1)
{
printf("\n");
printf("\n");
printf("\n");
printf("\t\t************************************
printf("\t\t**** 文章内容统计子菜单
printf("\t\t************************************
printf("\t\t**** 文章中 字母 的个数:
printf("\t\t**** 文章中 数字 的个数:
printf("\t\t**** 文章中 空格 的个数:
printf("\t\t**** 文章中 所有字 的个数: %
printf("\t\t**** 1、退出返回主菜单
printf("\t\t**** 2、直接退出本系统
printf("\t\t************************************
printf("\t\t请选择:");
scanf("%d",&t);
if(t==1){system("cls");
break;}
else if(t==2)exit(0);
else
{
printf("\t\t 对不起,无此功能!请回车重新选择!...\n");
printf("\t\t");
fflush(stdin);
getchar();
}
}
}
利用循环对链表中信息进行匹配判断,将大写字母数、小写字母数、空格数、数字数和总字数统计出来:for(
{
for(i=0;(i<80)&&(temp->data[i])!='#';i++)
{
ch=temp->data[i];
if((ch>='A')&&(ch<='Z'))
WORD++;
else if((ch>='a')&&(ch<='z'))
word++;
else if((ch>='0')&&(ch<='9'))
num++;
else if(ch==' ')
space++;
}
sum=WORD+word+num;
}
(4)SearchWord() 文章内容查找函数
(5)DeleteWord() 文章内容删除函数
(6)Bmenu() 文章内容处理菜单函数
(7)AboutWord() 相关性息
void AboutWord()
{printf("\n\n\n\n\n\n\n\n");
printf("\t**********************************
printf("\t**** 本系统由 chevis 制作 部分功能则是仿照其他程序 能力有
printf("\t**** 谢谢使用!
printf("\t****************************
printf("\n");
}
(8)menu() 主菜单
(9)main() 主函数
三、上机调试
四、测试结果及分析
课程设计报告 课程设计题目: 文 章 编 辑 专 班 学 业:信息工程 级: 号:2013 学生姓名 : 指导教师 :
实验目的及要求: 任务:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页 文章,每行最多不超过 80 个字符,共 N 行; 要求: (1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个 子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的 英文字母、任何数字及标点符号。 输出形式: (1)分行输出用户输入的各行字符; (2)分 4 行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数" (3) 输出删除某一字符串后的文章; 实验时间、地点: 2013.6.16 至 6.20 于软件楼 一、概要设计(实验思路) 1.问题分析 本程序是对一段英文文章的内容进行处理,存储方式采用链式存储。 对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中, 在此部分设计中最大的问题在于输入文章过程中输入的字符数大于 80 时如何换 行; 对于文本内容的统计,使用循环对已存储的文章进行匹配,字母数、空格数、 数字数直接通过比较即可得到; 对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判 断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记 录相同的个数及位置并输出个数及位置。 删除部分先使用程序的查找功能对文章中需要删除的字符或者字符串进行 查找,然后对其进行删除。 2. 数据结构选择 本程序是对输入的文字进行操作,故使用的数据结构为单链表操作。根据第一部分的问 题分析有该链表操作有 3 部分: 另有全局变量 *head,作为文章的头指针。 创建结构体: typedef struct list
{ char data[80]; //记录一行字符 int length; //记录一行字符长度 struct _list *next; //后继指针 struct _list *pre; //前趋指针 int row; //记录整篇文章的行数 }LinkList; 在文章内容创建部分中使用线性表的链式存储,并使用全局变量对文本的各种信息进行 存储;文章的读取、内容统计、删除、查找都采用链表操作完成。 3.流程图 (1)主框架:
(2)文章内容统计子菜单 (3) 文章内容处理子菜单 文 章 内 容 处 理 子 菜 单 SearchWord()函数实现查找 DeleteWord()函数内容删除 Printword()显示当前内容 返回主菜单 退出程序 (4)使用函数列表及关系图 函数名: 1、CreatWord() 文本输入函数,对文本的内容进行输入 2、PrintWord() 当前文本内容输出函数,将当前存储在链表中的文本内容输出 5、CountWord() 文章内容统计函数,对存储在链表中文本内容进行统计 6、SearchWord() 文章内容查找函数 7、DeleteWord() 文章内容删除函数 8、Bmenu() 文本内容处理菜单函数 9、AboutWord() 显示作者信息的函数
10、menu() 主菜单函数 11、main() 主函数 关系图: 二、详细设计(实验过程) 1、数据结构定义 typedef struct list { char data[80]; /*记录一行字符*/ int length; /*记录一行字符长度*/ struct list *next; /*后继指针*/ struct list *pre; /*前趋指针*/ int row; /*记录整篇文章的行数*/ }LinkList;
2、全局变量定义 LinkList *head; /*定义全局变量*head,文章首行头指针*/ int NUM,C,N; /*定义全局变量,Num 用来记录行号,C 用来记录子串在主串中出现 的总次数*/ 3、函数说明 (1)CreatWord() 文本创建函数 LinkList *CreatWord() { LinkList *temp; char ch; int i,j; head->next=(LinkList *)malloc(sizeof(LinkList)); / head->pre=NULL; temp=head->next; / temp->pre=NULL; temp->length=0; for(i=0;i<80;i++) temp->data[i]='\0'; printf("\t\t****************************************************\n"); printf("\t\t**** 创建文本 ****\n"); printf("\t\t****************************************************\n"); printf("\t\t 请输入文章(输入#号结束):\n\n"); for(j=0;jdata[i]=ch; temp->length++; if(ch=='#') { } NUM=j; break; if(ch=='#') { temp->length=i;
temp->next=NULL; break; } temp->next=(LinkList *)malloc(sizeof(LinkList)) ; temp->next->pre=temp; temp=temp->next; for(i=0;i<80;i++) temp->data[i]='\0'; } temp->row=NUM+1; system("cls"); return (temp); } 说明: a、 定义 LinkList 指针变量*temp: LinkList *temp; b、 定义文本输入变量 ch,记录文本行数变量 j,记录每行字符数变量 i; c、 申请动态存储空间:head->next=(LinkList *)malloc(sizeof(LinkList)); d、 首行头指针的前驱指针为空:head->pre=NULL; 首行指针: temp=head->next; 首行指针的前驱指针也为空: temp->pre=NULL; 定义没输入字符时文章长度为 0: temp->length=0; 初始化为字符串结束标志,防止出现乱码: for(i=0;i<80;i++) temp->data[i]='\0'; e、 利用循环进行文本输入 for(j=0;jdata[i]=ch; //给 temp 指向的行赋值 ···· temp->length++;//行中字符长度加 1 if(ch=='#') NUM=j; break; //文章结束时,Num 来记录整个文章的行数 { } } } 在字符输入的过程中,如果在单行输入的字符超过了 80 个字符,则需要以下操作 : 输入字符数大于 80,重新分配空间建立下一行:
temp->next=(LinkList *)malloc(sizeof(LinkList)) ; 给 temp 的前驱指针赋值:temp->next->pre=temp; temp 指向当前行: temp=temp->next; 将下一行初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i++) temp->data[i]='\0'; 记录整个文章的行数:temp->row=NUM+1; 返回指向最后一行指针:return temp; 文本输入部分到此结束。 (2)PrintWord() 文章显示函数 void PrintWord() { int i,j; LinkList *p; p=head->next; system("cls"); printf("\n"); printf("\t\t****************************************************\n"); printf("\t\t**** 文本显示 ****\n"); printf("\t\t****************************************************\n"); printf("\n 当前文章的内容是:\n"); for(j=0;j<=NUM&&p!=NULL;j++) for(i=0;(i<80)&&(p->data[i])!='#';i++) { } printf("%c",p->data[i]); p=p->next; { } } 说明: a、 定义文本行数变量 j,每行字符数 i:int i,j; b、 定义指针变量:LinkList *p; c、 将指针 p 指向链表表头:p=head->next; d、 利用循环输出链表中信息: for(j=0;j<=NUM&&p!=NULL;j++) {=for(i=0;(i<80)&&(p->data[i])!='#';i++) {=printf("%c",p->data[i]);}
分享到:
收藏