网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

课程设计数据结构文章编辑器

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
数据结构课程设计文章编辑器
1.课程设计目的
信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。为了适应现代社会人们高度强烈的时间观念,文章编辑软件给了人们很大的方便。数据结构主要分析待处理的对象的特性以及各处理对象之间存在的关系。建立数学模型的线性数据结构,来解决线性表的线性关系。它包括网络、集合代数论、格、关系等方面。
     这次课程设计的任务是简单的做一个文章编辑程序,一共分为5个模块,能统计出文字、数字、字符串空格的个数,能删除某一个字符。根据这些功能,程序需要分别调用函数stdio、stdlib、malloc、string和conio,给出了一些简单的定义,如black、letter、word、number、string等的定义。程序主要运用了模块化思想,运用顺序串和线性表来解决问题。而这些问题都可以用数据结构的知识来实现,这是个可性行的设计方案。
2.课程设计的主要的内容和功能:
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出统计的文章里面"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章。
3.设计方案论证
3.1程序详细设计
根据程序所具有功能可以分成以下十个功能模块:
3.1.1 void initstring() 初始化函数:初始化、创建一个空串;
3.1.2 void assign() 赋值函数:对所创建串进行赋值;
3.1.3 void C_letter() 字母统计函数:对所输入的文章进行字母统计,并按一定的
格式输出文章中的字母个数:字母的数目可根据字符的ASCⅡ值来确定,从文章的第一个字符开始,判断其ASCⅡ值是否在英文字母所处的ASCⅡ值之中,如果是,此时的letter累加1;否则,letter值不变.接着比较下一个字符,直到遇到Enter或i大于字符串的长度,最后输出统计结果。
3.1.4 void  C_blank() 空格统计函数:对所输入的文章进行空格统计,并按一定的
格式输出文章中的空格个数:空格的数目可直接从文章的第一个字符开始,逐个比较字符的ASCⅡ值是否与空格的ASCⅡ相等;相等,则:blank(空格数)累加1;负责blank的值不变。接着比较下一个字符,直到遇到Enter或i大于字符串的长度,最后输出统计结果。
3.1.5 void  C_word() 字数统计函数:对所输入的文章进行字数统计,并按一定的格式输出文章中的总字数:单词的数目可以由非字母字符出现的次数决定。如果测出某一字符为字母,而它前面的字符为非字母,则表示“新的单词开始了”,此时使单词数累加。如果当前字符为字母而其前面的字符也是字母,则意味着仍然是原来那个单词的继续,单词不应再累加1。前面一个字符是否非字母可以从fag的值可以看出来,若fag =0,则表示前一字符是非字母;如果fag=1,意味着前一个字符为字母。
3.1.6 void C_number() 数字统计函数:对所输入的文章进行字数统计,并按一定的格式输出文章中的数字个数:数字的数目可根据字符的ASCⅡ值来确定,从文章的第一个字符开始,判断其ASCⅡ值是否在数字(1--9)所处的ASCⅡ值之中,如果是:此时的num(数字数)累加1;否则:num值不变.接着比较下一个字符,直到遇到Enter或i大于字符串的长度,最后输出统计结果。
3.1.7 void C_string() 字符串统计函数:程序运行后,从输入端输入任意一字符串,将会统计该字符串在文章中出现的次数,并按一定的格式输出该字符串在文章中出现的次数:利用输入函数,输入任意一字符串string,并将其长度赋给si,在主串S中从i(i的初始值为0)个字符起,长度和串string相等的子串,比较的过程中用j(j的初始值为0)指向字符串string的第j号字符,一次比较结束后,如果j>=si,则表示在主串S中找到一个与串string相等的子串,此时使strnum(字符串个数,其初始值为0)加1,j=0;直到条件i小于等于主串长度s->len不成立。
3.1.8 void Del_str() 字符串删除函数:程序运行后,从输入端输入任意一字符串,将会在文章中删除所有该字符串,并将其后的文章内容前移,最后输出删除该字符串后的文章内容。
在main( )函数外用typedef定义一结构体的类型st,并定义全局结构体类型变量ss,然后将该程序分成十个模块,首先用main( )函数在各自模块中进行调用初始化函数,创建一空串,接着调用赋值函数对其赋值;赋值完毕后,按Enter键输出“人性化”的界面,然后调用选择功能函数,根据“人性化”的提示输入指令代码,执行相应的操作。
    各模块自定义一函数,自定义的子函数包括:初始化函数、赋值。用的函数有字母统计函数、空格统计函数、字数统计函数、数字统计函数、标点符号统计函数、字符串统计函数、字符串删除函数以及功能选择函数等。
    模块之间的调用关系图如下:若图片无法显示请联系QQ3710167,课程设计数据结构文章编辑器系统免费,转发请注明源于www.lwfree.cn     102
 
