c++简单模拟记事本 课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)需求和规格说明
程序要求:
1.设计一个记事簿类,实现文字输入、文字删除、复制、粘贴、打开、保存的功能。
2.使用控制台或者图形界面,测试这个记事簿类的使用。
要解决的问题:
采用什么存储结构来存储文档信息。对文档的操作要怎样实现。
(二)设计
采用一个notepad类来实现记事本程序。主要使用指针数组来存储每行的文档信息。而针对文档的操作则通过指针实现。
最重要的操作是对文档操作内容的定位。例如某行信息为:abcdefghijklmnop。那么如果要针对g后的字符串进行操作,就先用一个指针指向该行的首字符;char *p=ptr_array[k];
ptr_array[]是储存每行首指针的指针数组,k地表当前操作行,用p指向该行首字符。之后由用户输入要操作的字符位置,保存在字符数组char d[40]中,同样用一个指针指向该数组的首字符char *q=d ;这样以q为基准搜索该行中与q所指向字符相同的字符,如果相同,则q++ ;如果q指针能指向数组d[]的结束符"\0",表明查找成功,这时返回指针P-L+1的值,其中L为用户输入的字符串长度。
当然,这其中会涉及到在一行中都未找到的问题,这时只需让p指向下一行的首字符。再重复以上操作。至于复制,粘贴,删除,都要在文本查找的基础上进行操作。最大的不同是他们需要定位两次。
(三)用户手册
程序运行时,会先显示操作信息,用户按照操作提示进行操作:
cout<<"********************************************************"< cout<<"***1.输入文档内容"< cout<<"***2.删除某些内容"< cout<<"***3.复制某些内容"< cout<<"***4.粘贴某些内容"< cout<<"***5.打开文档内容"< cout<<"***6.是否保存文档"< cout<<"***7.获取操作帮助"< cout<<"***8.我要结束操作"< cout<<"********************************************************"< 本程序操作简单,在运行时会提示用户进行所有操作。 (四)调试及测试 程序调试截图: 0.为真正实现记事本的功能,特将切换输入法的方法截图,如果一次不成功可多次操作, 先声明:用“Ctrl+Shift”快捷键是无法实现切换的哦。 另外,能输入文字的前提是你自己能在CMD(即程序执行界面)输入汉字,如果你从未按以下方法成功切换输入法,建议询问相关人士或自己寻找恰当的visul studio c++版本,并更改电脑相关设置。另外,其他截图是用英文字符测试表示的,只是因为当时我不知道程序还能输入汉字而已,并不是程序不能输入汉字。特此说明。 说明:以下是成功切换输入法的屏幕截图。 1.输入文档内容 调试时,每行只能输入英文字母,符号,数字;不能输入空格,这是由于字符串数组这一数据结构决定的。令人高兴的是,可以输入汉字,用户可通过切换输入法实现。 2. 删除某些内容 本程序在复制、删除部分做了优化,如果用户输入的首字符所找到的行数比末字符所找到的行数小,会提示输入错误。 3.复制某些内容 程序在复制部分会将用户所想要复制的内容显示出来供用户验证。如果有误,重新进行复制操作即可。 4.粘贴某些内容 从内存中是指将刚才所复制的内容粘贴在指定位置,用户自己输入是指将用户新输入的内容粘贴在相应位置,当然,这一操作也可以作为字符插入操作。 5.打开文档内容 6.是否保存文档 用户如果选择不保存,相当于自动删除所有文档内容,类似于类中的析构函数。 7.获取操作帮助 由于程序操作过多,为避免用户忘记操作指令,提示用户输入7进入帮助界面, 8.我要结束操作 结束程序。 (五)附录:源代码(仅供学习) 第4次优化//注意程序主体内容只是对字符串数组的和指针数组的操作,并无难//点。 #include #include #include char a[100]; //每行100字符 node * next; //关于此处next的作用还不清楚,但不可去掉 }node; class notepad{ public: notepad(){ i=1; line=0; } ~notepad(){} void operator_interface(); void input(); void ct_input(); void delete1(); void copy(); void paste(); void open(); void save(); char * find(); void print(); char store[100]; //储存需复制内容 private: char * ptr_array[100]; //指针数组,记录100行行指针 int linelen[100]; //最大100行 int line; //当前总行数 char d[30]; //记录操作数据 int k,l; //记录当前查找行il int i; //文档录入初始标记 }; void notepad::operator_interface(){ cout<<"********************************************************"< cout<<"***0.继续录入文档"< cout<<"***1.输入文档内容"< cout<<"***2.删除某些内容"<