C编程——通讯录

**1、**功能要求:
增加联系人 —— 其中ID使用随机数生成,并且作为唯一的标识,例如生成5位数作为ID,每一次生成,都去数组中查看,该ID有没有被使用,确保唯一性。
显示联系人 —— 界面优美的打印出所有联系人(按电话号码从小到大的顺序显示)
删除联系人 —— 按电话、姓名删除
修改联系人 —— 可以修改姓名、电话

**2、**程序

#include <stdio.h>
#include <stdlib.h> //包括rand()、srand()、abs()等函数
#include <time.h>

#define N  10

enum {QUIT, ADD, DISPLAY, DELETE, MODIFY};//枚举类型,默认

struct Data//声明结构体类型struct Data
{
    int id;//随机生成、五位、首位不为0
    char name1[10];//姓名
	long long phone;//电话号码
};

void Menu(struct Data *, int *);
void Add_Contact(struct Data *, int *);//增加联系人
void Display_Contact(struct Data *, int *);//显示联系人
void sort(struct Data *, int *);//排序
void Delete_Contact(struct Data *, int *);//删除联系人
void Modify_Contact(struct Data *, int *); //修改联系人

int main()
{
	struct Data data[N] = {0};//定义结构体数组,并初始化
	int length = 0;
	
	Menu(data, &length);//int *p = &length;
	
	return 0;
}

void Menu(struct Data *arr, int *len)
{
    int com = 0;

    while (1)
    {
        printf("----------------\n");
		printf("|    0.退出    |\n");
        printf("| 1.增加联系人 |\n");
        printf("| 2.显示联系人 |\n");
        printf("| 3.删除联系人 |\n");
		printf("| 4.修改联系人 |\n");
				
        printf("请输入指令:");
        scanf("%d", &com);

        switch (com)
        {
            case ADD:  
				Add_Contact(arr, len);
                break;
            case DISPLAY:
				Display_Contact(arr, len);
                break;
            case DELETE:
				Delete_Contact(arr, len);
				break;
			case MODIFY:
				Modify_Contact(arr, len);
				break;
			case QUIT:
				return;
            default:
                break;
        }
    }	
}

void Add_Contact(struct Data *arr, int *len)//增加联系人
{
	int i = 0;
	int flag = 0;
	int rand_id = 0;	
	
	printf("----------------\n");
	
	do
	{
		srand((unsigned int)time(NULL));
		rand_id = rand() % 90000 + 10000;
											
		for (i = 0; i < *len; ++i)//判断随机生成的数是否已存在
		{
			if (arr[i].id == rand_id)//存在时,则flag = 1
			{
				flag = 1;
				break;
			}
			else
			{
				flag = 0;
			}
		}
	}while(flag);//flag = 1时 ,重新do,或者说——重新生成一随机数

	arr[*len].id = rand_id;
	printf("随机的ID为:%d\n",arr[*len].id);
	
	printf("请输入姓名:");
	scanf("%s", arr[*len].name1);
	
	printf("请输入号码:");
	scanf("%lld", &arr[*len].phone);
	
	*len = (*len) + 1;
}

void Display_Contact(struct Data *arr, int *len)//显示联系人
{
	int i;
	sleep(1); // 单位1s
	
	printf("----------------\n");				
	sort(arr, len);//按手机号码,从小到大进行排序					
	printf("联系人共有:%d个\n", *len);
	printf("编号\t姓名\t号码\n");
	
	for (i = 0; i < *len; ++i)
	{
		printf("%d\t%s\t%lld\n", arr[i].id, arr[i].name1, arr[i].phone);
	}
}

void sort(struct Data *arr, int *len)//排顺序
{
	int i,j,k;
	struct Data t;
	
	for(i = *len - 1; i > 0; --i)
	{
		k = i;
		
		for(j = i - 1; j >= 0; --j)//遍历,找到最大数,下沉到尾端
		{
			if(arr[k].phone < arr[j].phone) 
			{ 
				k = j;  
				t = arr[i];
				arr[i] = arr[k];
				arr[k] = t;
			}
		}
	}
}

void Delete_Contact(struct Data *arr, int *len)//删除联系人
{
	int i;
	char name[10] = {0};//存放待删除的联系人的姓名
	
	printf("请输入需要删除的联系人的姓名:");
	scanf("%s", name);
	
	for (i = 0; i < *len; i++)
	{
		while (strcmp(arr[i].name1, name) == 0)
		{
			for ( ; i < *len; i++)
			{
				arr[i] = arr[i+1];
			}
			break;
		}
	}
	
	*len = (*len) - 1;
}

void Modify_Contact(struct Data *arr, int *len) //修改联系人
{
	char name[10] = {0};//存放待修改的联系人的姓名
	int i;
	printf("请输入需要修改的联系人的姓名:");
	scanf("%s", name);
	printf("编号\t姓名\t号码\n");
	
	for (i = 0; i < *len; ++i)
	{
		while (strcmp(arr[i].name1, name) == 0)
		{
			printf("%d\t%s\t%lld\n", arr[i].id, arr[i].name1, arr[i].phone);
			printf("请修改姓名:");
			scanf("%s", arr[i].name1);
			printf("请修改号码:");																																																					
			scanf("%lld", &arr[i].phone);
			break;
		}	
	}	
}

**3、**测试结果

 ./a.out 
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:1
----------------
随机的ID为:80495
请输入姓名:李佳佳      
请输入号码:13141536919
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:1
----------------
随机的ID为:98276
请输入姓名:王某某
请输入号码:15196968399
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:1
----------------
随机的ID为:52147
请输入姓名:李二狗
请输入号码:13655889190
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:2
----------------
联系人共有:3个
编号	姓名	号码
80495	李佳佳	13141536919
52147	李二狗	13655889190
98276	王某某	15196968399
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:4
请输入需要修改的联系人的姓名:李二狗
编号	姓名	号码
52147	李二狗	13655889190
请修改姓名:李三狗
请修改号码:13655889999
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:2
----------------
联系人共有:3个
编号	姓名	号码
80495	李佳佳	13141536919
52147	李三狗	13655889999
98276	王某某	15196968399
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:3
请输入需要删除的联系人的姓名:李三狗
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:2
----------------
联系人共有:2个
编号	姓名	号码
80495	李佳佳	13141536919
98276	王某某	15196968399
----------------
| 1.增加联系人 |
| 2.显示联系人 |
| 3.删除联系人 |
| 4.修改联系人 |
请输入指令:

猜你喜欢

转载自blog.csdn.net/ypjsdtd/article/details/84636635