通訊錄:可以存儲1000人的信息,包括姓名、年齡、性別、住址、聯繫方式,並能對其進行刪除、查找、更改、排序、清空、顯示、添加等操作。
AddressBook.h
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<time.h>
#define NAME 15
#define SEX 5
#define PHONE 15
#define ADDRESS 30
#define MAX 1000
typedef struct people
{
char name[NAME];
char sex[SEX];
int age;
char phone[PHONE];
char address[ADDRESS];
}PeopleList;
typedef struct Book
{
PeopleList people[MAX];
int count;
}PBook,*PB;
void menu();//開始界面
void ExitBook();//退出
void ShownBook(PB pbook);//顯示
void AddBook(PB pbook);//添加
void Delate(PB pbook);//刪除
int SearchName(PB pbook, const char* name);//尋找聯繫人下標,方便其他函數操作
void FindBook(PB pbook);//查找
void Empty(PB pbook);//清空
void ModifyBook(PB pbook);//修改
void SortBook(PB pbook);//排序
Book.c
#include"AddressBook.h"
void menu()
{
printf("***************************************\n");
printf("************小胖墩的通訊錄*************\n");
printf("**0.退出通訊錄 1.添加聯繫人**\n");
printf("**2.刪除聯繫人 3.查找聯繫人**\n");
printf("**4.修改信息 5.顯示通訊錄**\n");
printf("**6.清空通訊錄 7.按名字排序**\n");
printf("***************************************\n");
}
int SearchName(PB pbook, const char* name)
{
int i = 0;
for (; i < pbook->count; i++)
{
if (0 == strcmp((pbook->people[i].name), name))
return i;
}
return -1;//不能返回0,有可能查到的聯繫人是第一個,下標爲0,返回0的話,則會將第一個聯繫人漏掉
}
void ExitBook()//退出
{
printf("bye!\n");
Sleep(1000);
}
void ShownBook(PB pbook)//顯示
{
if (pbook->count == 0)
printf("通訊錄爲空!\n");
else
{
int i = 0;
printf("****************************小胖墩的通訊錄*************************\n");
printf("%10s\t%5s\t%6s\t%9s\t%9s\t\n", "姓名", "年齡", "性別", "住址", "聯繫方式");
for (i = 0; i < pbook->count; i++)
{
printf("%10s\t%4d\t%5s\t%9s\t%10s\t\n", pbook->people[i].name, pbook->people[i].age, pbook->people[i].sex,
pbook->people[i].address, pbook->people[i].phone);
}
}
}
void AddBook(PB pbook)//添加
{
if (MAX == pbook->count)
{
printf("通訊錄已滿!\n");
return;
}
else
{
printf("請輸入姓名>");
scanf("%s", pbook->people[pbook->count].name);
printf("請輸入年齡>");
scanf("%d", &(pbook->people[pbook->count].age));
printf("請輸入性別>");
scanf("%s", pbook->people[pbook->count].sex);
printf("請輸入住址>");
scanf("%s", pbook->people[pbook->count].address);
printf("請輸入電話>");
scanf("%s", pbook->people[pbook->count].phone);
(pbook->count)++;
}
}
void Delate(PB pbook)//刪除
{
if (pbook->count <= 0 || pbook->count > MAX)
{
printf("沒有聯繫人,無法執行此操作!\n");
return;
}
else
{
printf("請輸入你要刪除的對象>");
char name[NAME] = { 0 };
scanf("%s", name);
int ret = SearchName(pbook, name);//查找刪除對象的下標
if (ret!=-1)//刪除對象即將後面元素依次前移一位
{
/*//優化,刪除的對象和最後一個元素交換,數量減1實現刪除
PeopleList tmp;
tmp=pbook->people[ret];
pbook->people[ret] = pbook->people[pbook->count-1];
pbook->people[pbook->count-1] = tmp;
pbook->count--;
printf("刪除成功!\n");
SortBook(pbook);*/
for (int i = ret; i < pbook->count; i++)
{
pbook->people[i] = pbook->people[i + 1];
}
pbook->count--;
}
else
printf("沒有此聯繫人!\n");
}
}
void FindBook(PB pbook)
{
if (0 == pbook->count)
{
printf("無此聯繫人!\n");
return;
}
printf("請輸入你要查找的對象>");
char name[10] = { 0 };
scanf("%s", name);
int ret = SearchName(pbook, name);
if (ret!=-1)
{
printf("找到了你要查找的對象>\n");
printf("姓名:%s 年齡:%d 性別:%s 住址:%s 聯繫方式:%s\n", pbook->people[ret].name,
pbook->people[ret].age,pbook->people[ret].sex,pbook->people[ret].address,pbook->people[ret].phone);
}
else
{
printf("沒有此聯繫人!\n");
return;
}
}
void Empty(PB pbook)
{
pbook->count = 0;
printf("清空成功!\n");
}
void ModifyBook(PB pbook)
{
if (0 == pbook->count)
{
printf("通訊錄爲空,無法執行此操作!\n");
return;
}
printf("請輸入需要修改的對象>");
char name[NAME] = { 0 };
scanf("%s", name);
int ret=SearchName(pbook, name);
if (ret != -1)
{
int input = 0;
printf("修改什麼內容>\n");
printf("**1.姓名 2.年齡 3.性別 4.住址 5.聯繫方式**\n");
scanf("%d",&input);
switch (input)
{
case 1:
printf("輸入新姓名>");
char NewName[NAME] = { 0 };
scanf("%s", &NewName);
strcpy(pbook->people[ret].name,NewName);
break;
case 2:
printf("輸入新年齡>");
int Newage = 0;
scanf("%d", &Newage);
pbook->people[ret].age = Newage;
break;
case 3:
printf("輸入新性別>");
char Newsex[SEX] = { 0 };
scanf("%s", &Newsex);
strcpy(pbook->people[ret].sex, Newsex);
break;
case 4:
printf("輸入新住址>");
char Newaddres[ADDRESS] = { 0 };
scanf("%s", &Newaddres);
strcpy(pbook->people[ret].address, Newaddres);
break;
case 5:
printf("輸入新聯繫方式>");
char Newphone[PHONE] = { 0 };
scanf("%s", &Newphone);
strcpy(pbook->people[ret].phone, Newphone);
break;
default:
break;
}
}
else
{
printf("沒有此聯繫人!\n");
return;
}
}
void SortBook(PB pbook)
{
if (0 == pbook->count)
{
printf("通訊錄空!\n");
return;
}
for (int i = 0; i < pbook->count; i++)//冒泡排序
{
for (int j = i+1; j < pbook->count; j++)
{
if (1 == strcmp(pbook->people[i].name, pbook->people[i + 1].name))
{
PeopleList tmp=pbook->people[i];
pbook->people[i] = pbook->people[i + 1];
pbook->people[i + 1] = tmp;
}
}
}
ShownBook(pbook);
}
test.c
#include"AddressBook.h"
int main()
{
menu();
PBook pbook = { 0 };
while (1)
{
printf("請選擇>");
int input = 0;
scanf("%d", &input);
switch (input)
{
case 1:
AddBook(&pbook);
break;
case 2:
Delate(&pbook);
break;
case 3:
FindBook(&pbook);
break;
case 4:
ModifyBook(&pbook);
break;
case 5:
ShownBook(&pbook);
break;
case 6:
Empty(&pbook);
break;
case 7:
SortBook(&pbook);
break;
case 0:
ExitBook();
return 0;
default:
printf("選擇錯誤");
break;
}
}
system("pause");
return 0;
}