Linux C 简单通讯录

这个博客介绍了如何在Linux环境中使用C语言构建一个简单的通讯录项目。通过定义包含ID、姓名和电话号码的结构体,并使用数组来存储这些结构体,实现了数据的存储。博客涵盖了数据类型、数组、结构体、控制语句(如for、switch、if)、字符串函数(如strcpy、strcmp)和随机数函数等知识点,并讨论了如何将代码组织成函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通讯录项目 — 结构体数组
1.使用结构体来存放数据,使用数组来存放结构体
2.struct Data{
int id;
char name[10];
int phone; //注意11位数的整型范围用int能不能放
}
3.知识点
数据类型
数组
结构体
语句 for switch if break return
函数 尽可能的都用函数去写,可以先都在main函数里实现,最后改写为函数
字符串函数 strcpy strcmp等
随机数函数
等等
4.功能


增加联系人 
删除联系人	--- 按电话、姓名删除
查找联系人	--- 按电话、姓名查找
修改联系人	--- 可以修改姓名、电话
显示联系人  --- 界面优美的打印出所有联系人

ID使用随机数生成,并且作为唯一的标识,
例如生成5位数作为ID,每一次生成,都去数组中查看,该ID有没有被使用,确保唯一性。
按ID从小到大排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

struct DATE
{
	long telephone;
	int  id;
	char name[20];
};

