欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言實(shí)現(xiàn)制作通訊錄(新手推薦)

 更新時(shí)間:2022年09月22日 16:43:48   作者:游動(dòng)的木魚  
本文推薦給C語(yǔ)言學(xué)習(xí)到結(jié)構(gòu)體的新手們,供其練習(xí)。這篇文章主要是利用C語(yǔ)言制作一個(gè)簡(jiǎn)單的通訊錄功能,感興趣的小伙伴可以跟隨小編一起了解一下

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

通訊錄可以用來(lái)存儲(chǔ)1000個(gè)人的信息,每個(gè)人的信息包括:姓名、性別、年齡、電話、住址

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

  • 添加聯(lián)系人信息
  • 刪除指定聯(lián)系人信息
  • 查找指定聯(lián)系人信息
  • 修改指定聯(lián)系人信息
  • 顯示所有聯(lián)系人信息
  • 清空所有聯(lián)系人
  • 以名字排序所有聯(lián)系人

二、通訊錄初步準(zhǔn)備:

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

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

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

如下圖: 

三、程序編寫

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

步驟1、首先根據(jù)通訊錄所包含的信息要求,在頭文件中構(gòu)造結(jié)構(gòu)體PeoIfo,即通訊錄要求包含的信息;再構(gòu)造結(jié)構(gòu)體contact用于儲(chǔ)存多個(gè)聯(lián)系人。(注:本段代碼使用#define是因?yàn)檎麄€(gè)程序中會(huì)多次用到這些數(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、在第一個(gè).c文件中寫主函數(shù)main(),對(duì)步驟1中所構(gòu)造的結(jié)構(gòu)體進(jìn)行初始化,初始化函數(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、再另外一個(gè).c文件中編寫該初始化函數(shù),使其實(shí)現(xiàn)初始化功能。

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

步驟5、回到主函數(shù)main()中。編寫程序菜單menu(),再編寫Switch語(yǔ)句,對(duì)應(yīng)菜單中的選項(xiàng)。此處以1.add為例,1.add選項(xiàng)為增加聯(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("請(qǐng)選擇:");
        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("輸入錯(cuò)誤,請(qǐng)重新輸入:\n");
            break;
        }
    } while (input);
 
    return 0;
}

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

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

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

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

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

步驟8、同理重復(fù)步驟6、7,實(shí)現(xiàn)剩余的刪除、查找等功能。此處不一一贅述,讀者在學(xué)會(huì)add的編寫之后,建議獨(dú)自進(jìn)行其他功能的函數(shù)實(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("請(qǐng)選擇:");
        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("輸入錯(cuò)誤,請(qǐng)重新輸入:\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"
 
//打印項(xiàng)目
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("請(qǐng)輸入姓名\n");
    scanf("%s", pc->data[pc->sz].name);
    printf("請(qǐng)輸入性別\n");
    scanf("%s", pc->data[pc->sz].sex);
    printf("請(qǐng)輸入年齡\n");
    scanf("%d", &(pc->data[pc->sz].age));
    printf("請(qǐng)輸入電話\n");
    scanf("%s", pc->data[pc->sz].tel);
    printf("請(qǐng)輸入住址\n");
    scanf("%s", pc->data[pc->sz].adr);
    pc->sz++;    
}
 
//刪除聯(lián)系人
void del(struct contact* pc)
{
    printf("請(qǐng)輸入要?jiǎng)h除的聯(lián)系人姓名:\n");
    char delname[nameMAX];
    scanf("%s", &delname);
    int ret=FindPOS(pc, delname);
    if (-1 == ret)
    {
        printf("要?jiǎng)h除的聯(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("請(qǐng)輸入要找的聯(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("請(qǐng)輸入要修改的聯(lián)系人姓名:\n");
    char moname[nameMAX];
    scanf("%s", &moname);
    int ret = FindPOS(pc, moname);
    if (-1 == ret)
    {
        printf("沒有找到聯(lián)系人\n");  
    }
    else
    {
        printf("請(qǐng)輸入姓名\n");
        scanf("%s", pc->data[ret].name);
        printf("請(qǐng)輸入性別\n");
        scanf("%s", pc->data[ret].sex);
        printf("請(qǐng)輸入年齡\n");
        scanf("%d", &(pc->data[ret].age));
        printf("請(qǐng)輸入電話\n");
        scanf("%s", pc->data[ret].tel);
        printf("請(qǐng)輸入住址\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語(yǔ)言實(shí)現(xiàn)制作通訊錄(新手推薦)的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言通訊錄的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實(shí)現(xiàn)簡(jiǎn)單走迷宮的代碼

    C++實(shí)現(xiàn)簡(jiǎn)單走迷宮的代碼

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單走迷宮的代碼,利用回溯法求解,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C++中日期類的常見題目合集分享

    C++中日期類的常見題目合集分享

    這篇文章主要為大家詳細(xì)介紹了一些C++中日期類的常見題目,文中的示例代碼講解詳細(xì),對(duì)我們掌握C++有一定的幫助,感興趣的小伙伴可以了解一下
    2023-06-06
  • C語(yǔ)言中結(jié)構(gòu)體變量私有化詳解

    C語(yǔ)言中結(jié)構(gòu)體變量私有化詳解

    結(jié)構(gòu)是由基本數(shù)據(jù)類型構(gòu)成的、并用一個(gè)標(biāo)識(shí)符來(lái)命名的各種變量的組合,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中結(jié)構(gòu)體變量私有化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • C/C++中extern

    C/C++中extern "C" 的作用分析

    這篇文章主要介紹了C/C++中extern "C" 的作用,是在進(jìn)行C/C++程序設(shè)計(jì)中非常常見的用法,需要的朋友可以參考下
    2014-09-09
  • C++實(shí)現(xiàn)LeetCode(89.格雷碼)

    C++實(shí)現(xiàn)LeetCode(89.格雷碼)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(89.格雷碼),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++虛函數(shù)表深入研究

    C++虛函數(shù)表深入研究

    這篇文章主要介紹了C++的虛函數(shù)表,內(nèi)容非常詳細(xì),思路清晰,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-10-10
  • 一文弄懂C語(yǔ)言EOF

    一文弄懂C語(yǔ)言EOF

    在 C語(yǔ)言中,EOF 是一個(gè)宏定義,EOF 常常用于文件的輸入輸出中,當(dāng)讀取到文件結(jié)束時(shí),會(huì)返回 EOF,本文就詳細(xì)的介紹一下具體使用方法,感興趣的可以一起來(lái)了解一下
    2023-05-05
  • C++11實(shí)現(xiàn)簡(jiǎn)易定時(shí)器的示例代碼

    C++11實(shí)現(xiàn)簡(jiǎn)易定時(shí)器的示例代碼

    這篇文章主要介紹了C++11實(shí)現(xiàn)簡(jiǎn)易定時(shí)器的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C語(yǔ)言循環(huán)結(jié)構(gòu)詳解

    C語(yǔ)言循環(huán)結(jié)構(gòu)詳解

    本文主要介紹C語(yǔ)言循環(huán)結(jié)構(gòu)的基礎(chǔ)知識(shí),這里整理了循環(huán)的基礎(chǔ)資料并附簡(jiǎn)單的代碼示例詳細(xì)講解,有需要的小伙伴可以參考下
    2021-10-10
  • C++的內(nèi)聯(lián)函數(shù)你了解嗎

    C++的內(nèi)聯(lián)函數(shù)你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的內(nèi)聯(lián)函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論