[c语言]实现通讯录基础版

c语言通讯录 用c语言实现通讯录功能,增删查改,利用动态内存可以扩大通讯录的存储空间 立即下载

正文

本文将实现通讯录的基本操作:
可以在通讯录中添加1000个联系人
包含联系人姓名,性别,年龄,电话,家庭住址等信息
可以实现以下功能
1.添加联系人信息
2.删除指定联系人信息
3.查找指定联系人信息
4.修改指定联系人信息
5.显示所有联系人信息
6.清空所有联系人
7.以名字排序所有联系人
8.清屏
代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct PersonInfo //创建个人信息结构体
{
	 char name[1024];
	 char sex[1024];
	 char age[1024];
	 char phone[1024];
	 char address[1024];
}PersonInfo;

#define SIZE 1000  //最大联系人数量
typedef struct AddrBook  //通讯录
{
	 PersonInfo person_info[1024];  //通讯录人数数组
	 int size;//实际联系人数量
}AddrBook;

AddrBook g_addr_book;//创建一个通讯录类型的全局变量
void Init()
{
	 int i = 0;
	 g_addr_book.size = 0;
	 for(i = 0; i < SIZE; i++)
	 {
		  strcpy(g_addr_book.person_info[i].name,"");
		  strcpy(g_addr_book.person_info[i].sex,"");
		  strcpy(g_addr_book.person_info[i].age,"");
		  strcpy(g_addr_book.person_info[i].phone,"");
		  strcpy(g_addr_book.person_info[i].address,"");
 	 }
}

void AddPersonInfo()
{
	 if(g_addr_book.size >= SIZE)
	 {
		  printf("通讯录已满,添加失败!\n");
		  return;
	 }
	 printf("请输入联系人信息\n");
	 printf("请输入联系人名:\n");
	 scanf("%s", g_addr_book.person_info[g_addr_book.size].name);
	 printf("请输入联系人性别:\n");
	 scanf("%s", g_addr_book.person_info[g_addr_book.size].sex);
	 printf("请输入联系人年龄:\n");
	 scanf("%s", g_addr_book.person_info[g_addr_book.size].age);
	 printf("请输入联系人电话号码:\n");
	 scanf("%s", g_addr_book.person_info[g_addr_book.size].phone);
	 printf("请输入联系人地址:\n");
	 scanf("%s", g_addr_book.person_info[g_addr_book.size].address);
	 g_addr_book.size++;
	 printf("添加成功\n");
	 return;
}
void DelPersonInfo()
{
	 int num = 0;
	 int count = 0;
	 printf("删除联系人信息\n");
	 printf("请输入要删除人的编号\n");
	 scanf("%d",&num);
	 while (num < 0 || num >= g_addr_book.size)
	 {
		  printf("输入的编号超出范围,请重新输入\n");
		  scanf("%d", &num);
	 }
	 if (num != g_addr_book.size - 1)
	 {
		  strcpy(g_addr_book.person_info[num].name,
		   g_addr_book.person_info[g_addr_book.size - 1].name);
		  strcpy(g_addr_book.person_info[num].phone,
		   g_addr_book.person_info[g_addr_book.size - 1].sex);
		  strcpy(g_addr_book.person_info[num].sex,
		   g_addr_book.person_info[g_addr_book.size - 1].age);
		  strcpy(g_addr_book.person_info[num].age,
		   g_addr_book.person_info[g_addr_book.size - 1].phone);
		  strcpy(g_addr_book.person_info[num].address,
		   g_addr_book.person_info[g_addr_book.size - 1].address);
	 }
	 g_addr_book.size--;
	 count++;
	 printf("删除成功,共删除了%d条信息\n",count);
	 return;
}
void FindPersonInfo()
{
	 char name[1024] = {0};
	 int count = 0;
	 int i = 0;
	 printf("查找联系人:\n");
	 printf("请输入用户名:\n");
	 scanf("%s",name);
	 for (i = 0; i < g_addr_book.size; i++)
	 {
		  if (0 == strcmp(name, g_addr_book.person_info[i].name))
		  {
			   printf("找到一条记录,性别为:%s,年龄为:%s,电话号码为:%s,家庭住址为:%s\n",
			    g_addr_book.person_info[i].sex,g_addr_book.person_info[i].age,
			    g_addr_book.person_info[i].phone,g_addr_book.person_info[i].address);
			   count++;
	 	  }
	 }
	 if (0 == count)
	 {
	 	 printf("未找到相关信息\n");
	 }
	 else
	 {
	 	 printf("查找成功,共查找到%d条记录\n",count);
	 }
}
void ModifyPersonInfo()
{
	 int num = 0;
	 printf("修改联系人信息\n");
	 printf("请输入要修改人的编号:\n");
	 scanf("%d",&num);
	 while (num < 0 || num >= g_addr_book.size)
	 {
		  printf("输入编号超出范围,请重新输入:\n");
		  scanf("%d",&num);
	 }
	 printf("请输入新的联系人姓名:\n");
	 scanf("%s",g_addr_book.person_info[num].name);
	 printf("请输入新的联系人性别:\n");
	 scanf("%s", g_addr_book.person_info[num].sex);
	 printf("请输入新的联系人年龄:\n");
	 scanf("%s", g_addr_book.person_info[num].age);
	 printf("请输入新联系人的电话号码:\n");
	 scanf("%s",g_addr_book.person_info[num].phone);
	 printf("请输入新的联系人家庭住址:\n");
	 scanf("%s", g_addr_book.person_info[num].address);
	 printf("修改成功\n");
}
void DisplayPersonInfo()
{
	 int i = 0;
	 printf("打印所有联系人信息\n");
	 for (i = 0; i < g_addr_book.size; i++)
	 {
		  printf("编号:[%d] 姓名:[%s] 性别:%s 年龄:%s  电话号码:%s 家庭住址:%s\n",
		   i,g_addr_book.person_info[i].name,
		   g_addr_book.person_info[i].sex, g_addr_book.person_info[i].age,
		   g_addr_book.person_info[i].phone,g_addr_book.person_info[i].address);
	 }
	 printf("打印完成,共打印了%d条信息\n",g_addr_book.size);
}
void ClearPersonInfo()
{
	 char input[1024] = { 0 };
	 printf("清除所有用户信息!\n");
	 printf("你是否确定要删除所有信息? y:确定,按其他键取消\n");
	 scanf("%s",input);
	 if (0 != strcmp(input, "y")) //注意当输入不是y或者n时的情况
	 {
		  printf("已取消删除操作!\n");
		  return;
	 }
	 else
	 {
		  g_addr_book.size = 0;
		  printf("清除完成!\n");
	 }
}
void SortPersonInfo()
{
	 int i = 0;
	 int j = 0;
	 printf("将联系人进行排序\n");
	 for (i = 0; i < g_addr_book.size - 1; i++)//冒泡排序
	 {
		  for (j = 0; j < g_addr_book.size - i - 1; j++)
		  {
			   if (strcmp(g_addr_book.person_info[j].name,
			    g_addr_book.person_info[j + 1].name) > 0)
			   {
				    PersonInfo temp = g_addr_book.person_info[j];
				    g_addr_book.person_info[j] =
				     g_addr_book.person_info[j + 1];
				    g_addr_book.person_info[j + 1] = temp;
	 	 	   }
	 	 }
	 }
	 printf("排序完成!\n");
	 DisplayPersonInfo();
	 return;
}

int menu()
{
	 int input = 0;
	 printf("&&&&&&&&&&&&&&&&&&&&&&&&\n");
	 printf("1.添加联系人信息\n");
	 printf("2.删除指定联系人信息\n");
	 printf("3.查找指定联系人信息\n");
	 printf("4.修改指定联系人信息\n");
	 printf("5.显示所有联系人信息\n");
	 printf("6.清空所有联系人\n");
	 printf("7.以名字排序所有联系人\n");
	 printf("8.清屏\n");
	 printf("0.退出\n");
	 printf("&&&&&&&&&&&&&&&&&&&&&&&&\n");
	 scanf("%d", &input);
	 while (input < 0 || input > 8)
	 {
		  printf("输入有误,请重新输入:\n");
		  scanf("%d", &input);
	 }
	 return input;
}

enum
{
	 EXIT,    //退出
	 ADD,    //添加
	 DEL,    //删除
	 FIND,    //查找
	 MODIFY,    //修改
	 DISPLAY,   //显示
	 CLEAR,     //清空
	 SORT,    //排序
	 CLEAN,    //清屏
};

int main()
{
	 int choice = 0;
	 Init();//初始化通讯录变量
	 while (1)
	 {
		  choice = menu();
		  switch (choice)
		  {
			  case EXIT:
				   printf("已退出\n");
				   return 0;
				   break;
			  case ADD:
				   AddPersonInfo();
				   break;
			  case DEL:
				   DelPersonInfo();
				   break;
			  case FIND:
				   FindPersonInfo();
				   break;
			  case MODIFY:
				   ModifyPersonInfo();
				   break;
			  case DISPLAY:
				   DisplayPersonInfo();
				   break;
			  case CLEAR:
				   ClearPersonInfo();
				   break;
			  case SORT:
				   SortPersonInfo();
				   break;
			  case CLEAN:
				   system("cls");
			  	   break;
		  }
	 }
return 0;
}
C语言手机通讯录应用(线性表).cpp 基于C语言的手机通讯录的应用,御用简单的数据结构知识(线性表),可以作为学习的参考 立即下载

相关推荐

个人通讯录管理系统(C语言版)

这个通讯录管理系统包括三个模块:即进入系统,完成相关功能以及退出系统。包含了打印通讯录信息,查找通讯录信息,插入通讯录信息,删除通讯录信息,更改通讯录信息以及对通讯录进行排序等功能,方便了个人进行通讯录管理。更容易操作的是无论想实现哪个功能,只要输入相应的选项序号就可以进行相应的操作。比如:查找一个记录信息,你只要输入相应的姓名,你就可以查找到该姓名相应的通讯录资料和联系方法;修改一个记录信息,只要输入该学生的姓名,选择要修改项目,便可以对它进行相应的修改……

C语言每日一题-PTA-基础编程题目-7-34 通讯录的录入与显示

通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。 输入格式: 输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话和手机均为不超过15位的连续数字,前面有可能出现+。 在通讯录记录输入完成后,最后一行给出正整数K,并且随后

weixin_44139966的博客 1万+

C语言实现带文件操作的通讯录

Linux c 环境下实现的一个简单通讯录,添加,删除,查找,遍历,清空,写入到文件,重文件当中读等操作。并且使用makefile编程

C语言简单实现通讯录(详解)

保姆级c语言实现通讯录

weixin_63246738的博客 899

C语言 课程设计电子通讯录

设计一个学生电子通讯录,可以进行添加、删除、查找、排序(按学号或按姓名)和列表输出的完整程序。每个学生的信息包括: 学号 姓名 性别 出生日期 宿舍 电话 Email 可以使用结构体存取每个学生的信息,多个学生的信息可以保存到结构体数组中。使用文本文件保存以往的所有学生信息,添加、删除和排序后应更新该文本文件。 程序运行后,显示一个操作界面,用户可选择“添加、删除、查找、排序(按学号或按姓名)和列表输出”等功能,用户选择某一功能后,程序或者提示下一步输入(添加、删除、查找),或者输出结果(排序(按学号或按姓名)、列表输出)。程序对用户的错误输入数据应有一定的考虑,不至于导致错误的运行结果。 如果程序运行时尚未建立通讯录文件,应先创建,否则在原通讯录文件上进行相应的操作。

基于ESP32-S3与PCM5102的HiFi网络收音机复刻指南:从硬件设计到软件配置

本文提供了一份详细的基于ESP32-S3与PCM5102的HiFi网络收音机复刻指南。内容涵盖从核心硬件选型(如ESP32-S3主控与PCM5102 DAC芯片)、四路独立LDO供电设计,到软件环境配置、固件烧录及常见问题调试的全过程,旨在帮助创客打造一台支持网络电台、本地播放与蓝牙连接的高保真音频播放器。

weixin_30632267的博客 186

C语言—通讯录

但是当要操作通讯录中联系人的信息内容时,比如增加联系人信息,这时就需要知道通讯录中的联系人是否已经到达上限或者需要知道在哪个位置添加人的信息(需要知道当前通讯录中有几个人的信息),如果达到上限就无法再添加联系人。添加联系人时需要注意如果通讯录满了就不能再添加了,如果通讯录没满需要注意通讯录添加联系人信息的位置正好是已知记录当前通讯录中有效信息的个数所在联系人信息数组的下标的位置。在通讯录查找特定联系人信息,如果找到将查找函数返回的通讯录中联系人信息所在下标并打印通讯录中特定联系人信息的内容。

