通訊錄可以用來存儲1000個人的信息,每個人的信息包括:
姓名、性別、年齡、電話、住址
提供方法:
1. 添加聯繫人信息
2. 刪除指定聯繫人信息
3. 查找指定聯繫人信息
4. 修改指定聯繫人信息
5. 顯示所有聯繫人信息
6. 清空所有聯繫人
7. 以名字排序所有聯繫人
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define M 2//初始通訊錄大小
#define N 5//每次增容的大小
//姓名、性別、年齡、電話、住址
typedef struct people
{
char name[20];
char sex[10];
int age;
int tel;
char addr[50];
}Peo;
typedef struct Ppeople
{
Peo *peo;
int count;//當前實際所存聯繫人數量
int num;//通訊錄總的容量
}Con,*pCon;
void print(pCon p, int k)//打印信息函數
{
printf("姓名:%s\t",p->peo[k].name);
printf("性別:%s\t",p->peo[k].sex);
printf("年齡:%d\t",p->peo[k].age);
printf("電話:%d\t",p->peo[k].tel);
printf("住址:%s\n",p->peo[k].addr);
}
void Scanf(pCon p, int k)//輸入信息函數
{
printf("請輸入姓名:");
scanf("%s",p->peo[k].name);
printf("請輸入性別:");
scanf("%s",p->peo[k].sex);
printf("請輸入年齡:");
scanf("%d",&p->peo[k].age);
printf("請輸入電話:");
scanf("%d",&p->peo[k].tel);
printf("請輸入住址:");
scanf("%s",p->peo[k].addr);
}
void cheak_cap(pCon p)//檢查當前通訊錄的大小
{
if(p->count == p->num)
{
Peo *ptr = (Peo*)realloc(p->peo,(p->count+N)*sizeof(Peo));
if(ptr==NULL)
{
printf("out of memory\n");
exit(EXIT_FAILURE);
}
else
{
p->peo = ptr;
p->num += N;
}
}
}
void Add(pCon p)//添加聯繫人
{
int i = 0;
cheak_cap(p);
Scanf(p,p->count);
p->count++;
printf("添加聯繫人成功!\n");
}
void Delete(pCon p)//刪除聯繫人
{
int k = 0;
char arr[20] = {0};
int i = 0;
int find(pCon p, char* arr);
if(p->count == 0)
{
printf("通訊錄爲空!\n");
}
else
{
printf("請輸入所要刪除的聯繫人姓名:");
scanf("%s",arr);
k = find(p,arr);
if(k == -1)
printf("無此聯繫人!");
else if(k>=0)
{
for(i=k; i<p->count-1; i++)
{
p->peo[i]=p->peo[i+1];
}
p->count--;
Sleep(1000);
printf("刪除成功!\n");
}
}
}
int find(pCon p, char* arr)//查找聯繫人是否存在
{
int i = 0;
for(i=0; i < p->count; i++)
{
if(strcmp(arr,p->peo[i].name)==0)
return i;
}
return -1;
}
void Find(pCon p)//查找聯繫人
{
int k = 0;
char arr[20] = {0};
int i = 0;
int find(pCon p, char* arr);
if(p->count == 0)
{
printf("通訊錄爲空!\n");
}
else
{
printf("請輸入所要查找的聯繫人姓名:");
scanf("%s",arr);
k = find(p,arr);
if(k == -1)
printf("無此聯繫人!");
else if(k>=0)
{
print(p, k);
}
}
}
void revise(pCon p)//修改聯繫人
{
int k = 0;
char arr[20] = {0};
int i = 0;
int find(pCon p, char* arr);
if(p->count == 0)
{
printf("通訊錄爲空!\n");
}
else
{
printf("請輸入所要修改的聯繫人姓名:");
scanf("%s",arr);
k = find(p,arr);
if(k == -1)
printf("無此聯繫人!");
else if(k>=0)
{
printf("請輸入要修改的信息:\n");
Scanf(p,k);
print(p,k);
printf("修改完成!\n");
}
}
}
void show(pCon p)//顯示所有聯繫人
{
int j = 0;
if(p->count==0)
{
printf("通訊錄爲空!\n");
}
else
{
while(j<p->count)
{
print(p, j);
j++;
}
}
}
void delete_all(pCon p)//刪除所有聯繫人
{
if(p->count==0)
{
printf("通訊錄爲空!\n");
}
else
{
p->count=0;
printf("已清空!");
}
}
void sort(pCon p)//按名字排序所有聯繫人
{
int i = 0;
int j = 0;
int n=0;
if(p->count==0)
{
printf("通訊錄爲空!\n");
}
else
{
for(i=0; i<p->count-1; i++)
{
n=i;
for(j=i+1;j<p->count; j++)
{
if(strcmp(p->peo[n].name,p->peo[j].name)>0)
n=j;
}
if(n!=i)
{
Peo tmp;
tmp = p->peo[n];
p->peo[n] = p->peo[i];
p->peo[i] = tmp;
}
}
printf("排序完成!\n");
}
}
void menu()//菜單
{
printf("\n");
printf("\t\t\t***************************通訊錄*************************\n");
printf("\n");
printf("\t\t\t************** 1. 添加聯繫人信息 **************\n");
printf("\t\t\t************** 2. 刪除指定聯繫人信息 **************\n");
printf("\t\t\t************** 3. 查找指定聯繫人信息 **************\n");
printf("\t\t\t************** 4. 修改指定聯繫人信息 **************\n");
printf("\t\t\t************** 5. 顯示所有聯繫人信息 **************\n");
printf("\t\t\t************** 6. 清空所有聯繫人 **************\n");
printf("\t\t\t************** 7. 以名字排序所有聯繫人**************\n");
printf("\t\t\t************** 0. 退出 **************\n");
}
void init(pCon p)//開闢內存以及初始化
{
p->peo = (Peo*)malloc(M*sizeof(Peo));
if(p->peo==NULL)
{
printf("out of memory!\n");
exit(EXIT_FAILURE);
}
else
{
memset(p->peo,0,M*sizeof(Peo));
p->count = 0;
p->num = M;
}
}
int main()
{
int input = 1;
Con con;
init(&con);
while(input)
{
menu();
printf("請選擇您所要進行的操作:");
scanf("%d",&input);
switch(input)
{
case 1:Add(&con);
break;
case 2:Delete(&con);
break;
case 3:Find(&con);
break;
case 4:revise(&con);
break;
case 5:show(&con);
break;
case 6:delete_all(&con);
break;
case 7:sort(&con);
break;
case 0:
input = 0;
break;
default:
printf("輸入有誤,請重新輸入!");
break;
}
}
free(con.peo);
system("pause");
return 0;
}