溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用C語言實現(xiàn)通訊錄功能

發(fā)布時間:2022-09-23 09:53:03 來源:億速云 閱讀:136 作者:iii 欄目:開發(fā)技術

這篇文章主要講解了“怎么用C語言實現(xiàn)通訊錄功能”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用C語言實現(xiàn)通訊錄功能”吧!

一、本通訊錄要實現(xiàn)的功能

通訊錄可以用來存儲1000個人的信息,每個人的信息包括:姓名、性別、年齡、電話、住址

通訊錄可執(zhí)行的操作如下:

  • 添加聯(lián)系人信息

  • 刪除指定聯(lián)系人信息

  • 查找指定聯(lián)系人信息

  • 修改指定聯(lián)系人信息

  • 顯示所有聯(lián)系人信息

  • 清空所有聯(lián)系人

  • 以名字排序所有聯(lián)系人

二、通訊錄初步準備:

1.創(chuàng)建一個.c文件,編寫主函數(shù)main;

2.再創(chuàng)建一個.c文件,用于集中存放1中的.c文件所使用到的自定義函數(shù);

3.創(chuàng)建一個.h頭文件,用于申明1中的.c文件所使用到的函數(shù)。

如下圖: 

怎么用C語言實現(xiàn)通訊錄功能

三、程序編寫

下文將介紹程序的編寫思路:

步驟1、首先根據(jù)通訊錄所包含的信息要求,在頭文件中構造結構體PeoIfo,即通訊錄要求包含的信息;再構造結構體contact用于儲存多個聯(lián)系人。(注:本段代碼使用#define是因為整個程序中會多次用到這些數(shù)值,通過#define的方式若后期要修改值,不需要通篇去修改。)

#define MAX 100
#define nameMAX 20
#define sexMAX 10
#define telMAX 20
#define adrMAX 20
 
struct PeoIfo
{
    char name[nameMAX];
    char sex[sexMAX];
    int age;
    char tel[telMAX];
    char adr[adrMAX];
};
 
struct contact
{
    struct PeoIfo data[MAX];
    int sz;
};

步驟2、在第一個.c文件中寫主函數(shù)main(),對步驟1中所構造的結構體進行初始化,初始化函數(shù)次數(shù)命名為InitContact(&con)。(注:此處段代碼需要引用頭文件“contact.h”)

#include"contact.h"
 
int main() {
 
    int input = 0;
    struct contact con;
    //初始化
    InitContact(&con);
 
 
 
    return 0;
}

步驟3、在頭文件中申明初始化函數(shù)

//初始化
void InitContact(struct contact* pc);

步驟4、再另外一個.c文件中編寫該初始化函數(shù),使其實現(xiàn)初始化功能。

//初始化
void InitContact(struct contact* pc)
{
    pc->sz = 0;
    memset(pc->data, 0, MAX * sizeof(struct PeoIfo));
 
}

步驟5、回到主函數(shù)main()中。編寫程序菜單menu(),再編寫Switch語句,對應菜單中的選項。此處以1.add為例,1.add選項為增加聯(lián)系人。

#include"contact.h"
void menu()
{
    printf("*****************************\n");
    printf("****1.add       2.del    ****\n");
    printf("****3.search    4.modify ****\n");
    printf("****5.show      6.empty  ****\n");
    printf("****7.sort      0.exit   ****\n");
    printf("*****************************\n");
}
int main() {
 
    int input = 0;
    struct contact con;
    //初始化
    InitContact(&con);
 
    do
    {
        menu();
        printf("請選擇:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            add(&con);
            break;
        case 2:
            del(&con);
            break;
        case 3:
            search(&con);
            break;
        case 4:
            modify(&con);
            break;
        case 5:
            show(&con);
            break;
        case 6:
            InitContact(&con);//直接給他初始化不就清空了。
            break;
        case 7:
            Sort(&con);
            break;
        case 0:
            printf("已退出通訊錄。\n");
            break;
        default:
            printf("輸入錯誤,請重新輸入:\n");
            break;
        }
    } while (input);
 
    return 0;
}

步驟6、在.h頭文件中申明函數(shù)

//添加聯(lián)系人
void add(struct contact* pc);

步驟7、在另外一個.c文件中,對add函數(shù)編寫,使其達到添加聯(lián)系人的功能。此處介紹一下

pc->data[pc->sz].name的含義,pc->data[i],對data中的第i個聯(lián)系人的結構體PeoIfo進行解引用,.name便是指該聯(lián)系人的姓名。該段代碼末尾pc->sz++,是指聯(lián)系人+1。

//添加聯(lián)系人
void add(struct contact* pc)
{
    if (pc->sz >= MAX)
    {
        printf("通訊錄已滿。\n");
        return;
    }
    printf("請輸入姓名\n");
    scanf("%s", pc->data[pc->sz].name);
    printf("請輸入性別\n");
    scanf("%s", pc->data[pc->sz].sex);
    printf("請輸入年齡\n");
    scanf("%d", &(pc->data[pc->sz].age));
    printf("請輸入電話\n");
    scanf("%s", pc->data[pc->sz].tel);
    printf("請輸入住址\n");
    scanf("%s", pc->data[pc->sz].adr);
    pc->sz++;    
}

步驟8、同理重復步驟6、7,實現(xiàn)剩余的刪除、查找等功能。此處不一一贅述,讀者在學會add的編寫之后,建議獨自進行其他功能的函數(shù)實現(xiàn)思考。

四、完整程序

1、主函數(shù)所在的.c文件原碼

#include"contact.h"
void menu()
{
    printf("*****************************\n");
    printf("****1.add       2.del    ****\n");
    printf("****3.search    4.modify ****\n");
    printf("****5.show      6.empty  ****\n");
    printf("****7.sort      0.exit   ****\n");
    printf("*****************************\n");
}
int main() {
 
    int input = 0;
    struct contact con;
    //初始化
    InitContact(&con);
 
    do
    {
        menu();
        printf("請選擇:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            add(&con);
            break;
        case 2:
            del(&con);
            break;
        case 3:
            search(&con);
            break;
        case 4:
            modify(&con);
            break;
        case 5:
            show(&con);
            break;
        case 6:
            InitContact(&con);//直接給他初始化不就清空了。
            break;
        case 7:
            Sort(&con);
            break;
        case 0:
            printf("已退出通訊錄。\n");
            break;
        default:
            printf("輸入錯誤,請重新輸入:\n");
            break;
        }
    } while (input);
 
    return 0;
}

2、.h頭文件原碼

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
 
 
#define MAX 100
#define nameMAX 20
#define sexMAX 10
#define telMAX 20
#define adrMAX 20
 
 
struct PeoIfo
{
    char name[nameMAX];
    char sex[sexMAX];
    int age;
    char tel[telMAX];
    char adr[adrMAX];
};
 
struct contact
{
    struct PeoIfo data[MAX];
    int sz;
};
 
//初始化
void InitContact(struct contact* pc);
//添加聯(lián)系人
void add(struct contact* pc);
//刪除聯(lián)系人
void del(struct contact* pc);
//查找聯(lián)系人
void search(struct contact* pc);
//修改聯(lián)系人
void modify(struct contact* pc);
//展示通訊錄
void show(struct contact* pc);
//清空通訊錄
void empty(struct contact* pc);
//按姓名排序
void Sort(struct contact* pc);

3、自定義函數(shù)所在的.c文件原碼

#include"contact.h"
 
//打印項目
void pri()
{
    
    printf("%-15s\t%-10s\t%-10s\t%-10s\t%-20s\n", "姓名", "性別", "年齡", "電話", "住址");
}
 
//查找聯(lián)系人的位置
int FindPOS(const struct contact* pc,char name[])
{
    int i = 0;
    for (i = 0; i < pc->sz; i++)
    {
        if (0==strcmp(pc->data[i].name, name) )
        {
            return i;
        }
    }
    return -1;
}
//初始化
void InitContact(struct contact* pc)
{
    pc->sz = 0;
    memset(pc->data, 0, MAX * sizeof(struct PeoIfo));
 
}
 
//添加聯(lián)系人
void add(struct contact* pc)
{
    if (pc->sz >= MAX)
    {
        printf("通訊錄已滿。\n");
        return;
    }
    printf("請輸入姓名\n");
    scanf("%s", pc->data[pc->sz].name);
    printf("請輸入性別\n");
    scanf("%s", pc->data[pc->sz].sex);
    printf("請輸入年齡\n");
    scanf("%d", &(pc->data[pc->sz].age));
    printf("請輸入電話\n");
    scanf("%s", pc->data[pc->sz].tel);
    printf("請輸入住址\n");
    scanf("%s", pc->data[pc->sz].adr);
    pc->sz++;    
}
 
//刪除聯(lián)系人
void del(struct contact* pc)
{
    printf("請輸入要刪除的聯(lián)系人姓名:\n");
    char delname[nameMAX];
    scanf("%s", &delname);
    int ret=FindPOS(pc, delname);
    if (-1 == ret)
    {
        printf("要刪除的聯(lián)系人不存在\n");
    }
    else
    {
        int i = 0;
        for (i = ret; i < pc->sz - 1; i++)
        {
            pc->data[ret] = pc->data[ret + 1];
        }
        pc->sz--;
        printf("刪除成功\n");
    }
}
 
//查找聯(lián)系人
void search(struct contact* pc)
{
    char sechname[nameMAX];
    printf("請輸入要找的聯(lián)系人:\n");
    scanf("%s", &sechname);
    int ret = FindPOS(pc, sechname);
    if (-1 == ret)
    {
        printf("找不到聯(lián)系人\n");
        return;
    }
    pri();
    printf("%-15s\t%-10s\t%-10d\t%-10s\t%-20s\n",
            pc->data[ret].name,
            pc->data[ret].sex,
            pc->data[ret].age,
            pc->data[ret].tel,
            pc->data[ret].adr);
}
 
 
//修改聯(lián)系人
void modify(struct contact* pc)
{
    printf("請輸入要修改的聯(lián)系人姓名:\n");
    char moname[nameMAX];
    scanf("%s", &moname);
    int ret = FindPOS(pc, moname);
    if (-1 == ret)
    {
        printf("沒有找到聯(lián)系人\n");  
    }
    else
    {
        printf("請輸入姓名\n");
        scanf("%s", pc->data[ret].name);
        printf("請輸入性別\n");
        scanf("%s", pc->data[ret].sex);
        printf("請輸入年齡\n");
        scanf("%d", &(pc->data[ret].age));
        printf("請輸入電話\n");
        scanf("%s", pc->data[ret].tel);
        printf("請輸入住址\n");
        scanf("%s", pc->data[ret].adr);
    }
 
}
 
 
//展示通訊錄
void show(struct contact* pc)
{
    pri();
    int i = 0;
    for (i = 0; i < pc->sz; i++)
    {
        printf("%-15s\t%-10s\t%-10d\t%-10s\t%-20s\n",
            pc->data[i].name,
            pc->data[i].sex,
            pc->data[i].age,
            pc->data[i].tel,
            pc->data[i].adr);
    }
 
}
 
 
//按姓名排序
int compare(void* s1, void* s2)
{
    return strcmp(((struct PeoIfo*)s1)->name, ((struct PeoIfo*)s2)->name);
}
void Sort(struct contact* pc)
{
    qsort(pc->data, pc->sz, sizeof(struct PeoIfo), compare);
}

感謝各位的閱讀,以上就是“怎么用C語言實現(xiàn)通訊錄功能”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對怎么用C語言實現(xiàn)通訊錄功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI