c++简单模拟记事本 课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 //为了以下使用isdigit(string)函数作铺垫typedef struct node{

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.删除某些内容"<

相关文档
最新文档