c++通讯录管理系统

news2024/11/15 4:38:33

在这里插入图片描述

结构体1,知识点(结构体),存放人员详情,名字,性别,年龄等

struct person
{
string m_name;
int m_sex;
int m_age;
string m_phone;
string m_addr;
};

结构体2,知识点 (结构体数组),存放人员数量和人员数组

struct addressbooks
{
struct person personarray[MAX];
int m_size;
};

上面两个结构体存放我们的数据,我们基于这两个结构体操作

菜单界面,用于输入提示

void showMenu()
{
	cout << "*****1.添加联系人*****" << endl;
	cout << "*****2.显示联系人*****" << endl;
	cout << "*****3.删除联系人*****" << endl;
	cout << "*****4.查找联系人*****" << endl;
	cout << "*****5.修改联系人*****" << endl;
	cout << "*****6.清空联系人*****" << endl;
	cout << "*****7.退出通讯录*****" << endl;
}

主函数循环测试输入并跳转函数

知识点,cin输入,switch选择

在这里插入图片描述

增删改查之添加

判断人数是否满,满了直接退出

人数没有满通过结构体2抽象出人员表进行添加操作

知识点->结构体指针访问 .结构体访问

a->b[人员数量].具体参数

完了之后人员数要+1防止数据覆盖

void addperson(addressbooks *abs)
{
	if(abs->m_size==MAX)
	{
		cout <<"通讯录已满,不能再添加!" <<endl;
		return;
	}
	else
	{
		//姓名输入
		string name;
		cout << "请输入姓名"<< endl;
		cin >>name;
		abs->personarray[abs->m_size].m_name=name;
		//性别输入
		int sex=0;
		cout << "请输入性别"<< endl;
		cout << "输入1为男"<< endl;
		cout << "输入2为女"<< endl;
		while (true)
		{
        cin >> sex;
		if(sex==1||sex==2)
		{
		abs->personarray[abs->m_size].m_sex=sex;
		break;
		}
		else
		{
		cout <<"输入错误,请重新输入" << endl;
		break;		
		}

		}
		
		//年龄输入
		int age=0;
		cout << "请输入年龄"<< endl;
		cin >>age;
		if( age>=0 && age<=150 )
		abs->personarray[abs->m_size].m_age=age;
		else
        cout << "你不是地球人"<< endl;

		//电话输入
		string phone;
		cout << "请输你的电话号码"<< endl;
		cin >> phone;
		abs->personarray[abs->m_size].m_phone=phone;

		//地址输入
		string address;
		cout << "请输你的住址"<< endl;
		cin >> address;
		abs->personarray[abs->m_size].m_addr=address;

		//更新通讯录人数
		abs->m_size++;

		cout << "添加成功" << endl;
		system("pause");
        system("cls");		
	}
}

增删改查之删除

输入字符串通过isExist查找返回结构体数组下标

然后把结构体数组地址全部前移

人员总数减去1

isExist函数本体在下面

//删除指定联系人
void deletePerson(addressbooks *abs)
{

	cout << "请输入您要删除的联系人"  << endl;
	string name;
	cin >> name;
	int ret =isExist(abs,name);
	if(ret!=-1)
	{
		for(int i=ret;i<abs->m_size;i++)
		{
			abs->personarray[i]=abs->personarray[i+1];
		}
		abs->m_size--;//更新人员数
		cout << "删除成功" << endl;
	}
	else
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");

}

isExist函数本体

遍历数组,对照结构体1的名字成员,返回下标

int isExist(addressbooks * abs,string name)
{
	for(int i=0; i <abs->m_size; i++)
	{
		if(abs->personarray[i].m_name==name)
		{
			return i;
		}
	}
	return -1;
}

增删改查之修改(看源码理解,没有新知识点)

void revampPerson(addressbooks* abs)
{
cout << "请输入您要修改的联系人"  << endl;
string name;
cin >> name;
int ret =isExist(abs,name);
if(ret!=-1)
{       
	    cout <<"新名字修改为"<< endl;
	    string new_name;
        cin >> new_name;
		abs->personarray[ret].m_name=new_name;

	    cout <<"性别修改为"<< endl;
		int new_sex;
        cin >> new_sex;
		abs->personarray[ret].m_sex=new_sex;

	    cout <<"年龄修改为"<< endl;
		int new_age;
        cin >> new_age;
		abs->personarray[ret].m_age=new_age;

	    cout <<"家庭住址修改为"<< endl;
		string new_addr;
        cin >> new_addr;
		abs->personarray[ret].m_addr=new_addr;

	    cout <<"电话修改为"<< endl;
		string new_phone;
        cin >> new_phone;
		abs->personarray[ret].m_phone=new_phone;		
}
else
{
		cout << "查无此人" << endl;
}
	    system("pause");
	    system("cls");
}

