C语言 简单实现通讯录(增删改查排序)

c语言简单实现通讯录

在三个文件里写的代码(在clion成功编译,每个操作都进行过试验,能顺利运行)
①main.c文件里写main等菜单函数
②game.h里写自定义函数的声明
③game.c写对通讯录操作的主要函数

#include"game.h"

//显示菜单
void Menu(){
    printf("*********0.退出********\n");
    printf("1.添加用户   2.删除用户\n");
    printf("3.查找用户   4.修改用户\n");
    printf("5.显示用户   6.排序   \n");
}

int main(){
    //实时输出
    setbuf(stdout,NULL);
    Menu();
    char choice[1] ;

    struct people person;
    //对通讯录进行初始化
    Peo_init(& person);

    do{
        printf("\n输入操作的对应数字:\n");
        gets(choice);

        switch(choice[0]-'0'){

            case ex:
                printf("退出操作\n");
                break;
            case add:
                printf("选择 %d <增加> \n",choice[0]-'0');
                Add_message(&person);
               // system("cls");
                break;
            case del:
                printf("选择 %d <删除> \n",choice[0]-'0');
                Del_message(&person);
                break;
            case ser:
                printf("选择 %d <查找> \n",choice[0]-'0');
                Ser_message(&person);
                break;
            case chang:
                printf("选择 %d <修改> \n",choice[0]-'0');
                Chang_message(&person);
                break;
            case show:
                printf("选择 %d <显示> \n",choice[0]-'0');
                Peo_show(&person);
                break;
            case compare:
                printf("选择 %d <按年龄排序> \n",choice[0]-'0');
                Com_message(&person);
                break;
            default:
                printf("输入无效,重新输入\n");
                break;
        }

    }while(choice[0]-'0');

    return 0;
}
#include"game.h"

//初始化通讯录
void Peo_init(struct people * temp){
printf("\n开始初始化:\n");
    for(int i=0;i<MAX;i++){
        strcpy(temp->peo[i].name,"0");
        strcpy(temp->peo[i].se,"0");
        temp->peo[i].ag=0;
        strcpy(temp->peo[i].te,"0");
        strcpy(temp->peo[i].lo,"0");
    }
    printf("初始化成功!\n");
    temp->size=0;
}

//显示函数
void Peo_show(const struct people * temp){

    if(0==temp->size){
        printf("列表为空\n");
    }
    else
    {
        printf("姓名        性别        年龄        电话        住址\n");
        for(int i=0;i<temp->size;i++) {
            printf("%-8s\t", temp->peo[i].name);
            printf("%-10s\t", temp->peo[i].se);
            printf("%-10d\t", temp->peo[i].ag);
            printf("%-10s\t", temp->peo[i].te);
            printf("%-10s\t\n", temp->peo[i].lo);
        }
    }
}

//新增函数
void Add_message(struct people * temp){

    printf("以下开始输入添加人信息:\n");
    printf("输入姓名:\n");
    gets(temp->peo[temp->size].name);
    printf("输入性别:\n");
    gets(temp->peo[temp->size].se);
    printf("输入年龄:\n");
    scanf("%d",&temp->peo[temp->size].ag);
    getchar();
    printf("输入手机号:\n");
    gets(temp->peo[temp->size].te);
    printf("输入住址:\n");
    gets(temp->peo[temp->size].lo);

    temp->size++;
    printf("添加完成\n");
}

//根据姓名在通讯录里查找 返回下标值
static int  position(char *Name,struct people * temp){
    int i;
    for(i=0;i<temp->size;i++) {
        if(0==strcmp(Name,temp->peo[i].name)){
            printf("%-8s\t", temp->peo[i].name);
        break;}
    }
    if(i==temp->size)
        return -1;
    else
        return i;

}

//删除函数 找到指定删除人的名字 用后续信息覆盖删除人信息 再将列表数-1
void Del_message(struct people * temp){
    printf("输入删除人姓名:\n");
    char person_name[Name_max];
    gets(person_name);
    int pos=position(person_name,temp);
    if(-1==pos)
    {
        printf("列表不存在此人\n");
    }
    else {
        for (int i = pos; i < (temp->size) - 1; i++) {

            strcpy(temp->peo[i].name, temp->peo[i + 1].name);
            strcpy(temp->peo[i].se, temp->peo[i + 1].se);
            temp->peo[i].ag = temp->peo[i + 1].ag;
            strcpy(temp->peo[i].te, temp->peo[i + 1].te);
            strcpy(temp->peo[i].lo, temp->peo[i + 1].lo);
        }
        printf("\n删除成功\n");
        (temp->size)--;
    }

}

//查找函数 找到指定人后显示信息
void Ser_message(struct people * temp){
    printf("输入查找人姓名:\n");
    char person_name[Name_max];
    gets(person_name);
    int pos=position(person_name,temp);
    if(-1==pos)
    {
        printf("列表不存在此人\n");
    }
    else {
        printf("\n姓名        性别        年龄        电话        住址\n");
        printf("%-8s\t", temp->peo[pos].name);
        printf("%-10s\t", temp->peo[pos].se);
        printf("%-10d\t", temp->peo[pos].ag);
        printf("%-10s\t", temp->peo[pos].te);
        printf("%-10s\t\n", temp->peo[pos].lo);

        printf("查找成功\n");
    }
}

//修改函数 找到指定人后修改信息
void Chang_message(struct people * temp){
    printf("输入修改人姓名:\n");
    char person_name[Name_max];
    gets(person_name);
    int pos=position(person_name,temp);
    if(-1==pos)
    {
        printf("列表不存在此人\n");
    }
    else {
        printf("\n姓名        性别        年龄        电话        住址\n");
        printf("输入姓名:\n");
        gets(temp->peo[pos].name);
        printf("输入性别:\n");
        gets(temp->peo[pos].se);
        printf("输入年龄:\n");
        scanf("%d",&temp->peo[pos].ag);
        getchar();
        printf("输入手机号:\n");
        gets(temp->peo[pos].te);
        printf("输入住址:\n");
        gets(temp->peo[pos].lo);
        printf("修改成功\n");
    }
}

//年龄选择排序
void Com_message(struct people * temp){
    int m ,n ,k ,x;
    char name_copy[20]="0";

    for(m=0; m<(temp->size)-1; m++)
    {
        k=m;
        for(n=m+1; n<(temp->size);n++) {
            if (temp->peo[n].ag < temp->peo[k].ag) {
                k = n;
                //printf("最小值下标 %d\n", k);
            }
        }

        strcpy(name_copy, temp->peo[m].name);
        strcpy(temp->peo[m].name, temp->peo[k].name);
        strcpy(temp->peo[k].name, name_copy);

        strcpy(name_copy, temp->peo[m].se);
        strcpy(temp->peo[m].se, temp->peo[k].se);
        strcpy(temp->peo[k].se, name_copy);

        x=temp->peo[m].ag;
        temp->peo[m].ag=temp->peo[k].ag;
        temp->peo[k].ag=x;

        strcpy(name_copy, temp->peo[m].te);
        strcpy(temp->peo[m].te, temp->peo[k].te);
        strcpy(temp->peo[k].te, name_copy);

        strcpy(name_copy, temp->peo[m].lo);
        strcpy(temp->peo[m].lo, temp->peo[k].lo);
        strcpy(temp->peo[k].lo, name_copy);

        /*printf("\n%-8s\t", temp->peo[k].name);
        printf("%-10s\t", temp->peo[k].se);
        printf("%-10d\t", temp->peo[k].ag);
        printf("%-10s\t", temp->peo[k].te);
        printf("%-10s\t\n", temp->peo[k].lo);*/
    }
    printf("按照从小到大的年龄排序成功!\n");
}
#include<stdio.h>
#include<string.h>
#include <stdlib.h>

#define MAX 20
#define Name_max 20
#define Name_sex 10
#define Name_tel 10
#define Name_loca 10

//每个人的信息:姓名 性别 年龄 电话 住址
struct contaction{
    char name[Name_max];
    char se[Name_sex];
    int ag;
    char te[Name_tel];
    char lo[Name_loca];

};
//结构体包含通讯录 以及通讯录的的长度
struct people{
    struct contaction peo[MAX];
    int size;
};

enum operate{
    ex,
    add,
    del,
    ser,
    chang,
    show,
    compare
};

void Peo_init(struct people * temp);//初始化通讯录
void Peo_show(const struct people * temp);//显示信息
void Add_message(struct people * temp);//新增信息
void Del_message(struct people * temp);//删除信息
void Ser_message(struct people * temp);//搜索信息
void Chang_message(struct people * temp);//修改信息
void Com_message(struct people * temp);//按照年龄排序
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值