C语言实现通讯录基本功能

通讯录基本功能

本次实现的通讯录主要包含以下功能:
1. 增加新联系人
2. 通过姓名删除联系人
3. 通过姓名查找联系人
4.修改某个人的某项信息
5. 显示通讯录所有人的信息
6. 根据姓名对联系人进行排序

main函数

main函数通过do-while循环让用户选择功能入口。

#include <stdio.h>
#include "contact.h"
#include<windows.h>
void menu()
{
    printf("***************************\n");
    printf("*** 1.add     2.del     ***\n");
    printf("*** 3.search  4.modify  ***\n");
    printf("*** 5. show   6.sort    ***\n");
    printf("***       0. exit       ***\n");
    printf("***************************\n");
}
int main()
{
    contact my_con;
    InitContact(&my_con);
    int input;
    do{
        menu();
        printf("请输入数字选择");
        scanf("%d", &input);
        switch (input)
        {
        case EXIT:
            exit(0);
            break;
        case ADD:
            Add(&my_con);
            break;
        case DEL:
            Del(&my_con);
            break;
        case SEARCH:
            Search(&my_con); 
            break;
        case MODIFY:
            Modify(&my_con);
            break;
        case SHOW:
            Show(&my_con);
            break;
        case SORT:
            Sort(&my_con);
            break;
        }
    } while (input);
    return 0;
}

头文件声明

本文件中主要包含了各项参数的定义,和需要用到的各项函数的声明。

#ifndef  __CONTACT_H__
#define  __CONTACT_H__

enum OPTION
{
    EXIT,
    ADD,
    DEL,
    SEARCH,
    MODIFY,
    SHOW,
    SORT
};
#define NAME_MAX 20
#define MAX 1000
typedef struct PeoInfo
{
    char name[NAME_MAX];
    int age;
    char sex[10];
    char num[20];
}PeoInfo;
typedef struct date
{
    PeoInfo date[MAX];
    int count;
}contact,*pContact;
void Add(pContact pc); 
void Del(pContact pc);
void Show(pContact pc);
void Search(pContact pc);
void Sort(pContact pc);
void InitContact(pContact pc);
void Modify(pContact pc);
int FindEntry(char name[], pContact pc);
#endif  //__CONTACT_H__

各项功能的具体实现

本文件中包含了需要实现各个函数的详细操作。

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
#include<stdio.h>
#include<string.h>
void InitContact(pContact pc)
{
    pc->count = 0;
    memset(pc->date, 0, sizeof(pc->date));
}
void Add(pContact pc)
{
    if (pc->count == MAX)
    {
        printf("通讯录已满");
        return;
    }
    printf("请输入名字:>\n");
    scanf("%s", pc->date[pc->count].name);
    printf("请输入年龄:>\n");
    scanf("%d", &(pc->date[pc->count].age));
    printf("请输入性别:>\n");
    scanf("%s", pc->date[pc->count].sex);
    printf("请输入号码:>\n"); 
    scanf("%s", &(pc->date[pc->count].num));
    pc->count++;
}
void Show(pContact pc)
{
    int i = 0;
    if (pc->count == 0)
    {
        printf("通讯录为空");
        return;
    }
    printf("%5s %5s %5s %14s\n", "姓名","年龄","性别","电话号码");
    for (i = 0; i < pc->count;i++)
    {
        printf("%5s %5d %5s %14s\n", pc->date[i].name, pc->date[i].age, pc->date[i].sex, pc->date[i].num);
    }
    printf("\n");
}
void Del(pContact pc)//后面的数据往前挪
{
    if (pc->count == 0)
    {
        printf("通讯录为空\n");
        return;
    }
    char name[NAME_MAX];
    int pos = 0;
    printf("请输入要删除人的名字:>\n");
    scanf("%s", name);
    pos = FindEntry(name,pc);
    if (pos == -1)
    {
        printf("要删除的人不存在\n");
        return;
    }
        for (int i = pos; i < pc->count - 1; i++)
        {
            pc->date[i] = pc->date[i + 1];
        }
        pc->count--;
        printf("删除成功\n");
}
int FindEntry(char name[NAME_MAX], pContact pc)
{
    int i = 0;
    for (i = 0; i < pc->count; i++)
    {
        if (strcmp(pc->date[i].name ,name)==0)
        {
            return i;
        }
    }
    return -1;
}
void Search(pContact pc)
{
    printf("请输入要查找的姓名:>");
    char name[NAME_MAX];
    scanf("%s", name);
    int pos = FindEntry(name, pc);
    if (pos == -1)
    {
        printf("要查找的人不存在\n");
        return;
    }
    printf("%5s %5d %5s %14s\n", pc->date[pos].name, pc->date[pos].age, pc->date[pos].sex, pc->date[pos].num);
}
void Modify(pContact pc)
{
    enum type
    {
        NOTING,
        NAME,
        AGE,
        SEX,
        NUM
    }type;
    printf("请输入要修改的姓名:>\n");
    char name2[NAME_MAX];
    scanf("%s", name2);
    int pos = (int)FindEntry(name2, pc);
    if (pos == -1)
    {
        printf("要修改的人不存在\n");
        return;
    }
    printf("请通过数字选择要修改的内容\n");
    printf("1:修改姓名   2::修改年龄   3:修改性别   4修改号码\n");
    int i = 0;
    scanf("%d", &i);
    switch (i)
    {
    case NAME:
        printf("请输入要修改的姓名:>\n");
        char name[NAME_MAX];
        scanf("%s", name);
        strcpy(pc->date[pos].name, name);
        printf("修改成功\n");
        return;
    case AGE:
        printf("请输入要修改的年龄:>\n");
        int age = 0;
        scanf("%d", &age);
        pc->date[pos].age = age;
        printf("修改成功\n");
        return;
    case SEX:
        printf("请输入要修改的性别:>\n");
        char sex[10];
        scanf("%s", sex);
        strcpy(pc->date[pos].sex, sex);
        printf("修改成功\n");
        return;
    case NUM:
        printf("请输入要修改的号码:>\n");
        char num[20];
        scanf("%s", num);
        strcpy(pc->date[pos].num, num);
        printf("修改成功\n");
        return;
    }
}
    void Sort(pContact pc)
    {
        int i = 0; int j = 0;
        for (i = 0; i < pc->count - 1; i++)
        {
            for (j = 0; j < pc->count - i - 1; j++)
            {
                if (strcmp(pc->date[j].name, pc->date[j+1].name)>0)
                {
                    PeoInfo peo = pc->date[j];
                    pc->date[j],pc->date[j+1];
                    pc->date[j + 1] =peo;
                }
            }
        }
        printf("排序成功\n");
    }

程序运行结果演示

这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/higher_and/article/details/80393916