C++代码编程学习(1):简易通讯录的创建

news2024/9/27 9:30:08

2022年圣诞节到来啦,很高兴这次我们又能一起度过~
CSDN诚邀各位技术er分享关于圣诞节的各种技术创意,展现你与众不同的精彩!参与本次投稿即可获得【话题达人】勋章+【圣诞快乐】定制勋章(1年1次,错过要等下一年喔)!

一、前言

  好久没有写blog了,现在恢复写blog的进度,打算在过年前对自己所学的 深度学习 的相关经验进行一个详细的总结,关于深度学习的实现过程主要是在谷歌的colab上实现的,但自从10月份colab推出新的收费政策,我便打算开始自己配一张显卡跑程序了,这篇blog主要是对现阶段C++语言学习的一个总结,主要是开篇一些简单的编程代码,这次就简单介绍一个 通讯录的创建,我发现啊!不管学C语言还是C++语言,好像离不开这个 通讯录了,哈哈 头疼。

二、创意名

  在圣诞节过后,使用C++创建一个建议通讯录。(有点牵强…)

三、效果展示

  1. 添加联系人信息:姓名、性别、年龄、电话、地址
    在这里插入图片描述

  2. 显示已添加联系人信息
    在这里插入图片描述

  3. 查找联系人信息
    在这里插入图片描述

  4. 修改联系人信息
    在这里插入图片描述

四、实现步骤

  1. 先创建一个菜单,进行指令功能的设置;
  2. 之后注意编写每个子函数的内容(具体内容看代码)。

注意,C++代码编程的基本规则,小括号啊!花括号啊!分号啊!不要漏掉。

五、编码实现

#include <iostream>
#include <string>
using namespace std;
#define numMax 1000

// 用户人结构体
struct person {
// 姓名 性别 年龄 电话 地址
	string pName;
	// 1-男,2-女
	int pGender;
	int pAge;
	string pPhone;
	string pAddr;
};

// 通讯录结构体
struct contactList {
	struct person con[numMax];
	int pSize;
};

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

void addPerson(contactList * abs) {
	if (abs->pSize == numMax) {
		cout << "通讯录已满!" << endl;
		return;
	}
	else {
		//依次 姓名 性别 年龄 电话 地址
		cout << "请输入姓名:" << endl;
		string name;
		cin >> name;
		abs->con[abs->pSize].pName = name;

		cout << "请输入性别编号(1-男,2-女):" << endl;
		int  gender = 0;
		while (true) {
			cin >> gender;
			if (gender == 1 || gender == 2) {
				abs->con[abs->pSize].pGender = gender;
				break;
			}
		}

		//数据类型问题需要有一个声明确认 否则容易程序崩坏
		cout << "请输入年龄:" << endl;
		int age = 0;
		cin >> age;
		abs->con[abs->pSize].pAge = age;

		cout << "请输入电话:" << endl;
		string phone;
		cin >> phone;
		abs->con[abs->pSize].pPhone = phone;

		cout << "请输入地址:" << endl;
		string addr;
		cin >> addr;
		abs->con[abs->pSize].pAddr = addr;

		abs->pSize++;
		cout << "添加联系人成功!" << endl;
		system("pause");
		system("cls");

	}
}

void showPerson(contactList* abs) {
	if (abs->pSize == 0) {
		cout << "联系人列表为空!" << endl;
	}
	else {
		for (int i = 0; i < abs->pSize; i++) {
			// 对齐这里也有一个问题 需要注意 如果变量类型不确定
			// \t 的缩进功能不明显
			cout << "姓名:" << abs->con[i].pName << "\t";
			cout << "性别:" << (abs->con[i].pGender == 1 ? "男" : "女") << "\t";
			cout << "年龄:" << abs->con[i].pAge << "\t";
			cout << "电话:" << abs->con[i].pPhone << "\t";
			cout << "地址:" << abs->con[i].pAddr << endl;
		}
	}
	system("pause");
	system("cls");
}


