**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.修改联系人 |
请输入指令: