课程设计报告
STL通讯录管理系统
目录
一,设计要求3
(一)功能设计要求3
1.建立文件3
2.文件存储3
3.读取文件3
4.增加学生记录3
5.删除记录4
6.修改记录4
7.查询记录4
8.显示记录4
9.关于记录的排序4
10.测试程序5
(二)总体设计5
1.结构层次
实体结构层次5
(1)第一层:contact_per.h个人信息层
(2)第二层:database.h数据库层5
(3)第三层:oper.h用户操作层5
两个平行交互层(与前三层进行关联)5
(1)menu.h目录层5
(2)主源代码.cpp接口层6
2.结构具体实现细节6
第一层:contact_per.h个人信息层6
手机单个用户类6
手机卡单个用户类6
第二层:database.h数据库层6
手机数据库类6
手机卡数据库类6
第三层:oper.h用户操作层7
二,界面设计与各功能模块实现9
(一)界面设计9
(二)功能模块实现10
四,使用说明及编程体会10
(一)使用说明10
(二)编程体会10
完整源代码11
实体结构层次11
两个平行交互层(与前三层进行关联)36
参考文献41
一,设计要求
(一)功能设计要求
1.建立文件
(1)程序采用相对路径保存文件,以提高程序健壮性。
(2)手机和手机卡联系人分别存储于工程文件夹下与源代码同文件夹的PHONE_CONTACT和SD_contact下。
(3)通过构造函数构建函数打开文件时,通过特别的判定机制,如果文件丢失会跳过本地记录同步过程,不会发生卡死现象,在程序结束时会创建新文件,第二次打开会正常运行。
(4)写文件时若有同名文件存在则会进行覆盖,保证数据的同步性。
2.文件存储
返回主菜单或者退出程序时会自动覆写到文件,不需要手工操作保存,更加人性化。
3.读取文件
程序启动时会读取两个本地文件中的本地记录,同步到多重映射中后,由用户决定是否浏览,之后正式进入主菜单。
4.增加学生记录
(1)分为保存到手机和手机卡两个选项,在保存文件前,新增内容和读取到的原来的内容都保存在多重映射多重映射中,在返回主菜单或者退出程序时会自动更新到文件。
(2)设置了最大存储容量,手机默认是200,手机卡为2000,可以允许的最大安全容量为27531841条记录,超过后由于栈区内存限制不能保证安全性。在主菜单选项8中可以修改。
5.删除记录
(1)可以按照姓名列出所有的联系人进行任意形式的删除操作。
(2)进行删除之前会先确定联系人所在位置,定位操作采用的是二分查找算法,通过lower_bound和upper_bound确定同名记录的范围.O(log2n)级复杂度,比传统的顺序查找方式具有更高的效率的算法支撑。
(2)程序中有关删除的模式共有八种分别是:
1)手机通讯录(删除同名字全部记录)。
2)手机卡通讯录。(删除同名字全部记录)。
3)手机通讯录。(删除同名字某条记录)。
4)手机卡通讯录。(删除同名的某条记录)。
5)两个通讯录都进行名字清空(抹消该名字的全部记录)
6)清空手机卡通讯录。
7)清空手机通讯录
8)清除所有记录
6.修改记录
(1)系统会按照姓名列出所有的联系人
(2)对名字进行定位并进行该名字下的某条记录任意形式的修改操作。
(3)程序中有关修改的模式共有两种分别是:
修改手机中某条记录的任意一项信息
修改手机卡中某条记录的任意一项信息
7.查询记录
(1)输入名字后列出手机和手机卡中所有该名字的记录。
(2)内置定位算法是二分查找算法,具有更高的查询速度。
8.显示记录
(1)分为“全部展示”,仅展示“手机通讯录”,仅展示“手机卡通讯录”三种模式
(2)在显示出主菜单后可以按5随时显示当前数据库中信息。
(3)若没有记录可以显示,则给出提示信息。
9.关于记录的排序
由于多重映射的本质是红黑树,会按照键值自动有序,所以在内存中记录默认是从A->ž成字典序排列的,不需要手动排序。但是对于非ASCII码字符,会自动追加在记录的最后面。为了字典序二分算法的顺利运行,并没有设计能手动更改排序规则的操作。
测试程序
本程序在上交前通过了各项边缘测试,健壮性良好。
在27531841条记录下均表现出了良好的算法性能,极大地体现了多重映射的树形结构比起普通顺序容器的优势
(二)总体设计
1.结构层次概括
本设计共计1522行代码。
底层数据结构是STL中多重映射实现的红黑树,比传统的顺序容器具有更高的各类算法性能
组织设计模式参考了网络的OSI模型思想,进行了从底层到高层的封装
本设计由5个文件构成:五个头文件(.H)和一个主源代码文件(的.cpp)
共有三个实体结构层次由低到高分别为
实体结构层次
(1)第一层:contact_per.h个人信息层。
这部分包括:
Phone_contact_per和Mobile_phone_contacts_per两个类
储存手机和卡中单个人的信息及其操作
(2)第二层:database.h数据库层
这部分包括:
DatabasePhone和DatabaseSD两个数据库类。
将第一层通过多重映射多重映射进行封装。
储存两个联系人数据库以及对其进行的各类操作。
(3)第三层:oper.h用户操作层
这部分包括:用户类
封装了第二层并进行用户层面上的各类操作。
两个平行交互层(与前三层进行关联)
(1)menu.h目录层
这部分包括:
前三层各类操作的目录以及提示信息,程序在运行时将在平行交互层和实体结构层次不断交互。将目录单独封装显得代码更加条理,便于阅读且容易修改,不容易出错。
(2)主源代码.cpp接口层
这部分包括:
整个程序的入口,实现各种功能选择性跳转的实现部分,进入使用开关结构,退出时则提供了返回到主菜单,返回上一级,退出并保存三种选项。
2.结构具体实现细节
第一层:contact_per.h个人信息层
手机单个用户类
1. classPhone_contact_per
2. {
3.保护:
4. string phone_number; //姓名,电话号码
5.公众:
6.字符串名称; //因为要把名字作为键值,所以名字设为公有
7. Phone_contact_per(string pname =“NULL_name”,stringptel =“NULL_phone”); //带参并带默认值的构造函数
8. void set(stringpname =“NULL_name”,string ptel =“NULL_phone”); //一组设置函数为数据成员赋值
9. void modify(); //一组修改函数,修改数据成员的值
10. friend istream&operator >>(istream&in,Phone_contact_per&per); //重载>>,<<运算符,完成对象的输入和输出操作
11. friend ostream&operator <<(ostream&out,Phone_contact_per&per);
12.朋友类用户; //给予第三层操作权限
13.朋友类DatabasePhone; //给予第二层操作权限
14.} phone_contact_per;
手机卡单个用户类
1. classMobile_phone_contacts_per:public Phone_contact_per //进行继承操作
2. {
3.保护:
4. string home_address,qq_number; //新增数据成员:籍贯,QQ号
5.公众:
6. Mobile_phone_contacts_per(stringpname =“NULL_name”,string ptel =“NULL_phone”,stringphome =“NULL_home”,string pqq =“NULL_qq”);
7. void set(string pname =“NULL_name”,stringptel =“NULL_phone”,string phome =“NULL_home”,stringpqq =“NULL_qq”); //一组设置函数为数据成员赋值
8. void modify(); //一组修改函数,修改数据成员的值
9. friend istream&operator >>(istream&in,Mobile_phone_contacts_per&per); //重载>>,<<运算符,完成对象的输入和输出操作* /
10. friend ostream&operator <<(ostream&out,Mobile_phone_contacts_per&per);
11.朋友类用户; //给予第三层操作权限
12.朋友类DatabaseSD; //给予第二层操作权限
13.};
第二层:database.h数据库层
手机数据库类
1. classDatabasePhone
2. {
3.私人:
4. unsigned long long int Phone_num; //表示当前手机已经存储了的电话信息个数
5. multimap <string,Phone_contact_per> phone_contact; //多重映射手机数据库
6.公众:
7. DatabasePhone(){Phone_num = 0;}
8. inline bool check(); //检查手机是否存满
9. void per_out(multimap <string,Phone_contact_per> :: iterator&p); //输出单个人的信息
10. void add(); //增加新用户
11. void lookUp(string); //查询用户
12. unsigned long long int intlook_per_howmuch(string); //返回SD卡中某人信息的个数
13. voiddel(multimap <string,Phone_contact_per> :: iterator&p); //删除
14. void modify();
15.朋友类用户; //第三层操作权限
16.};
手机卡数据库类
1. classDatabaseSD
2. {
3.无符号long long int SD_num;
4. multimap <string,Mobile_phone_contacts_per> mobile_phone_contact; // SD卡数据库
5.公众:
6. DatabaseSD(){SD_num = 0;} //表示当前SD卡已经存储了的电话信息个数
7. inline bool check(); //检查SD卡是否存满
8. voidper_out(multimap <string,Mobile_phone_contacts_per> :: iterator&p); //输出单个人的信息
9. void add(); //增加新用户
10. void del(multimap <string,Mobile_phone_contacts_per> :: iterator&p); //删除
11. void lookUp(string); //查询用户
12. unsigned long long int look_per_howmuch(string); //返回SD卡中某人信息的个数
13.朋友类用户; //第三层操作权限
14.};
第三层:oper.h用户操作层
1. classUser
2. {
3.私人:
4. DatabasePhone电话; //手机数据库
5. DatabaseSD SDcard; //手机卡数据库
6.公众:
7. User(); //程序启动文件读取
8.〜User(); //程序关闭文件存储
9.菜单菜单; //与菜单进行交互
10. void add(); //添加记录
11. void look(); //查询记录
12. void del(); //删除记录
13. void modify(); //修改记录
14. void display(); //浏览记录
15. void display_local(); //浏览本地记录
16. void store(); //返回主菜单时存储
17. //复制的六种模式
18. void copyToPhone_per(); //复制同名记录到手机
19. void copyToPhone(); //全部复制到手机
20. void copyToSD_per(); //复制同名记录到卡
21. void copyToSD(); //全部复制到卡
22. void copyToSD_one(); //复制某条记录到手机
23. void copyToPhone_one(); //复制某条记录到卡
24. //移动的六种模式(大体同复制模式,按照名字划分)
25. void moveToPhone_per();
26. void moveToPhone();
27. void moveToSD_per();
28. void moveToSD();
29. void moveToSD_one();
30. void moveToPhone_one();
31. void modifymax(); //修改默认最大容量
32.};
二,界面设计与各功能模块实现
(一)界面设计
界面设计全部包含在交互层中的菜单类当中,具体包括以下界面:
1. classMenu {
2.公众:
3. void description(); //程序启动界面
4. void mainmenu(); //主菜单
5. void addmenu(); //添加人员菜单
6. void remove1menu(); //删除人员菜单
7. void changemenu(); //修改人员菜单
8. void displaymenu(); //浏览人员菜单
9. void lookmenu(); //查询人员菜单
10. void displaymenu1(); //查询人员选项菜单
11. void displaymenu2(); //查询人员选项菜单
12. void Phone_contact_per_modify(); //修改手机信息菜单
13. void Mobile_phone_contacts_per_modify(); //修改手机卡信息菜单
14. void modify(); //修改信息主菜单
15. void copy(); //复制信息主菜单
16. void move(); //移动信息主菜单
17. void user_return(); //返回操作菜单
18. void sd_read_success(); //以下都是读写提示
19. void sd_read_fail();
20. void sd_write_success();
21. void sd_write_fail();
22. void phone_read_success();
23. void phone_read_fail();
24. void phone_write_success();
25. void phone_write_fail();
26. void menumodifymax(); //修改最大容量菜单
27.菜单;
篇幅问题,仅仅列出主菜单,实际效果建议自己运行试试
(二)功能模块实现
实体操作层,高层(用户层)执行宏观操作,底层(数据库层)执行实际操作。
交互层负责各类提示和程序流程跳转
代码文件放在附录,需要具体实现可以自行查阅
四,使用说明及编程体会
(一)使用说明
按照交互层的提示操作程序即可
(二)编程体会
此次课程设计极大程度的统合了自己学过的各种知识,积累了大量的经验。对于多重映射的使用更加熟悉,为日后写大型程序奠定了扎实的基础。独立完成本设计后获得了成就感,真真切切的感受到了写程序的兴趣。
感谢老师对我平时的指导给了我完成本设计的灵感和知识能力。
三天1522行代码,虽然累,但是最终做出成果来的时候真的很高兴,期待我的下一个项目。(写项目可比打算法竞赛舒服多了)
完整源代码
实体结构层次
(1)第一层:contact_per.h个人信息层。
1. / *
2.这部分包括:
3. Phone_contact_per和Mobile_phone_contacts_per两个类
4.表示单个人的信息及其操作
5. * /
6. #ifndefcontact_per_h
7. #definecontact_per_h
8. #include <iostream>
9. #include <string>
10. #include <map>
11. #include <cstdio>
12. #include <climits>
13. #include <算法>
14. #include“menu.h”
15. usingnamespace std;
16. charchoose ='\ 0';
17. classPhone_contact_per
18. {
19.保护:
20. string phone_number; //姓名,电话号码
21.公众:
22.字符串名称;
23. Phone_contact_per(stringpname =“NULL_name”,string ptel =“NULL_phone”); //带参并带默认值的构造函数
24. void set(stringpname =“NULL_name”,string ptel =“NULL_phone”); //一组设置函数为数据成员赋值
25. void modify(); //一组修改函数,修改数据成员的值
26. friend istream&operator >>(istream&in,Phone_contact_per&per); //重载>>,<<运算符,完成对象的输入和输出操作* /
27. friend ostream&operator <<(ostream&out,Phone_contact_per&per);
28.朋友类用户;
29.朋友类DatabasePhone;
30.} phone_contact_per;
31. //类外实现部分
32. Phone_contact_per :: Phone_contact_per(stringpname,string ptel)
33. {
34. name = pname;
35. phone_number = ptel;
36.}
37. voidPhone_contact_per :: set(string pname,string ptel)
38. {
39. name = pname;
40. phone_number = ptel;
41.}
42. voidPhone_contact_per :: modify()
43. {
44. menu.Phone_contact_per_modify();
45. cin >>选择;
46.切换(选择)
47. {
48.案例'1':
49. {
50. cout <<“您选择了修改姓名\ n,请输入要改改的姓名”<< endl;
51. string t_name;
52. cin >> t_name;
53. name = t_name;
54. cout <<“修改成功”<< endl;
55.休息;
56.}
57.案例'2':
58. {
59. cout <<“您选择了修改电话号码,请输入改改的电话号码”<< endl;
60. string t_num;
61. cin >> t_num;
62. phone_number = t_num;
63. cout <<“修改成功”<< endl;
64.打破;
65.}
66.案例'3':
67. {
68. cout <<“您选择了全修改,请输入新的姓名和电话号码”<< endl;
69. string t_name,t_num;
70. cin >> t_name;
71. cin >> t_num;
72. name = t_name;
73. phone_number = t_num;
74. cout <<“修改成功”<< endl;
休息;
76.}
77. case'4':return;
78.默认:
79. cout <<“选择错误,不做任何修改\ n”<< endl;
80.}
81.}
82. istream&operator >>(istream&in,Phone_contact_per&per)
83. {
84. in >> per.name >> per.phone_number;
返回;
86.}
87. ostream&operator <<(ostream&out,Phone_contact_per&per)
88. {
89。
90. out <<“----”名字“<< per.name << endl
91. <<“电话号码:”<< per.phone_number << endl;
92。
93.退出;
94.}
95. // ----------------------------------------
classMobile_phone_contacts_per:public Phone_contact_per
97. {
98.保护:
99. string home_address,qq_number; //新增数据成员:籍贯,QQ号
100.公众:
101. Mobile_phone_contacts_per(stringpname =“NULL_name”,string ptel =“NULL_phone”,stringphome =“NULL_home”,string pqq =“NULL_qq”);
102. void set(stringpname =“NULL_name”,string ptel =“NULL_phone”,stringphome =“NULL_home”,string pqq =“NULL_qq”); //一组设置函数为数据成员赋值
103. void modify(); //一组修改函数,修改数据成员的值
104. friend istream&operator >>(istream&in,Mobile_phone_contacts_per&per); //重载>>,<<运算符,完成对象的输入和输出操作* /
105. friend ostream&operator <<(ostream&out,Mobile_phone_contacts_per&per);
106.朋友类用户;
107. friend class DatabaseSD;
108.};
109. Mobile_phone_contacts_per :: Mobile_phone_contacts_per(stringpname,string ptel,string phome,string pqq):Phone_contact_per(pname,ptel)
110. {
111. home_address = phome;
112. qq_number = pqq;
113.}
114. voidMobile_phone_contacts_per :: set(string pname,string ptel,string phome,stringpqq)
115. {
116. name = pname;
电话号码= ptel;
118. home_address = phome;
119. qq_number = pqq;
120.}
voidMobile_phone_contacts_per :: modify()
122. {
123. menu.Mobile_phone_contacts_per_modify();
cin >>选择;
125.切换(选择)
126. {
127.案例'1':
128. {
129. cout <<“您选择了修改姓名\ n,请输入要改改的姓名”<< endl;
字符串t_name;
cin >> t_name;
132. name = t_name;
cout <<“修改成功”<< endl;
打破
135.}
136.案例'2':
137. {
138. cout <<“您选择了修改电话号码,请输入改改的电话号码”<< endl;
139. string t_num;
cin >> t_num;
phone_number = t_num;
142. cout <<“修改成功”<< endl;
休息;
144.}
145.案例'3':
146. {
143. cout <<“您选择了修改家庭住址,请输入改改的家庭住址”<< endl;
字符串t_address;
cin >> t_address;
150. home_address = t_address;
151. cout <<“修改成功”<< endl;
打破
153.}
154.案例'4':
155. {
153. cout <<“您选择了修改QQ,请输入要改为的QQ”<< endl;
字符串t_qq;
cin >> t_qq;
qq_number = t_qq;
160. cout <<“修改成功”<< endl;
打破
162.}
163.案例'5':
164. {
163. cout <<“全修改,输入姓名电话,家庭住址,QQ”<< endl;
字符串t_name,t_tel,t_addr,t_qq;
cin >> t_name >> t_tel >> t_addr >> t_qq;
name = t_name;
169. phone_number = t_tel;
170. home_address = t_addr;
qq_number = t_qq;
cout <<“修改成功”<< endl;
打破;
174.}
175.案件'6':返回;
默认:
177. cout <<“选择错误,不做任何修改\ n”<< endl;
178.}
179.}
180. istream&operator >>(istream&in,Mobile_phone_contacts_per&per)
181. {
182. in>>per.name>>per.phone_number>>per.home_address>>per.qq_number;
183. return in;
184. }
185. ostream&operator<<(ostream &out,Mobile_phone_contacts_per &per)
186. {
187. cout<<"----》名字\t\t"<<per.name<<endl
188. <<" 电话号码\t"<<per.phone_number<<endl
189. <<" 住址\t\t"<<per.home_address<<endl
190. <<" QQ号\t\t"<<per.qq_number<<endl;
191. return out;
192. }
193. #endif
(2)第二层:database.h 数据库层
1. #ifndefdatebase_h
2. #definedatebase_h
3. /*
4. 这部分包括两个数据库类
5. */
6. longlong unsigned int max_phone_capacity=200;//初始化手机最大容量
7. longlong unsigned int max_SDcard_capacity=2000;//初始化SD卡最大容量
8. classDatabasePhone
9. {
10.私人:
11. unsigned long long int Phone_num; //表示当前手机已经存储了的电话信息个数
12. multimap <string,Phone_contact_per> phone_contact; //手机数据库
13.公众:
14. DatabasePhone(){Phone_num = 0;}
15. inline bool check(); //检查手机是否存满
16. voidper_out(multimap <string,Phone_contact_per> :: iterator&p); //输出单个人的信息
17. void add();
18. void lookUp(string);
19. unsigned long long intlook_per_howmuch(string); //返回SD卡中某人信息的个数
20. voiddel(multimap <string,Phone_contact_per> :: iterator&p);
21. void modify();
22.朋友类用户;
23.};
24. inlinebool DatabasePhone :: check()
25. {
26. if(Phone_num> max_phone_capacity)
27. {
28. cout <<“手机容量已满,最大上限为”<< max_phone_capacity << endl;
29.返回false;
30.}
31. else return true;
32.}
33. voidDatabasePhone :: add()
34. {
35. Phone_contact_per temp;
36. cout <<“请输入姓名与手机号”<< endl;
37. cin >> temp;
38. phone_contact.insert(pair <string,Phone_contact_per>(temp.name,temp)); //添加新记录的过程
39. Phone_num ++;
40.}
41. voidDatabasePhone :: del(multimap <string,Phone_contact_per> :: iterator&p)
42. {
43. phone_contact.erase(p);
44. cout <<“删除成功”<< endl;
45.}
46. voidDatabasePhone :: lookUp(string lookname)
47. {
48. multimap <string,Phone_contact_per> :: iteratorlook_itor_head,look_itor_foot; //查询手机联系人
49. look_itor_head = phone_contact.equal_range(lookname).first;
50. look_itor_foot = phone_contact.equal_range(lookname).second;
51. if(look_itor_head == look_itor_foot)
52. {
53. cout <<“手机中无此联系人”<< endl;
54.返回;
55.} else menu.displaymenu1();
56. for(multimap <string,Phone_contact_per> :: iteratori = look_itor_head; i!= look_itor_foot; cout << i-> second << endl,i ++);
57.}
58. unsignedlong long int DatabasePhone :: look_per_howmuch(string lookname)
59. {
60. multimap <string,Phone_contact_per> :: iteratorlook_itor_head,look_itor_foot; //查询手机联系人
61. look_itor_head = phone_contact.lower_bound(lookname);
62. look_itor_foot = phone_contact.upper_bound(lookname);
63.回归(look_itor_head,look_itor_foot);
64.}
65. voidDatabasePhone :: per_out(multimap <string,Phone_contact_per> :: iterator&p)
66. {
67. cout <<“----”名字“<< p-> second.name << endl
68. <<“电话号码”<< p-> second.phone_number << endl;
69.}
70. // ********************************************** *****
71. classDatabaseSD
72. {
73.私人:
74. unsigned long long int SD_num;
75. multimap <string,Mobile_phone_contacts_per> mobile_phone_contact; // SD卡数据库
公众:
77. DatabaseSD(){SD_num = 0;} //表示当前SD卡已经存储了的电话信息个数
78. inline bool check(); //检查SD卡是否存满
79. voidper_out(multimap <string,Mobile_phone_contacts_per> :: iterator&p); //输出单个人的信息
80. void add();
81. void del(multimap <string,Mobile_phone_contacts_per> :: iterator&p);
82. void lookUp(string);
83. unsigned long long intlook_per_howmuch(string); //返回SD卡中某人信息的个数
84.朋友类用户;
85.};
86. inlinebool DatabaseSD :: check()
87. {
88. if(SD_num> max_SDcard_capacity)
89. {
90. cout <<“手机卡容量已满,最大上限为”<< max_SDcard_capacity << endl;
91. return false;
92.}
93. else return true;
94.}
95. voidDatabaseSD :: add()
96. {
97. Mobile_phone_contacts_per temp;
98. cout <<“请输入姓名,手机号,家庭住址,QQ号”<< endl;
cin >> temp;
100. mobile_phone_contact.insert(pair <string,Mobile_phone_contacts_per>(temp.name,temp)); //添加新记录的过程
101. SD_num ++;
102.}
103. voidDatabaseSD :: del(multimap <string,Mobile_phone_contacts_per> :: iterator&p)
104. {
105. mobile_phone_contact.erase(p);
106. cout <<“删除成功”<< endl;
107.}
108. voidDatabaseSD :: lookUp(string lookname)
109. {
110. multimap <string,Mobile_phone_contacts_per> :: iteratorlook_itor_head,look_itor_foot; //查询手机联系人
111. look_itor_head = mobile_phone_contact.lower_bound(lookname);
112. look_itor_foot = mobile_phone_contact.upper_bound(lookname);
113. if(look_itor_head == look_itor_foot)
114. {
115. cout <<“SD卡中无此联系人”<< endl;
返回;
} else else menu.displaymenu2();
118. for(multimap <string,Mobile_phone_contacts_per> :: iteratori = look_itor_head; i!= look_itor_foot; cout << i-> second << endl,i ++);
119.}
120. unsigned long long int DatabaseSD :: look_per_howmuch(string lookname)
121. {
122. multimap <string,Mobile_phone_contacts_per> :: iteratorlook_itor_head,look_itor_foot; //查询手机卡联系人
123. look_itor_head = mobile_phone_contact.lower_bound(lookname);
124. look_itor_foot = mobile_phone_contact.upper_bound(lookname);
回归距离(look_itor_head,look_itor_foot);
126.}
127. voidDatabaseSD :: per_out(multimap <string,Mobile_phone_contacts_per> :: iterator&p)
128. {
129.cout <<“----”名字“<< p-> second.name << endl
130. <<“电话号码”<< p-> second.phone_number << endl
131. <<“住址”<< p-> second.home_address << endl
132. <<“QQ号”<< p-> second.qq_number << endl;
133.}
#endif
(3)第三层:oper.h用户操作层
1. / *
2.这部分包括用户类和其操作
3. * /
4. #include“contact_per.h”
5. #include“menu.h”
6. #include“database.h”
7. #include <fstream>
8. usingnamespace std;
9. classUser
10. {
11.私人:
12. DatabasePhone phone; //手机数据库
13. DatabaseSD SDcard; //手机卡数据库
14.公众:
15. User(); //程序启动文件读取
16.〜User(); //程序关闭文件存储
17.菜单菜单; //与菜单进行交互
18. void add(); //添加记录
19. void look(); //查询记录
20. void del(); //删除记录
21. void modify(); //修改记录
22. void display(); //浏览记录
23. void display_local(); //浏览本地记录
24. void store(); //返回主菜单时存储
25. //复制的六种模式
26. void copyToPhone_per(); //复制同名记录到手机
27. void copyToPhone(); //全部复制到手机
28. void copyToSD_per(); //复制同名记录到卡
29. void copyToSD(); //全部复制到卡
30. void copyToSD_one(); //复制某条记录到手机
31. void copyToPhone_one(); //复制某条记录到卡
32. //移动的六种模式(大体同复制模式,按照名字划分)
33. void moveToPhone_per();
34. void moveToPhone();
35. void moveToSD_per();
36. void moveToSD();
37. void moveToSD_one();
38. void moveToPhone_one();
39. void modifymax(); //修改默认最大容量
40.};
41. User :: User()
42. {
43. fstreamphone_read(“phone_contact”,ios :: in);
44. if(phone_read)
45. menu.phone_read_success();
46. else {menu.phone_read_fail(); return;}
47. Phone_contact_per temp_phone;
48. phone_read >> temp_phone.name >> temp_phone.phone_number;
49. while(!phone_read.eof())
50. {
51. phone_read >> temp_phone.name >> temp_phone.phone_number;
52. phone.phone_contact.insert(pair <string,Phone_contact_per>(temp_phone.name,temp_phone));
53. phone.Phone_num ++;
54.}
55。
56。
fstream SD_read(“SD_contact”,ios :: in);
58. if(SD_read)menu.sd_read_success();
59. else {menu.sd_read_fail(); return;}
60. Mobile_phone_contacts_per temp;
61. SD_read >> temp.name >> temp.phone_number >> temp.home_address >> temp.qq_number;
62. while(!SD_read.eof())
63. {
64. SD_read >> temp.name >> temp.phone_number >> temp.home_address >> temp.qq_number;
65. SDcard.mobile_phone_contact.insert(pair <string,Mobile_phone_contacts_per>(temp.name,temp));
66. SDcard.SD_num ++;
67.}
68。
69. SD_read.close();
70. display_local();
71。
72.}
73.用户::〜用户()
74. {
ofstreamphone_write(“phone_contact”);
76. multimap <string,Phone_contact_per> :: iteratoritor_phone_head = phone.phone_contact.begin(),itor_foot_phone = phone.phone_contact.end();
77. for(; itor_phone_head!= itor_foot_phone; itor_phone_head ++)
78. {
79. if(itor_phone_head-> second.name ==“NULL_name”)continue;
80. phone_write << itor_phone_head-> second.name <<''<< itor_phone_head-> second.phone_number << endl;
81.}
82. if(phone_write)menu.phone_write_success();
83. else menu.phone_write_fail();
84. phone_write.close();
85。
ofstreamSD_write(“SD_contact”);
87. multimap <string,Mobile_phone_contacts_per> :: iteratoritor_head_sd = SDcard.mobile_phone_contact.begin(),itor_foot_sd = SDcard.mobile_phone_contact.end();
对于(; itor_head_sd!= itor_foot_sd; itor_head_sd ++)
89. {
90. if(itor_head_sd-> second.name ==“NULL_name”)continue;
91. SD_write << itor_head_sd-> second.name <<''<< itor_head_sd-> second.phone_number <<''<< itor_head_sd-> second.home_address <<''<< itor_head_sd- >> second.qq_number << endl ;
92.}
93. if(SD_write)menu.sd_write_success();
94. else menu.sd_write_fail();
95. SD_write.close();
96。
97.}
98. voidUser :: add()
99. {
100. while(1)
101. {
102. menu.addmenu(); // 1是手机通讯录,2是手机卡通讯录
103. char tem;
104. cin >> tem;
105. if(tem =='1')
106. {
107. phone.add();
108. if(phone.check())
109. {
110. cout <<“添加完成”<< endl;
休息
112.}其他继续;
其他if(tem =='2')
114. {
115. SDcard.add();
if(SDcard.check())
117. {
118. cout <<“添加完成”<< endl;
休息;
120.}其他继续;
121.}
122.其他
123. {
124. while(1)
125. {
126. cout <<“选项输入错误,是否重新添加?Y / N(不区分大小写)”<< endl;
127. cin >> tem;
128. if(tem =='Y'|| tem =='y')break;
其他if(tem =='N'|| tem =='n')return;
130. cout <<“请回答正确选项!”;
131.}
132.}
133.}
134.}
135. voidUser :: look()
136. {
137. cout <<“请输入人名,系统将会自动查询信息”<< endl;
138. string ask_name;
cin >> ask_name;
140. phone.lookUp(ask_name);
141. SDcard.lookUp(ask_name);
142.}
voidUser :: del()
144. {
menu.remove1menu();
cin >>选择;
multimap <string,Phone_contact_per> :: iteratorPhone_itor = phone.phone_contact.begin();
menu.displaymenu1();
149. if(!distance(phone.phone_contact.begin(),phone.phone_contact.end()))
150. cout <<“手机中无记录”<< endl;
151. for(; Phone_itor!= phone.phone_contact.end(); phone.per_out(Phone_itor),Phone_itor ++);
152. multimap <string,Mobile_phone_contacts_per> :: iteratorSDitor = SDcard.mobile_phone_contact.begin();
menu.displaymenu2();
154. for(; SDitor!= SDcard.mobile_phone_contact.end(); SDcard.per_out(SDitor),SDitor ++);
155. if(!distance(SDcard.mobile_phone_contact.begin(),SDcard.mobile_phone_contact.end()))
153. cout <<“手机卡中无记录”<< endl;
cout <<“显示完毕”<< endl;
切换(选择)
159. {
160.案例'1':
161. {
字符串movename;
163. cout <<“输入要删除的姓名,手机中与该姓名有关的所有记录将被删除”<< endl;
164. cin >> movename;
phone.phone_contact.erase(movename);
phone.Phone_num- = phone.look_per_howmuch(movename);
163. cout <<“手机中关于”<< movename <<“的记录已经全部删除”<< endl;
休息;
169.}
170.案例'2':
171. {
字符串movename;
173. cout <<“输入要删除的姓名,手机卡与该姓名有关的所有记录将被删除”<< endl;
174. cin >> movename;
175. SDcard.mobile_phone_contact.erase(movename);
SDcard.SD_num- = SDcard.look_per_howmuch(movename);
173. cout <<“手机卡中关于”<< movename <<“的记录已经全部删除”<< endl;
休息;
179.}
180.案例'3':
181. {
字符串movename;
183. int num = 0;
184. cout <<“输入想要进行操作的名字”<< endl;
185. cin >> movename;
183. cout <<“系统将显示当前目录下所有名字叫”<< movename <<“的人,选择要删除的人是第几个”<< endl;
187. multimap<string,Phone_contact_per>::iteratorPhone_itor=phone.phone_contact.equal_range(movename).first,p=Phone_itor,endit=phone.phone_contact.equal_range(movename).second;
188. if(!distance(Phone_itor,endit))
189. {
190. cout<<"无记录"<<endl;
191. return;
192. }
193. menu.displaymenu1();
194. for(;Phone_itor!=endit;phone.per_out(Phone_itor),Phone_itor++);
195. cout<<"显示完毕"<<endl;
196. cin>>num;
197. for(int i=1;i<num;i++,p++);
198. phone.del(p);
199. cout<<"删除完成"<<endl;
200. break;
201. }
202. case '4':
203. {
204. string movename;
205. int num=0;
206. cout<<"输入想要进行操作的名字"<<endl;
207. cin>>movename;
208. cout<<"系统将显示当前目录下所有名字叫"<<movename<<"的人,选择要删除的人是第几个"<<endl;
209. multimap<string,Mobile_phone_contacts_per>::iteratorSD_itor=SDcard.mobile_phone_contact.equal_range(movename).first,p=SD_itor,endit=SDcard.mobile_phone_contact.equal_range(movename).second;
210. if(!distance(SD_itor,endit))
211. {
212. cout<<"无记录"<<endl;
213. return;
214. }
215. menu.displaymenu1();
216. for(;SD_itor!=endit;SDcard.per_out(SD_itor),SD_itor++);
217. cout<<"显示完毕"<<endl;
218. cin>>num;
219. for(int i = 1; i <num; i ++,p ++);
220. SDcard.del(p);
221. cout <<“删除完成”<< endl;
打破;
223.}
224.案例'5':
225. {
字符串movename;
223. cout <<“输入要删除的姓名,与该姓名有关的所有记录将全部被删除”<< endl;
228. cin >> movename;
phone.phone_contact.erase(movename);
phone.Phone_num- = phone.look_per_howmuch(movename);
SDcard.mobile_phone_contact.erase(movename);
232. SDcard.SD_num- = SDcard.look_per_howmuch(movename);
233. cout <<“关于”<< movename <<“的记录已经全部删除”<< endl;
休息;
235.}
236. case'6':phone.phone_contact.clear(); break;
237. case'7':SDcard.mobile_phone_contact.clear(); break;
238. case'8':phone.phone_contact.clear(); SDcard.mobile_phone_contact.clear(); break;
239. default:cout <<“选择错误,不作任何删除”<< endl;
240.}
241。
242.}
voidUser :: modify()
244. {
245. multimap <string,Phone_contact_per> :: iterator Phone_itor = phone.phone_contact.begin();
menu.displaymenu1();
247. if(!distance(phone.phone_contact.begin(),phone.phone_contact.end()))
243. cout <<“手机中无记录”<< endl;
249. for(; Phone_itor!= phone.phone_contact.end(); phone.per_out(Phone_itor),Phone_itor ++);
250. multimap <string,Mobile_phone_contacts_per> :: iteratorSDitor = SDcard.mobile_phone_contact.begin();
251. menu.displaymenu2();
252. for(;SDitor!=SDcard.mobile_phone_contact.end();SDcard.per_out(SDitor),SDitor++);
253. if(!distance(SDcard.mobile_phone_contact.begin(),SDcard.mobile_phone_contact.end()))
254. cout<<" 手机卡中无记录"<<endl;
255. cout<<" 显示完毕"<<endl;
256. cout<<"输入想要修改的人名"<<endl;
257. string name;
258. int num=0;
259. cin>>name;
260. phone.lookUp(name);
261. SDcard.lookUp(name);
262. menu.changemenu();
263. cin>>choose;
264. if(choose=='1')
265. {
266. cout<<"想修改第几条记录"<<endl;
267. cin>>num;
268. multimap<string,Phone_contact_per>::iteratorp=phone.phone_contact.equal_range(name).first;
269. for(int i=1;i<num;i++,p++);
270. p->second.modify();
271. }else if(choose=='2')
272. {
273. cout<<"想修改第几条记录"<<endl;
274. cin>>num;
275. multimap<string,Mobile_phone_contacts_per>::iteratorp=SDcard.mobile_phone_contact.equal_range(name).first;
276. for(int i=1;i<num;i++,p++);
277. p->second.modify();
278. }
279. else return;
280. }
281. voidUser::store()
282. {
283. fstreamphone_write("phone_contact",ios::out,ios::trunc);
284. multimap<string,Phone_contact_per>::iteratoritor_phone_head=phone.phone_contact.begin(),itor_foot_phone=phone.phone_contact.end();
285. for(;itor_phone_head!=itor_foot_phone;itor_phone_head++)
286. phone_write<<itor_phone_head->second.name<<''<<itor_phone_head->second.phone_number<<endl;
287. phone_write.close();
288. fstreamSD_write("SD_contact",ios::out,ios::trunc);
289. multimap<string,Mobile_phone_contacts_per>::iteratoritor_head_sd=SDcard.mobile_phone_contact.begin(),itor_foot_sd=SDcard.mobile_phone_contact.end();
290. for(;itor_head_sd!=itor_foot_sd;itor_head_sd++)
291. SD_write<<itor_head_sd->second.name<<''<<itor_head_sd->second.phone_number<<''<<itor_head_sd->second.home_address<<' '<<itor_head_sd->second.qq_number<<endl;
292. SD_write.close();
293.
294. }
295. voidUser::copyToPhone_per()
296. {
297. string copyname;
298 cin >> copyname;
299. multimap <string,Mobile_phone_contacts_per> :: iterator itor_head = SDcard.mobile_phone_contact.begin(),itor_foot = SDcard.mobile_phone_contact.end();
300. Phone_contact_per temp;
301. if(!phone.look_per_howmuch(itor_head-> first))
302. {
303. if(phone.Phone_num> max_phone_capacity)
304. {
305. cout <<“很遗憾,手机容量已满,上限为:”<< max_phone_capacity << endl
306. <<“已经复制的不做改动”<< endl;
回归;
308.}
309. temp.name = itor_head-> first;
310. temp.phone_number = itor_head-> second.phone_number;
311. while(itor_head!= itor_foot)
312. {
phone.phone_contact.insert(pair <string,Phone_contact_per>(temp.name,temp));
phone.Phone_num ++;
315.}
316.}
313. cout <<“恭喜你,复制成功!”<< endl;
318.}
319. voidUser :: copyToPhone()
320. {
321. multimap <string,Mobile_phone_contacts_per> :: iteratoritor_head = SDcard.mobile_phone_contact.begin(),itor_foot = SDcard.mobile_phone_contact.end();
322. Phone_contact_per temp;
323. if(!phone.look_per_howmuch(itor_head-> first))
324. {
if(phone.Phone_num> max_phone_capacity)
326. {
327. cout <<“很遗憾,手机容量已满,上限为:”<< max_phone_capacity << endl
328. <<“已经复制的不做改动。”<< endl;
返回;
330.}
temp.name = itor_head-> first;
temp.phone_number = itor_head-> second.phone_number;
phone.phone_contact.insert(pair <string,Phone_contact_per>(temp.name,temp));
phone.Phone_num ++;
335.}
333. cout <<“恭喜你,全部复制成功!”<< endl;
337.}
voidUser :: copyToSD_per()
339. {
340. string copyname;
341. cout <<“输入要进行复制操作的姓名”<< endl;
cin >> copyname;
344. multimap <string,Phone_contact_per> :: iteratoritor_head = phone.phone_contact.equal_range(copyname).first,itor_foot = phone.phone_contact.equal_range(copyname).second;
344. Mobile_phone_contacts_per temp;
if(!SDcard.look_per_howmuch(itor_head-> first))
346. {
if(SDcard.SD_num> max_SDcard_capacity)
348. {
343. cout <<“很遗憾,手机卡容量已满,上限为:”<< max_SDcard_capacity << endl;
返回;
351.}
352. temp.name = itor_head-> first;
temp.phone_number = itor_head-> second.phone_number;
354. temp.home_address =“由手机转到卡的信息没有记录”;
355. temp.qq_number =“由手机转到卡的QQ号没有记录”;
同时(itor_head!= itor_foot)
357. {
SDcard.mobile_phone_contact.insert(pair <string,Mobile_phone_contacts_per>(temp.name,temp));
359. SDcard.SD_num ++;
phone.phone_contact.erase(itor_head);
phone.Phone_num--;
itor_head = phone.phone_contact.equal_range(copyname).first,itor_foot = phone.phone_contact.equal_range(copyname).second;
363.}
364.}
363. cout <<“恭喜你,复制成功!”<< endl;
366.}
voidUser :: copyToSD()
368. {
multimap <string,Phone_contact_per> :: iteratoritor_head = phone.phone_contact.begin(),itor_foot = phone.phone_contact.end();
370. Mobile_phone_contacts_per temp;
371. if(!SDcard.look_per_howmuch(itor_head-> first))
372. {
如果(SDcard.SD_num> max_SDcard_capacity)
374. {
373. cout <<“很遗憾,手机卡容量已满,上限为:”<< max_SDcard_capacity << endl;
返回;
377.}
temp.name = itor_head-> first;
temp.phone_number = itor_head-> second.phone_number;
380. temp.home_address =“由手机转到卡的信息没有记录”;
381. temp.qq_number =“由手机转到卡的QQ号没有记录”;
382. SDcard.mobile_phone_contact.insert(pair <string,Mobile_phone_contacts_per>(temp.name,temp));
383. SDcard.SD_num ++;
384.}
385. cout <<“恭喜你,全部复制成功!”<< endl;
386。
387.}
388. voidUser :: copyToSD_one()
389. {
390. string copyname;
391. int num = 0;
cin >> copyname;
393. cout <<“系统将显示所有名字叫”<< copyname <<“的人,选择要复制的人是第几个”<< endl;
394. multimap <string,Phone_contact_per> :: iteratorPhone_itor = phone.phone_contact.equal_range(copyname).first,p = Phone_itor,endit = phone.phone_contact.equal_range(copyname).second;
395. if(!distance(Phone_itor,endit))
396. {
393. cout <<“无记录”<< endl;
返回;
399.}
400. menu.displaymenu1();
401. for(; Phone_itor!= endit; phone.per_out(Phone_itor),Phone_itor ++);
402. cout <<“显示完毕”<< endl;
403. cout <<“你想复制第几个?”<< endl;
404. cin >> num;
405. for(int i = 1; i <num; i ++,p ++);
406. Mobile_phone_contacts_per temp;
temp.name = p-> second.name;
408. temp.phone_number = p-> second.phone_number;
temp.home_address =“由手机转到卡的信息没有记录”;
410. temp.qq_number =“由手机转到卡的信息没有记录”;
SDcard.mobile_phone_contact.insert(pair <string,Mobile_phone_contacts_per>(temp.name,temp));
412. SDcard.SD_num ++;
413. cout <<“复制完成”<< endl;
414.}
415. voidUser :: copyToPhone_one()
416. {
417. string copyname;
418. int num = 0;
cout <<“输入名字”<< endl;
420. cin >> copyname;
421. cout <<“系统将显示所有名字叫”<< copyname <<“的人,选择要复制的人是第几个”<< endl;
422. multimap <string,Mobile_phone_contacts_per> :: iteratorsdc_itor = SDcard.mobile_phone_contact.equal_range(copyname).first,p = sdc_itor,endit = SDcard.mobile_phone_contact.equal_range(copyname).second;
423. if(!distance(sdc_itor,endit))
424. {
423. cout <<“无记录”<< endl;
返回;
427.}
428. menu.displaymenu1();
429. for(; sdc_itor!= endit; SDcard.per_out(sdc_itor),sdc_itor ++);
430. cout <<“显示完毕”<< endl;
431. cout <<“你想复制第几个?”<< endl;
cin >> num;
433. for(int i = 1; i <num; i ++,p ++);
434. Phone_contact_per temp;
temp.name = p-> second.name;
temp.phone_number = p-> second.phone_number;
phone.phone_contact.insert(pair <string,Phone_contact_per>(temp.name,temp));
phone.Phone_num ++;
433. cout <<“复制完成”<< endl;
440.}
voidUser :: moveToPhone()
442. {
444。multimap <string,Mobile_phone_contacts_per> :: iteratoritor_head = SDcard.mobile_phone_contact.begin(),itor_foot = SDcard.mobile_phone_contact.end();
444. Phone_contact_per temp;
if(!phone.look_per_howmuch(itor_head-> first))
446. {
447. if(phone.Phone_num> max_phone_capacity)
448. {
449. cout <<“很遗憾,手机容量已满,上限为:”<< max_phone_capacity << endl
450. <<“已经移动的不做改动,手机卡存储的消息不进行删除”<< endl;
返回;
452.}
453. temp.name = itor_head-> first;
454. temp.phone_number = itor_head-> second.phone_number;
phone.phone_contact.insert(pair <string,Phone_contact_per>(temp.name,temp));
456. phone.Phone_num ++;
457.}
458. cout <<“恭喜你,全部移动成功!”<< endl;
459. SDcard.mobile_phone_contact.clear();
460. SDcard.SD_num = 0;
461.}
voidUser :: moveToPhone_per()
463. {
字符串movename;
cin >> movename;
multimap <string,Mobile_phone_contacts_per> :: iteratoritor_head = SDcard.mobile_phone_contact.begin(),itor_foot = SDcard.mobile_phone_contact.end();
467. Phone_contact_per temp;
if(!phone.look_per_howmuch(itor_head-> first))
469. {
470. if(phone.Phone_num> max_phone_capacity)
471. {
472. cout <<“很遗憾,手机容量已满,上限为:”<< max_phone_capacity << endl
473. <<“已经移动的不做改动,手机卡存储的消息不进行删除”<< endl;
回归;
475.}
476. temp.name = itor_head-> first;
temp.phone_number = itor_head-> second.phone_number;
478. while(itor_head!= itor_foot)
479. {
480. phone.phone_contact.insert(pair <string,Phone_contact_per>(temp.name,temp));
phone.Phone_num ++;
482. SDcard.mobile_phone_contact.erase(itor_head);
483. phone.Phone_num--;
484. itor_head = SDcard.mobile_phone_contact.equal_range(movename).first,itor_foot = SDcard.mobile_phone_contact.equal_range(movename).second;
485.}
486.}
487. cout <<“恭喜你,移动成功!”<< endl;
488。
489.}
490. voidUser :: moveToSD_per()
491. {
492。
493.字符串movename;
494. cout <<“输入要进行移动操作的姓名”<< endl;
cin >> movename;
496. multimap <string,Phone_contact_per> :: iteratoritor_head = phone.phone_contact.equal_range(movename).first,itor_foot = phone.phone_contact.equal_range(movename).second;
497. Mobile_phone_contacts_per temp;
498. if(!SDcard.look_per_howmuch(itor_head-> first))
499. {
500. if(SDcard.SD_num> max_SDcard_capacity)
501. {
502. cout <<“很遗憾,手机卡容量已满,上限为:”<< max_SDcard_capacity << endl
503. <<“手机存储的消息不进行删除”<< endl;
回归;
505.}
506. temp.name = itor_head-> first;
507. temp.phone_number = itor_head-> second.phone_number;
508. temp.home_address =“由手机转到卡的信息没有记录”;
509. temp.qq_number =“由手机转到卡的QQ号没有记录”;
510. while(itor_head!= itor_foot)
511. {
512. SDcard.mobile_phone_contact.insert(pair <string,Mobile_phone_contacts_per>(temp.name,temp));
513. SDcard.SD_num ++;
phone.phone_contact.erase(itor_head);
515. phone.Phone_num--;
516. itor_head = phone.phone_contact.equal_range(movename).first,itor_foot = phone.phone_contact.equal_range(movename).second;
517.}
518.}
519. cout <<“恭喜你,移动成功!”<< endl;
520.}
voidUser :: moveToSD_one()
522. {
字符串movename;
524. int num = 0;
525. cout <<“输入名字”<< endl;
526. cin >> movename;
523. cout <<“系统将显示所有名字叫”<< movename <<“的人,选择要移动的人是第几个”<< endl;
528 multimap <string,Phone_contact_per> :: iterator Phone_itor = phone.phone_contact.equal_range(movename).first,p = Phone_itor,endit = phone.phone_contact.equal_range(movename).second;
529. if(!distance(Phone_itor,endit))
530. {
531. cout <<“无记录”<< endl;
532. return;
533.}
534. menu.displaymenu1();
535. for(; Phone_itor!= endit; phone.per_out(Phone_itor),Phone_itor ++);
533. cout <<“显示完毕”<< endl;
533. cout <<“你想移动第几个?”<< endl;
538. cin >> num;
539. for(int i = 1; i <num; i ++,p ++);
540. Mobile_phone_contacts_per temp;
541. temp.name = p-> second.name;
temp.phone_number = p-> second.phone_number;
543. temp.home_address =“由手机转到卡的信息没有记录”;
544. temp.qq_number =“由手机转到卡的信息没有记录”;
SDcard.mobile_phone_contact.insert(pair <string,Mobile_phone_contacts_per>(temp.name,temp));
546. SDcard.SD_num ++;
phone.phone_contact.erase(p);
phone.Phone_num--;
543. cout <<“移动完成”<< endl;
550.}
voidUser :: moveToPhone_one()
552. {
字符串movename;
554. int num = 0;
cout <<“输入名字”<< endl;
cin >> movename;
553. cout <<“系统将显示所有名字叫”<< movename <<“的人,选择要移动的人是第几个”<< endl;
558. multimap <string,Mobile_phone_contacts_per> :: iteratorsdc_itor = SDcard.mobile_phone_contact.equal_range(movename).first,p = sdc_itor,endit = SDcard.mobile_phone_contact.equal_range(movename).second;
559. if(!distance(sdc_itor,endit))
560. {
561. cout <<“无记录”<< endl;
返回;
563.}
menu.displaymenu1();
for(; sdc_itor!= endit; SDcard.per_out(sdc_itor),sdc_itor ++);
cout <<“显示完毕”<< endl;
567. cout <<“你想移动第几个?”<< endl;
cin >> num;
569 for(int i = 1; i <num; i ++,p ++);
570. Phone_contact_per temp;
temp.name = p-> second.name;
temp.phone_number = p-> second.phone_number;
phone.phone_contact.insert(pair <string,Phone_contact_per>(temp.name,temp));
phone.Phone_num ++;
575. SDcard.mobile_phone_contact.erase(p);
576. SDcard.SD_num--;
cout <<“移动完成”<< endl;
578.}
voidUser :: moveToSD()
580. {
581. multimap <string,Phone_contact_per> :: iteratoritor_head = phone.phone_contact.begin(),itor_foot = phone.phone_contact.end();
582. Mobile_phone_contacts_per temp;
583. if(!SDcard.look_per_howmuch(itor_head-> first))
584. {
if(SDcard.SD_num> max_SDcard_capacity)
586. {
583. cout <<“很遗憾,手机卡容量已满,上限为:”<< max_SDcard_capacity << endl
588. <<“已经移动的不做改动,手机存储的消息不进行删除”<< endl;
返回;
590.}
591. temp.name = itor_head-> first;
592. temp.phone_number = itor_head-> second.phone_number;
593. temp.home_address =“由手机转到卡的信息没有记录”;
594. temp.qq_number =“由手机转到卡的QQ号没有记录”;
SDcard.mobile_phone_contact.insert(pair <string,Mobile_phone_contacts_per>(temp.name,temp));
596. SDcard.SD_num ++;
597.}
598. cout <<“恭喜你,全部移动成功!”<< endl;
599. phone.phone_contact.clear();
600. phone.Phone_num = 0;
601.}
voidUser :: display()
603. {
604. while(1)
605. {
606. menu.displaymenu(); // 1是展示手机通讯录,2是展示手机卡通讯录
607
608. cin >> tem;
609. if(tem =='1')
610. {
611. multimap <string,Phone_contact_per> :: iteratorPhone_itor = phone.phone_contact.begin();
menu.displaymenu1();
613. if(!distance(phone.phone_contact.begin(),phone.phone_contact.end()))
614. cout <<“手机中无记录”<< endl;
615; for(; Phone_itor!= phone.phone_contact.end(); phone.per_out(Phone_itor),Phone_itor ++);
616. multimap <string,Mobile_phone_contacts_per> :: iteratorSDitor = SDcard.mobile_phone_contact.begin();
617. menu.displaymenu2();
618; for(; SDitor!= SDcard.mobile_phone_contact.end(); SDcard.per_out(SDitor),SDitor ++);
619. if(!distance(SDcard.mobile_phone_contact.begin(),SDcard.mobile_phone_contact.end()))
620. cout <<“手机卡中无记录”<< endl;
621. cout <<“显示完毕”<< endl;
622. return;
623.} else if(tem =='2')
624. {
625. multimap <string,Phone_contact_per> :: iteratorPhone_itor = phone.phone_contact.begin();
626. if(!distance(phone.phone_contact.begin(),phone.phone_contact.end()))
627. {
623. cout <<“无记录”<< endl;
返回;
630.}
631. menu.displaymenu1();
632. for(; Phone_itor!= phone.phone_contact.end(); phone.per_out(Phone_itor),Phone_itor ++);
633. cout <<“显示完毕”<< endl;
634. return;
635.} else if(tem =='3')
636. {
multimap <string,Mobile_phone_contacts_per> :: iteratorSDitor = SDcard.mobile_phone_contact.begin();
638. if(!distance(SDcard.mobile_phone_contact.begin(),SDcard.mobile_phone_contact.end()))
639. {
640. cout <<“无记录”<< endl;
641. return;
642.}
643. menu.displaymenu2();
644. for(; SDitor!= SDcard.mobile_phone_contact.end(); SDcard.per_out(SDitor),SDitor ++);
cout <<“显示完毕”<< endl;
返回;
647.}其他
648. {
649. while(1)
650. {
651. cout <<“选项输入错误,是否重新添加?Y / N(不区分大小写)”<< endl;
cin >> tem;
653. if(tem =='Y'|| tem =='y')break;
654. else if(tem =='N'|| tem =='n')return;
653. cout <<“请回答正确选项!”;
656.}
657.}
658.}
659.}
660. voidUser :: display_local()
661. {
662. cout <<“是否显示成功读入的联系人信息?\ n输入Y / y显示,任意键跳过<< << endl;
char s;
cin >> s;
665. if(s =='Y'|| s =='y')
666. {
multimap <string,Phone_contact_per> :: iteratorPhone_itor = phone.phone_contact.begin();
668. menu.displaymenu1();
669. if(!distance(phone.phone_contact.begin(),phone.phone_contact.end()))
632. cout <<“手机中的本地记录没有信息”<< endl;
(; Phone_itor!= phone.phone_contact.end(); phone.per_out(Phone_itor),Phone_itor ++);
multimap <string,Mobile_phone_contacts_per> :: iteratorSDitor = SDcard.mobile_phone_contact.begin();
673. menu.displaymenu2();
对于(; SDitor!= SDcard.mobile_phone_contact.end(); SDcard.per_out(SDitor),SDitor ++);
675. if(!distance(SDcard.mobile_phone_contact.begin(),SDcard.mobile_phone_contact.end()))
673. cout <<“手机中的本地卡记录没有信息”<< endl;
677. cout <<“显示完毕”<< endl;
678.}其他
679. {
系统(“cls”);
681.返回;
682.}
683. cout <<“任意输入结束显示”<< endl;
cin >> s;
系统(“cls”);
686. return;
687.}
voidUser :: modifymax()
689. {
690. char temp;
menu.menumodifymax();
cin >> temp;
693. if(temp =='1')
694. {
695. cout <<“重新输入最大手机容量”<< endl;
cin >> max_phone_capacity;
693. cout <<“修改成功”<< endl;
698} else if(temp =='2')
699. {
700. cout <<“重新输入最大手机卡容量”<< endl;
cin >> max_SDcard_capacity;
cout <<“修改成功”<< endl;
703.}
704. else if(temp =='3')
705. {
703. cout <<“重新输入最大手机和手机卡容量”<< endl;
cin >> max_phone_capacity >> max_SDcard_capacity;
703. cout <<“修改成功”<< endl;
709.} else cout <<“不执行任何操作”<< endl;
710。
711.}
两个平行交互层(与前三层进行关联)
(1)menu.h目录层(因为word格式限制,实际目录显示以实物为准)
1. #ifndefmenu_h
2. #definemenu_h
3. / *
4.这部分是菜单类
5. * /
6. #include“contact_per.h”
7. #include <iostream>
8. #include <cstdlib>
9. #include <ctime>
10. #include <windows.h>
11. usingnamespace std;
12. charreturn_choice;
charanswer;
14. classMenu {
15.公众:
16. void description(); //程序启动界面
17. void mainmenu(); //主菜单
18. void addmenu(); //添加人员菜单
19. void remove1menu(); //删除人员菜单
20. void changemenu(); //修改人员菜单
21. void displaymenu(); //浏览人员菜单
22. void lookmenu(); //查询人员菜单
23. void displaymenu1(); //查询人员选项菜单
24. void displaymenu2(); //查询人员选项菜单
25. void Phone_contact_per_modify(); //修改手机信息菜单
26. void Mobile_phone_contacts_per_modify(); //修改手机卡信息菜单
27. void modify(); //修改信息主菜单
28. void copy(); //复制信息主菜单
29. void move(); //移动信息主菜单
30. void user_return(); //返回操作菜单
31. void sd_read_success(); //以下都是读写提示
32. void sd_read_fail();
33. void sd_write_success();
34. void sd_write_fail();
35. void phone_read_success();
36. void phone_read_fail();
37. void phone_write_success();
38. void phone_write_fail();
39. void menumodifymax(); //修改最大容量菜单
40.菜单;
41. voidMenu :: description()
42. {
43.系统(“彩色F1”);
44. cout <<“\ a ****************************************** **********************“<< ENDL
45. << *通讯录管理系统v12.5 *“<< endl
46. << * *作者于衡*“<< endl
47. <<“********************************************* *******************“<< ENDL
48. <<“◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇”<< endl
49. <<◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇<< << endl
50. <<◇◇◇···◇◇◇···◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇<< << endl
51. <<◇◇◇◇·◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇<< << endl
52. <<“◇◇◇◇···◇···◇◇◇◇◇◇◇◇◇·◇◇◇◇·◇◇◇◇◇◇”<< endl
53. <<◇◇◇◇◇·····◇◇◇◇◇◇◇◇◇◇·◇◇◇◇·◇◇◇◇◇◇<< << endl
54. <<◇◇◇◇◇◇····◇◇◇◇◇◇◇◇◇◇·◇◇◇◇·◇◇◇◇◇◇<< << endl
55. <<◇◇◇◇◇◇···◇◇◇◇◇◇◇◇◇◇◇·◇◇◇◇·◇◇◇◇◇◇<< << endl
56. <<◇◇◇◇◇◇◇。◇◇◇◇◇◇◇◇◇◇◇。◇◇◇。◇◇◇◇◇◇<< << endl
57. <<◇◇◇◇◇◇◇。◇◇◇◇◇◇◇◇◇◇◇。◇◇◇◇◇◇◇◇<< << endl
58. <<◇◇◇◇◇◇◇。◇◇◇◇◇◇◇◇◇◇◇···◇◇◇◇◇◇◇<< << endl
59. <<“◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇”<< endl
60. <<“◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇”<< endl
61. <<“◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇”<< endl
62. <<◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇<< << endl;
63.睡眠(1000);
64. system(“cls”);
65.}
66. voidMenu :: mainmenu()
67. {
68. system(“cls”);
69. cout <<“******************************************** ***********“<< ENDL
70. <<“*通讯录管理系统v12.5 *”<< endl
71. <<“*主菜单*”<< endl
72. <<“********************************************* **********“<< ENDL
73. <<“*请输入数字选择相应的操作*”<< endl
74. <<“* -------------------------------------------- ------------------- *“<< ENDL
75. <<“* *”<< endl
76. <<“* 0.退出系统并保存文件。*”<< endl
77. <<“* 1.添加联系人。*”<< endl
78. <<“* 2.删除一个或者多个联系人。*”<< endl
79. <<“* 3.修改联系人的信息。*”<< endl
80. << * * 4.查询联系人信息。*“<< endl
81. <<“* 5.浏览所有联系人的信息。*”<< endl
82. << * * 6.对联系人信息进行复制。*“<< endl
83. <<“* 7.对联系人信息进行移动。*”<< endl
84. <<“* 8.修改默认存储容量。(初始为手机200,卡2000)*”<< endl
85. << * *注意:*“<< endl
86. << * * $通讯录文件会在回主菜单的时候自动保存*“<< endl
87. << * *请不要乱输入空格*“<< endl
88. <<“********************************************* **********“<< ENDL;
89. cout <<“请输入你的选择:”<< endl <<“--->”;
90.}
91. voidMenu :: addmenu()
92. {
93. cout <<“******************************************** ***********“<< ENDL
94. <<“*请选择增加联系人到哪个通讯录:*”<< endl
95. <<“* 1.手机通讯录。*”<< endl
96. <<“* 2.手机卡通讯录。*”<< endl
97. <<“********************************************* **********“<< ENDL;
98. cout <<“请输入你的选择:”<< endl <<“--->”;
99.}
100. voidMenu :: remove1menu()
101. {
102. cout <<“******************************************** ***********“<< ENDL
103. <<“* -------------------------------------------- ------------------- *“<< ENDL
104. <<“*请选择在哪个通讯录删除联系人:*”<< endl
105. << * * 1.手机通讯录(删除名字下的全部记录)。*“<< endl
106. <<“* 2.手机卡通讯录。(删除名字下的全部记录)。*”<< endl
107. <<“* 3.手机通讯录。(删除名字下的某条记录)。*”<< endl
108. <<“* 4.手机卡通讯录。(删除名字下的某条记录)。*”<< endl
109. <<“* 5.两个通讯录都进行名字清空(抹消该名字的全部记录)*”<< endl
110. <<“* 6.清空手机卡通讯录。*”<< endl
111. <<“* 7.清空手机通讯录*”<< endl
112. <<“* 8.清除所有记录*”<< endl
113. <<“********************************************* **********“<< ENDL;
114. cout <<“请输入你的选择:”<< endl <<“--->”<< endl;
115.}
116. voidMenu :: copy()
117. {
118. cout <<“******************************************** ***********“<< ENDL
119. <<“*请选择复制模式?*”<< endl
120. <<“* 1.将一个人从手机复制到卡。*”<< endl
121. <<“* 2.将一个人从卡复制到手机。*”<< endl
122. <<“* 3.将同个人名的所有记录从手机复制到卡。*”<< endl
123. <<“* 4.将同个人名的某条记录从卡复制到手机。*”<< endl
124. << * * 5.将手机中的全部信息复制到卡。*“<< endl
125. <<“* 6.将卡中所有信息复制到手机。*”<< endl
126. <<“*选项外按键返回。*”<< endl
127. <<“********************************************* **********“<< ENDL;
128. cout <<“请输入你的选择:”<< endl <<“--->”;
129.}
130. voidMenu :: move()
131. {
132. cout <<“******************************************** ***********“<< ENDL
133. <<“*请选择移动模式?*”<< endl
134. <<“* 1.将一个人从手机移动到卡。*”<< endl
135. <<“* 2.将一个人从卡移动到手机。*”<< endl
136. <<“* 3.将同个人名的所有记录从手机移动到卡。*”<< endl
137. <<“* 4.将同个人名的某条记录从卡移动到手机。*”<< endl
138. << * * 5.将手机中的全部信息移动到卡。*“<< endl
139. <<“* 6.将卡中所有信息移动到手机。*”<< endl
140. <<“*选项外按键返回。*”<< endl
141. <<“********************************************* **********“<< ENDL;
142. cout <<“请输入你的选择:”<< endl <<“--->”;
143.}
144. voidMenu :: changemenu()
145. {
143. cout <<“******************************************** ***********“<< ENDL
147. <<“*请选择在哪个通讯录中修改联系人:*”<< endl
148. <<“* 1.手机通讯录。*”<< endl
149. <<“* 2.手机卡通讯录。*”<< endl
150. <<“*选项外按键返回。*”<< endl
151. <<“********************************************* **********“<< ENDL;
152. cout <<“请输入你的选择:”<< endl <<“--->”;
153.}
154. voidMenu :: lookmenu()
155. {
156. cout <<“******************************************** ***********“<< ENDL
157. <<“*请选择在哪个通讯录中查询:*”<< endl
158. <<“* 1.手机通讯录。*”<< endl
159. << * *手机卡通讯录。*“<< endl
160. <<“*选项外按键返回。*”<< endl
161. <<“********************************************* **********“<< ENDL;
163. cout <<“请输入你的选择:”<< endl <<“--->”;
163.}
164. voidMenu :: displaymenu()
165. {
163. cout <<“******************************************** **********************“<< ENDL
167. <<“*请选择展示哪个通讯录*”<< endl
168. <<“* 1.全部展示。*”<< endl
169. << * *手机通讯录。*“<< endl
170. <<“* 3.手机卡通讯录。*”<< endl
171. <<“*选项外按键返回。*”<< endl
172. <<“********************************************* **********“<< ENDL;
173. cout <<“请输入你的选择:”<< endl <<“--->”;
174.}
voidMenu :: displaymenu1()
176. {
177. cout <<“******************************************** ***********“<< ENDL
178. <<“*手机通讯录*”<< endl
179.“”********************************************* **********“<< ENDL;
180.}
181. voidMenu :: displaymenu2()
182. {
183. cout <<“******************************************** ***********“<< ENDL
184. << *手机卡通讯录* << << endl
185. <<“********************************************* **********“<< ENDL;
186.}
187. voidMenu :: modify()
188. {
189. cout <<“******************************************** ***********“<< ENDL
190. <<“*你想要修改什么信息?*”<< endl
191. <<“* 1.姓名。*”<< endl
192. <<“* 2.电话号码。*”<< endl
193. <<“* 3.返回。*”<< endl
194. <<“********************************************* **********“<< ENDL;
193. cout <<“请输入你的选择:”<< endl <<“--->”;
196.}
197. voidMenu :: menumodifymax()
198. {
199. cout <<“******************************************** ***********“<< ENDL
200. <<“*你想修改手机还是卡的最大容量?(慎重改动)*”<< endl
201. <<“* 1.手机*”<< endl
202. <<“* 2.卡*”<< endl
203. <<“* 3.全部*”<< endl
204. <<"*****************************************************************"<<endl;
205. cout<<"请输入你的选择:"<<endl<<"--->";
206. }
207. voidMenu::Phone_contact_per_modify()
208. {
209. cout<<"*****************************************************************"<<endl
210. <<"* 你想修改哪部分信息? *"<<endl
211. <<"* 1.姓名. *"<<endl
212. <<"* 2.电话号码. *"<<endl
213. <<"* 3.全部. *"<<endl
214. <<“* 4.返回。*”<< endl
215. <<“********************************************* **********“<< ENDL;
216. cout <<“请输入你的选择:”<< endl <<“--->”;
217.}
voidMenu :: Mobile_phone_contacts_per_modify()
219. {
220. cout <<“******************************************** ***********“<< ENDL
221. <<“*你想修改哪部分信息?*”<< endl
222. <<“* 1.姓名。*”<< endl
223. <<“* 2.电话号码。*”<< endl
224. <<“* 3.地址。*”<< endl
225. <<“* 4.QQ号*”<< endl
226. <<“* 5.全部。*”<< endl
227. <<“* 6.返回。*”<< endl
228. <<“********************************************* **********“<< ENDL;
223. cout <<“请输入你的选择:”<< endl <<“--->”;
230.}
231. voidMenu :: user_return()
232. {
233. cout <<“******************************************** ***********“<< ENDL
234. <<“*操作已经完成,请选择接下来的操作*”<< endl
235. <<“* 1.返回主菜单*”<< endl
236. <<“* 2.返回上一级*”<< endl
237. <<“* 3.退出系统并保存所有数据*”<< endl
238. <<“********************************************* **********“<< ENDL;
239.}
240. voidMenu :: sd_read_success()
241. {
243. cout <<“******************************************** ***********“<< ENDL
243. <<“*本地手机卡通讯录同步成功*”<< endl
244. <<"*****************************************************************"<<endl;
245. }
246. voidMenu::sd_read_fail()
247. {
248. cout<<"*****************************************************************"<<endl
249. <<"* Warning:本地手机卡通讯录同步失败 *"<<endl
250. <<"*****************************************************************"<<endl;
251. }
252. voidMenu::sd_write_success()
253. {
254. cout<<"*****************************************************************"<<endl
255. <<"* 本地手机卡通讯录保存成功 *"<<endl
256. <<“********************************************* **********“<< ENDL;
257.}
258. voidMenu :: sd_write_fail()
259. {
260. cout <<“******************************************** ***********“<< ENDL
261. <<“*警告:本地手机卡通讯录保存失败*”<< endl
262. <<“********************************************* **********“<< ENDL;
263.}
voidMenu :: phone_read_success()
265. {
263. cout <<“******************************************** ***********“<< ENDL
267. << *本地手机通讯录同步成功*“<< endl
268. <<“********************************************* **********“<< ENDL;
269.}
270. voidMenu :: phone_read_fail()
271. {
273. cout <<“******************************************** ***********“<< ENDL
273. << *警告:本地手机通讯录同步失败*“<< endl
274.“”********************************************* **********“<< ENDL;
275.}
voidMenu :: phone_write_success()
277. {
273. cout <<“******************************************** ***********“<< ENDL
279. << *本地手机通讯录保存成功*“<< endl
280. <<“********************************************* **********“<< ENDL;
281.}
voidMenu :: phone_write_fail()
283. {
284. cout <<“******************************************** ***********“<< ENDL
285. <<“*警告:本地手机通讯录保存失败*”<< endl
286. <<“********************************************* **********“<< ENDL;
287.}
288。
289. #endif
(2)主源代码.cpp接口层
1. #include“contact_per.h”
2. #include“menu.h”
3. #include“oper.h”
4. #include“database.h”
5. intmain()
6. {
7. menu.description();
8.用户yuheng;
9. char choosee;
10. mainmenu://返回主菜单
11. yuheng.menu.mainmenu();
12. mainmenu1:
13. while(true)
14. {
15. cin >> choosee;
16. while(true)//返回上一级
17. {
18. lastmenu:
19.开关(选择)
20. {
21.案例'0':
22. return 0;
23.案例'1':
24. yuheng.add();
25. menu.user_return();
26. cin >> return_choice;
27.开关(return_choice)
28. {
29. case'1':yuheng.store(); gotomainmenu; //返回主菜单
30. case'2':gotolastmenu; //返回上一级菜单
31. case'3':return0; //退出程序
32.默认:
33. {
34. cout <<“输入错误,返回主菜单”<< endl;
35. gotomainmenu;
36.}
37.}
打破;
39.案例'2':
40。
41. yuheng.del();
42. menu.user_return();
43. cin >> return_choice;
44.开关(return_choice)
45. {
46. case'1':yuheng.store(); goto mainmenu; //返回主菜单
47. case'2':gotolastmenu; //返回上一级菜单
48. case'3':return 0; //退出程序
49.默认:
50. {
51. cout <<“输入错误,返回主菜单”<< endl;
52. gotomainmenu;
53.}
54.}
55.休息;
56.案例'3':
57. yuheng.modify();
58. menu.user_return();
59. cin >> return_choice;
60.开关(return_choice)
61. {
62. case'1':yuheng.store(); goto mainmenu; //返回主菜单
63. case'2':gotolastmenu; //返回上一级菜单
64. case'3':return0; //退出程序
65.默认:
66. {
67. cout <<“输入错误,返回主菜单”<< endl;
68. gotomainmenu;
69.}
70.}
休息
72.案例'4':
73. yuheng.look();
74. menu.user_return();
cin >> return_choice;
76. switch(return_choice)
77. {
78. case'1':yuheng.store(); goto mainmenu; //返回主菜单
79. case'2':gotolastmenu; //返回上一级菜单
80. case'3':return0; //退出程序
81.默认:
82. {
83. cout <<“输入错误,返回主菜单”<< endl;
84. gotomainmenu;
85.}
86.}
休息;
88.案例'5':
89. yuheng.display();
90. menu.user_return();
cin >> return_choice;
92. switch(return_choice)
93. {
94. case'1':yuheng.store(); goto mainmenu; //返回主菜单
95. case'2':gotolastmenu; //返回上一级菜单
96. case'3':return 0; //退出程序
97.默认:
98. {
99. cout <<“输入错误,返回主菜单”<< endl;
100. goto mainmenu;
101.}
102.}
休息
104.案例'6':
105. menu.copy();
106. cin >>回答;
107.切换(回答)
108. {
109. case'1':yuheng.copyToSD_one(); break;
110. case'2':yuheng.copyToPhone_one(); break;
111. case'3':yuheng.copyToSD_one(); break;
112. case'4':yuheng.copyToPhone_one(); break;
113. case'5':yuheng.copyToSD(); break;
114. case'6':yuheng.copyToPhone(); break;
115.默认:
116. {
117. cout <<“输入错误,返回主菜单”<< endl;
118. gotomainmenu;
119.}
120.}
121. menu.user_return();
cin >> return_choice;
123.开关(return_choice)
124. {
125. case'1':yuheng.store(); goto mainmenu; //返回主菜单
126. case'2':gotolastmenu; //返回上一级菜单
127. case'3':return0; //退出程序
128.默认值:
129. {
130. cout <<“输入错误,返回主菜单”<< endl;
131. gotomainmenu;
132.}
133.}
打破
135.案例'7':
menu.move();
cin >>回答;
138.切换(回答)
139. {
140. case'1':yuheng.moveToSD_one(); break;
141. case'2':yuheng.moveToPhone_one(); break;
142. case'3':yuheng.moveToSD_per(); break;
143. case'4':yuheng.moveToPhone_per(); break;
144. case'5':yuheng.moveToSD(); break;
145. case'6':yuheng.moveToPhone(); break;
默认:
147. {
143. cout <<“输入错误,返回主菜单”<< endl;
149. gotomainmenu;
150.}
151.}
menu.user_return();
cin >> return_choice;
154. switch(return_choice)
155. {
156. case'1':yuheng.store(); goto mainmenu; //返回主菜单
157. case'2':gotolastmenu; //返回上一级菜单
158. case'3':return0; //退出程序
159.默认:
160. {
161. cout <<“输入错误,返回主菜单”<< endl;
162. gotomainmenu;
163.}
164.}
打破;
166.案例'8':
167. {
yuheng.modifymax();
menu.user_return();
cin >> return_choice;
171. switch(return_choice)
172. {
173. case'1':yuheng.store(); goto mainmenu; //返回主菜单
174. case'2':goto lastmenu; //返回上一级菜单
case'3':return 0; //退出程序
默认:
177. {
173. cout <<“输入错误,返回主菜单”<< endl;
179. goto mainmenu;
180.}
181.}
打破
183.}默认:
184. {
183. cout <<“输入错误,请重新输入”<< endl;
186. gotomainmenu1;
187.}
188.}
189。
190.}
191.}
192. return 0;
193.}
参考文献
“C ++ STL标准模板库”
“计算机网络”