int isExist(contactList* abs, string name) {
	for (int i = 0; i < abs->pSize; i++) {
		if (abs->con[i].pName == name) {
			return i;
		}
	}
	return -1;
}

void deletPerson(contactList* abs) {
	cout << "请输入删除的联系人姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if ( ret != -1) {
		for (int i = ret+1; i < abs->pSize; i++) {
			abs->con[i-1] = abs->con[i];
		}
		abs->pSize--;
		cout << "删除成功!" << endl;
	}
	else {
		cout << "查无此人!" << endl;
	}
}

void findPerson(contactList* abs) {
	cout << "请输入所查询联系人的姓名:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret != -1) {
		cout << "姓名:" << abs->con[ret].pName << "\t";
		cout << "性别:" << (abs->con[ret].pGender == 1 ? "男" : "女") << "\t";
		cout << "年龄:" << abs->con[ret].pAge << "\t";
		cout << "电话:" << abs->con[ret].pPhone << "\t";
		cout << "地址:" << abs->con[ret].pAddr << endl;
	}
	else {
		cout << "查无此人!" << endl;
	}
	system("pause");
	system("cls");
}

void modifyPerson(contactList* abs) {
	cout << "请输入修改的联系人名称:" << endl;
	string name;
	cin >> name;
	int ret = isExist(abs, name);
	if (ret != -1) {
		//依次修改 姓名 性别 年龄 电话 地址
		cout << "请输入姓名:" << endl;
		string name;
		cin >> name;
		abs->con[ret].pName = name;

		cout << "请输入性别编号(1-男,2-女):" << endl;
		int  gender = 0;
		while (true) {
			cin >> gender;
			if (gender == 1 || gender == 2) {
				abs->con[ret].pGender = gender;
				break;
			}
		}

		//数据类型问题需要有一个声明确认 否则容易程序崩坏
		cout << "请输入年龄:" << endl;
		int age = 0;
		cin >> age;
		abs->con[ret].pAge = age;

		cout << "请输入电话:" << endl;
		string phone;
		cin >> phone;
		abs->con[ret].pPhone = phone;

		cout << "请输入地址:" << endl;
		string addr;
		cin >> addr;
		abs->con[ret].pAddr = addr;

		cout << "修改完毕!" << endl;
		system("pause");
		system("cls");
	}
	else {
		cout << "查无此人!" << endl;
	}
}

void clearPerson(contactList* abs) {
	abs->pSize = 0;
	cout << "通讯录已清空!" << endl;
	system("pause");
	system("cls");
}