AI_ELF的博客 1971

一文读懂YOLO V5 与 YOLO V4

一文读懂YOLO V5 与 YOLO V4 YOLO之父Joseph Redmon在今年年初宣布退出计算机视觉的研究的时候,很多人都以为目标检测神器YOLO系列就此终结。然而在4月23日,继任者YOLO V4却悄无声息地来了。Alexey Bochkovskiy发表了一篇名为YOLOV4: Optimal Speed and Accuracy of Object Detection的文章。YOLO V4是YOLO系列一个重大的更新,其在COCO数据集上的平均精度(AP)和帧率精度(FPS)分别提高了10%

williamhyin的博客 8788

C语言简单通讯录的实验报告,c语言 第二次实验报告

一·实验题目,设计思路,实现方法11-7 找鞍点一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。利用双重for循环,分别比较各列元素和各行元素即可。12-4字符串大小写字母转换本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。先判断为大写字母还是小写字母,...

weixin_39927288的博客 411

拉普拉斯矩阵

1、预备知识 拉普拉斯矩阵定义为:L=D-W。其中,D为度矩阵,W为权重矩阵。 (1)D是对角矩阵,对角线上的元素时节点的度,即所有与该节点相关联的边的权重之和;对角线以外的元素为0。有向图的对角矩阵分为 出度矩阵 和 入度矩阵。 图1.1 无向图中的度矩阵 (2)W在无向图中是对称矩阵,在有向图中是非对称矩阵。 ...

zzhe 1万+

高通GAIA V3命令参考手册的研读学习(15):自定制命令的详细工作描述

里的示例一样,手机APP发出这个GetManuFacturer的命令发0x0000,那么耳机回复:0x8000, 同时在回复的playload部分,用最多15个字节的ACSII码来表达制造商信息(因此最多15个字母)。那么这个APP在通过GAIA协议控制这个耳机时,不仅可以通过前面讲过的vendor ID来识别,也可以更进一步通过这个命令来识别这个耳机,到底是不是本公司的。通过这个可变长度的playload,真的是可以传达极多的事先约定的信息,相当的灵活,真是不错!这个命令用来得到设备的制造商信息。

qq_37191547的博客 398

通讯录1.0(基础版)

公共头文件 utili.h #ifndef _UTILI_H//预处理指令解决头文件可能存在的重复问题 #define _UTILI_H //定义的是公共头文件,内部存放的是库函数之类的 #include<stdio.h> #include<string.h> #include<stdbool.h> #endif/*_UTILI_H_*/ 通讯录头文件Contact.h #ifndef _CONTACT_H #define _CONTACT_H //主要做

weixin_51765479的博客 944

【华为OD机试真题】459、小扇和小船的数字游戏、数字游戏 | 机试真题+思路参考+代码解析(CD卷)(C++、Java、Py)

### 🎃题目描述 >小扇和小船今天又玩起来了数字游戏,小船给小扇一个正整数 n(1  现在求 m 的最小值

KJ.JK 1717

c语言实现通讯录基础版

首先呢本次通讯录的实现主要使用结构体,通过结构体嵌套的方式实现通讯录的基本功能包括:添加、删除、查找、修改、打印、排序,再利用枚举变相的改变switch case语句,使代码的输入更加明确具体,我们分成三个部分来写一个头文件(contact.h用来存放函数声明)两个源文件(contact.c存放函数和course-22.c存放菜单栏和函数调用),之所以分成三部分来写是因为这样可以使代码不容乱,如果讲一堆函数和主文件混在一起写,那么代码的可读性将大大降低,好了,我们不罗嗦了,具体情况我们代码中分析。

m0_65554471的博客 1483

微信小程序一键跳转公众号(使用 official-account 组件)

在当今移动互联网时代,用户体验已成为应用成功的关键因素之一。微信小程序作为一种便捷的应用形式,广泛应用于各个行业,为用户提供了丰富的服务和信息。然而,如何进一步提升用户体验,使其在小程序中能够更方便地获取相关信息,成为开发者需要关注的重要课题。实现一键跳转到公众号的功能,正是一个有效的解决方案。通过这一功能,用户可以轻松访问公众号,获取更多内容和服务,从而增强与品牌的互动和粘性。本文将详细介绍如何在微信小程序中实现这一功能,并提供相关的操作步骤和注意事项。

