C++课程设计 STL通讯录管理系统

课程设计报告

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标准模板库”

“计算机网络”

猜你喜欢

转载自blog.csdn.net/u011590573/article/details/80860874
今日推荐