int main() {
	// 通讯录变量创建 初始化大小为0
	contactList abs;
	abs.pSize = 0;
	int select = 0;

	while (true) {
		displayMenu();
		cin >> select;
		switch (select) {
		case 1:
			// 添加联系人
			addPerson(&abs);
			break;
		case 2:
			showPerson(&abs);
			break;
		case 3:
			deletPerson(&abs);
			break;
		case 4:
			findPerson(&abs);
			break;
		case 5:
			modifyPerson(&abs);
			break;
		case 6:
			clearPerson(&abs);
			break;
		case 0:
			cout << "欢迎下次使用!" << endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}
	
	system("Pause");
	return 0;
}

代码是在 visual studio 中编写的,该软件还是比较好用的,我安装的是2022专业版;
从py3再回到C++发现许多细节需要多用些心思,以后会更新一些编码过程中的心得经验;
不得不学习 C++ 啊! 为了找个好工作,多学习吧!
既然 无力改变大环境趋势,只能 自己默默努力学习了!

共勉!

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

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

相关文章

消费市场的“跨年”:2023,数字新消费将引领市场何去何从?

配图来自Canva可画 2022&#xff0c;变局如同一个过滤器&#xff0c;每一个身处其中的消费者和消费品牌都在经受考验。我国人口红利在消退&#xff0c;竞争在加剧&#xff0c;需求在变化。光大证券研究所的数据显示&#xff0c;2022年来我国居民收入增速小幅改善&#xff0c;但…

Spring之Bean创建过程

1. 前言 Spring提供了xml、注解、JavaConfig多种方式来配置bean&#xff0c;不论何种方式&#xff0c;Spring最终都会将bean封装成BeanDefinition对象&#xff0c;Spring创建bean的依据也是通过BeanDefinition来完成的。 当我们调用getBean()方法获取bean实例时&#xff0c;不…

jmeter使用教程之登录接口(工作日记)

首先我们打开jmeter 快捷按钮&#xff1a;winr 会弹出快捷运行弹框&#xff0c;我们输入cmd 后点击回车 会弹出一个控制窗口&#xff0c;我们输入jmeter&#xff0c;然后回车 首次进入jmeter&#xff0c;页面显示空白页且默认英文 我们可以切换语言 【Options - Choose Lan…

AI前沿 | 利用训练好的模型库进行一键抠图(实例演示)

来源&#xff1a;投稿 作者&#xff1a;Struggling cyanobacteria 编辑&#xff1a;学姐 深度学习平台飞浆paddle的环境搭建 ① 效率更高的 gpu 版本的安装 通过 python -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple来进行安装。 paddle.utils…

Dockerfile了解

目录 1.自定义centos&#xff0c;具备vim及ifconfig作用 2.自定义tomcat8 1.自定义centos&#xff0c;具备vim及ifconfig作用 cd /javaxl/software mkdir mydocker vi mycentosDockerfile 向 mycentosDockerfile 编辑内容 FROM centos:7 MAINTAINER zwc "zwcqq.com"…

解决Windows下使用cmd执行Python文件报错 ModuleNotFoundError: No module named ‘XXXX‘

一、问题产生 我在IDEA中可以正常执行的Python文件&#xff0c;想把它配置成每天固定时间执行的定时任务。我写了一个脚本在每天9点时执行Python文件&#xff0c;但是我在cmd中测试执行时遇到以下报错&#xff1a; Traceback (most recent call last):File "D:\dev\code…

AD5328手册翻译不完全(仅供参考)

最近要用到DAC生成数据波形&#xff0c;但是都是英文不好阅读&#xff0c;于是花费点时间翻译了大致数据内容并记录 一、特性 AD5308:16导联TSSOP中的8个缓冲8位DAC A版本&#xff1a;1 LSB INL&#xff0c;B版本&#xff1a;0.75 LSB INR AD5318:16导联TSSOP中的8个缓冲10…

互联网时代,VR全景营销的意义是什么?

互联网时代&#xff0c;很多事项我们都可以在手机上解决&#xff0c;随着互联网的不断发展&#xff0c;年轻人每天花在手机上的时间也在日益增加&#xff0c;这就将压力给到了线下实体店铺&#xff0c;年轻人不喜欢逛街&#xff0c;线下店铺的获客成本就会越来越高。同时也是由…

无人机测深三种方法-激光雷达,测深仪和探地雷达

最近搜素了论文和相关网页&#xff0c;博主总结了一下无人机测深总共有三种办法&#xff1a; &#xff08;1&#xff09;激光雷达&#xff1b; &#xff08;2&#xff09;测深仪&#xff1b; &#xff08;3&#xff09;探地雷达&#xff08;GPR&#xff09;。 1、激光雷达 …

如何在匿名上位机中显示自定义数据波形

匿名上位机相信很多人都用过&#xff0c;以前在调飞控的时候使用过&#xff0c;可以很直观的显示数据的波形&#xff0c;比如飞机姿态等。 最近在调试foc。很多数据在调试过程中&#xff0c;仅仅使用串口打印出来显示是很不直观的&#xff0c;比如正弦波&#xff0c;经典的马鞍…

Python冷知识-优雅的文档属性

Python是一门学习成本低但是使用场景广泛的语言&#xff0c;0基础2周左右就可以进行简单的脚本编写&#xff0c;但也正是因为这个原因&#xff0c;导致很多小伙伴的Python代码比较粗糙&#xff0c;那么我们来聊聊使用文档属性让Python代码更加的优雅。 设置文档属性 作为一名…

JUC并发编程学习笔记(二)Lock接口及线程间通信

2 Lock 接口 2.1 Synchronized 2.1.1 Synchronized 关键字回顾 synchronized 是 Java 中的关键字&#xff0c;是一种同步锁。它修饰的对象有以下几种&#xff1a; 修饰一个代码块&#xff0c;被修饰的代码块称为同步语句块&#xff0c;其作用的范围是大括号{}括起来的代码&…

软件测试中白盒测试的优缺点是什么?

白盒测试的优缺点白盒测试在计算机领域行业用以检查程序的状态&#xff0c;确定实际运行状态与预期状态是否一致&#xff0c;来看看白盒测试的优点和缺点是什么吧。 白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符…

Android学习进阶——Dagger 2 使用及原理

概述 Dagger 2 是 Google 开源的一款依赖注入框架&#xff0c;它的前身是 square 的 Dagger 1&#xff0c;Dagger 2 在 Android 中有着较为广泛的应用。 Dagger 2 基于 Java 注解&#xff0c;采用 annotationProcessor&#xff08;注解处理器&#xff09; 在项目编译时动态生…

AS-REPRoasting

讲在前面&#xff1a; 最近笔者发布的几篇文章&#xff0c;大家不难发现&#xff0c;都是和kerberos协议相关的。国内外各类的研究员对于该协议的研究愈发的深入&#xff0c;从该协议产生的漏洞就会越来越多甚至越来越严重。当然这只是笔者的一点拙见。 在介绍了Kerberoastin…

21天Java开发速成篇-Java从入门到大师01快速入门

Java 简介 win10安装 JDK 下载和安装 访问 oracle 官网https://www.oracle.com/ 建议下载解压版,下载完毕后&#xff0c;解压到一个没有中文和空格的目录即可 配置 Path 你可以选择一个喜欢的目录&#xff0c;我的解压目录是 d 盘根目录下&#xff0c;如图所示 其中 b…

创邻Galaxybase入选 2022 爱分析《中国数据智能最佳实践案例》

随着2022年进入收官时间&#xff0c;创邻科技喜报频传。近日&#xff0c;“2022爱分析中国数据智能最佳实践案例”评选结果出炉&#xff0c;经过申报、初评、调研、终评等多轮角逐&#xff0c;创邻科技凭借“中国民生银行万象知识图谱应用平台”成功获评2022中国数据智能最佳实…

FPGA知识汇集-FPGA时序基础理论

对于系统设计工程师来说&#xff0c;时序问题在设计中是至关重要的&#xff0c;尤其是随着时钟频率的提高&#xff0c;留给数据传输的有效读写窗口越来越小&#xff0c;要想在很短的时间限制里&#xff0c;让数据信号从驱动端完整地传送到接收端&#xff0c;就必须进行精确的时…

Kubernetes:minikube操作总结

Kubernetes&#xff1a;minikube操作总结minikube statusminikube nodeminikube status 查询集群状态 $ minikube statusminikube node 新增节点 注意&#xff1a;minikube 仅仅是基于本地 standalone 部署一款简易 k8s 集群&#xff0c;因此添加节点&#xff0c;也仅仅是本…

【多尺度条形池化与通道注意力的图像语义分割】论文精讲

论文&#xff1a;论文链接 出处&#xff1a;中国图象图形学报 目录 1.摘要 2.网络结构 2. 1 改进的条形池化技术 2.2 二阶通道注意力机制 3.结果 1.摘要 目的 针对自然场景下图像语义分割易受物体自身形状多样性、距离和光照等因素影响的问题,本文提出 一种新的基于条形池…