增删改查之总体查询(看源码理解,没有新知识点)

void showPerson(addressbooks * abs)
{
	if(abs->m_size==0)
	{
	 cout << "记录为空" << endl;
	}	
	else
		for(int i=0;i<abs->m_size;i++)
		{
			cout <<"姓名"<<abs->personarray[i].m_name<<"\t";
			cout <<"性别"<<(abs->personarray[i].m_sex==1 ? "男":"女")<<"\t";
			cout <<"年龄"<<abs->personarray[i].m_age<<"\t";
			cout <<"电话"<<abs->personarray[i].m_phone<<"\t";
			cout <<"住址"<<abs->personarray[i].m_addr<<endl;
			cout<<endl;
			cout<<endl;
		}
		system("pause");
		system("cls");
}

增删改查之单独查询(看源码理解,没有新知识点)

void findPerson(addressbooks* abs)
{
	string name;
	cout <<"请输入你要查找的联系人名字"<<endl;
	cin >> name;
    int ret =isExist(abs,name);
    if(ret!=-1)
	{
		cout<<"名字 : "<<abs->personarray[ret].m_name<<"\t";
		cout<<"年龄 : "<<abs->personarray[ret].m_age<<"\t";
		cout<<"住址 : "<<abs->personarray[ret].m_addr<<"\t";
		cout<<"电话 : "<<abs->personarray[ret].m_phone<<"\t";
		cout<<"性别 : "<<(abs->personarray[ret].m_sex==1?"男":"女")<<endl;
	}
else
{
	 cout << "查无此人" << endl;
}
	 system("pause");
	 system("cls");

}

学习记录,源码评论区获取

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

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

相关文章

狗厂的N+1+2毕业,我觉得还是挺良心的

最近又跟朋友打听到了新鲜事&#xff0c;年底的新鲜事&#xff0c;什么209万&#xff0c;就是听个乐子&#xff0c;离我太远&#xff0c;什么HR和技术人员产生矛盾&#xff0c;一巴掌眼镜都打飞了&#xff0c;好乱套&#xff0c;今天我跟朋友打听了一些不太乱套的 一、鹅肠 1.…

Quartz认知篇 - 初识分布式任务调度Quartz

定时任务的使用场景 在遇到如下几种场景可以考虑使用定时任务来解决&#xff1a; 某个时刻或者时间间隔执行任务 批量数据进行处理 对两个动作进行解耦 Quartz 介绍 Quartz 是一个特性丰富的、开源的任务调度库&#xff0c;几乎可以嵌入所有的 Java 程序&#xff0c;包括很…

基于二叉树的改进SPIHT算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

电脑怎么设置动态壁纸?关于Windows和Mac壁纸的设置方法

为了让电脑桌面更加美观舒适&#xff0c;很多人都会给电脑的桌面设置自己喜欢的壁纸。图片壁纸很多人都会设置&#xff0c;但是电脑怎么设置动态壁纸&#xff1f;这是很多人的困扰。其实方法同样很简单&#xff0c;下面有关于Windows和Mac动态壁纸的设置方法&#xff0c;一起来…

【阶段四】Python深度学习03篇:深度学习基础知识:神经网络可调超参数:激活函数、损失函数与评估指标

本篇的思维导图: 神经网络可调超参数:激活函数 神经网络中的激活函数(有时也叫激励函数)。 在逻辑回归中,输入的特征通过加权、求和后,还将通过一个Sigmoid逻辑函数将线性回归值压缩至[0,1]区间,以体现分类概率值。这个逻辑函数在神经网络中被称为…

PyCharm调用远程Python解释器

PyCharm调用远程Python解释器 PyCharm中直接调用远程服务器中Python解释器&#xff1a; 本地不用搭建Python环境。既避免了本地使用Window而服务器使用Linux系统不统一情况&#xff0c;又不用担心本地调试没问题而放到服务器上就出现问题。 PyCharm中打开项目并设置Python解释…

封装chrome镜像

chrome镜像 selenium提供了一个镜像&#xff0c;但这个镜像里面包含了比较多的东西&#xff1a; 镜像地址-github supervisord java chrome webDriver 实际的使用中遇到了一些问题 chrome遇到一些比较耗费内存和cup的操作的时候&#xff0c;有的时候会kill掉java进程&a…

干货 | 大数据交易所数据安全流通体系标准化尝试

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分&#xff1a;国内大数据交易所发展现状第二部分&#xff1a;国外大数据交易模式及法律法规欧盟的数据交易模式是基于2022年5月16日所提出的《数据治理法案》&#xff0c;其中提出了数据中…

【C++11】—— 包装器

目录 一、function包装器 1. function包装器基本介绍 2. function包装器统一类型 3. function包装器的使用场景 二、bind包装器 一、function包装器 1. function包装器基本介绍 function包装器 也叫作适配器。C中的function本质是一个类模板&#xff0c;也是一个包装器…

第四章 基本数据

在第2章中&#xff0c;我们讨论了多种导入数据到R中的方法。遗憾的是&#xff0c;将你的数据表示为矩阵或数据框这样的矩形形式仅仅是数据准备的第一步。这里可以演绎Kirk船长在《星际迷航》“末日决战的滋味”一集中的台词&#xff08;这完全验明了我的极客基因&#xff09;&a…

聚观早报|春节档新片预售总票房破千万;苹果获可折叠iPhone新专利

今日要闻&#xff1a;比亚迪据称拟在越南建汽车零部件厂&#xff1b;2023 年春节档新片预售总票房破 7000 万&#xff1b;苹果获得可折叠 iPhone 新专利&#xff1b;北京汽车获1000台EU5 PLUS约旦订单&#xff1b;娃哈哈要解决100万农户农产品出路 比亚迪据称拟在越南建汽车零部…

C 语言目标文件

前言 一个 C 语言程序经编译器和汇编器生成可重定位目标文件&#xff0c;再经链接器生成可执行目标文件。那么目标文件中存放的是什么&#xff1f;我们的源代码在经编译以后又是怎么存储的&#xff1f; 文章为 《深入理解计算机系统》的读书笔记&#xff0c;更为详细的内容可…

【数据结构】双向链表

1.双向链表的结构2.双向链表的实现首先在VS里面的源文件建立test.c和List.c,在头文件里面建立List.hList.h:#pragma once #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef int LTDateType; typedef struct ListNode {LTDateType data;s…

LeetCode 329. 矩阵中的最长递增路径(C++)*

思路&#xff1a; 1.用动态规划&#xff0c;但是时间复杂度太高&#xff0c;效率太低 2.使用常规的DFS&#xff0c;时间复杂度高&#xff0c;包含了太多重复无效遍历&#xff0c;会超时 3.在DFS的基础上使用记忆化搜索&#xff0c;帮助消去重复的遍历&#xff0c;提高效率 原题…

解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常

目录 问题描述 报错信息 问题原因 如何解决 参考资料 问题描述 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的&#xff0c;因此&#xff0c;此网页稍后可能会恢复正常。 报错信息 今天使用Edge浏览器在访问一个平时常用的emoji网站时&#xff0c;…

springboot整合spring-security

在web开发中&#xff0c;安全性问题比较重要&#xff0c;一般会使用过滤器或者拦截器的方式对权限等进行验证过滤。此博客根据b站up主&#xff0c;使用demo示例进行展示spring-security的一些功能作用。 目 录 1、创建项目 2、编写controller 3、添加spring-security依赖 …

Spring Cloud OpenFeign 配置

最少的配置&#xff08;使用默认配置&#xff09; 最少/默认配置示例如下&#xff08;使用Nacos作为服务的注册与发现中心&#xff09;&#xff1a; application.properties server.port8082 spring.application.namenacos-consumer spring.cloud.nacos.discovery.server-ad…

[拆轮子] PaddleDetection中__shared__、__inject__ 和 from_config 三者分别做了什么

在上一篇中&#xff0c;PaddleDetection Register装饰器到底做了什么 https://blog.csdn.net/HaoZiHuang/article/details/128668393 已经介绍了 __shared__ 和 __inject__ 的作用: __inject__ 表示引入全局字典中已经封装好的模块。如loss等。__shared__为了实现一些参数的配…

excel函数技巧:函数TEXT七助数据大变身

如果函数有职业&#xff0c;那各函数的职业会是什么呢&#xff1f;别的先不说&#xff0c;就拿TEXT而言&#xff0c;它可以让日期变数字、数字变日期、阿拉伯数字变大写中文数字、金额元变万元&#xff0c;连IF的条件判断它也可以变出来…这简直就是当之无愧的变装女皇啊&#…

从0到1完成一个Node后端(express)项目(三、写接口、发起请求)

往期 从0到1完成一个Node后端&#xff08;express&#xff09;项目&#xff08;一、初始化项目、安装nodemon&#xff09; 从0到1完成一个Node后端&#xff08;express&#xff09;项目&#xff08;二、下载数据库、navicat、express连接数据库&#xff09; 写接口 我们看ex…