




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上数据结构课程设计报告 题 目:宿舍管理系统,纸牌游戏,猴子吃桃,简易文本编辑器,二叉排序树树的实现 设 计 者:孟欣,沈学发,陈健维,曾炳忠 陈法威,李智超,李斯恺专业班级: 软件设计111班 学 号:、29、30、3133、34、36 指导教师: 谌颃 所属系部: 计算机科学与技术系2013年 6月11 日目录一、 宿舍管理系统1、方案设计1.1任务为宿舍管理人员编写一个宿舍管理查询软件1.1.1程序设计要求:采用交互工作方式建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)1.1.2 开发设计思想 基于以上系统设计目标本
2、文在开发人事管理信息系统时遵循了以下开发设计思想: (1)采用现有的软硬件环境及先进的管理系统开发方案从而达到充分利用现有资源提高系统开发水平和应用效果的目的。(2)尽量达到操作过程中的直观、方便、实用、安全等要求。(3)系统采用模块化程序设计方法既便于系统功能的各种组合和修改又便于未参与开发的技术维护人员补充、维护。 1.1.3查询菜单: (用二分查找实现以下操作)按姓名查询 按学号查询 按房号查询1.1.4打印任一查询结果(可以连续操作)1.2功能根据上述要求,我们开始考虑系统应具备的功能:要实现交互工作方式,各项操作结束后均应返回主菜单;系统本无任何信息数据,要建立数据文件,需开发一个信
3、息录入功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中,所以我们未开发信息存盘功能;信息录入后都保存在内存中,用户看不到,需要设计一个信息显示功能,信息的显示应该便于查阅,所以需具备按各种关键字显示的功能;本系统按关键字(姓名、学号、房号)进行冒泡排序,采用二分查找方式分别实现按关键字(姓名、学号、房号)查询功能;由于有些同学因为不同原因而离校,所以设计了删除功能;由于有新同学入校,所以设计了插入功能;当用户操作完毕需要退出时,我们提供了退出选项,便于使用者退出交互式工作系统。2、算法设计2.1线性表的顺序存储2.1.1存储结构本系统定义的存储结构采用结构体数组,结构体为:t
4、ypedef struct /定义结构体成员char name20;int num; /学号和房号都为整型int room;stu;stu stud;typedef structint length; /当前长度stu *elem; /存储空间基址int listsize; /当前分配的存储容量linklist; 在此说明每个部分的算法设计说明(可以是描述算法的流程图)2.1.2程序流程图 3、调试分析3.1使用方法首先,运行程序进入“欢迎进入宿舍管理查询系统”界面,然后进入线性表创建界面中,输入学生的信息,创建好学生信息以后单击“n”键则进入操作界面(主界面),然后可按键进行操作。单击数字键
5、“1”,则为按姓名排序 单击数字键“2”,则为按学号排序单击数字键“3”,则为按房号排序 单击数字键“4”,则为按姓名查找单击数字键“5”,则为按学号查找 单击数字键“6”,则为按学号查找单击数字键“7”,则为按学号插入 单击数字键“8”,则为按学号删除系统中有如下关键词: 提示:当输入的数字键为0时,退出操作;请输入数字键(18为操作键);请按任意键进入主界面。3.2测试数据3.2.1开始录入的数据:姓名 学号 房间号 孟欣 210 沈学发 211 陈法威 2123.2.2插入的数据:姓名 学号 房间号 陈建维 2053.2.3查找的数据:沈学发(按姓名) (按学号) 211(按房间号)3.
6、2.4删除的数据:按学号)3.2.5退出(数字为零时退出):3.3分析结果为了避免繁琐、改进算法,在一些函数中调用了其它的函数。如:在按(姓名、学号、房号)查找中都调用了 panduan1(ch) 和panduan2(ch)函数。在插入和删除模块中,显示学生的信息的下面总是有主界面,经过调试,运用system("cls")函数清屏后,显示的只有学生的信息了,再按键即可返回主界面。本程序多次运用了 disp()、menu()、system("cls")、fflush(stdin)等函数,经过多次调试,已经很好的控制了显示的学生信息与主界面的转换。4、总结通
7、过本次数据结构课程设计,我学到了很多,我充分利用了这一周的时间,认真、独立的完成了作业。我觉得很满足,也很有成就感,许多曾经自己不知道的知识,现在知道了并能熟练的掌握了一些,比如:(1)一个函数既能调用它本身也能调用其它函数;(2)如fflush(stdin) 函数,它的功能是清空输入缓冲区,得到正确的输入数据;如system("cls")函数,它的功能是将屏幕先前显示的内容清理掉(3)我以前不知道scanf()和gets()输入函数的不同之处,通过编程,调试,我明白了当scanf()输入字符串时不能带空格,否则不能输出后面的字符,而gets()能输入带空格的字符串。在编程
8、与调试过程中我遇到了许多问题,具体问题如下:(1)以前不知道怎么把各个函数编排在一起,不能形成一个总体模块,现在经过实践与调试,已经能组装好各个函数模块,使它们实现各自的功能。(2)在按关键字(姓名、学号、房号)查找中,由于题目限制了只能用二分查找方式进行查找,所以有时出现了关键字相同时(列如房号相同),就只能查出并显示出一个学生的信息,因此,本程序还不够完善。当使用顺序查找时,就能查找出所用关键字相同的学生的信息。当然,当既按姓名又按学号还按房号查找时那就查找唯一。(3)按(姓名、学号、房号)排序和查找功能每个函数都写了一遍,很繁琐。C+中的函数模板能解决这个问题,但对于C+我还是个初学者,
9、现在还不懂得如何去运用它,所以还不能对此程序作进一步修改,但我相信,不用多久,这个问题我一定能够解决。众所周知,要学好编程方面这一块,数据结构是必可少的,它里面有许多经典的算法和思想,是解决问题的必需品。很惭愧,虽然经过一学期的学习,但我掌握的知识很少,特别是树和图,只知道皮毛,目前还不能用这两方面的知识编程。在本系统中,我运用了数据结构中的线性表知识,运用顺序线性表完成了宿舍管理查询软件。在这次课程设计中,经过自己的编成和调试、老师和同学的帮助,我成功的完成了这次作业,虽然它的功能还不是很多,也不是很完善,但我还是非常的兴奋,因为,它给我增添了编程方面的信心,使我更有信心去努力成为一个强力的
10、程序员。二、 纸牌游戏1、问题分析和任务定义1.题目:纸牌游戏2.要求和任务: 该题目的要求如下:(1)将52张牌编号。(2)从2开始,依次作为基数对基数的倍数的牌进行翻转,直到以52为基数的翻转。(3)最后输出正面向上的牌。 基本任务为:(1)按照要求翻转纸牌。(2)输出最后正面向上的纸牌的编号。3.原始数据的输入及输出格式:原始数据要求输入纸牌的基础编号,编号的输入为整型。输出的是经过规律翻转后正面向上的纸牌的编号。输入的数据信息如下:纸牌:1、2、3、51、52。问题直观分析表:123456789101112123456789101112(注:图中“”表示翻转一次。)2.数据结构的选择和
11、概要设计 1.数据结构按照题目要求,整个主体包括一个嵌套的循环,外循环控制从2开始每张纸牌都作为基数进行翻牌,内循环控制对所有纸牌进行判断,如果是当前循环中基数的倍数,则对其进行翻转操作。具体代码如下:for(i=2;i<=52;i+)for(j=1;j<=52;j+)if(j%i=0)dataj-1=dataj-1*Flag;2.概要设计按照题目的要求,首先,应对52张牌进行编号并且保存它们的编号信息,编号的类型为整型,而对于这样固定的数据,使用整型数组是最好的,因此,我们需要在程序的开始定义一共整型的数组,同时,为了方便对翻转过程的记录,在定义记录编号信息的同时,定义一个与之相
12、对应的标记数组,数组类型为整型。该程序的核心为一个嵌套的循环,所以定义两个变量i,j作为循环条件。接着开始对变量进行初始化,首先是编号信息数组,使用for循环对数组进行1到52的赋值,代表52张纸牌,然后对标记数组赋值,将数组内的所有的值初始化为零,方便在接下来的循环中统计每张牌的翻牌数。数据初始化结束后,开始按照要求对纸牌进行翻转,在嵌套循环中,定义了一个全局变量Flag,值为-1,负数定义为向下,正数定义为向上,这样,翻转一次,即乘以Flag,同时,符合翻转条件时,标记数组相应的编号的纸牌翻牌次数+1。循环结束后,编号数组中的数据已经更新,因此对数组进行扫描,大于零的即为正面向上的纸牌,输
13、出其编号即可,同时,输出标记数组中的值,显示每张牌的翻牌记录,方便观察或者寻找规律。到此,整个题目结束。3.详细设计和编码1.定义全局变量:作为判断纸牌是否向上的依据,我们需要定义一个全局变量Flag=-1,在循环中对所有纸牌进行操作。2.主要程序代码与分析如下:#define Flag -1(考虑到最后要判断哪些纸牌是正面向上的,所以必须要有一共判断条件,因此定义一个全局变量作为正反面的判断条件。)void main()int i,j,data52,flag52;char m;(在程序开始,建立了两个数组,一个存放52张牌的编号,另外一个存放相应编号的纸牌的翻牌记录,便于后面对翻牌次数的输出
14、。)for(i=1;i<=52;i+)datai-1=i;(通过for循环,向数组中录入1-52个数,作为52张牌的编号,以便进行接下来的操作)flagi-1=0;(将flag数组中的相应编号纸牌的翻牌数初始化为0,在接下来的循环中,需要对翻牌次数进行统计。)for(i=2;i<=52;i+)(嵌套循环的外循环,保证基数的循环。)for(j=1;j<=52;j+)(嵌套循环的内循环,对每张纸牌进行基数的倍数条件判断)if(j%i=0)dataj-1=dataj-1*Flag;flagj-1+;(翻牌一次,则相应的标记数组中该编号的位置数值+1,即将翻牌次数记入flag数组中。
15、)printf("最后所有正面向上的牌有:");for(i=0;i<52;i+)if(datai>0)(该题目中将大于零的编号定义为正面向上的纸牌的编号)printf("第%d张牌 ",i+1);printf("n");以上为程序主要代码的分析。在程序中,主要还包括功能界面,如下:printf("t-n");printf("t-n");printf("t- 欢迎进入纸牌游戏 -n");printf("t- 1.查看题目 -n");printf(
16、"t- 2.查看所有纸牌的翻牌次数 -n");printf("t- 3.查看指定编号纸牌翻牌记录 -n");printf("t- 4.查看最终正面向上的纸牌编号 -n");printf("t- 5.制作人信息 -n");printf("t- 0.按0键结束 -n");printf("t-n");printf("t-n");同时,整个功能实现由do-while语句和switch语句组合而成,do-while语句可以保证界面最少运行一次,switch语句保证每
17、个功能独立实现,通过choice的输入来进入不同的功能,同时在每个小的独立功能内,我都添加了独立判断是否回到主菜单的语句,如下:printf("是否回到主菜单?(Y/N):");n=getchar();n=getchar();if(n='Y')break;else if(n='N')choice=0;else printf("*(提示:输入错误,默认为继续。)* *n");整个do-while语句的结束条件为:choice=0,所以如果用户输入为N,则直接将0赋值给choice,则符合循环结束的条件,则直接结束程序,如果输
18、入为Y,则break,继续循环,输入错误,没有对choice任何的赋值操作,即不能满足结束条件,则无论输入什么都默认为继续,break后继续循环。由于程序默认的将回车操作通过getchar()赋值给n,导致不能正常的实现下面的判断,而直接显示为输入错误,所以加入两个n=getchar()语句,保证第二句能够正确的实现功能,让用户自行输入条件,进行下一步的操作。在整个程序中,存在着大量的输入判断条件,如下:if(num<1&&num>52)printf("t输入错误!n");这两句代码就是对输入的num值进行判断,由于纸牌序号为1-52,所以不在这
19、个范围的值都为错误值,需要有一个错误信息的反馈,所以需要对输入的信息进行判断,然后通过不同的值对数据进行相应的操作,这对于程序的正确运行,有着至关重要的作用。4.上机调试过程该程序任务相对比较简单,思路较明确。在一开始编写代码的时候,在嵌套循环中,外循环for的条件(i=2;i<=52;i+),写成(i=1;i<=52;i+),导致对每个纸牌的翻转都多判断了一次,按照一开始定义的大于零的编号数为正面向上的条件,最后输出的结果正好相反,经过修改调试后,问题解决。在每个case中加入独立的判断是否回到主菜单的语句,一开始getchar()总是不能正确录入,没有输入就直接运行下一个语句,
20、在加入控制语句后经过调试发现,程序把上一个输入的回车直接默认赋值给getchar(),导致没有输入,直接进行下一个语句,后来使用了两个连续的getchar()语句,第一个getchar()语句默认为回车,但是后面一个getchar()语句可以正确的重新输入判断值,经过重新的调试,运行正常,问题解决,但是希望能找到更完善的答案。在判断是否继续输入纸牌编码的功能中,同样遇到了这个问题,按照相同的解决办法解决。整个程序由一个大的do-while语句和switch语句组合实现界面的不同功能,do-while语句通过choice=0作为结束的条件,在case 3中,有一个小的do-while语句实现纸牌
21、编号的重复输入,在整个程序中有很多信息的输入,需要根据输入的信息正确与否来反馈信息,否则会导致程序出错,所以在调试的过程中加入了很多判断条件,可以解决信息输入错误的情况,但是仍然存在输入非整型值程序出错的问题,所以在输入条件中加入提示信息,以保证信息类型输入正确。5.测试结果及其分析1.测试结果如下图1-12;2结果分析以注释的形式写在图的下方;(图1)(注:MessageBox制作的一个欢迎提示)(图2)(注:纸牌游戏程序的主功能界面。)(图3)(注:纸牌游戏程序功能1:查看题目。)(图4)(注:纸牌游戏程序功能2:查看所有纸牌的翻牌次数。)(图4续1)(图5)(注:纸牌游戏程序功能3:查看
22、指定编号纸牌翻牌记录。)(图8)(注:纸牌游戏程序功能4:查看最终正面向上的纸牌编号。)(注:纸牌游戏程序功能3:查看指定编号纸牌翻牌记录。)(图10)(注:纸牌游戏程序结束画面。)(图11)(注:主界面输入错误提示。)(图12)(注:功能3输入错误提示以及判断是否需要继续查询纸牌编码。)(图13)(注:回主菜单判断以及输入错误提示。)(图14)(注:功能3继续查询纸牌编码判断输入错误提示以及回主菜单输入错误提示。)三、 猴子吃桃1.任务描述猴子吃桃问题涉及一个比较有趣的数组,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数ai的递推公式为ai=(ai-1+1)*2。ai实
23、际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为ai=3*pow(2,(i-1))-2 (i>=2)2.需求分析这个课程设计分为四个部分,即分别用四种不同的方法解决猴子吃桃子问题。每个部分都有不同的算法思想。用数组结构实现的算法,通过构造求桃子数的数组,然后输出要求的项来实现。用链结构实现的算法,则是建立链表,将每天的桃子数目存入链表,然后输出第一天的桃子数。用递归结构实现的算法,是通过函数本身的特点,反复调用自身,最后找到递归的出口,求得算法的解。用数学计算方法,即通过直接利用循环计算,算出猴子第一天的桃子数。3.本设计所采用的数据结构二叉树及二叉链表4. 概要设计如果用
24、数组结构解决这个问题,把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数ai的递推公式为ai=(ai-1+1)*2。ai实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为ai=3*2e(i-1)-2 (i>=2)。如果用链结构解决这个问题,建立一个链表,根据每天桃子数与后一天桃子数的关系n=2*n+2,依次将每天的桃子数存进链表中,最后输出第一天的桃子数。如果用递归结构解决这个问题,要求利用他们每天都吃当前桃子的一半且再多吃一个这一特点,设计一个递归算法。如果用数学计算方法解决这个问题,建立一个循环结构,根据其中的数学关系计算出猴子第一天的桃子数。5.详细
25、设计5.1数组实现把猴子吃桃的天数倒过来看的话,以天数作为数组的下标i,剩下桃子的个数ai的递推公式为ai=(ai-1+1)*2。ai实际代表了倒数第i天剩下的桃子数。所以可以求得此数组的通项公式为ai=3*pow(2,(i-1))-2 (i>=2)。数组结构算法的流程图如图3-1:开 始建立一个以天数为下标以剩下桃子数为元素的数组规定此数组的通向公式求第一天的桃子数结 束void array() int day = 10; int sum10,last=1; sumday-1 = last; day=9; while(day > 0) sumday-1 = (sumday +1)
26、*2; day-; printf("猴子第一天共摘了%d个桃子n",sum0);5.2链结构用链结构实现这个算法,其核心是利用链表这种存储结构,将每天的桃子数存储在链表中,在链表中实现数的递推。首先是建立一个空链表,产生一个头结点,且将头结点的地址赋给L。然后把每天的桃子数从链表的第一个结点插入链表。最后第一天的桃子数被最后一个插入链表,成为链表中第一个值。建立单链表的程序代码如下:linklist *Initlinklist(linklist *L) L=(linklist *)malloc(sizeof(linklist); L->next=NULL; retur
27、n(L);链表创建部分实现:linklist *Creatlinklist(linklist *L) int i,j; linklist *r,*p; r=L; j=1; for(i=0;i<=9;i+) p=(linklist *)malloc(sizeof(linklist); p->data=j; p->next=NULL; r->next=p; r=r->next; j=(j+1)*2; return(L);封装整个链表方法实现:void lianbiao()/*数据存储方式为链表*/ linklist *P = NULL,*u; int i; P=Ini
28、tlinklist(P); Creatlinklist(P); u=P->next; for(i=0;i<9;i+) u=u->next; printf("猴子第一天共摘了%d个桃子n",u->data);5.3递归设计递归算法,利用x=2*x+2,定义一个函数sum_fan,然后不断调用自身,求得第一天的桃子数。递归算法的流程图如图3-3开 始定义参数i和ni>0NY调用本身,且-i输出sum开 始主要代码如下:/此部分定义递归实现int sum_fan(int n,int i) if(i>0) n = sum_fan(n+1)*2,-
29、i); return n;void digui() /*封装递归实现*/ int sum; int day = 9; int x = 1; sum = sum_fan(x,day); printf("猴子第一天共摘了%d个桃子n",sum);5.4数学计算方法实现void mathCal() int day,x1,x2; day=9; x2=1; while (day>0) x1=(x2+1)*2; x2=x1; day-; printf("猴子第一天共摘了%d个桃子n",x1);6. 测试数据及分析6.1数组方法实现:6.2递归实现:6.3链表实
30、现:6.4数学计算方法实现:7.课程设计总结这次的课程设计的内容是用C语言实现猴子吃桃子问题,这对我来说是个很具有挑战性的任务,虽然只做了一个很简单的学生学籍管理模块,但通过两个星期的设计也从中学到了不少东西,更深刻的理解了课本中的内容。数据结构是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。同时再次深刻理解了C+中类的思想和实现,文件的概念和相关操作,以及有关数据结构的很多知识。根据实际问题的需要,对个方面的优缺点加以综合平衡,从中选择比较适宜的实现方法。在本次课程设计中,我明白了理论与实际相结合的重要性,并提高了自己组织数据及编写程序的能力,培养了基本的,
31、良好的程序设计技能。提高综合运用所学知识的能力。四、 简易文本编辑1、问题描述及要求1.问题描述功能:具有图形菜单界面 ,可以在菜单页面中选择你要进行的操作。2.基本要求1) 具有图形菜单界面;2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除3) 可正确存盘、取盘;4) 正确显示总行数。2、需求分析 一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。输入数据的形式和范围: 可以输入大写、小写的英文字母、任何数字及标点符号。
32、输出形式:(1)分行输出用户输入的各行字符;(2)用一行输出"数字个数"、"输入行数"、"本次输入个数"和"本次输入行数";3、算法思想描述为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息: 清空以前的文本信息:将用数组存的数据内容全部置为0; 显示当前文本信息:遍历用数组存入的信息,并输入到外
33、部显示器上; 编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,这个整型变量用于记录一维数组中存入数据的个数; 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息; 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置; 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息; 删除文本信息:首先在数组中查找要删除的信息,
34、如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息; 退出编辑器:显示感谢使用该软件并退出。4、设计概要1.主要函数void menu(); void shuru(char text);void bc(char text); void dakai(char text);void dayin(char text);void chazhao(char text,int l);void tihan(char text,int l);int strindex(char text,char t,int i2,int l);void shanchu(cha
35、r p,int l);void cs(char text);void charu(char text,int l);void tuichu(int status);2.创建文本编辑器的算法及代码void menu() /*创建图形菜单输出欢迎使用本编辑器页面,按任意键进入图形菜单界面;Loop:system("cls");输入你要对本软件进行的操作(09)选项If(输入的选项在09之间) 对相应的选项功能进行操作Else(输入的数字不在09之间)提示输入出错,请重新输入system("pause");goto loop;void shuru(char t
36、ext) /*输入文本进行编辑While(输入的数字不等于时) 统计输入的数字For(cout=j;cout<ntext;cout+)统计输入的字数和函数;for(cout=j;cout<ntext;cout+)统计本次输入的数字及行数;void bc(char text); /*保存输入的文本if (!(pd='A'|pd='a')调用menu()函数;else if(name20=NULL)保存文件;while (fp=fopen(name,"w+")=NULL)查找文件是否存在; 确定保存或者取消保存;while(scanf
37、("%c",&tmp)!=EOF)if (tmp='A' | tmp='a') 保存文件;break;if (tmp='B' | tmp='b')break; void cs(char text) /*清除本软件文本信息 int strindex(char text,char t,int i2,int l) /查找要操作的数据的位置(模式匹配)while (该数字匹配)继续匹配下一个字符主串和子串依次匹配下一个字符else 主串、子串指针回溯重新开始下一次匹配主串从下一个位置开始匹配子串从头开始匹配if
38、 (j>=i2) 返回匹配的第一个字符的下标 Else模式匹配不成功void chazhao(char text,int l) /*查找字符和数字输入你要查找的内容loop:查找到结尾没有找到n输入【R】将重头查找;任意键返回主菜单else 已经找到在第%d行第%d列,输入【R】继续查找下一处;任意键返回主菜单 goto loop; if (pd='R'|pd='r') 调用函数chazhao(); void dayin(char text) /*打印显示文本内容输出文本内容;void chazhao(char text,int l) /*查找文本内容输出
39、原文;请输入您要查找的内容loop:调用函数strindex();if (输入查找的内容不能查找到)查找到结尾没有找到n输入【R】将重头查找;任意键返回主菜单 else 输出已经找到在第%d行第%d列,输入【R】继续查找下一处;任意键返回主菜单void shanchu(char p,int l) /*删除你不需要的文本内容输入执行查找删除内容if (确定要进行删除操作?)输入您要删除的内容,以结束while 输入的数字中没有)if (如果输入有)break;elsecontinue;loop:调用int strindex(char text,char t,int i2,int l);if (查
40、找不到)printf("已查找结束,您要删除的内容不存在n输入【R】重新输入要删除的内容;其他键将返回主菜单:");else 要删除的内容在第%d行第%d列n 输入【A】确定删除;输入【B】寻找下个词;其他键将返回主菜单删除成功,删除后的内容为else if 不想删除)goto loop;if(确定删除)调用shanchu(),删除选择的内容10、void charu(char text,int l) /向文本中插入内容输出当前文本的内容提示:输入您要在哪个内容前插入,以结束while (输入的数字中没有) /用一个数组接收要插入在哪个内容之前if (输入的内容为)退出el
41、se插入到该处loop:调用函数strindex(); /查找并返回要插入的位置点如果查找到结尾没有找到插入点,输入【R】查找其他;按其他键返回菜单else输入您要插入的位置是第%d行,第%d列之前n【A】.不是此位置向后继续找插入点n【B】.在此位置插入n按其他键返回菜单n请选择11. void tihan(char p,int l) /内容替换输出当前文本信息输入要被替换的内容,以结束while (c=getchar()!='') /t指替换前内容的长度if (当输入的数为时)break;elsecontinue;loop:调用 strindex();查找要被替换的内容的位
42、置if (没有查找到)查找到结尾没有找到要被替换的内容n输入【R】查找其他内容,按其他键返回主菜单键else已经找到要查找的数据在第%d行第%d列n输入【A】继续向后查找相同内容n输入其他键将进行替换操作n请选择if (pd!='a'&&pd!='A')是否要替换该内容?nA:替换给内容;其他键返回主菜单nfflush(stdin);if (确定要替换)输出要替换的文本内容将要被替换的内容和替换后的内容进行长度比较替换成功输出当前文本信息Elsegoto loop;12. void tuichu(int status) /*退出本软件提示:还未保
43、存文件,确定退出?(Q.直接退出;Y.保存后退出int main() /*主函数menu();return (0);5、调试内容及测试结果1. 起始界面2. 菜单界面函数实现3. 输入内容后页面函数实现5. 继续输入文本内容函数实现6.查找文本内容函数实现7.插入内容函数实现8.删除内容函数实现9.文本内容替换函数实现10.显示文本内容信息函数实现11.保存文本内容函数实现12.打开文本文件13.退出本软件的使用6、课程设计总结一周的课程设计结束了,在这一周里我完成了课题为:“简易文本编辑器”的课程设计。该任务的要求是:1) 具有图形菜单界面;2) 查找,替换(等长,不等长),插入(插串,文本
44、块的插入)、块移动(行块,列块移动),删除3) 可正确存盘、取盘;4) 正确显示总行数。 一开始拿到该任务是,自我感觉是无从下手。后来通过在图书馆、网络上查找资料,才有了一点点设计思路,然后才开始了本任务的设计。 在这一周里也也碰到过很多棘手的问题,比如程序之间的内在联系、及调用关系。弄的自己一头的雾水,后来在老师的指导下才慢慢的明白过来,并把错误的程序一一改正。 通过本次课程设计,我学到了更多的运用于实践中的东西:提高了自己的自学能力,独立分析解决问题的能力;自己的上机动手的能力和对课程设计的理解,得到很多启示;课程设计为我们提供了一个即动手又动脑、独立实践的机会,将课本上的知识理论和实际有
45、机的结合起来,锻炼了我们的分析解决实际问题的能力。 这次课程设计使我对数据结构的理解更加深入,书本上的知识满足不了我们实际中的需求,我们学习不应该仅仅是局限于书本上的知识,更要把实践与理论相结合。这次课程设计也让我明白了自己的程序编写能力非常不足,编程思想还没有完全形成。在以后的学习中我将更着重于培养自己的编程思想和多上机练习编写程序,提高自己的实际动手能力和独立思考的能力,不断充实自己,更好的掌握编程思想。五、二叉树的设计与实现1.任务描述NO!无结点x二叉排序树T是否为平衡二叉树存在含x的结点,则删除该结点,并作中序遍历找到该节点x输入元素x,查找二叉排序树TOK!对二叉排序树T作中序遍历
46、,并输出结果二叉链表作存储结构和顺序表作存储结构输入数列L, 以回车(n)为输入结束标志生成二叉排序树T;2.需求分析(1)以回车('n')为输入结束标志,输入数列L,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”。3.本设计所采用的数据结构二叉树及二叉链表4.概要设计3.1详细设计思想建立二叉排序树采用边查找边插入的方式。查找函数采用递归的方式进行查找。如果查找到相等的则插入其左子树。然后利用插入函数将该元素插入原树。对二叉树进行中序遍历采用递归函数的方式。在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。删除结点函数,采用边查找边删除的方式。如果没有查找到,进行提示;如果查找到结点则将其左子树最右边的节点的数据传给它,然后删除其左子树最右边的节点。3.2 实现函数本程序主要定义了5个函数,其名称及功能如下:CreateBST():从键盘输入记录的值,创建相应的二叉排序树InsertBST():若在二叉排序树中不存在关键字等于key的记录,插入该记录
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JAVA语言学术研究试题及答案2025
- 网络配置的重要性与技巧试题及答案
- 招聘市场对VFP的需求与试题及答案
- 冰冻雨雪天气应急预案5篇(全文)
- 房屋租赁合同环保协议书
- 税务代表的职责与挑战试题及答案
- 代持合同终止协议书范本
- 2025年VFP考试策略试题及答案详解
- 2024-2025学年九年级历史与社会上册第一单元20世纪初的世界与中国第一课世界的格局与第一次世界大战教案人教版
- 计算机三级软件测试技术考试的试题及答案解析
- 2023年中考物理专题复习:《电磁学》实验题
- 腹部CT断层解剖结构肝胰腺
- 建平磷铁矿业有限公司磷(含磁铁磷灰石)矿矿山地质环境保护与土地复垦方案
- DB22∕T 3181-2020 公路水路行业安全生产风险分级管控和隐患排查治理双重预防机制建设通用规范
- GB/T 36713-2018能源管理体系能源基准和能源绩效参数
- GB/T 25068.1-2020信息技术安全技术网络安全第1部分:综述和概念
- “二级甲等妇幼保健院”评审汇报材料
- 《狼王梦》读书分享PPT
- 三年级美术下册第10课《快乐的节日》优秀课件1人教版
- 电力市场交易模式
- 第四课《单色版画》 课件
评论
0/150
提交评论