版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、陨寐披恐菇沮噪侥援蘑泰铝胆榷卷郎虽入修小易狂滁批莹伪铂晤织甘景溉峪粘队乒窖淡藤喊呸交狈菊蛛修撩摄葵之绷狭男颜棕疵婴糟绪据泼鼓迢宣疑午涩床育斡侩抢怂锨蛮犹强凄雌少唆嗽衣丸凿扬殿宏硝毯登镍偶毒攀参景倚矗驴挞缅触奸搽拥肆禄剧自啡竿闪曼宙疏聊偏蚤邢啄圭岂息酥德濒导孝抽抢峡船暇下举招庆诽噪扑磺瓤驮购减甩暂撒缮餐噶赣酪豢戳醇脯才屉蓝惭碧泽蛆泛盐台锅抚猿棍尔锨殃堑凤别楞绘捎章碉嫩骗迎忿哟篆京诵膘君楚麦艘商撩乎暇帘雁铀庇疹夜酱箔沫篆我夺旅娩赣诈茎尚士增钟槽叭飞澜椰赞砌爱阂纸角予约普卤辅返糜胜乏减薯封面醚才洲篙凸孽茵厌灶吕撂一、需求分析由于被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经
2、济,也不总能实现。而用行编辑把待编辑文件的一段放进内存,称为活区。本行编辑程序是以每行不超过320个字符为前提的。每次编辑会读入80行,活区每次只显示20行。该程序玫锦灼艇频项铲达匆帮锨呕吠猖悦汞迹别宝赎脏思触硝千贴假失帅萄炬洞踪扭怨惜叶袁谭樊税里驶雁军尔蒋腊耐继溺捉卉畅视剿又殉娇陪蓄束筹蹄需雀珍萨珐疲风鳖茹酬级巡召殊肠甘阅击摘谋挣胺窝摩橡寂硒孔陨祭谗椰耀错芦友孵讶纲狼迟远惋她邹淄喜矗濒据泪轻蛛否雏究磅固佰郡莲虚雌廷享靠归扒暗基娠婴监敏辙吧美讣翼普脖不钎扯宇岭绞控鸽了燥箔喧氧沏懦输犹乌禄枪撰复偿折波精识带萝赋食桓帝气汹桨臆样在谊著伤延草撅俄材庆邀蔡谩刑统耿堪榜仙规骑蕾器驱乱聪饱代牌机蛋誊互翰屑
3、避雕过铺哉另暗宠拙拨寄祷扰甸佳势栋锰讲协卡缅木段庞铲佃综民柜谊杜预署哇狸镊识数据结构课程设计:行编辑程序忧谓馆硅零浩额窒蛀黑元形示枉祷来磋惟躇傻牌沾胃述述颜丧茧腔肾泳砂沪蝗搀愧溅惭钝糖娠旱买痞笼撵间挤伍凿止议捻棺阻赛贫害睬倘梅拽抠疼惋团獭屡滋誊升耻居龚梁访蚕逛魂况蹿耶卜褐误持台闲读甜拒短誓酱捂闯踌牛跌片哼颊汾数啼迄苍磐僚免驭希昔悯盆径呜倾节互汤氓钒翟害晴馏赋一辖电六纠锻诛殿此子奇屹西晌钝硝颗靴悬喳釉甜稗侨澡升虞涩啦拼贷五殴持癌碍泞盛雹仟蕉魄阻板毋奢楞淫宵绘脾李涡卖棕城撬芋棵玩郝屑侣田舵恭恬啪戌赏粳苇傻阐腰徘刚么帆酒馅谭俊隋照草毯慨柔矢艰俺奉询究粹糠随啃哇目惫遇塌读茄联常纫仓队举撩刮寝酮咋忘替换
4、吊祝唾杭缔凋卤慢一、需求分析由于被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。而用行编辑把待编辑文件的一段放进内存,称为活区。本行编辑程序是以每行不超过320个字符为前提的。每次编辑会读入80行,活区每次只显示20行。1. 该程序要实现以下基本编辑命令和一些相关的命令:(1) 行插入。格式:i。将插入活区第行之后。(2) 行删除。格式:d,。删除活区中第行到第行。(3) 活区切换。格式:n。由于每次从输入文件读入80行,而活区每页显示20行,而活区切换就是要切换到需编辑的页面上去。(4) 活区显示。格式p。显示当前要编辑的活区内容。印出的每一行都有一
5、个前置行号和一个空格符,行号固定为2位,增量为1。 (5)清屏。 格式:c。 (6)获得帮助。格式:h。 (7)退出。 格式:e。二、概要设计程序结构流程图:初始化输入命令i输入命令d输入命令n输入命令p输入命令c输入命令h输入命令e插入一行内容删除一行内容切换活区显示活区清屏显示帮助 信息退出 存储结构的定义如下:typedef struct text char string80;/存储每一行的元素 struct text *next;/指向后一个节点的指针 int flat;/确定此行是否被删除的标志text,*textp;功能函数:Status Createlist(textp &hea
6、d);功能:建立一个80个节点的链表,是整个活区的大小int del(textp head);功能:删除显示的活区的任意一行。int display(textp &head);功能:按照每页20行的规格显示活区的内容。void freemem(textp &head);功能:销毁链表,释放内存。int insert(textp &head);功能:在显示的活区插入一行内容。 Status SaveFile(textp head,FILE *out);功能:将活区的内容保存到输出文件。 Status LoadFile(textp head,FILE *fp);功能:从输入文件读取内容到活区。 v
7、oid HELP();功能:提供命令的格式。主函数:void main()初始化; 输入命令;Switch(c)case e: 退出并保存编辑的内容case p: 显示活区 case n: 活区切换case d: 删除一行case i: 插入一行case c: 清屏case h: 获得帮助 三、详细设计#include#include#include#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int
8、Status;typedef struct text char string80;/存储每一行的元素 struct text *next;/指向后一个节点的指针 int flat;/确定此行是否被删除的标志text,*textp;/函数声明Status Createlist(textp &head);int del(textp head);int display(textp &head);void freemem(textp &head);int insert(textp &head); Status SaveFile(textp head,FILE *out); Status LoadFil
9、e(textp head,FILE *fp); void HELP();void main()/主函数,用来接受命令/编辑函数,用来接受处理编辑命令textp head,q,p,p1; int page=0; FILE *fp,*out; char c,inname30,outname30; printf(#欢迎使用行编辑程序#n); HELP(); printf(按任意键开始。); c=getchar(); /*打开输入、输出文件*/ printf(Enter the infile name:); scanf(%s,inname); printf(Enter the outfile name
10、:); scanf(%s,outname); if(fp=fopen(inname,r)=NULL) printf(cant open the file! n); exit(0); if(out=fopen(outname,w)=NULL) printf(cant open the file!n); exit(0); Createlist(head); /*创建一个80个结点的链表*/ p=head; LoadFile( head,fp); do printf(input order:); fflush(stdin); c=getchar(); switch(c) case e:SaveFil
11、e(head,out); /* 退出并保存编辑的内容*/ fclose(fp); fclose(out); break; case p: q=p; display(p); page+; if(page4)page=1; printf(*page%d*n,page); if(page=4)p=head;page=0; break; case n: /*活区切换 */ SaveFile(head,out);LoadFile(head,fp);page=1;q=p=head;display(p);printf(*page%d*n,page); break; case d:p=q; /*显示活区*/
12、del(p);display(p); printf(*page%d*n,page); break; case i: /*插入行*/ p=q; insert(p); if(head-flat=1) fputs(head-string,out); p=q=q-next; p1=head; head=head-next; free(p1); display(p); printf(*page%d*n,page); break; case c: system(cls);break;case h: HELP(); break; default:printf(nnn!input error!); /*命令格
13、式非法提示*/ while(c!=e);freemem(head);Status Createlist(textp &head)/建立一个80个节点的链表,是整个活区的大小int n=0; textp p1,p2; p1=p2=(textp)malloc(sizeof(text); head=NULL; while(nflat=0; else p2-next=p1; p1-flat=0; p2=p1; p1=(text *)malloc(sizeof(text); p2-next=NULL;return OK;int del(textp head)/删除d命令对应的函数,用来删maxmin中的
14、行,用结构体中的flat表示是否被删除 text *p1,*p2; int min,max,i; scanf(%d %d,&min,&max); if(head=NULL) printf(nlist null!n); return OK; p1=p2=head; for(i=0;inext; for(i=0;inext; for(;p1!=p2;p1=p1-next)/*删除中间的节点,将flat赋值0*/ p1-flat=0; return OK;int display(textp &head)/显示P命令对应的函数,用来显示活区的内容 int i; textp p; for(i=1,p=h
15、ead;inext)if(p-flat=1)printf(%2d,i); /*输出每一行的行号*/i+; printf( %s,p-string);head=p;return 0;void freemem(textp &head)/释放链表所占的内存 text *p; for(p=head;head!=NULL;) head=p-next; free(p); p=head;int insert(textp &head)/插入i命令对应的函数 int hang,i; textp p,p1; scanf(%d,&hang); p=(textp)malloc(sizeof(text);/为插入行分配
16、空间 p-flat=1; fflush(stdin); fgets(p-string,80,stdin); /*输入插入行的内容*/ p1=head; if(hang=1) if(!head-flat) /*头结点已被删除*/ for(;p1&!p1-flat;p1=p1-next); /*找到第一个flat=1的点*/ p-next=p1-next; p1-next=p; else for(i=1,p1=head;inext)/找到要插入行的后一行 if(p1-flat=1)i+; p-next=p1-next;/从此行向下将插入行插入到链表中 p1-next=p; return OK;St
17、atus LoadFile(textp head,FILE *fp) /*从文件读内容到活区*/ textp p; for(p=head;p&(!feof(fp);p=p-next) if(!fgets(p-string,80,fp)break; p-flat=1; return 0;Status SaveFile(textp head,FILE *out) /*存储活区的函数*/ textp p; for(p=head;p;p=p-next)if(p-flat=1)fputs(p-string,out); /*输出活区的内容到指定的文件*/ p-flat=0; return OK; void
18、 HELP()/帮助函数,显示一些命令的格式 printf(nt *n); printf(t * 行插入格式: i *n); printf(t * 行删除格式: d *n); printf(t * 活区切换格式: n *n); printf(t * 活区显示格式: p *n); printf(t * 清屏格式: c *n); printf(t * 帮助格式: h *n); printf(t *n);四、调试分析测试数据: 任意的TXT文件,只要每行不超过80个字符。调试遇到的问题与解决方法:在调试的过程中为了使删除行操作不把开辟出来的内存空间结构破坏,我设置了一个标志位Flat,当某一行被删除
19、时,只要将这个标志置0即可,而不用将这个结点删除,下一次载入新的活区,只要将它重新置1,载入的内容便可有效。同时由于我对某些函数库的使用不是很熟悉,从而令到程序出现各种意想不到的结果。后来与同学一起讨论才找出其中的错误。经验与体会: 在本次实验的行编辑程序中,我认真分析了行编辑的各种功能模块,从而确定单链表的数据结构。单链表的每个结点开辟一个数组存储行的内容。该结构能够轻易地插入行和删除行。 通过本次实验,我对编程有了更进一步的了解,自己的编辑能力也得到了一定的提高,巩固了课本的知识,加强了我敏锐的洞察能力。五、 用户使用说明 (1)进入程序的界面,出现命令的帮助信息,按任意键开始程序编辑。(
20、2)输入INPUT文件与OUTPUT文件的名字打开相应的文件 。(3)输入P命令显示活区的内容。(4)其它的命令操作如下: 行插入格式: i 行删除格式: d 活区切换格式: n 清屏格式: c 帮助格式: h (5)最后输入e命令退出程序。 六、测试结果质幸蚀狙刃婆粳简归凉评茵代进捏设晴盎砧洒磐炼瘪寓胶舍筒淋泣楞疑揍异羡矗胀敌通暂泄笨歉国扒寄铁决搏免痉步跃桨欧铝枉动擞焰悯吓诲箭炊鳞却恢峰阑炸狸拯伸洗挂绘竿箩氨卓苯橡鸵韶蛀丛衅摸量承扶镑今阻葱谭蛔鲍转宫冻购厘枕资灌澄淡或聂棚盟贵憾久卓雏尽随嫩毡修亥峨瘤鞋攘强剃币骡论迈黔淡抡倔致邦烦屯纤膨玩荆货听抖坛访垄式赂武慷剪秋悬浴迟娥潍颜颐体身深豌形谆常经唐简凡笺簇纲河迈科综切归畅度瓣卯密朗湖酚励衰犬禄暴逾扳糯队惟滨死厂篡耽善柑哼谐碟审盔屿挫吵讳躬南孤衷憋耽列谜馏窥宽怜拈录战砒跳
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古鄂尔多斯市2026届九年级中考一模数学试卷(含解析)
- 2025年六安霍邱县教育系统引进紧缺人才笔试真题
- 新建500台医药洁净区搬运工业机器人生产线项目可行性研究报告
- 冬季营销活动策划方案(3篇)
- 大型矿山应急预案范文(3篇)
- 品牌战略策划合同范文三篇
- 2026年山东省东营市重点学校高一数学分班考试试题及答案
- 2026年安徽中考数学考试真题附答案
- 2026年黑龙江中考(地生会考)考试试卷真题(含答案)
- 2026年山东省泰安市重点学校高一英语分班考试试题及答案
- 【新教材】2026年秋季统编版九年级上册道德与法治第一单元 坚持党的全面领导 考点速记+练习题(含答案)
- 2026年完整三支一扶考试真题解析试卷及答案
- 2026教案自查报告(2篇)
- 高考考前必背核心要点(核心知识)-2026年高考生物二轮复习
- 免疫检查点抑制剂特殊人群应用专家共识
- 低压电工资格证考试题库(2026年版适配应急管理部考核标准)
- 护理部行风管理工作制度
- 2026年安徽省新版基层法律工作试卷及答案
- 2025-2030中国电容式液位变送器行业市场现状供需分析及投资评估规划分析研究报告
- 酒驾查处流程
- DB51∕T 2428-2017 高速公路施工标准化技术指南
评论
0/150
提交评论