北京理工大学珠海学院课程设计说明书2012—2013学年第2学期题目: 模拟记事本程序学院:计算机学院专业班级:学号:学生姓名:指导教师:成绩:时间:2013年5月 22日北京理工大学珠海学院课程设计任务书2012—2013学年第2学期学生姓名:专业班级:指导教师:工作部门:一、课程设计题目模拟记事本程序二、课程设计内容用文本命令行界面模拟记事本功能:包括编辑、保存、另存为、复制、粘贴、查找、替换等功能。
三、进度安排(1)1-2学时,选定题目、分析需求、理解需求;(2)3-4学时,程序设计,定义数据类型、数据处理方式;(3)5-10学时,编写程序、调试、测试;(4)11-12学时,编写设计报告;(5)13-16学时,答辩。
四、基本要求(1)只能使用C++语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)(4)建立文件操作类、界面显示类及相关接口类,用文件读写实现。
(5)写出课程设计报告,应不少于3000字(不含附录),同一组学生只需提交1份,但必须在报告中列明分工。
课程负责人签名:年月日课程设计分工安排课程设计成绩评定表模拟记事本摘要本程序采用纯C++编写,用文本命令行界面模拟记事本功能:包括编辑、保存、另存为、复制、粘贴、查找、替换等功能。
运用了vector容器来充当寄存器,还用#include<fstream>实现文件的读入读出关键词:面向对象;模拟记事本;文件读写;编辑、保存、另存为、复制、粘贴、查找、替换目录第一章设计内容 (1)第二章总体设计 (5)2.1模块化设计 (5)2.2程序运行示意图 (5)第三章详细设计 (5)3.1数据结构设计 (6)3.2程序模块设计 (6)3.3流程图 (10)第四章调试与测试 (10)4.1调试过程中的主要问题 (10)4.2测试结果 (10)参考文献 (13)心得体会 (13)第一章设计内容#include<iostream>using namespace std;#include<string>#include<vector>#include <fstream>vector<string>savee; //寄存容器vector<string>saved; //复制容器//中英文实际个数----------------------------------------------------------------------unsigned int GetStringCount(const string &s){short ch;unsigned cnt = s.size();for(size_t i=0; i<s.size(); ++i){ch = s.at(i);if(ch&0x1000) ++i,--cnt;}return cnt;}//取得以0为起始索引的指定位置字符-------------------------------------------string GetString(string &s, size_t index){short ch;string res;unsigned cnt = index;size_t i;for(i=0; i<s.size() && i<cnt; ++i){ch = s.at(i);if(ch&0x1000) ++i,++cnt;}ch = s.at(i);if(ch&0x1000) res=s.substr(i,2);else res=s.substr(i,1);return res;}//定义记事本类,包括9个成员函数--------------------------------------------class notepad{public:notepad(){}~notepad(){}void operator_interface(); //用户操作界面void open(); //读入void input(); //写入void copy(); //复制void paste(); //粘贴int find(); //查找void rplace(); //替换void save(); //保存void lsave(); //另存};void notepad::operator_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<<"9.我要结束操作"<<endl;cout<<"********************************************************"<<endl; }void notepad::open(){savee.clear ();string s;cout<<"输入你要打开的文档的位置"<<endl;cin>>s;ifstream T(s.data());string ch;while(getline(T,ch)){cout << ch<<endl;savee.push_back (ch);}T.close();}void notepad::input (){int s;savee.clear ();string v;cout<<"输入总行数,格式:1-99"<<endl;cin>>s;getchar();for(int i=0;i<s;i++){getline(cin,v);savee.push_back (v);}}void notepad::copy(){string s1,line;int a,b,c,d;int i=1,sum1=0,sum2=0;saved.clear();cout<<"请输入你要复制的开始位置(第几行,第几个字符)"<<endl;cin>>a;cin>>b;cout<<"请输入你要复制的结束位置(第几行,第几个字符)"<<endl;cin>>c;cin>>d;cout<<endl;i=1;for(vector<string>::iterator iter=savee.begin ();iter!=savee.end ();iter++,i++){ s1=*iter;if(a==i&&a==c){for(int j=b-1;j<d;j++){cout<<GetString(s1,j);//getline(GetString(s1,b-1),line);}}if(a==i&&a!=c){for(unsigned int j=b-1;j<GetStringCount(s1);j++){saved.push_back (GetString(s1,j));//getline(GetString(s1,b-1),line);}}if(a<i&&i<c){for(unsigned int j=0;j<GetStringCount(s1);j++){saved.push_back (GetString(s1,j));}}if(i!=1&&i==c){for(int j=0;j<d;j++){saved.push_back (GetString(s1,j));}}saved.push_back ("\n");}ofstream W("d:\\copycopy.txt");for(vector<string>::iterator ite=saved.begin ();ite!=saved.end ();ite++){W<<*ite;}cout<<endl;}void notepad::paste(){for(vector<string>::iterator ite=saved.begin ();ite!=saved.end ();ite++){cout<<*ite;}}int notepad::find(){int i=1;string s,v;cout<<"请输入你要查找的字符"<<endl;cin>>v;for(vector<string>::iterator iter=savee.begin ();iter!=savee.end ();iter++){s=*iter;string::size_type pos =s.find (v);if(pos != string::npos){cout<<"查找的位置第一次出现在的位置为:"<<i<<"行"<<"第"<<pos+1<<"个字符"<<endl;return pos;}i++;}return 0;}void notepad::rplace (){int i=1;string s,v,r;cout<<"请输入你要被替换的字符"<<endl;cin>>v;cout<<"请输入你要替换的字符"<<endl;cin>>r;vector<string>::iterator iter;for(iter=savee.begin ();iter!=savee.end ();iter++){s=*iter;string::size_type pos = 0;while((pos = s.find(v, pos)) != string::npos) {s.replace(pos, v.size(), r);pos++;}//cout<<s<<endl;*iter=s;}for(iter=savee.begin ();iter!=savee.end ();iter++){cout<<*iter<<endl;}}void notepad::save (){string s;cout<<"请输入的要保存的文件位置和文件名和格式:"<<endl;cin>>s;ofstream T(s.data ());for(vector<string>::iterator i=savee.begin ();i!=savee.end ();i++){T<<*i<<endl;}T.close();}void notepad::lsave (){string s;cout<<"请输入你要另存的位置:"<<endl;cin>>s;ofstream T(s.data ());for(vector<string>::iterator i=savee.begin ();i!=savee.end ();i++){T<<*i<<endl;}T.close();}//定义主函数---------------------------------------------------------------void main(){cout<<"欢迎使用本程序,您可以在要输入文档内容时通过切换输入法实现输入汉字"<<endl;notepad b; //创建一个记事本对象b.operator_interface(); //显示操作界面char f[10];int choice; //操作号cin>>f;char *choic=f;if(*(choic+1)=='\0'&&isdigit(*choic)){ //错误输入处理机制choice=*choic-'0';}elsechoice=10;while(choice!=9){switch(choice){case 0:b.open();break;case 1:b.input();break;case 2:b.copy();break;case 3:b.paste();break;case 4:b.find ();break;case 5:b.rplace();break;case 6:b.save();break;case 7:b.lsave ();break;case 8:b.operator_interface();break;case 9:break;default:break;}if(choice==10||(choice>=0&&choice<=8)){ //输入错误时的操作及输入正确时的继续操作判断if(choice==10) cout<<"你输入的操作有误,请重新输入,输入8 获取操作帮助"<<endl;else cout<<"继续你的操作,输入8 获取操作帮助"<<endl;cin>>f;choic=f;if(*(choic+1)=='\0'&&isdigit(*choic)) //错误输入处理机制choice=*choic-'0';else choice=10;} }cout<<"感谢您的使用!"<<endl;}第二章 总体设计2.1模块化设计第1模块:读入。