C++个人通信录管理系统

news2024/11/26 21:37:04

背景:

使用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-zew1040994588
void 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 < n - 1; i++) {
		class Person* p3;
		p3 = new Person;
		p3 = head->next;
		do
		{
			if (p3->birthday_number == a[i]) {
				cout << "该联系人的姓名为:" << p3->name << endl;
				cout << "该联系人的出生日期为:" << p3->birthday_str << endl;
				cout << "该联系人的电话号为:" << p3->mobile << endl;
				cout << "该联系人email地址为:" << p3->address << endl;
				if (p3->relationship == 1)
					cout << "该联系人是:同学" << endl;
				else if (p3->relationship == 2)
					cout << "该联系人是:同事" << endl;
				else if (p3->relationship == 3)
					cout << "该名联系人是:朋友" << endl;
				else if (p3->relationship == 4)
					cout << "该名联系人是:亲戚" << endl;
				cout << "该联系人的联系提示为:" << p3->tip << endl;
				break;
			}
			p3 = p3->next;
		} while (p3 != NULL);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++初阶】C++STL详解(二)—— string类的模拟实现

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C初阶】…

Internet Relay Chat:mIRC 7.73 Crack

mIRC是一个流行的互联网中继聊天客户端&#xff0c;个人和组织使用它在世界各地的IRC网络上相互交流、共享、玩耍和工作。为互联网社区服务了20多年&#xff0c;mIRC已经发展成为一种强大、可靠和有趣的技术。 Latest News mIRC 7.73 has been released! (June 18th 2023) This…

Linux常用命令——fuser命令

在线Linux命令查询工具 fuser 使用文件或文件结构识别进程 补充说明 fuser命令用于报告进程使用的文件和网络套接字。fuser命令列出了本地进程的进程号&#xff0c;那些本地进程使用file&#xff0c;参数指定的本地或远程文件。对于阻塞特别设备&#xff0c;此命令列出了使…

【C语言复习】第六篇、关于C语言操作符的知识

目录 第一部分、常见操作符 第二部分、每个操作符的具体使用 1、算术操作符 1.1、除法运算符 / 1.2、取模运算符 % 2、移位操作符 2.1、左移 << 2.2、右移 >> 3、位操作符 3.1、按位异或的妙用 3.2、按位与的妙用 4、单目操作符 4.1、逻辑反操…

18-1降维与特征选择——偏最小二乘方法(附matlab程序)

1.简述 降维&#xff1a; 比如现在有100维的变量来表征一个东西&#xff0c;我们觉得太冗余复杂了&#xff0c;想降低到10维。但是我们没有确定的筛选依据&#xff0c;直接使用数学工具来实现降维&#xff0c;就好像丢进了一个黑箱&#xff0c;经过抽象、提炼&#xff0c;得到了…

【深度学习】3-3 神经网络的学习- 导数梯度

导数 导数就是表示某个瞬间的变化量&#xff0c;式子如下&#xff1a; 式子的左边&#xff0c;表示f(x)关于x的导数&#xff0c;即f(x)相对于x的变化程度。式子表示的导数的含义是&#xff0c;x的“微小变化”将导致函数f(x)的值在多大程度上发生变化。其中&#xff0c;表示…

AI绘画是什么?怎样提高AI绘画技巧

大家好&#xff0c;我是权知星球&#xff0c;今天跟大家探讨一下AI绘画是什么&#xff1f;怎样才能提高AI绘画技巧的问题。 随着人工智能技术的迅速发展&#xff0c;AI绘画已成为一项具有前瞻性的技术。在过去几年中&#xff0c;涌现出了许多功能强大的人工智能绘画工具&#x…

荣耀加冕!数据猿斩获三项大奖,彰显技术媒体硬实力!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 6月15日及6月16日&#xff0c;由数央网、数央公益联合国内众多媒体共同举办的2023国际绿色零碳节暨ESG领袖峰会、2023国际智造节暨硬科技峰会在北京举行。 该峰会旨在倡导全社会关注气候变化问题&#xff0c;积极采取行动&a…

TBarCode SDK:条码生成:11.15.1 Crack

TBarCode SDK&#xff1a;条码生成软件 TBarCode SDK 提供给 Microsoft Office 用户 和软件开发人员 条码打印。用这种 条码生成软件 您可以优良的品质的创建和打印所有用于工业和商业的 条码符号 。 最好的条码生成软件 TBarCode SDK 表示一个公知的集条形码创建组件集. 优秀…

Python爬虫需要那些步骤 ?

Python爬虫是一种自动化程序&#xff0c;可以通过网络爬取网页上的数据。Python爬虫可以用于各种用途&#xff0c;例如数据挖掘、搜索引擎优化、市场研究等。Python爬虫通常使用第三方库&#xff0c;例如BeautifulSoup、Scrapy、Requests等&#xff0c;这些库可以帮助开发者轻松…

Python面向对象编程2-面向过程的银行账号模拟程序 项目2.1 创建账号与存款

项目总目标&#xff1a;用面向过程思想设计一个简单的银行账号模拟程序。本次将迭代多个程序版本&#xff0c;每个版本都将添加更多功能。虽然这些程序没有达到发布的质量标准&#xff0c;但整个项目的目的是关注于代码如何与一个或多个银行账户的数据进行交互。 分析项目的必要…

<Linux> 基础IO

文章目录 文件操作基本概念当前路径文件打开方式"a""w""r" 文件描述符文件描述符fd是啥1. 为什么fd是从3开始&#xff0c;0&#xff0c;1&#xff0c;2呢&#xff1f;2. fd为什么是0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#…

Mockito单元测试基本使用

文章目录 1.为什么需要Mock2.Mockito 中常用方法2.1 Mock 方法2.2 对 Mock 出来的对象进行行为验证和Junit结果断言2.3 测试桩stub2.4 参数匹配器2.5 mock()与spy()2.6 InjectMocks 本文参考&#xff1a; 【码农教程】手把手教你Mockito的使用 - 掘金 (juejin.cn) java - doRet…

利用SD的插件从文本或者图片创建3D模型

利用SD的插件从文本或者图片创建3D模型 一个用于自动从文本或图像生成3D模型的稳定扩散WebUI的自定义扩展。 利用 OpenAl Shap-E 从文本或图像生成 3D 模型&#xff0c; GitHub项日地址: https://github.com/jtydhr88/sd-webui-txt-img-to-3d-model 安装步骤: 在扩展中心选…

Linux之LVM模式下LV和VG扩容

一、LVM简介 LVM (Logical Volume Manager) 是一个逻辑卷管理器&#xff0c;它允许用户将多个硬盘分区或者整个硬盘组成一个或多个逻辑卷。LVM 可以在运行时动态地改变逻辑卷的大小&#xff0c;而不需要关机或重新启动系统。它也可以将多个硬盘的存储空间组合在一起&#xff0c…

OpenGL视口学习

VC6新建一个openGL类型项目&#xff1b; 出现一些选项&#xff0c;默认后生成一个项目&#xff1b; VC6自带GL支持&#xff1b; 需要添加附加包含路径&#xff1b; 而后构建工程&#xff1b;运行如下&#xff1b; 是一个旋转的立方体&#xff1b; 生成的代码不是MFC的&#xff…

Python入门教程+项目实战-13.4节-程序实战-二分查找算法

目录 13.4.1 何为二分查找&#xff1f; 13.4.2 算法实现 13.4.3 系统学习python 13.4.1 何为二分查找&#xff1f; 我们已经学完了Python中的字典和集合&#xff0c;利用字典和集合就可以实现快速查找&#xff0c;非常方便。字典与集合使用了哈希表的索引结构来加快查找&am…

C++ 设计模式----“对象创建“模式

“对象创建”模式  通过“对象创建” 模式绕开new&#xff0c;来避免对象创建&#xff08;new&#xff09;过程中所导致的紧耦合&#xff08;依赖具体类&#xff09;&#xff0c;从而支持对象创建的稳定。它是接口抽象之后的第一步工作。  典型模式 • Factory Method •…

【Java】Java核心要点总结 68

文章目录 1. 为什么重写 equals() 时候必须重写 hashCode()2. 字符串常量池3. 字符串中的 intern() 方法4. try-catch-finally5. finally 中的代码不一定会执行 1. 为什么重写 equals() 时候必须重写 hashCode() 因为两个相等的对象的 hashCode 值必须是相等。也就是说如果 equ…