- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
记事本设计说明
3023001083奚苏立混合(3)班
1.需求分析
1.1记事本要求
满足一般用户对文本文件编辑的最基本要求。采用菜单和对话框操作,界面简洁友好,用户可直接在文本框中进行文本输入和编辑,支持所有英文纯文本文件。支持多文件打开处理,块操作,文件之间的操作等。一个类似Edit的Dos程序。
1.2记事本功能
文件:可在任意时刻打开或新建文件,可将文件另存。也可对打开后的任意文件进行保存关闭。在退出时,对于没有保存的文件,程序将给予提示。
编辑:支持所有块操作。利用菜单或快捷键设置块头,块尾(系统可自动调整相对位置)或取消块定义。有粘贴,拷贝,剪切等功能。可以在文件之间进行操作。
查找:提供查找和替换功能。对于查找,有匹配整个单词和匹配字母大小写两个选项。对于替换,除上两个选项,还有整体替换选项。(对于查找和替换,对话框已写出,但由于最后时间过紧,因此具体实现代码没有写出)。
窗口:可在任意已打开文件之间进行切换。
帮助:提供对所有操作的详细说明。
几乎所有操作都有对应的快捷键,使用户使用更加方便。
总体设计.
整个程序共分两大块:Document和View。
Document主要负责对文件内容的内部储存和管理。对文本的输入或编辑都由Document负责。它可以将磁盘上的文件按自己内部格式读入内存,或将编辑内容按纯文本格式保存至磁盘。Document会根据用户对文本的操作对内存中的文件内容进行修改,如插入,编辑。同时还要储存编辑时的状态信息:如光标的位置,块的定义位置,文件是否保存过等,因此对于翻页,光标移动等操作,Document都将有所响应。Document还会给View提供足够的信息和操作,如从哪里开始显示,每段的字数,总段数,光标的位置等。(当然,有的信息可能会用不上)。总之,关于文件内容的一切信息都归于Document。但是,这部分用户是不可见的,用户并不直接和Document打交道。
View主要负责界面的显示和刷新。界面主要分菜单栏,状态栏和编辑栏。菜单栏的显示和对菜单内容的响应是View的基本工作。有些菜单的操作(如各种块操作或文件的读写)将涉及对Document的修改,因此它将调用Document中的一些函数完成功能。状态栏本来在编辑时可以显示当前光标位置,但由于时间过紧,省略了这部分。但在操作菜单时,状态栏会显示比较详细的操作说明。这部分和Document完全没有关系。最后的编辑栏是占屏幕最大的一块。View将根据Document提供的必要信息显示编辑栏并不断刷新。在这部分中,由于需要比较多的Document信息,因此将这部分显示函数封装在了Document中(这是两大块比较关键的衔接部分)。除此之外,View还负责对消息的传递和多文件的管理。一个Document对应一个文件。View需要管理多个指向Document的指针。对于文件的打开和关闭,除了需要对相应的Document操作外,还需修改View中的Document指针列表。总之,View将处理一切用户的操作请求并将其反映在屏幕上(这当然需要Document的支持)。
3系统模块说明
Document:
每个文件以段落为基本类进行抽象。如果用大数组表示整篇文章,当在前面插入或删除文字时将会有比较低的效率。当然,以段落为对象将使一些操作变得比较复杂。
classLine
friendclassPosition;
friendclassDocument;friendclassBlock;friendclassNode;
longm_Capacity; 〃每段可容纳字数
longm_ChNum;//当前段的字数
voidm_Increase(longn); //当一段容量不够时扩充容量
public:friendclassCursor;char*m_Point; //指向段落文字的指针
Line(longi=256,longj=1){m_Capacity=i;m_ChNum=j;m_Point=newchar[i];m_Point[0]=\0;
} 〃对空段的初始化
~Line()
{deletem_Point; //段落析构
}
};
以上为段落类声明。特别说明,每段初始时就有\0’,每段的字数包括’\0,‘\n’储存在下一段的开头,这样做是为了方便某些操作(如插入和删除回车符)。
整篇文章由段落通过双向链表串连而成,因此可以在任意位置访问整篇文章。以下为节点类声明。
classNode
{
friendclassPosition;friendclassDocument;friendclassBlock;
Line*P
原创力文档


文档评论(0)