int myrand(int Rand_Max)//产生随机数
{
	
	int test[100000]={0};
	int i=0;
	srand(time(NULL));
	
	int rnum=rand()%Rand_Max;
	test[rnum] += 1;
	for(i=10000;i<100000;i++)
	{
		if(test[i]>1)
		{
			rnum=(rand()%Rand_Max)+10000;
		}
	}
	
	return rnum;
	
}
void add_data(struct DATE num[],int *length)//输入信息
{
	int p1 = *length; 
	while(1)
	{
		int ran = myrand(100000);
		printf("输入tel :  \n");
		scanf("%ld",&num[p1].telephone);
		printf("输入姓名:  \n");
		scanf("%s",num[p1].name);
		num[p1].id = ran;
		p1++;
		*length = p1;
		break;
	}
		
}
void show_data(struct DATE num[],int *length)//显示信息
{
	int i;
	int len = *length;
	
	for(i=0;i<len;i++)
	{
		
		printf("ID  : %d\n",num[i].id);
		printf("tel :%ld \t\n",num[i].telephone);
		printf("name:\t %s\n",num[i].name);
		
	}
}
void sort_data(struct DATE num[],int *length)//排序
{
	int i,j;
	int len = *length;
	int tid = 0; //用来交换id
	long ctel = 0;//用来交换号码
	char name6[20]={0};//用来交换姓名
	for(i=0;i<len;i++)
	{
		for(j=i+1;j<len;j++)
		{
			if(num[i].id>num[j].id)
			{
				tid = num[i].id;
				num[i].id = num[j].id;
				num[j].id = tid;
				ctel = num[i].telephone;
				num[i].telephone = num[j].telephone;
				num[j].telephone = ctel;
				strcpy(name6,num[i].name);
				strcpy(num[i].name,num[j].name);
				strcpy(num[j].name,name6);
			}
				
		}
	}
}
void delete_data(struct DATE num[],int *length)//删除联系人
{
	int i;
	int len = *length;
	int del=0;//判定通过何种方式删除
	char name1[20]={0};
	long a;
	printf("1.通过电话删除\n");
	printf("2.通过姓名删除\n");
	scanf("%d",&del);
	if(1 == del)
	{
		int k=0;
		int p = 0;
		printf("请输入要删除的tel");
		scanf("%ld",&a);
		for(i=0;i<len;i++)
		{
			if(num[i].telephone == a)
			{
				for(k=i;k<len;k++)
				{
					num[k].telephone = num[k+1].telephone;
					strcpy(num[k].name,num[k+1].name);
					p=1;
				}
			}
					
		}
					
		if(0 == p)
		{
			printf("未找到\n");
		}
		else
		{
			len--;
			*length = len;
		}
	}
	else if(2 == del)
	{
		int l=0;
		printf("请输入要删除的姓名");
		scanf("%s",name1);
		int tmp = 0;//判定是否找到
		for(i=0;i<len;i++)
		{
			if(!(strcmp(num[i].name,name1)))
			{
				for(l=i;l<len;l++)
				{
					num[l].telephone = num[l+1].telephone;
					strcpy(num[l].name,num[l+1].name);
					tmp=1;
				}
			}
						
		}
		if(0 == tmp)
		{
			printf("未找到\n");
		}
		else
		{
			len--;
			*length = len;
		}
			
		
					
	}
}
void find_data(struct DATE num[],int *length)//查找联系人
{
	int len = *length;
	int te=0;//通过何种方式查找
	int i;
	char nam[20]={0};
	long a;//存储键盘输入的要查找的号码
	printf("1.通过电话查找\n");
	printf("2.通过姓名查找\n");
	scanf("%d",&te);
	if(1 == te)
	{
		int h=0;//判断是否找到
		printf("请输入要查找的tel");
		scanf("%ld",&a);
		for(i=0;i<len;i++)
		{
			if(num[i].telephone == a)
			{
				printf("Tel:%ld\n",num[i].telephone);
				printf("name  :%s\n",num[i].name);
				h=1;
			}
		}
		if(0 == h)
		{
			printf("未找到\n");
		}
					
	}
	else if(2 == te)
	{
		printf("请输入要查找的姓名");
		scanf("%s",nam);
		int tmp = 0;//判断是否找到
		for(i=0;i<len;i++)
		{
			if(!(strcmp(num[i].name,nam)))
			{
				printf("Tel:%ld\n",num[i].telephone);
				printf("name  :%s\n",num[i].name);
				tmp =1;
			}
						
		}
		if(0 == tmp)
		{
			printf("未找到\n");
		}
		
					
	}
	
}
void change_data(struct DATE num[],int *length)	//修改联系人
{
	int len = *length;
	int i;
	int change=0;//记录修改什么信息
	char name2[20]={0};
	printf("请输入要修改的联系人的信息\n");
	printf("1.修改联系人电话\n");
	printf("2.修改联系人姓名\n");
	scanf("%d",&change);
	if(1 == change)
	{
		int gh=0;//判定如何找到要修改的信息
		printf("1.输入要修改人的电话查找\n");
		printf("2.输入要修改人的姓名查找\n");
		scanf("%d",&gh);
		if(1 == gh)
		{
			int gp=0;//看是否找到
			long b;
			long new=0;//新电话
			printf("请输入要查找的tel\n");
			scanf("%ld",&b);
			for(i=0;i<len;i++)
			{
				if(num[i].telephone == b)
				{
					printf("原来  Tel :%ld\n",num[i].telephone);
					printf("原来 name :%s\n",num[i].name);
					printf("输入新的tel\n");
					scanf("%ld",&new);
					num[i].telephone = new;
								
					gp=1;
				}
			}
			if(0 == gp)
			{
				printf("未找到\n");
			}
		}
		if(2 == gh)
		{
			int gp=0;
			long new;//新号码
			char name2[20]={0};//记录要查找的姓名
			printf("请输入要查找的姓名\n");
			scanf("%s",name2);
			int tmp = 0;
			for(i=0;i<len;i++)
			{
				if(!(strcmp(num[i].name,name2)))
				{
					printf("原来  Tel  :%ld\n",num[i].telephone);
					printf("原来 name  :%s\n",num[i].name);
					printf("输入新的tel\n");
					scanf("%ld",&new);
					num[i].telephone = new;
					gp=1;
				}
						
			}
			if(0 == gp)
			{
				printf("未找到\n");
			}
						
		}
					
					
	}
	if(2 == change)
	{
		int gb=0;
		printf("1.输入要修改人的电话查找\n");
		printf("2.输入要修改人的姓名查找\n");
		scanf("%d",&gb);
		if(1 == gb)
		{
			int gp=0;
			long c;
			char new1[20]={0};
			printf("请输入要查找的tel\n");
			scanf("%ld",&c);
			for(i=0;i<len;i++)
			{
				if(num[i].telephone == c)
				{
					printf("原来 Tel :%ld\n",num[i].telephone);
					printf("原来name :%s\n",num[i].name);
					printf("输入新的姓名\n");
					scanf("%s",new1);
					stpcpy(num[i].name,new1);
								
					gp=1;
				}
			}
		    if(0 == gp)
			{
				printf("未找到\n");
			}
		}
		if(2 == gb)
		{
			int gp=0;
			long new;
			char name3[20]={0};
			printf("请输入要查找的姓名\n");
			scanf("%s",name3);
			int tmp = 0;
			for(i=0;i<len;i++)
			{
				if(!(strcmp(num[i].name,name2)))
				{
					printf("原来Tel :%ld\n",num[i].telephone);
					printf("原来name:%s\n",num[i].name);
					printf("输入新的姓名\n");
					scanf("%s",name3);
					stpcpy(num[i].name,name3);
					gp=1;
				}
						
			}
			if(0 == gp)
			{
				printf("未找到\n");
			}
						
		}
	}
}	

void Menu()
{
	struct DATE num[50]={0};
	int length = 0;
	//int *pl=&length;
	int com = 0;
	int i;
	
	while(1)
	{
		printf("1.输入联系人信息\n");
		printf("2.显示联系人信息\n");
		printf("3.删除联系人信息\n");
		printf("4.查找联系人信息\n");
		printf("5.修改联系人信息\n");
		scanf("%d",&com);
		
		switch(com)
		{
			case 1:
			{	
				
				add_data(num,&length);
				
				break;
			}
			case 2:
			{	
				sort_data(num,&length);
				show_data(num,&length);		

				break;
			}
			case 3:
			{
				delete_data(num,&length);
				
				break;
			}
			case 4:
			{
				find_data(num,&length);
				
				break;
			}
			case 5:
			{
				change_data(num,&length);
				
				break;
			}
			default:	
				printf("error\n");
				break;
				
		}
	}
}			
int main()
{
	Menu();
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值