背景:
使用C++编写一个个人通信录管理系统,来完成作业上的一些需求。
1-提供录入个人信息、修改个人信息(姓名和出生日期除外)、删除个人信息等编辑功能
2-提供按姓名查询个人信息的功能
3-提供查找在5天之内过生日的人员的信息,以便发出祝贺电话或 E_mail
4-按照姓名或出生日期排序,显示输出【这里我们选择使用出生日期】
5-统计在给定月份出生的人数,并显示输出
6-能列出全体人员的姓名、出生日期、电话和email地址
7-能分别列出同学、同事、朋友、亲戚的所有信息
8-用菜单形式提供程序的各种功能的选择
提示:(1)将同学、同事、朋友和亲戚的信息分别存入通信录文件 AddressBook1.txt ,AddressBook2.txt,AddressBook3.txt和AddressBook4.txt中。文件中除了包含每人的姓名、出生日期、电话和 Email地址等信息外,对同学还要包含一起上学的学校名称,对同事还要包含共事的单位名称,对朋友还要包含认识的地点,对亲戚包含称呼。其中姓名用汉语拼音或英文表示。(2)在查出的5天内过生日的人员信息中,要包括该日期是星期几的信息。例如:3月21日(星期四) 哥哥:张晓阳 Tel: 39380285, Email:zxy@163.com(3)能够自动生成祝贺生日的电子邮件的文本文件,文件由被祝贺人姓名和祝贺词等组成。其内容为:【这看起来还要单独生成文件- -~~】--这俩是一起的!!! 被祝贺人姓名:祝生日快乐,健康幸福。 祝贺人姓名
效果:
主菜单
录入联系人
查看所有联系人
修改联系人
删除联系人
按姓名查询
五天内生日联系人
按出生日期排序
根据月份查询联系人
根据同学-同事-朋友-亲戚分组查看
退出系统
主要代码:
本系统ide为vision studio2020,如果是vision studio,基本都能运行
vx-zew1040994588主菜单cout << "\t\t\t\t**************************************************" << endl;cout << "\t\t\t\t*****个人通讯录软件 *****" << endl;cout << "\t\t\t\t*****========================================*****" << endl;cout << "\t\t\t\t***** 1.录入联系人信息*****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 2.修改联系人信息*****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 3.删除联系人*****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 4.查询联系人*****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 5.显示所有联系人*****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 6.查询最近五天生日联系人 *****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 7.查询给定月份生日人数 *****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 8.按出生日期排序*****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 9.分组查询*****" << endl;cout << "\t\t\t\t**********" << endl;cout << "\t\t\t\t***** 0.退出通讯录*****" << endl;cout << "\t\t\t\t**************************************************" << endl;
vx-zew1040994588void birthday_sort() {//默认值赋为-1,默认他通信录数据不超过100条time_t a[100] = {0};int flag = 0;int h = 1;int n = 1;class Person* p1;p1 = new Person;p1 = head->next;do{//给数组赋时间戳的值a[++flag] = p1->birthday_number;p1 = p1->next;n++;} while (p1 != NULL);/*时间戳越大越年轻,那么我们需要先输出时间戳小的那一方,用逆冒泡无问题n多了一个!!!!*/for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - 1 - i; j++){if (a[j] < a[j + 1])//降序排序就用: < {time_t temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}//for (int i = 0; i < n - 1; i++) {//cout << a[i] <<endl;//}for (int i = 0; i next;do{if (p3->birthday_number == a[i]) {cout << "该联系人的姓名为:" <name << endl;cout << "该联系人的出生日期为:" <birthday_str << endl;cout << "该联系人的电话号为:" <mobile << endl;cout << "该联系人email地址为:" <address <relationship == 1)cout << "该联系人是:同学" <relationship == 2)cout << "该联系人是:同事" <relationship == 3)cout << "该名联系人是:朋友" <relationship == 4)cout << "该名联系人是:亲戚" << endl;cout << "该联系人的联系提示为:" <tip <next;} while (p3 != NULL);}}