数据结构课程设计文章编辑器
4.程序编码
#define true 1
#define false 0
#include
#include
#include
#include
#include
#define STACK_INIT_SIZE 100  
#define STACKINCREMENT 10    
typedef struct
    {
      char *base; 
      char *top; 
      int stacksize; 
    }
      SqStack;
SqStack S,q;
typedef struct {
            char cc[99];
            int no;
}
   Array;
   Array a[100];
  int m,n,i,j;
  char name[40];
  char t='\n';
  FILE *fp;
 /* construct an emputy shed*/
void InitStack()

    S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
    if(S.base==NULL)
       exit(1);
  S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
}
 
void push(char e)
{
 if(S.top-S.base>=S.stacksize)
    {   
 
S.base=(char*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
        /* Attempts to shrink or expand the previously allocated block to size bytes.
           Returns the address of the reallocated block which can be different than the
           original address. If the block cannot be reallocated address. If the block
           cannot be
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
 
    *S.top++=e;
}
 
char pop()
{   
   char e;
    if(S.top==S.base)
        return false;
    e=*(--S.top);
    return e;
}
 
void ClearStack()
{   
   S.top=S.base;
}
 
void DestroyStack()
{   
    free(S.base); 
    S.top=S.base;
}
int StackEmpty( )                    
{
 if (S.top==S.base)
     return true;
return false;
}
 
void Buffer( )
  {
    n=0;
    m=1;
 
   while (S.top!=S.base)
    {  
        n=n+1;
        a[m].no=a[m].no+1;
        a[m].cc[n]=*(S.top-1);
        S.top--;
    }
}
 
void save()
{   
    printf("\n\nfile name:");
    scanf("%s",&name);
    fp=fopen(name,"wb");
    for (i=1;i<=m;i++)
    { 

void main()
{    需要完整内容的请联系QQ3710167,本文免费,转发请注明源于www.lwfree.cn
    char ch,e;
    printf("\n\n\n\t\t\t  welcome to use the  whole screen editor");
    printf("\n\n   press F6 if you want to save the file,you can save the file when you see\"^Z\" \n");
 
printf("\n***********************************************************\n\n");
 
    InitStack();
 
    ch=getchar();
    while(ch!=EOF)
    {      
        while(ch!=EOF&&ch!='\n')
        {            
           switch(ch)
            { 
              case '#':e=pop();break;
              case '@':ClearStack();break;
           default:push(ch);break;
            }
        ch=getchar();
 

数据结构课程设计文章编辑器
  }
         Buffer( );
        ClearStack();
        if(ch!=EOF)
        ch=getchar();
    }
    save( );
    DestroyStack();
}
main( )
 {
   char c;
   st   ss;
   clrscr( );
   printf("\n\n\t\t\tPlease input your passage!!!\n");
   printf("  ***********************************************\n    ");
   initstring(&ss);
   assign(&ss);
   printf("\n  ***************************************\n");
   print( );
print( );
 printf("\n\t            WELCOM TO USE THE WHOLE SCREEN EDITOR       ");
   printf("\n\t                  COUNT           BLANKS    ");
   printf("\n\t                  COUNT           LETTER    ");
   printf("\n\t                  COUNT           WORD      ");
   printf("\n\t                  COUNT           NUMBER    ");
   printf("\n\t                  COUNT           STRING    ");
   printf("\n\t                  DELETE          ONESTR    ");
   print();
   print();
   C_blank(&ss);
   C_letter(&ss);
   C_word(&ss);
   C_number(&ss);
   C_string(&ss);
   Del_str(&ss);
 }
5.设计结果与分析
 5.1开始步骤:
    5.1.1使用编辑软件TE.EXE进行源程序的编写.
    5.1.2使用汇编软件MASM.EXE对源程序汇编.
    5.1.3使用连接软件LINK.EXE对目标文件进行连接.生成.EXE文件执行出现如图 
图5-1
5.2 任意输入一段文章按回车键后,屏幕出现程序的运行结果,程序自动统计空格、字母、字符、数字和字符串的个数,进入另一画面,然后出现查找某一个字符在文章里出现的个数,如图5-2: 
图5-2
5.3 输入某个字母如w,再按回车键,程序自动查询w在文章里面出现的个数,结果如图5-3:
 
数据结构课程设计文章编辑器
图5-3
  5.4 最后是删除某个字符的功能,随便输入一个文章里面的某个字母,如w,然后按回车键,程序自动将文章里面出现的所有的w删除,画面出现删除w的文章结果如图5-4:  
图5-4
  5.5 在编译结束运行完程序后,在同目录下生成了三个文件,文本文件里有文章的代码,其中包括生成的MPR1.c文本文档、MPR1.Obj和MPR1.Exe可执行文件,按照格式输入一段字母、空格和数字,然后按回车,程序出现“人性化”界面,包括已经完成的统计功能,下面是选择项目,输入正确的操作指令,程序正常执行其他相应的功能;否则跳出程序,程序验证正确.
  5.6程序包括的字母统计函数、空格统计函数、字数统计函数、数字统计函数、标点符号统计函数、字符串统计函数,它们的时间复杂度都是O(n);而字符串删除函数虽然不采用递归手法,采用重新建立一颗不含要删结点的二插排序树,但是它的时间复杂度也是O(n).
6.设计体会
    这次课程设计作业使我对用高级语言编程产生了极大兴趣.通过这次课程设计也着实让自己感受到了一次编程的乐趣,从中也学到了不少知识.虽然都说“程序=数据结构+算法”,但我在学习运用数据结构编程之前,并没能深刻体会到这一点,直到这次课设实践.
    总的来说自己感受最深的一点是:以前用C编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序.感觉有点像张飞打仗,有勇无谋,只要能完成任务就行.但现在编程感觉完全不同了.在编写一个程序之前,自己能够综合考虑各种因素,首先选取自己所需要的数据结构,是树还是图或是别的什么?然后选定一种或几种存储结构来具体的决定后面的函数的主要风格.最后在编写每一个函数之前,仔细斟酌比对,挑选出最适合当前状况的算法.这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的原图了.这样无形中就提高了自己编写的程序的质量和速度.另外,还体会到深刻理解数据结构的重要性.只有真正的理解这样定义数据类型的好处,才能用好这样一种数据结构.了解典型数据结构的性质也是非常有用的,它往往是编写程序的关键.以前对递归算法一直很害怕,总是看不明白究竟这递归是怎么样一步步进行的.在这次课程设计中终于克服了这一障碍,一次次单步执行书中的递归函数的例子,并一遍遍在心中自己默默的走,终于弄明白了,同时还根据自己的理解写出了类似的递归函数实现了新的功能,受益良多!
    在这次课程设计中,对参数的调用也进行了很多种尝试,已经能够相对准确的选择合适的参数形式来实现函数之间的数据传输交互了.但在这次课程设计中也出现一些比较严重的错误.在用一维数组顺序表结构编写程序时错误的运用静态链表来实现函数功能.这是对基本概念理解的模糊不清造成的.原以为只要采用一维数组作为存储结构它就一定也是顺序表结构,而实质上这根本是两个不相干的概念.后来在老师和同学的指点帮助下意识到并改正了自己的错误.不过收获也很不少的,至少又练习了运用静态链表来实现同样的功能,同时也发现两者在很多函数上是互通的,只需稍作修改即可移植.总之,会继续有兴趣的编写程序,相信在越来越多的尝试之后,自己会不断的进步不断提高的.
7.参考文献
[1]《数据结构》,严蔚敏等,清华大学出版社
[2]《数据结构题集》,严蔚敏等,清华大学出版社
[3]《程序设计与问题求解》,朱国进等,东华大学出版社
 
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 1280 x 720 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师