数据结构课程设计模板1.docx
《数据结构课程设计模板1.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计模板1.docx(42页珍藏版)》请在冰豆网上搜索。
数据结构课程设计模板1
铜陵学院
《数据结构》
课程设计报告
设计题目:
文本编译器的设计
系别数学与计算机科学系班级11信管本
学生姓名钱立新学号1106121024
钱浩1106121023
彭武彬1106121022
课程设计进行地点:
逸夫楼507
指导教师杨慧职称讲师
起止日期:
2012年12月10日起——至2012年12月14日止
课程设计任务书
一、课程设计的目的
课程设计比教学实验复杂一些,涉及的深度广些并更加接近实用。
目的一方面是通过课程设计的综合训练,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务;另一方面,通过课程设计使学生进一步加深对课程内容的理解,利用程序设计的基本思想进行程序的开发,进一步掌握编程方法和技巧,培养学生的实际分析问题、编程和动手能力,提高学生用程序的思想来解决实际问题的能力。
二、课程设计要求
1、遵守课程设计时间安排,按时上机。
2、认真查找相关的资料,理解相关的知识内容。
3、认真调试程序,组员之间应加强团队合作,取长补短,共同分析问题解决问题。
4、根据设计题目规定的具体要求进行具体规范操作。
5、认真撰写课程设计报告,避免相互抄袭。
三、对课程设计报告撰写内容、格式、字数的要求
1.课程设计报告是体现和总结课程设计成果的载体,主要内容包括:
设计题目、设计目的、实验器材、设计原理及内容、设计具体步骤、遇到的问题及解决方法、设计总结、参考文献等。
一般不应少于3000字。
2.在适当位置配合相应的实验原理图、实验数据表、问题分析流程图等图表进行说明。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。
4.课程设计报告打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距20磅。
文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。
5.课程设计报告装订顺序为:
封面、任务书、成绩评定表、目录、正文、参考文献。
四、成绩评定
评定成绩根据系统功能、界面效果,系统操作的方便性、灵活性等方面进行,主要从三个方面进行考虑:
1、对问题的理解程度;
2、成果的好坏;
3、设计报告。
五、时间进度安排
顺序
阶段日期
计划完成内容
备注
1
2012.12.10
查阅资料,撰写读书笔记
2
2012.12.11
系统设计,数据结构设计,算法设计
3
2012.12.12
编程并上机调试
4
2012.12.13
撰写报告
5
2012.12.14
验收程序,提交设计报告书
铜陵学院数学与计算机科学系
《数据结构》课程设计成绩评定表
教研室:
信管教研室班级:
11信管本学生姓名:
钱立新、钱浩、彭武彬
指导教师评审意见
评价内容
具体要求
分数类别
评分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
10
8
6
4
工作能力态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作。
20
16
12
8
工作量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
20
16
12
8
课程设计报告的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
50
40
30
20
课程设计成绩
指导教师签名:
第1章文本编译器的设计的任务与要求
1.1文本编译器的设计的任务
问题描述:
编写一个简单的文本编译器软件,能够基本实现文本的输入、插入、删除等功能。
请根据所学过的线性表知识用C/C++编程实现此操作。
程序要求:
(1)一篇文章,要求将此文章中的内容输入文本编译器中;
(2)删除某一个字符或字符串;
(3)讲指定的字符后字符串插入文中指定的位置,操作完毕,需将内容显示出来;
(4)将更新后的文本保存;
1.2文本编译器设计的要求
1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。
前期准备工作完备与否直接影响到后序上机调试工作的效率。
在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。
2、设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。
3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;
4、每组同学需提交可独立运行的程序和提交一份设计报告书。
第2章需求分析
要求用到数据结构课上学到的线性表以及链表等线性结构的的知识,所以就要充分而清晰的理解关于线性表和链表的知识,要有对数据的整体把握。
要求实现的基本功能很简单,只有删除和插入以及插入,增加功能也不过是加上输入和保存。
这些在数据结构课上已经讲过,只要能够理解关于线性表和链表的几个相关的基本算法加上对c语言的主要知识的把握就可以了。
问题是将输入的信息保存入文件,并对文件中的信息进行查找、插入、和删除。
这里基本是以前学过的c语言以及自学的内容,而且要考虑到是否要自行选择保存的地址。
综上,做这个课题,要具备的知识就是数据结构的一些基本算法以及c的主要知识,文件的保存算法、查找、插入、和删除,必要的C或者C++知识(本次我将使用C实现),以及丰富的程序调试经验。
第3章概要设计
首先由于程序中要有对文本信息的增加和减少,定义一个全局变量n,在此程序的任意的模块中均可以使用。
宏定义,定义三个结构体变量,存放数据data{80},行长度length,列数row,以及线性表的后继next和前驱pre。
设计实现主要功能的函数有:
输入文本信息的函数CreatWord();显示文本的函数PrintWord();查找的函数SearchWord();文件保存的函数duru();插入文本信息的函数InsertWord();删除文本信息的函数DeleteWord();内容处理菜单函Bmenu()以及主菜单mene();数然后在main()函数中实现对各个子函数的调用。
为了使用的方便,程序中将一些函数分层调用,在内容处理菜单Bmenu()中调用查找的函数SearchWord()、插入文本信息的函数InsertWord()、删除文本信息的函数DeleteWord(),在主菜单mene()中调用内容处理菜单函数Bmene()。
在主菜单函数Bmene()和内容处理菜单函数mene()中还要用一个switch()语句用于对不同函数的调用.
为了直观的看到操作以后的界面分布,还要有一个输出文字的函数HeadWord()。
程序运行中,为了保持屏幕的清楚和美观,时刻进行清屏也是必要的,股要用到清屏函数system("cls")。
第4章详细设计
1)宏定义,定义全局变量、结构体:
#defineLink_Size100/*宏定义*/
fstreamfp;
intNUM,C,N;/*全局变量*/
typedefstructlist/*定义结构体*/
{chardata[80];
intlength;
structlist*next;
structlist*pre;
introw;
}LinkList;
LinkList*h
2)主函数的算法如下:
voidmain()
{head=(LinkList*)malloc(sizeof(LinkList));
LinkList*temp;
temp=head;
menu(temp);
}/*结束main函数*/
3)输入文本信息的算法如下:
LinkList*CreatWord()
{LinkList*temp;
charch;
inti,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("开始创建文本,请输入文章(输入#号结束):
\n");
fp.open("context.txt",ios:
:
out);
if(fp.fail())
printf("文件创建失败!
\n");
for(j=0;j{for(i=0;i<80;i++)
{ch=getchar();
if(ch!
='#')
fp<temp->data[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->next=NULL;
temp->row=NUM+1;
system("cls");
fp.close();
returntemp;
}
4)显示文本的算法如下:
voidPrintWord()
{inti,j;
LinkList*p;
p=head->next;
system("cls");
HeadWord();
printf("\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;
}
}
5)保存文件的算法如下:
voidduru()
{LinkList*temp;
charch;
inti,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';
fp.open("context.txt",ios:
:
in);
if(fp.fail())
printf("文件创建失败!
\n");
for(j=0;j{if(fp.eof())
{temp->length=i;
temp->next=NULL;
break;
}
for(i=0;i<80;i++)
{if(fp.eof())
{NUM=j;break;}
fp>>ch;//写入文件
temp->data[i]=ch;
temp->length++;
}
temp->next=(LinkList*)malloc(sizeof(LinkList));
temp->next->pre=temp;
temp=temp->next;
for(i=0;i<80;i++)
temp->data[i]='\0';
}
temp->next=NULL;
temp->row=NUM+1;
system("cls");
fp.close();
}
6)查找的算法如下:
voidSearchWord(char*str1,LinkList*temp)
{charData[20];
inti,j,k=0,sum=0;
intl=1;
temp=head->next;
strcpy(Data,st
r1);
for(i=0;i<=NUM;i++)
{for(j=0;j<80;j++)
{if((temp->data[j])==Data[k])k++;
elseif(Data[k]!
='\0')
{j=j-k;k=0;}
if(Data[k]=='\0')
{sum++;
j=j-k+1;
printf("\t\t第%d次出现在第%d行第%d列\n",l,i+1,j+1);
l++;
k=0;
continue;}
}
temp=temp->next;
}
printf("\t\t\t字符串总共出现次数为:
%d\n\n",sum);
C=sum;
N=i*80+j;
}
7)插入的算法如下:
voidInsertWord(LinkList*temp)
{charData[20];
inth,l;
printf("\n\t\t请输入要插入的字符或字符串:
");
getchar();
gets(Data);
printf("\n\t\t当前文章内容为:
");
PrintWord();
printf("\n\t\t请输入要插入的行:
");
scanf("%d",&h);
printf("\n\t\t请输入要插入的列:
");
scanf("%d",&l);
inti=(h-1)*80+l;
LinkList*a;
intn=strlen(Data);
intm;
intinsertRow=i/80+1;
introw=temp->row;
intj;
if(insertRow==row)
{for(m=temp->length-1;m>=(i%80)&&n>0;m--)
temp->data[m+n]=temp->data[m];
for(m=(i%80),j=0;mtemp->data[m]=Data[j];
}
else
{intr=0;
for(intp=insertRow;p{if(p==insertRow)r=0;
elser=n;
for(m=temp->length-1-r;m>=0&&n>0;m--)
temp->data[m+n]=temp->data[m];
a=temp;
temp=temp->pre;
temp->length=80;
for(m=temp->length-n,j=0;mlength;m++,j++)
a->data[j]=temp->data[m];
}
for(m=temp->length-n-1;m>=(i%80);m--)
temp->data[m+n]=temp->data[m];
for(m=(i%80),j=0;m<(i%80)+n;m++,j++)
temp->data[m]=Data[j];
}
}
8)删除的算法如下:
voidDeleteWord(char*str2)
{charData[20];
LinkList*temp,*term;
inti,j,k,m,y,num;
strcpy(Data,str2);
for(y=0;y{num=80;
k=0,m=0;
temp=head;
for(i=0;i<=NUM;i++)
{term=temp;
temp=temp->next;
for(j=0;j<80;j++)
{if((temp->data[j])==Data[k])
k++;
elseif(Data[k]!
='\0')
j=j-k;k=0;
if(Data[k]=='\0')
{num=j;break;}
}
if(num<80)break;
}
for(;i<=NUM;i++)
{for(;j<80;j++)
{
if(j+1{term->data[80-k+num]=temp->data[j+1];}
else
temp->data[j-k+1]=temp->data[j+1];
}
term=temp;
temp=temp->next;
j=0;
}
}
}
9)各个模块之间的调用关系如下:
第5章设计与调试分析
在我自己课程设计中,就在编写好源代码后的调试中出现了不少的错误,遇到了很多麻烦及困难,我的调试及其中的错误和我最终找出错误,修改为正确的能够执行的程序中,通过分析,我学到了:
在定义头文件时可多不可少,即我们可多写些头文件,肯定不会出错,但是若没有定义所引用的相关头文件,必定调试不通过;从上面的算法和调用关系可以看出,这个程序的基本样子已经非常的清楚,但是真正的程序中还要考虑各种限制条件以及错误情况。
例如在查找的过程中,可能不存在要查找的信息,就要给出不存在此信息的提示;在插入的时候,插入的位置不存在等。
还有就是涉及到返回值得问题和程序中所要用到的变量的问题。
在调试的过程中所遇到的问题很多,例如,.c和.cpp的区别等。
通过本次数据结构的课程设计,我学习了很多在上课没懂的知识,并对一些线性结构的算法有了更加深刻的了解,更巩固了课堂中学习的知识,真正学会一种算法了。
当求解一个算法时,不是拿到问题就不加思索地做,而是首先要先对它有个大概的了解,接着再详细地分析每一步怎么做,无论自己以前是否有处理过相似的问题,只要按照以上的步骤,必定会顺利地做出来。
这次课程设计,我在编辑中犯了不应有的错误,对文件的操作也很生疏。
在不断分析后明确并改正了错误和疏漏,我的程序有了更高的质量。
第6章用户手册
1、本程序可以在vc++6.0的环境下运行。
2、在vc中创建一个工程,将源程序复制到.cpp中,编译链接就可以。
3、选择编译、运行以后会出现运行界面,选择相应的选项,根据提示即可进行演示。
界面如下:
4、创建信息就是把最开始要输入的信息输入到系统里。
界面如下:
5、浏览信息就是浏览已经输入的信息。
界面如下:
6、保存信息就是把输入的信息保存如指定的磁盘。
界面如下:
7、文章内容处理菜单,界面如下:
8、插入,修改,删除分别是对指定的某信息进行相应的操作。
界面如下:
1)查找
2)插入
3)删除
第7章课程设计心得体会
以前做实验题目的时候大家感觉很难,因为根本就不知道从哪里开始,从哪里下手。
而这次课程设计让我们对编程有了新的认识和宝贵的体会。
拿到题目的时候我非常的无语,根本不知道该从何处下手,无赖之下我们上网查了很多相关的资料,看了很多有关的例子。
并仔细看了书尤其是《数据结构》上的线性表和链表的知识,感觉就是老师上课讲到的一些内容,题目不是很难,是自己基础不够扎实,以至于先把自己吓住了。
再后来,参照书上的和网上的诸多例子,我们大家一起认真的一个模块一个模块的编写,调试,一个功能一个功能去完善。
我们发现越做越顺利,由于以前的实验中对于改错的经验积累和几个学得不错的同学的帮助,我们的程序中的错误也一个一个的顺利解决。
接下来,等我们的程序完全做好以后,我们竟然可以独立的帮其他同学修改一些以前根本不知所以然的错误。
其实,从这次实验中我们认识到,我们距离高手还很远,编程有很多的乐趣也有很多的技巧性和知识性。
我们将在以后的日子里继续认真的学习知识,积累经验,让自己的编程能力提高。
最后,也是我们最重要的体会:
我们在开始时的不知所措,对题目的畏惧如虎,一直以为编程很难。
但当我们认真且努力的完成任务时我们才发现其实编程也不是不能掌握的。
一直以来,都是我们自己给自己加添了难度,对自己缺乏应有的信心。
我想经过这次体验后,我们会更加相信自己,了解自己,这为我们以后漫长的人生道路有着不可估量的巨大帮助,让我们拥有面对社会,面对人生的无畏勇气。
参考文献
[1]谭浩强.《C程序设计》.北京:
清华大学出版社,2005
[2]谭浩强.《C程序设计题解与上机指导》.北京:
清华大学出版社,2005
[3]严蔚敏.吴伟民等编著《数据结构(C语言版)》.北京:
清华大学出版社,2011
[4]候风巍.杨永田等编著《数据结构要点分析》.北京:
北京航空航天大学出版社,2007
[5]郑阿奇.《VisualC++实用教程》.北京:
电子工业出版社,2010
[6]FrankM.Carrano等著.《数据结构与C++高级教程》.北京:
清华大学出版社,2009
[7]严蔚敏.《数据结构习题集》(C语言版).北京:
清华大学出版社,2009
[8]《数据结构》(C语言版),陈明编著,清华大学出版社,2006年。
[9]《算法与数据结构》,宁正元等编著,清华大学出版社,2006年。
[10]《数据结构知识点与典型例题解析》,陈亦望编著,清华大学出版社,2005年。
[11]《数据结构与算法学习辅导及习题详解》,张乃孝编著,电子工业出版社,2004年。
附录(源程序清单)
/*11信管本钱立新、钱浩、彭武彬的课程设计题目,选题是:
文本编译器的设计*/
#include"stdio.h"
#include"malloc.h"
#include"string.h"
#include"iostream.h"
#include"stdlib.h"
#include"conio.h"
#include
#defineLink_Size100
fstreamfp;
intNUM,C,N;
typedefstructlist
{
chardata[80];
intlength;
structlist*next;
structlist*pre;
introw;
}
|