c++简单模拟记事本 课程设计报告_第1页
c++简单模拟记事本 课程设计报告_第2页
c++简单模拟记事本 课程设计报告_第3页
c++简单模拟记事本 课程设计报告_第4页
c++简单模拟记事本 课程设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、希望本设计能给大家带来帮助文档结尾有源代码运行环境:vsc+6.0测试通过课程设计报告设计题目:记事簿应用题学生姓名:hk专 业:物联网工程班 级:11-1班学 号:指导教师:完成日期:2012-7-4合肥工业大学计算机与信息学院(一)需求和规格说明程序要求:1.设计一个记事簿类,实现文字输入、文字删除、复制、粘贴、打开、保存的功能。2.使用控制台或者图形界面,测试这个记事簿类的使用。要解决的问题:采用什么存储结构来存储文档信息。对文档的操作要怎样实现。(二)设计采用一个notepad类来实现记事本程序。主要使用指针数组来存储每行的文档信息。而针对文档的操作则通过指针实现。最重要的操作是对文档

2、操作内容的定位。例如某行信息为:abcdefghijklmnop。那么如果要针对g后的字符串进行操作,就先用一个指针指向该行的首字符;char *p=ptr_arrayk;ptr_array是储存每行首指针的指针数组,k地表当前操作行,用p指向该行首字符。之后由用户输入要操作的字符位置,保存在字符数组char d40中,同样用一个指针指向该数组的首字符char *q=d ;这样以q为基准搜索该行中与q所指向字符相同的字符,如果相同,则q+ ;如果q指针能指向数组d的结束符0,表明查找成功,这时返回指针p-l+1的值,其中l为用户输入的字符串长度。当然,这其中会涉及到在一行中都未找到的问题,这时

3、只需让p指向下一行的首字符。再重复以上操作。至于复制,粘贴,删除,都要在文本查找的基础上进行操作。最大的不同是他们需要定位两次。记事本类及成员函数功能说明: 类名成员类别类型成员名描述notepad方法voidoperator_interface();操作界面voidinput();输入文档内容voiddelete1();删除信息voidcopy();复制信息voidpaste();粘贴信息voidopen();打开文档voidsave();保存文档char *find();查找信息voidprint();打印文档属性char * ptr_array100; 记录行指针intlinelen10

4、0;记录行字符数intline; 当前总行数chard30;记录当前操作字符串intk,l; 当前查找行及查找长度charstore100;储存复制的信息(三) 用户手册程序运行时,会先显示操作信息,用户按照操作提示进行操作:cout*endl;cout*1.输入文档内容endl;cout*2.删除某些内容endl;cout*3.复制某些内容endl;cout*4.粘贴某些内容endl;cout*5.打开文档内容endl;cout*6.是否保存文档endl;cout*7.获取操作帮助endl;cout*8.我要结束操作endl;cout*endl; 本程序操作简单,在运行时会提示用户进行所有操

5、作。(四)调试及测试程序调试截图:0. 为真正实现记事本的功能,特将切换输入法的方法截图,如果一次不成功可多次操作,先声明:用“ctrl+shift”快捷键是无法实现切换的哦。另外,能输入文字的前提是你自己能在cmd(即程序执行界面)输入汉字,如果你从未按以下方法成功切换输入法,建议询问相关人士或自己寻找恰当的visul studio c+版本,并更改电脑相关设置。另外,其他截图是用英文字符测试表示的,只是因为当时我不知道程序还能输入汉字而已,并不是程序不能输入汉字。特此说明。说明:以下是成功切换输入法的屏幕截图。1.输入文档内容调试时,每行只能输入英文字母,符号,数字;不能输入空格,这是由于

6、字符串数组这一数据结构决定的。令人高兴的是,可以输入汉字,用户可通过切换输入法实现。2. 删除某些内容本程序在复制、删除部分做了优化,如果用户输入的首字符所找到的行数比末字符所找到的行数小,会提示输入错误。3. 复制某些内容程序在复制部分会将用户所想要复制的内容显示出来供用户验证。如果有误,重新进行复制操作即可。4. 粘贴某些内容从内存中是指将刚才所复制的内容粘贴在指定位置,用户自己输入是指将用户新输入的内容粘贴在相应位置,当然,这一操作也可以作为字符插入操作。5. 打开文档内容6. 是否保存文档用户如果选择不保存,相当于自动删除所有文档内容,类似于类中的析构函数。7. 获取操作帮助由于程序操

7、作过多,为避免用户忘记操作指令,提示用户输入7进入帮助界面,8. 我要结束操作结束程序。(五)附录:源代码(仅供学习)第4次优化 /注意程序主体内容只是对字符串数组的和指针数组的操作,并无难/点。 #include#include#include /为了以下使用isdigit(string)函数作铺垫typedef struct nodechar a100; /每行100字符node * next; /关于此处next的作用还不清楚,但不可去掉node;class notepadpublic:notepad()i=1;line=0;notepad()void operator_interfac

8、e();void input();void ct_input();void delete1();void copy();void paste();void open();void save();char * find();void print();char store100; /储存需复制内容private:char * ptr_array100; /指针数组,记录100行行指针int linelen100; /最大100行int line; /当前总行数char d30; /记录操作数据int k,l; /记录当前查找行ilint i; /文档录入初始标记 ;void notepad:ope

