C++个人通信录系统

news2024/11/28 9:25:58

背景:

使用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/664651.html

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

相关文章

Gof23设计模式之工厂方法模式和抽象工厂模式

在java中&#xff0c;万物皆对象&#xff0c;这些对象都需要创建&#xff0c;如果创建的时候直接new该对象&#xff0c;就会对该对象耦合严重&#xff0c;假如我们要更换对象&#xff0c;所有new对象的地方都需要修改一遍&#xff0c;这显然违背了软件设计的开闭原则。 如果我们…

机器学习之K-Means(k均值)算法

1 K-Means介绍 K-Means算法又称K均值算法&#xff0c;属于聚类&#xff08;clustering&#xff09;算法的一种&#xff0c;是应用最广泛的聚类算法之一。所谓聚类&#xff0c;即根据相似性原则&#xff0c;将具有较高相似度的数据对象划分至同一类簇&#xff0c;将具有较高相异…

NDK使用LLVM编译Boost库给Android使用

1.下载boost库 ​ wget https://boostorg.jfrog.io/artifactory/main/release/1.71.0/source/boost_1_71_0.tar.gz​ 选择1.71.0版本 NDK版本19 ,ANDROID版本 24 进入然后后的目录 (不指定平台 默认为当前系统平台) ./bootstrap.sh --prefix=./android_build --libdir=.…

Java---阶段项目----五子棋

Java---阶段项目----五子棋 需求说明技术实现棋盘制作完整代码 需求说明 五子棋棋盘为一个1010的方格&#xff0c;五子棋玩家共为两个(A,B)&#xff0c;A在棋盘上落子后&#xff0c;B再落子&#xff0c;依次往复&#xff0c;直到一方胜利或者棋盘空间用完为止&#xff0c;判断…

StarCCM+ 命令行运行(Windows)

添加环境变量 找到启动程序的位置。找到当初安装starccm的文件夹&#xff0c;一般就是 Siemens 文件夹&#xff0c;进入会看到各版本的安装文件夹&#xff08;如果你没有安装多个版本则只有一个&#xff09;&#xff0c;然后参考下面我的路径找到相应的文件夹。在bin文件夹内可…

【openGauss简单使用---快速入门】

【openGauss简单使用---快速入门】 &#x1f53b; 一、openGauss使用&#x1f530; 1.1 连接openGauss&#x1f530; 1.2 创建数据库用户和授权&#x1f530; 1.3 创建数据库&#x1f530; 1.4 创建SCHEMA&#x1f530; 1.5 创建表 &#x1f53b; 二、总结—温故知新 &#x1f…

信息系统之网络安全方案 — “3保1评”

信息系统之网络安全方案 — “3保1评” 序&#xff1a;什么是“3评1保”&#xff1f;一、网络安全等级保护1.1 概念1.2等保发展1.3法律要求1.4分级及工作流程 二、涉密信息系统分级保护2.1概念2.2法律要求2.3分级及工作流程 三、关键信息基础设施保护3.1概念3.2关保的发展3.3法…

建立和使用Python自定义模块:打包+pip安装

文章目录 &#xff08;零&#xff09;拷目录-无法卸载&#xff08;一&#xff09;打包结构&#xff08;1.1&#xff09;__init__.py&#xff08;1.2&#xff09;setup.py &#xff08;二&#xff09;开始打包&#xff08;2.1&#xff09;命令出错&#xff1f; &#xff08;三&a…

构建高可用、高并发和高性能的微服务系统(Spring Cloud实现)

目前Java都在流行一个说词&#xff1a;高并发。 反正不管是不是&#xff0c;反正就是高并发。 谈高并发&#xff0c;我们需要知道几个名词&#xff1a; -响应时间(Response Time&#xff0c;RT)-吞吐量(Throughput)-每秒查询率QPS(Query Per Second)-每秒事务处理量TPS(Transa…

SuiteQlet Bundle

Content​​​​​​​ 1. Foreword 2. Overview 2.1 Glossary 2.2 Features 2.3 Design Description 3. Install 4. Setup 5. Instruction 5.1 Query 5.2 Chart 5.3 Publish Dashboard 6. Note 7. Video Link 1. Foreword SuiteQL is a powerful tool for data q…

python 第八章 集合set {}

系列文章目录 第一章 初识python 第二章 变量 第三章 基础语句 第四章 字符串str 第五章 列表list [] 第六章 元组tuple ( ) 第七章 字典dict {} 文章目录 8.1 创建集合8.2集合常见操作方法增加数据删除数据查找数据 8.1 创建集合 创建集合使用 { } 或 set()&#xff0c;但是如…

【MySQL】增删查改基础

目录 一、Create(创建) 1、insert(插入) 1.1单行数据插入 1.2多行数据插入 1.3插入或者替换更新 2、replace(替换) 二、Retrieve(读取) 1、select 1.1全列查询 1.2指定列查询利用selsct计算表达式 1.3筛选结果去重 2、where 2.1运算符 2.2找到英语小于60分的同学…

RFID课程要点总结_4 Tag Identification Protocol

4. Tag Identification Protocol Checksum procedure: parity checks, LRC, CRC 奇偶校验不多说&#xff0c;查1的个数&#xff0c;poor error recognition。电路通过所有位异或是偶校验&#xff0c;结果为1说明有错误&#xff1b;再取反是奇校验。 LRC longitudinal redund…

02 React组件、React组件实例的三大核心属性

总结 一、React组件 1.1 函数组件 定义 要求组件名称的首字母需要大写 function 组件名称(){ // 返回一段jsx的视图结构 return <div></div> }调用 <组件名称></组件名称> 或 <组件名称 /> 组件名首字母必须大写. 因为react以此来区分组件元…

一、动画 - 过渡效果transition

内容目录&#xff1a; 过渡动画&#xff1b;过渡动画的属性&#xff1b; 一、过渡动画 过渡&#xff08;transition&#xff09;作用&#xff1a;- 通过过渡可以指定一个属性发生变化时的切换方式- 通过过渡可以创建一些非常好的效果&#xff0c;提升用户的体验现在我们通过一…

nginx的操作手册和nginx的升级

总结 目录 一首先关闭防火墙和下载nginx包 1.安装依赖包 2.创建运行用户与组 3.进入nginx的目录下进行编译安装 4. 编译和编译安装 5.让系统识别nginx的操作命令 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 6.添加nginx系统服务把nginx服务加入到…

Idea+maven+springboot项目搭建系列--3 整合阿里云Canal完成Mysql数据的监听

前言&#xff1a;在搭建canal 服务之后&#xff0c;项目中就可以连接canal &#xff0c;完成对感兴趣的数据库及其表中数据的变动完成监听&#xff0c;本文依赖于你已经完成了对canal 服务的搭建工作&#xff1b; 1 Cannal 特点&#xff1a; Canal是阿里巴巴开源的一款基于My…

Spring Boot实战:拦截器和监听器的应用指南

当使用Spring Boot时&#xff0c;我们可以通过拦截器&#xff08;Interceptor&#xff09;和监听器&#xff08;Listener&#xff09;来实现对请求和响应的处理。拦截器和监听器提供了一种可插拔的机制&#xff0c;用于在请求处理过程中进行自定义操作&#xff0c;例如记录日志…

使用自动化测试获取手机短信验证码

目前在职测试开发,,写一些脚本,个人认为这职业不科学不应该有的职业,测试就是测试,开发就是开发,运维还是老鸟,这行业总能折腾些莫名其妙的东西出来,刚做这行时学的第一门语言是bash shell, 去新去单位上班直接写了个一键搭建测试环境的测试脚本,本来不想干测试了,好好做微信小…

Linux 学习记录36(C高级篇)

Linux 学习记录36(C高级篇) 本文目录 Linux 学习记录36(C高级篇)一、文件相关指令1. chmod 修改文件用户权限(1. 权限字母表示法(2. 权限8进制表示法 2. 修改文件所属组(1. chgrp(2. chown 能够同时修改多个(3. 创建链接文件>1 ln创建硬链接文件>2 ln -s 创建软链接文件 …