不迁怒,不贰过。小知识,大智慧。 3127

置顶必读(2) |《YOLOv8实战:从入门到深度优化》总目录导航 & 学习路线指南(持续更新中)

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 28万+

C语言 单链表通讯录基础版实现,保证看完都直呼easy

(C语言)单链表实现通讯录基础版,保证看完都大呼简单! ————————————————————————————————— 首先在写通讯录之前,必须明确我们的需求: 因为是基础版,我在这里暂时只实现以下一些需求(绝不是因为我暂时只写了这么些): /* 添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 清空所有联系人 */ ————————————————————————————————— 首先是创建我们的联系人结构体 typedef struct Contac

naititi的博客 5248

【AirPlay】苹果认证MFI学习

配件认证是一个过程,通过这个过程,可验证其配件符合MFi技术规范,并通过苹果指定的任何认证测试。MFi门户中的产品计划 "认证 "页面将指导你完成特定配件所需的认证步骤,并指出何时完成所有要求。在完成所有MFi认证要求之前,你不得制造、分发或销售任何配件。在开始MFi认证过程之前,你必须测试你的配件,以确保它符合最新的MFi技术规范,通过产品计划 "测试计划 "上的所有适用测试,并与它将声称具有兼容性的每个苹果设备兼容。

天天的博客 2275

C语言实现通讯录(初级版)

通讯录实现

Tlzns的博客 2303

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

进阶版——C语言实现基础通讯录系统

0919

m0_62014223的博客 135

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C语言 —— 通讯录

通讯录是C语言中非常简单且实用的小项目,涉及C语言中很多基础知识,能够独立写出通讯录这个小项目,证明自身对C语言知识有了一定的掌握。今天来探讨通讯录三种版本的实现

cdtu_mid的博客 4747

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【C语言进阶16——通讯录(基础版、动态内存版、文件管理版)】

前言 本文将实现一个通讯录,对前面所学的**指针、字符串库函数、结构体、动态内存、文件操作**等内容进行巩固和复习,**通讯录的内容有三个版本**: - **基本版** - **动态内存版** - **文件操作版**

taibudong1991的博客 1704

C语言小项目——通讯录

在学习了结构体、动态内存管理以及文件操作的相关知识后,我们可以根据以上基本要求来分别设计三个版本的通讯录,分别是静态版、动态版和文件版 静态版:是最基础的版本,能满足对通讯录内部联系人的增删查改、对联系人按姓名,年龄,电话或住址进行排序、显示通讯录中所有联系人、退出通讯录。 动态版:动态版的通讯录能满足静态版通讯录的所有功能,但是内部实现由固定大小改为动态增容; 文件版:文件版的通讯录能满足动态版通讯录的所有功能,但是会在程序退出时把联系人信息保存在文件中,在程序运行时把文件中的联系人信息加载到通讯录

StandDev的博客 203

C语言实现多版本通讯录(编译器VS2013)包含普通版本,动态版本,文件版本

最普通版本的通讯录: 详细见注释,包含初始化,添加,删除,查找,显示,清空等操作 contact.h文件 #ifndef _CONTACT_H_ #define _CONTACT_H_ #include<stdio.h> #include<string.h> #include<windows.h> #pragma warning (disable:4996) ...

烟华的博客 466

【C语言】通讯录(文件) -- 详解

头文件的增添使用枚举 enum 与 switch 语句进行连接,增加代码的可读性。为菜单书写功能函数时,不必再来回看每个数具体对应哪一个函数。EXIT,//0ADD,//1DEL,//2SEARCH,//3MODIFY,//4SHOW,//5SORT,//6SAVE//7【整体逻辑】#pragma once // 避免头文件被重复引用#define DEFAULT_SZ 3 // 通讯录初始状态的容量大小EXIT,//0ADD,//1DEL,//2SEARCH,//3。

Elena's Blog 989

C语言之动态内存管理实现通讯录(完整版)

C语言之动态内存管理实现通讯录(完整版)

月亮夹馍干的博客 992
上一篇: [c语言]模拟实现strncpy,strncat,strncmp
下一篇: [c语言]通讯录进阶版(实现动态内存以及文件操作)
coolnut12138
博客等级 码龄9年 51粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值