9、rator_interface()cout*endl;cout*0.继续录入文档endl;cout*1.输入文档内容endl;cout*2.删除某些内容endl;cout*3.复制某些内容endl;cout*4.粘贴某些内容endl;cout*5.打开文档内容endl;cout*6.是否保存文档endl;cout*7.获取操作帮助endl;cout*8.我要结束操作endl;cout*endl;void notepad:input()cout输入总行数,格式:01-99e;char *lin=e;if(*(lin+2)=0&isdigit(*lin)&isdigit(*(lin+1)line=

10、(*lin-0)*10+(*(lin+1)-0);if(line!=0)cout请输入各行内容endl;while(i=line)cout第ip-a;ptr_arrayi=p-a;lineleni=strlen(p-a);i+;else cout你输入的行数有误endl;else cout你输入的行数有误endl;void notepad:ct_input()if(line!=0)int i=line+1;cout输入要录入的总行数,格式:01-99e;char *lin=e;if(*(lin+2)=0&isdigit(*lin)&isdigit(*(lin+1)line=line+(*lin

11、-0)*10+(*(lin+1)-0);if(line!=0)cout请输入各行内容endl;while(i=line)cout第ip-a;ptr_arrayi=p-a;lineleni=strlen(p-a);i+;else cout你输入的行数有误endl;else cout你输入的行数有误endl;else cout当前文档并无内容,请先输入1录入文档endl;void notepad:print()coutendlendl;int j=1;cout当前文档内容为:endl;while(j=line)cout第j行 ;char *q=ptr_arrayj;while(*q!=0)cout

12、*q;q+;coutendl;j+;coutd;l=strlen(d);char *n=d;int c=1;char *m=ptr_arrayk;while(k=line)if(*m=0)k=k+1;if(k=line)m=ptr_arrayk;if(*m!=0&*m!=*n)m+;while(*n!=0&*m!=0&*m=*n)m=m+1;n=n+1;c=c+1;if(*n=0)return m-c+1;else n=d;c=1;return null;void notepad:delete1()char * dp1;char * dp2;cout请输入要删除的文本前几位字符,注意区分end

13、l;dp1=find();int l1=k;cout请输入要删除的文本末几位字符,注意区分l2)cout输入错误endl;elsedp2=dp2+l;if(l1=l2)while(*dp2!=0)*dp1=*dp2;dp1+;dp2+;*dp1=0;linelenl1=strlen(ptr_arrayl1);else if(l1+1l2)for(int t1=l1+1,t2=l2;t2=line;t1+,t2+)ptr_arrayt1=ptr_arrayt2;line=line-l2+l1+1;l2=l1+1;*dp1=0;char *dp21=ptr_arrayl2;while(*(dp2-

14、1)!=0)*dp21=*dp2;dp21+;dp2+;linelenl1=strlen(ptr_arrayl1);linelenl2=strlen(ptr_arrayl2);if(linelenl1=0)for(int v=l1;v=line;v+)ptr_arrayv=ptr_arrayv+1;line-;if(linelenl2=0)for(int v=l2;v=line;v+)ptr_arrayv=ptr_arrayv+1;line-;void notepad:copy()char * cp1;char * cp2;cout请输入要复制的文本前几位字符,注意区分endl;cp1=fin

15、d();int l1=k;cout请输入要复制的文本末几位字符,注意区分endl;cp2=find();int l2=k;char *pt=store;if(cp1!=null&cp2!=null&l1=l2)cp2=cp2+l;while(cp1!=cp2)if(*cp1=0)l1+;cp1=ptr_arrayl1;else *pt=*cp1;pt+;cp1+;*pt=0;else cout输入错误endl;void notepad:paste()cout请输入要粘贴位置的前几位字符(在首字符后粘贴)endl;char *pat=find();if(pat!=null)int choice2

16、;cout请选择要粘贴内容:1/从内存中0/我自己输入choice2;if(!choice2)cinstore;char *ppt=store;for(char *pat1=pat;*(pat1+1)!=0;pat1+); /定位至末尾int pl=strlen(store);*(pat1+pl+1)=0;while(pat1!=pat) /移位*(pat1+pl)=*pat1;pat1-;pat+;for(int u=1;u=pl;u+)*pat=*ppt;ppt+;pat+;linelenk=linelenk+pl;else cout输入错误endl;void notepad:open()

17、print();void notepad:save()cout是否保存文件?1/是0/否g;char *choi=g;if(*(choi+1)=0&isdigit(*choi)choice1=*choi-0;if(choice1=1)cout文件已保存endl;else if(choice1=0)for(int w=1;w=line;w+) /相当于析构函数的作用ptr_arrayw=null;linelenw=0;line=0;else cout输入错误endl;else cout输入错误endl;void main()cout欢迎使用本程序,您可以在要输入文档内容时通过切换输入法实现输入汉字,by hkf;char *choic=f;if(*(choic+1)=0&isdigit(*choic) /错误输入处理机制choice=*choic-0;else choice=9;while(choice!=8)switch(choice)case 0:b.ct_input();break;case 1:b.input();break;case 2:b.delete1();b.print();break;case 3:b.copy();coutendl;char *p_t=b.store;int fzcd=strlen(b.store);c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论