数据结构课程设计——简单行编辑程序课程设计任务书

简单行编辑程序课程设计任务书

学生姓名:           专业班级:软件工程

指导教师:          工作单位:

题  目: 简单行编辑程序                                     

基础要求:

理论:具有数据结构的理论基础,能够完成代码编辑和一些简单的算法

实践:良好的C语言方面的的代码书写能力,良好的对文本文件插入、删除等修改的专业知识,能够完成简单的行编辑程序

主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

(1)任务内容

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

(1) 行插入。格式:i<行号><回车><文本>.<回车>

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

(2) 行删除。格式:d<行号l>[<空格><行号2>]<回车>

删除活区中第<行号l>行(到第<行号2>行)。例如:"d10"和"d1014"。

(3) 活区切换。格式n<回车>

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

(4) 活区显示。格式:p<回车>

逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后备页(如果存在)。印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。

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

(2)完成要求

对系统进行功能模块分析、控制模块分析;系统设计要能完成题目所要求的功能;编程简练,可用,尽可能的使系统的功能更加完善和全面;说明书、流程图要清楚;提高学生的论文写作能力;特别要求自己独立完成;在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。

(3)撰写课程设计报告

报告格式按附件要求打印与写课程设计报告;论文包括目录、正文、小结、参考文献、附录等;课程设计论文装订按学校的统一要求完成。

时间安排:

内容                  天数             地点

构思及收集资料          1              机房

编码与调试              3              机房

撰写论文                1              图书馆、机房

指导教师签名:                      年    月 

简单行编辑程序

完整资源一键获取私信我:

 

问题分析和任务定义

(1)、被编译的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法既不经济,也不总能实现。任何时刻只把待编辑文件的一段放在内存,称为活区。

(2)、活区的大小用行数ActiveMaxLen(可设为100)来描述。可以以标准行块为单位为各行分配存储,每个标准行块可含81个行块。

(3)、将输入文件中的内容的ActiveMaxLen – x(x由用户自己定义)行的内容读入活区中。然后分别对活区中的内容进行编辑。

(4)、分别实现各命令的函数,然后对客户的需求实行相应的操作。对命令格式不正确的进行处理。

数据结构的选择和概要设计

ADT line{

基本操作:

enter(linenum)

    初始条件:有内存。

    操作结果:linenum +1.

  delete_text( )
     初始条件:line存在。

操作结果:若删除的最后一行,则直接删除。

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

   Load( )

初始条件:存在文件file

操作结果:打开文件。

} ADT line

详细设计和编码

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

enter(int   linenum)  

   {  

      struct   line   *info;  

      for(;;)

      {  

        info=(struct   line  *)malloc(sizeof(struct   line));

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

       }

      else   break;  

      linenum++;  

      }  

      return(linenum);  

   }  

2)删除一行 

    void   delete_text()  

    {  

      struct   line   *info;  

      char   s[80];  

      int   linenum;  

      printf("\tlinenum :");

      gets(s);  

      linenum=atoi(s);  

      info=find(linenum);  

      if(info)

      {

        if(start==info)

        {

          start=info->next;

          if(start)   start->prior=NULL;

          else       last=NULL;

        }

        else

        {

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

        if(info!=last)

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

        else   last=info->prior;

        }

        free(info);

        patchup(linenum+1,-1);

      }

    }  

 3)存文件

    void   save(char   *fname)  

    {  

      struct   line   *info;  

      char   *p;  

      FILE   *fp;  

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

      {  

        printf("\t Can't open the file !\n");

        exit(0);

      }  

      printf("\t Saving :\n");

      info=start;  

      while(info)

      {  

       p=info->text;

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

       putc('\n',fp);

       info=info->next;

      }

      fclose(fp);  

}

   4)读取文件

    void   load(char   *fname)   

    {  

      struct   line   *info,*temp;  

      char   *p;  

      FILE   *fp;  

      int   size,inct;  

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

        {

          printf("\t Can't open the file !\n");

          exit(0);

        }

      while(start)

        {

          temp=start;

          start=start->next;

          free(temp);

        }  

      printf("\n\t Reading...\n");

      size=sizeof(struct   line);

      start=(struct   line*)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=(struct   line*)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.Display a line”才能将输入,删除或者打开后的文件显示出来,这就有点浪费时间,使得操作有点复杂。

测试结果及其分析

图(1):

图(2):

图(3):

图(4):

参考文献

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

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

3.谭浩强.C程序设计(第二版).清华大学出版社出版,2005.6

4.钱能.C++程序设计教程.清华大学出版社,2005.5.

5.沈美明.IBMPC汇编语言程序设计.清华大学出版社,1993.9.

6.钱晓捷.汇编语言程序设计.电子工业出版社,2003.

7.郭晓梅,汇编语言与C语言的混合编程及应用[J].南京农专学报,2002,

8.普拉塔.CPrimerPlus(第五版)中文版[M].人民邮电出版社,2005.

9.斯马尔迪诺.教学技术与媒体[M].高等教育出版社,2008.

10.教育部考试中心.全国计算机等级考试二级教程——C语言程序设计[M].2010年版.北京:高等教育出版社,2010.

课程设计的心得体会

课程设计刚开始时总感觉很反感,认为课程都结束了还设计。后来经过一次课的设计,才发现自己所欠缺的知识。大概两个星期的课程设计,在网上搜集各种资料,再进行整理,虽然过程有些辛苦。但是,我从中也收获了不少。

在这次课程设计中,我对数据结构和C语言有了进一步的了解。知道了实践的重要性,同时也了解了理论与实践的差距。通过实践,我也发现我的好多不足之处,首先就是自己的经验还很匮乏,在设计算法思路时总是以自然的语言去理解分析,而不能把自己放在机器的角度去看问题,这就导致了许多问题看似可以解决,但真正到了上机编程敲代码是却无从下手。所以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。

通过这次课程设计,对 C语言的掌握提高到了一个新的水平,能够利用C 语言编写出一个实用的程序,很大程度提高了程序综合设计能力、分析能力和编程能力。掌握了很多新的编程技巧,积累了一些编程经验。我更学到了编程的思想,这对于以后的学习以至到以后的工作中都是很有用的。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值