通讯录动态版

#include<stdio.h>
#include<stdlib.h>
#include<string.h>enum operation
{EXIT,		//退出ADD,		//添加SEARCH,		//查找DELETD,		//删除AMEND,		//修改SHOW		//显示
};enum object
{X_NAME,		//名字X_AGE,		//年龄X_TELNUMBER,//电话号码X_ADDRESS	//住址
};#define  max_name 10
#define  max_telnumber 15
#define  max_address  20
#define  init_capacity  2typedef  struct PeopleDate
{char  name[max_name];				//名字short int age;						//年龄char  telnumber[max_telnumber];		//号码char  address[max_address];			//住址
}PeopleDate;typedef  struct  person
{PeopleDate*  data;		//定义联系人相关信息的PeopleDate结构体指针int sz;					//当前存储的个数int capacity;			//当前容量
}person;void menu_operation();			//操作对象菜单
void menu_object();				//信息对象菜单
void init(person* con);			//初始化
void f_add(person* con);		//添加成员
void f_search(person* con);		//查找成员
void f_delete(person* con);		//删除成员
void f_amend(person* con);		//修改成员
void f_show(person* con);		//显示所有成员
int  dilatation(person *pcon);	//扩充容量
void f_empty(person *pcon);		//清空所有成员void menu_operation()
{printf("*****************************************\n");printf("*******0、退出        1、添加     *******\n");printf("*******2、查找        3、删除     *******\n");printf("*******4、修改        5、显示     *******\n");printf("*****************************************\n");
}void menu_object()
{printf("*****************************************\n");printf("*******0、姓名        1、年龄     *******\n");printf("*******2、号码        3、地址     *******\n");printf("*****************************************\n");printf("请输入需要修改的选项:");
}void  init(person *pcon)
{pcon->sz = 0;pcon->capacity = init_capacity;pcon->data = (PeopleDate*)malloc(pcon->capacity*sizeof(PeopleDate));	//实例化指针,给pcon->data分配内存memset(pcon->data, 0, pcon->capacity*sizeof(PeopleDate));				//将pcon->data所指向的空间初始化为0
}int  dilatation(person *pcon)
{PeopleDate* ptr = (PeopleDate*)realloc(pcon->data, (pcon->capacity + init_capacity)*sizeof(PeopleDate));//改变pcon->data所指向的空间大小if (ptr != NULL)//判断扩容是否成功,成功返回1,反之为0{pcon->data = ptr;pcon->capacity += init_capacity;//更新当前实际容量大小return 1;}elsereturn 0;
}void  f_empty(person *pcon)
{//释放掉pcon->data所指向的空间free(pcon->data);pcon->data = NULL;pcon->sz = 0;pcon->capacity = 0;printf("内容已销毁\n");
}void  f_add(person *pcon)
{if (pcon->sz == pcon->capacity)//判断当前联系人个数是否满了{int a = dilatation(pcon);switch (a){case 0: {printf("尝试扩容失败\n");return;}break;case 1:{printf("尝试扩容成功\n");}break;default:  printf("错误\n"); break;}}//给新增加的联系人添加信息printf("姓名:");scanf("%s", pcon->data[pcon->sz].name);printf("年龄:");scanf("%d", &(pcon->data[pcon->sz].age));printf("号码:");scanf("%s", pcon->data[pcon->sz].telnumber);printf("地址:");scanf("%s", pcon->data[pcon->sz].address);printf("添加成功\n");pcon->sz++;//当前联系人个数+1
}void  f_search(person *pcon)
{char  nowname[max_name];int i = 0;printf("请输入需要查找的姓名:");scanf("%s", nowname);for (i = 0; i < pcon->sz; i++){if (strcmp(pcon->data[i].name, nowname) == 0)//判断当前对象是否与要查找的人的姓名相同{printf("姓名:%s\n", pcon->data[i].name);printf("年龄:%d\n", pcon->data[i].age);printf("号码:%s\n", pcon->data[i].telnumber);printf("地址:%s\n", pcon->data[i].address);break;}if (i == pcon->sz - 1)						//如果查到最后一个人则说明没有该联系人printf("无该联系人\n");}
}void  f_delete(person *pcon)
{char  nowname[max_name];int i = 0, j = 0;printf("请输入需要删除人的姓名:");scanf("%s", nowname);for (i = 0; i < pcon->sz; i++){if (strcmp(pcon->data[i].name, nowname) == 0)//判断当前对象是否与要删除的人的姓名相同{j = i;break;}}for (j = i; j < pcon->sz; j++)					//依次向前覆盖,把目标联系人删除{pcon->data[j] = pcon->data[j + 1];}pcon->sz--;										//联系人个数-1printf("已删除\n");
}void  f_amend(person *pcon)
{char  nowname[max_name];int i = 0, j = 0;printf("请输入需要修改人的姓名:");scanf("%s", nowname);for (i = 0; i < pcon->sz; i++){if (strcmp(pcon->data[i].name, nowname) == 0){j = i;break;}}//按照菜单做出相应的信息修改menu_object();scanf("%d", &i);switch (i){case  X_NAME:{printf("请输入姓名:");scanf("%s", pcon->data[j].name);printf("修改完成\n");}break;case  X_AGE:{printf("请输入年龄:");scanf("%d", &(pcon->data[j].age));printf("修改完成\n");}break;case  X_TELNUMBER:{printf("请输入号码:");scanf("%s", pcon->data[j].telnumber);printf("修改完成\n");}break;case  X_ADDRESS:{printf("请输入地址:");scanf("%s", pcon->data[j].address);printf("修改完成\n");}break;default:  printf("命令错误\n"); break;}
}void  f_show(person *pcon)
{int i = 0;printf("当前有%d个联系人\n", pcon->sz);for (i = 0; i < pcon->sz; i++){printf("\n");printf("姓名:%s\n", pcon->data[i].name);printf("年龄:%d\n", pcon->data[i].age);printf("号码:%s\n", pcon->data[i].telnumber);printf("地址:%s\n", pcon->data[i].address);printf("\n");}
}int  main()
{int input = 0;struct person  con;init(&con);do{menu_operation();printf("请输入指令:");scanf("%d", &input);switch (input){case EXIT: 		f_empty(&con); break;case ADD:  		f_add(&con); break;case SEARCH: 	f_search(&con); break;case DELETD: 	f_delete(&con); break;case AMEND: 	f_amend(&con); break;case SHOW: 		f_show(&con); break;default: 		printf("命令无效\n"); break;}} while (input);system("pause");return  0;
}

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

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

相关文章

icmp消息类型报告传输_ICMP消息的类型和ICMP消息格式

icmp消息类型报告传输ICMP shares error reporting and devices status by messages. Messages created by ICMP are divided into 2 categories: ICMP通过消息共享错误报告和设备状态。 ICMP创建的消息分为两类&#xff1a; 1) Error Reporting Messages 1)错误报告消息 The…

一文详解「队列」,手撸队列的3种方法!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;本文已收录至我的 Github《算法图解》系列&#xff1a;https://github.com/vipstone/algorithm前面我们介绍了栈&#xff08…

Oracle11完全卸载方法

一、在oracle11G以前卸载oracle会存在卸载不干净&#xff0c;导致再次安装失败的情况&#xff0c;在运行services.msc打开服务&#xff0c;停止Oracle的所有服务。二、 oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat运行该批…

斐波拉切数列

问题陈述&#xff1a; Fibonacci为1200年代的欧洲数学家&#xff0c;在他的著作中曾经提到&#xff1a;若有一只兔子每个月生一只小兔子&#xff0c;一个月后小兔子也开始生产。起始只有一只兔子&#xff0c;一个月后就有两只兔子&#xff0c;二个月后有三只兔子&#xff0c;三…

自定义设置一个屏保程序

用C语言写一个简单的窗口程序&#xff0c;目的是生成一个可视化的图形窗口&#xff0c;需要用到EasyX库&#xff0c;可在文章末尾的网盘链接中下载。该程序退出需左击鼠标&#xff0c;否则无法退出。 #include<stdio.h> #include<stdlib.h> #include<windows.h…

JavaScript中带示例的字符串search()方法

字符串search()方法 (String search() Method) search() is method is a String method, it is used to check whether a substring exists in the given string or not. It returns the starting index of the substring from the string where substring exists. If substrin…

漫画:如何找到链表的倒数第n个结点?

————— 第二天 —————什么意思呢&#xff1f;我们以下面这个链表为例&#xff1a;给定链表的头结点&#xff0c;但并不知道链表的实际长度&#xff0c;要求我们找到链表的倒数第n个结点。假设n3&#xff0c;那么要寻找的结点就是元素1&#xff1a;如何利用队列呢&…

转:开源图形库 c语言-图形图像库 集合

Google三维API O3DO3D 是一个开源的 Web API 用来在浏览器上创建界面丰富的交互式的 3D 应用程序。这是一种基于网页的可控3D标准。此格式期望真正的基于浏览器&#xff0c;独立于操作系统之外&#xff0c;并且支持主流的3D显卡&#xff0c;这样就可以在网页中实现效果逼真的3D…

cacti添加I/O监控

首先下载snmpdiskio-0.9.6.zip,文件不好找&#xff0c;我已经放在本文章的附件里面。解压snmpdiskio-0.9.6.zip复制partition.xml到cacti/resource/snmp_queries/下面[roottest]# cp partition.xml /home/wwwroot/default/cacti/resource/snmp_queries/分别导入模板文件&#x…

数组中的reverse_数组reverse()方法以及JavaScript中的示例

数组中的reverseJavaScript reverse()方法 (JavaScript reverse() method) reverse() method is used to reverse the order of the elements in an array, it changes the actual array and also returns an array with reversed elements. reverse()方法用于反转数组中元素的…

磊哥私藏书单分享,160买400的书!

程序员的节日&#xff08;10.24&#xff09;到了&#xff0c;当当的活动也搞起来了&#xff0c;作为有上进心的你&#xff0c;怎么可能停止学习和进步呢&#xff1f;所以磊哥在当当满 400 元减 200 元的基础上&#xff0c;有要了一个减 40 的劵&#xff0c;也就是只需要花 160 …

ORACLE中使用递归查询

在数据库查询中常常会碰到要查询树形结构的数据&#xff0c;需要用一个字段的数据当做下一条记录的父节点继续查询&#xff0c;如果在不知道有多少级节点的情况下一次次手写SQL查询会很繁琐而没有效率&#xff0c;这时可以使用 oracle中的connect with prior递归算法&#xff1…

linux——回射服务器

回射服务器即客户端发送一段数据给服务器&#xff0c;服务器再将这段数据原封不动的发送给客户端&#xff0c;原理很简单&#xff0c;原理图如下&#xff1a; 以TCP协议为例&#xff0c;客户端、服务器代码如下&#xff1a; ** 服务器&#xff1a; ** #include <stdio.h…

Android 5.0 API 的变化——开发人员注意

Android 5.0 API变化译自 http://developer.android.com/intl/zh-cn/about/versions/android-5.0.html —— By NashLegendSample示例在这里找&#xff1a;https://github.com/googlesamples/原译文在我的github上&#xff1a;https://github.com/NashLegend/ProjectBabel/blob…

dbms标识符无效_DBMS中的聚合运算符(分组依据和具有子句)

dbms标识符无效综合运营商 (Aggregate Operators) To calculate aggregate values, one requires some aggregate operators to perform this task. These operators run over the columns of a relation. The total number of five aggregate operators is supported by SQL a…

Java中的5大队列,你知道几个?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;本文已收录至 https://github.com/vipstone/algorithm 《算法图解》系列。通过前面文章的学习《一文详解「队列」&#xff0…

mysql中int、bigint、smallint 和 tinyint的区别与长度

各种整形&#xff0c;总结留作参考。bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据&#xff08;所有数字&#xff09;。存储大小为 8 个字节。int从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据&#xff08;所有数字…

linux——回射服务器多并发(多进程)

多并发原理如图&#xff0c;多个客户端连接一个服务器&#xff0c;无论哪个客户端发送数据给服务器&#xff0c;服务器都能把数据准确的返回给这个客户端。 在socket编程中&#xff0c;socket这种文件描述符被默认设置为阻塞&#xff0c;故而read函数和accept函数时阻塞函数&a…

算法图解:如何用两个栈实现一个队列?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;本文已收录至 https://github.com/vipstone/algorithm 《算法图解》系列。队列和栈是计算机中两个非常重要的数据结构&#…

notepad++ 偶数行_C ++程序查找前N个偶数的立方和

notepad 偶数行The problem is we have a number N and we have to find sum of first N Even natural numbers. 问题是我们有一个数N &#xff0c;我们必须找到前N个偶数自然数之和。 Example: 例&#xff1a; Input:n 3Output:288 (2^3 4^36^3)A simple solution is give…