简单的行编辑器课程设计.docx

上传人:b****5 文档编号:11572207 上传时间:2023-03-19 格式:DOCX 页数:16 大小:35.43KB
下载 相关 举报
简单的行编辑器课程设计.docx_第1页
第1页 / 共16页
简单的行编辑器课程设计.docx_第2页
第2页 / 共16页
简单的行编辑器课程设计.docx_第3页
第3页 / 共16页
简单的行编辑器课程设计.docx_第4页
第4页 / 共16页
简单的行编辑器课程设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

简单的行编辑器课程设计.docx

《简单的行编辑器课程设计.docx》由会员分享,可在线阅读,更多相关《简单的行编辑器课程设计.docx(16页珍藏版)》请在冰豆网上搜索。

简单的行编辑器课程设计.docx

简单的行编辑器课程设计

 

程序设计课程设计报告

 

二00八年七月一号

1……………………………………………设计目的

2…………………………………………设计题目和要求

3…………………………………………总体设计

4…………………………………………详细设计

5…………………………………………源程序清单和执行结果

6…………………………………………总结

1设计目的

设计一个简单的行编辑器,了解行编辑器的应用

2设计题目和要求

题目:

简单的行编辑器

要求:

1)设计一个简单的行编辑器,每行以回车结束

2)数据以文件形式储存

3)编辑器具有查找修改删除数据的功能

3总体设计

简单的行编辑器

删除一行删除一行

显示一行显示一行

文件存盘文件存盘

装入文件装入文件

退出

4详细设计

1)结构体的应用

structline{

chartext[81];

intnum;/*行号*/

structline*next;/*指向下一个输入项目的指针*/

structline*prior;/*指向前一个项目的指针*/

};

structline*start;/*指向表中第一个项目的指针*/

structline*last;/*指向表中作后一个项目的指针*/

structline*find(int),*dls_store(structline*);

注:

在结构体中分别声明项目指针及项目中的指针变量

2)函数声明

voidpatchup(int,int),delete_text(),list(),save(char*),load(char*);

menu_select();

enter(intlinenum);

注:

在结构体外分别对输入、删除、显示等函数进行声明

3)主函数和switch语句

voidmain(intargc,char*argv[])

{

chars[80],choice,fname[80];

//structline*info;

intlinenum=1;

start=NULL;

last=NULL;

if(argc==2)load(argv[1]);/*装入命令行上的文件*/

do{

choice=menu_select();

switch(choice)

{

case1:

printf("\t行号:

");

gets(s);

linenum=atoi(s);

enter(linenum);

break;

case2:

delete_text();

break;

case3:

list();

break;

case4:

printf("\t文件名:

");

gets(fname);

save(fname);

break;

case5:

printf("\t文件名:

");

gets(fname);

load(fname);

break;

case6:

exit(0);

}

}while

(1);

}

注:

通过主函数分别对相应函数进行调用,利用switch选择语句来执行语句

4)菜单函数

menu_select()

{

chars[80];

intc;

printf("\t\t1.输入\n");

printf("\t\t2.删除一行\n");

printf("\t\t3.显示一行\n");

printf("\t\t4.文件存盘\n");

printf("\t\t5.装入文件\n");

printf("\t\t6.退出\n");

do

{

printf("\n\n\t\t请按数字选择:

");

gets(s);

c=atoi(s);

}while(c<0||c>6);

return(c);

}

注:

定义菜单显示内容,根据菜单要求运用程序

5源程序和执行结果

源程序:

#include

#include"stdio.h"

#include"stdlib.h"

structline{

chartext[81];

intnum;/*行号*/

structline*next;/*指向下一个输入项目的指针*/

structline*prior;/*指向前一个项目的指针*/

};

structline*start;/*指向表中第一个项目的指针*/

structline*last;/*指向表中作后一个项目的指针*/

structline*find(int),*dls_store(structline*);

voidpatchup(int,int),delete_text(),list(),save(char*),load(char*);

menu_select();

enter(intlinenum);

voidmain(intargc,char*argv[])

{

chars[80],choice,fname[80];

//structline*info;

intlinenum=1;

start=NULL;

last=NULL;

if(argc==2)load(argv[1]);/*装入命令行上的文件*/

do{

choice=menu_select();

switch(choice)

{

case1:

printf("\t行号:

");

gets(s);

linenum=atoi(s);

enter(linenum);

break;

case2:

delete_text();

break;

case3:

list();

break;

case4:

printf("\t文件名:

");

gets(fname);

save(fname);

break;

case5:

printf("\t文件名:

");

gets(fname);

load(fname);

break;

case6:

exit(0);

}

}while

(1);

}

/*显示菜单,供用户选择*/

menu_select()

{

chars[80];

intc;

printf("\t\t1.输入\n");

printf("\t\t2.删除一行\n");

printf("\t\t3.显示一行\n");

printf("\t\t4.文件存盘\n");

printf("\t\t5.装入文件\n");

printf("\t\t6.退出\n");

do

{

printf("\n\n\t\t请按数字选择:

");

gets(s);

c=atoi(s);

}while(c<0||c>6);

return(c);

}

/*将文本插在指定行端部*/

enter(intlinenum)

{

structline*info;

//chart[81];

for(;;)

{

/**/

info=(structline*)malloc(sizeof(structline));

if(!

info){

printf("\t!

内存不够!

\n");

return(NULL);

}

printf("%d:

",linenum);

gets(info->text);

info->num=linenum;

if(*info->text)

{

if(find(linenum))patchup(linenum,1);

if(*info->text)start=dls_store(info);

}

elsebreak;

linenum++;

}

return(linenum);

}

/*当文本内容插在文件中间时其下面的内容的行号必须增加1,而*/

/*删除时,被删除的文本后面的行号必须减1*/

voidpatchup(intn,intincr)

{

structline*i;

i=find(n);

while(i){

i->num=i->num+incr;

i=i->next;

}

}

/*按行号排序后插入*/

structline*dls_store(structline*i)

{

structline*old,*p;

if(last==NULL){

i->next=NULL;

i->prior=NULL;

last=i;

return(i);

}

p=start;

old=NULL;

while(p){

if(p->num){

old=p;

p=p->next;

}

else{

if(p->prior){

p->prior->next=i;

i->next=p;

p->prior=i;

returnstart;

}

i->next=p;

i->prior=NULL;

p->prior=i;

return(i);

}

}

old->next=i;

i->next=NULL;

i->prior=old;

last=i;

returnstart;

}

/*删除一行*/

voiddelete_text()

{

structline*info;

chars[80];

intlinenum;

printf("\t行号:

");

gets(s);

linenum=atoi(s);

info=find(linenum);

if(info)

{

if(start==info){

start=info->next;

if(start)start->prior=NULL;

elselast=NULL;

}

else{

info->prior->next=info->next;

if(info!

=last)

info->next->prior=info->prior;

elselast=info->prior;

}

free(info);

patchup(linenum+1,-1);

}

}

/*查找一行文本*/

structline*find(intlinenum)

{

structline*info;

info=start;

while(info){

if(linenum==info->num)return(info);

info=info->next;

}

return(NULL);

}

/*显示文本*/

voidlist()

{

structline*info;

info=start;

while(info){

printf("%d:

%s\n",info->num,info->text);

info=info->next;

}

printf("\n\n");

}

/*存文件*/

voidsave(char*fname)

{

structline*info;

char*p;

FILE*fp;

if((fp=fopen("text.txt","w"))==NULL){

printf("\t文件打不开!

\n");

exit(0);

}

printf("\t正在存入文件:

\n");

info=start;

while(info)

{

p=info->text;

while(*p)putc(*p++,fp);

//putc('\r',fp);

putc('\n',fp);

info=info->next;

}

fclose(fp);

}

/*装入文件*/

voidload(char*fname)

{

structline*info,*temp;

char*p;

FILE*fp;

//intt,size,inct;

intsize,inct;

if((fp=fopen("text.txt","r"))==NULL){

printf("\t文件打不开!

\n");

exit(0);

}

while(start){

temp=start;

start=start->next;

free(temp);

}

printf("\n\t正装入文件!

\n");

size=sizeof(structline);

start=(structline*)malloc(size);

if(!

start){

printf("\n\t内存已经用完!

");

return;

}

info=start;

p=info->text;

inct=1;

while((*p=getc(fp))!

=EOF)

{

p++;

while((*p=getc(fp))!

='\n')p++;

//getc(fp);/*丢掉'\n'*/

*p='\0';

info->num=inct++;

info->next=(structline*)malloc(size);

if(!

info->next)

 

{

printf("\n\t内存已经用完!

");

return;

}

info->prior=temp;

temp=info;

info=info->next;

p=info->text;

}

temp->next=NULL;

last=temp;

free(info);

start->prior=NULL;

fclose(fp);

}

执行结果:

6总结

我们所做的每一道程序设计题基本涵盖了我们一学年的课程知识,而我侧有些力不从心,很多地方生疏不知,大部分程序借鉴他人,这一点我还需改进,不过通过此次课程设计,我对程序设计这门课程又有了新的理解。

从这次设计中,我更深刻的感受到了基础知识的重要性,我们应该更重视一下各知识间的连贯应用,和整合运用,单一知识点是无法编程一道好的程序的。

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

当前位置:首页 > 经管营销 > 经济市场

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

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