数据结构课程设计简单行编辑程序.docx

上传人:b****5 文档编号:27927121 上传时间:2023-07-06 格式:DOCX 页数:21 大小:63.95KB
下载 相关 举报
数据结构课程设计简单行编辑程序.docx_第1页
第1页 / 共21页
数据结构课程设计简单行编辑程序.docx_第2页
第2页 / 共21页
数据结构课程设计简单行编辑程序.docx_第3页
第3页 / 共21页
数据结构课程设计简单行编辑程序.docx_第4页
第4页 / 共21页
数据结构课程设计简单行编辑程序.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据结构课程设计简单行编辑程序.docx

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

数据结构课程设计简单行编辑程序.docx

数据结构课程设计简单行编辑程序

电子信息工程学院

课程设计报告

设计名称:

数据结构课程设计

简单行编辑程序

姓名:

学号:

专业班级:

电子信息工程学院

系(院):

设计时间:

设计地点:

EDA实验室

成绩:

指导教师评语:

 

签名:

年月日

1.课程设计目的

1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。

 

2.课程设计任务与要求:

任务

问题描述:

文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。

限制这些操作以行为单位进行的编辑程序称为行编辑程序。

被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。

一种解决方法是逐段的编辑。

任何时刻只把待编辑文件的一段放在内存,称为活区。

试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。

要求:

实现以下4条基本的编辑命令:

(1)行插入。

格式:

i<行号><回车><文本>.<回车>

将<文本>插入活区中第<行号>行之后。

(2)行删除。

格式:

d<行号1>[<空格><行号2>.]<回车>例如

删除活区中第<行号1>行(到第<行号2>行)。

例如:

例如:

“d10┛”和d1014┛”。

(3)活区切换。

格式:

n<回车>

将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。

(4)活区显示。

格式:

p<回车>

逐页地(每页20行)显示活区内容,在每显示的一页之后请用户决定是否继续显示以后各页(如果存在)。

印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。

各条命令中的行号均须在活区中各行号范围之内,只有插入命令的行号可以等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。

3.课程设计说明书

一需求分析

(1)、被编译的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法既不经济,也不总能实现。

任何时刻只把待编辑文件的一段放在内存,称为活区。

(2)、活区的大小用行数ActiveMaxLen(可设为100)来描述。

可以以标准行块为单位为各行分配存储,每个标准行块可含81个行块。

(3)、将输入文件中的内容的ActiveMaxLen–x(x由用户自己定义)行的内容读入活区中。

然后分别对活区中的内容进行编辑。

(4)、分别实现各命令的函数,然后对客户的需求实行相应的操作。

对命令格式不正确的进行处理。

 

二概要设计

ADTline{

基本操作:

enter(linenum)

初始条件:

有内存。

操作结果:

linenum+1.

delete_text()

初始条件:

line存在。

操作结果:

若删除的最后一行,则直接删除。

若删除中间一行,则后面的linenum-1。

Load()

初始条件:

存在文件file

操作结果:

打开文件。

}ADTline

 

三详细设计

1)将文本插在指定行端部

enter(intlinenum)

{

structline*info;

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);

}

2)删除一行

voiddelete_text()

{

structline*info;

chars[80];

intlinenum;

printf("\tlinenum:

");

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);

}

}

3)存文件

voidsave(char*fname)

{

structline*info;

char*p;

FILE*fp;

if((fp=fopen(fname,"w"))==NULL)

{

printf("\tCan'topenthefile!

\n");

exit(0);

}

printf("\tSaving:

\n");

info=start;

while(info)

{

p=info->text;

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

putc('\n',fp);

info=info->next;

}

fclose(fp);

}

4)读取文件

voidload(char*fname)

{

structline*info,*temp;

char*p;

FILE*fp;

intsize,inct;

if((fp=fopen(fname,"r+"))==NULL)

{

printf("\tCan'topenthefile!

\n");

exit(0);

}

while(start)

{

temp=start;

start=start->next;

free(temp);

}

printf("\n\tReading...\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++;

*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);

}

四设计与调试分析

这个程序的源程序是我在图书馆资料上找的,当时不能运行,main的界面也不是现在这样。

源程序里面也没有存文件和读取文件的功能,我先对源程序进行调试分析,把里面的错误一一改正,编写出mian程序。

然后在里面添加了存文件和打开文件的功能,使的程序更加完善。

本程序在运行时,必须选择“3.Displayaline”才能将输入,删除或者打开后的文件显示出来,这就有点浪费时间,使得操作有点复杂。

五用户手册

1.本程序在win-tc下运行。

2.在进行输入,删除或者打开文件的操作后,再选择“3.Displayaline”将输入,删除或者想要打开的文件内容显示出来。

3.在执行“5.Openthefile”时,输入想要打开文件的正确路径,回车。

如果想要打开的文件不存在,则跳出运行。

4.在进行保存文件的操作时,在提示后输入想要保存的正确路径名,再按回车,文件即被保存。

六测试成果

(1):

(2):

图(3):

图(4):

七附录(源程序清单)

 

#include"stdio.h"

#include"stdlib.h"

#include"string.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];

intlinenum=1;

start=NULL;

last=NULL;

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

do{

choice=menu_select();

switch(choice)

{

case1:

printf("\tlinenum:

");

gets(s);

linenum=atoi(s);

enter(linenum);

break;

case2:

delete_text();

break;

case3:

list();

break;

case4:

printf("\tfilename:

");

gets(fname);

save(fname);

break;

case5:

printf("\tfilename:

");

gets(fname);

load(fname);

break;

case6:

exit(0);

}

}while

(1);

}

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

menu_select()

{

chars[80];

intc;

printf("\t\t1.Enter\n");

printf("\t\t2.Deletealine\n");

printf("\t\t3.Displayaline\n");

printf("\t\t4.Savethefile\n");

printf("\t\t5.Readthefile\n");

printf("\t\t6.Quit\n");

do{

printf("\n\n\t\tPleasechoiceanum:

");

gets(s);

c=atoi(s);

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

return(c);

}

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

enter(intlinenum)

{

structline*info;

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("\tlinenum:

");

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(fname,"w"))==NULL)

{

printf("\tCan'topenthefile!

\n");

exit(0);

}

printf("\tSaving:

\n");

info=start;

while(info)

{

p=info->text;

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

putc('\n',fp);

info=info->next;

}

fclose(fp);

}

/*读取文件*/

voidload(char*fname)

{

structline*info,*temp;

char*p;

FILE*fp;

intsize,inct;

if((fp=fopen(fname,"r+"))==NULL)

{

printf("\tCan'topenthefile!

\n");

exit(0);

}

while(start)

{

temp=start;

start=start->next;

free(temp);

}

printf("\n\tReading...\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++;

*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);

}

参考文献:

1.严蔚敏,吴伟民.数据结构(C语言版).北京大学出版社,2006

2.谭浩强.C语言程序设计教程.高等教育出版社,1998

3.[美]RobertL.Kruse.数据结构与程序设计(C语言第二版).清华大学出版社,2005

 

4.课程设计心得

通过对数据结构的课程设计,我了解并发现了很多调试程序的方法,而且懂得了如何处理错误的方法。

对C语言以及C++的使用得到了进一步的提高。

针对数据结构的书本知识得到了进一步的巩固。

对程序的深层理解,清楚程序中每一步的功能,在程序的运行中是十分重要的,一个好的结构在运行中能够充分的发挥程序的功能。

结构设计的合理性决定了这个程序的价值。

在今后的学习中我要注意这方面,使得我的编程能力能有进一步的提高。

但是我在写程序的时候也有很多困难,上网和在图书馆找相关的C函数,由于代码分别保存在不同的头文件中,如何协调各个头文件之间代码的通讯是个很难解决的问题,曾经一度想放弃使用头文件,但如此一来会造成代码全部堆在一起,很难阅读和编写。

最后通过声明的方法终于解决了问题。

通过这次课程设计,对C语言的掌握提高到了一个新的水平,能够利用C语言编写出一个实用的程序,很大程度提高了程序综合设计能力、分析能力和编程能力。

掌握了很多新的编程技巧,积累了一些编程经验。

我更学到了编程的思想,这对于以后的学习以至到以后的工作中都是很有用的。

同时我认为我们以后的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。

某个人的离群都可能导致导致整项工作的失败。

实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。

团结协作是我们实习成功的一项非常重要的保证。

而这次实习也正好锻炼我们这一点,这也是非常宝贵的。

 

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

当前位置:首页 > 小学教育 > 其它课程

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

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