C語言~通訊錄,可實現刪除、查找、更改等操作

通訊錄:可以存儲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;
}
發佈了55 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章