【C语言】通讯录管理系统(容量固定)

话不多说,直接上代码。

tongxunlu.h

#ifndef _TONGXUNLU_H_
#define _TONGXUNLU_H_
#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


typedef struct tongxunlu
{
    char name[16];
    char sex;
    int age;
    char number[16];
    char address[32];

}list;


void init(list * signal);                   //初始化通讯录
void all_show(list *signal);                //显示所有联系人信息
void my_add(list *signal);                  //添加联系人
void my_delete(list *data,list *signal);    //删除联系人信息
list * my_reserch(list *signal);            //查找联系人信息
void my_remove(list *signal);               //修改联系人信息
void name_sort(list *signal);               //联系人按照姓名排序
void clear_all(list *signal);               //清空所有联系人


#endif

tongxunlu.c

#include "tongxunlu.h"

static int tag =0;  //静态全局变量tag,用来记录当前通讯录中的个数

void my_add(list *signal)       //添加联系人
{

    if(tag<10)
    {
        signal+= tag;
        printf("Please Enter: \n ");
        printf("    name\tsex\tage\tnumber\t     address\n ");
        scanf("%s%s%d%s%s",signal->name,&signal->sex,&signal->age,signal->number,signal->address);
        tag++;  
    }
    else
    {   
        printf("the tongxunlu is full!!\n");
    }

}



list * my_reserch(list *signal)     //查找联系人信息
{
    int count = 0;
    char str[16] ={'\0'};
    printf("请输入要查找的联系人姓名:");
    scanf("%s",str);
    while(count<10)
    {
        if(strcmp(str,signal->name)==0)
        {
            return signal;
        }
        signal++;
        count++;
    }

    return NULL;

}



void my_delete(list *data,list *signal)     //删除联系人信息
{   

    memset(data,0,sizeof(list));
    list *i;

    for(i=data;i<signal+9;i++)
    {
        *data = *(data+1);
        data++;
    }
    memset(data,0,sizeof(list));
    tag--;

}



void my_remove(list *signal)        //修改联系人信息
{   
    int n=0;
    printf("修改联系人的哪个信息:》1 姓名 》2 性别 》3 年龄 》4 电话号码 》5住址\n");
    scanf("%d",&n);
    switch(n)
    {
        case 1:     
            {
                printf("名字修改为:");
                scanf("%s",signal->name);
            }break;
        case 2:     
            {
                printf("性别修改为:");
                scanf("%s",&signal->sex);
            }break;
        case 3:     
            {
                printf("年龄修改为:");
                scanf("%d",&signal->age);

            }break;
        case 4:     
            {
                printf("电话号码修改为:");
                scanf("%s",signal->number);
            }break;
        case 5:     
            {
                printf("住址修改为:");
                scanf("%s",signal->address);
            }break;

        default:    printf("Error!!Please try again.\n"); break;
    }


}



void all_show(list *signal)     //显示所有联系人信息
{

    printf("    name\tsex\tage\tnumber\t     address\n ");
    int count=0;
    while(count<10)
    {
        printf("%s\t%c\t%d\t%s\t%s\n",signal->name,signal->sex,signal->age,signal->number,signal->address);
        signal++;
        count++;
    }
}



void clear_all(list *signal)            //清空通讯录,相当于初始化
{
    int count=0;
    while(count<10)
    {
        memset(signal,0,sizeof(list));
        signal++;
        count++;
    }
}



static void swap(list * x,list * y)
{
    list  tmp ;
    tmp = *x;
    *x = *y;
    *y = tmp;
}
void name_sort(list *signal)        //联系人按照姓名排序
{
    int i=0,j=0,k=0;
    for(i=0;i<9;i++)    //冒泡排序
    {
        list *buf = signal;
        for(j=0;j<9-i;j++)
        {
            if(strcmp(buf->name,(buf+1)->name)>0)
            {
                swap(buf,buf+1);
            }
            buf++;
        }
    }

    for(k=0;k<tag;k++)
    {
        *(signal) = *(signal+10-tag);//排好序后,中间不要有空白,分别移动到对应的位置
        signal++;
    }

    memset(signal,0,(10-tag)*sizeof(list));//移动后,将当前还能添加的10-tag个联系人内存空间置0
}

test.c

#include"tongxunlu.h"

void menu()
{
    printf("*************************欢迎进入,通讯录管理系统**********************\n");
    printf("**********》1 进入通讯录系统************》2 退出通讯录系统*************\n");
    printf("***********************************************************************\n");
}


void son_menu()
{
    printf("************************欢迎进入,通讯录管理系统*****************************\n");
    printf("**********》1 添加联系人*********************》2 删除联系人信息**************\n");
    printf("**********》3 查找联系人信息*****************》4 修改联系人信息**************\n");
    printf("**********》5 显示所有联系人*****************》6 清空所有联系人**************\n");
    printf("**********》7 联系人按名排序*************************************************\n");
}


void gongneng()
{   
    int q=0;
    list *ret,person[10];
    clear_all(person);

do
{
    son_menu();
    int n =0,m=0;
    printf("Please Select Gongneng:");
    scanf("%d",&n);
    switch(n)
    {
        case 1:         
            do
            {
                my_add(person);
                printf("添加成功~~\n");
                printf("是否继续添加?是(1),否(0)\n");
                scanf("%d",&m);
            }while(m);
        break;


        case 2:     
            do
            {
                ret = my_reserch(person);
                if(ret!= NULL)
                {
                    my_delete(ret,person);
                    printf("删除成功~~\n");
                }
                else
                {
                    printf("此通讯录无此人!!!\n");
                }   
                printf("是否继续删除?是(1),否(0)\n");
                scanf("%d",&m);
            }while(m);  
        break;


        case 3:     
            ret = my_reserch(person);
            if(ret!= NULL)
            {
                printf("%s   %c   %d   %s   %s\n",          ret->name,ret->sex,ret->age,ret->number,ret->address);
            }
            else
            {
                printf("此通讯录无此人!!!\n");
            }       
        break;


        case 4:     
            do
            {
                ret = my_reserch(person);
                if(ret!= NULL)
                {
                    my_remove(ret);
                    printf("修改成功~~\n");
                }
                else
                {
                    printf("此通讯录无此人!!!\n");
                }   
                printf("是否继续修改?是(1),否(0)\n");
                scanf("%d",&m);
            }while(m);
        break;


        case 5:     all_show(person);   break;


        case 6:     clear_all(person);      printf("清空联系人成功~~\n");    break;


        case 7:     name_sort(person);      printf("排序成功~~\n");           break;


        default:    printf("Enter error,Please try again\n");   break;
    }

    printf("是否回到功能页?(1),否(0)\n");
    scanf("%d",&q);

}while(q);

}



int main()
{
    while(1)
    {           
        menu();
        int num =0;
        printf("Please Enter:");
        scanf("%d",&num);
        switch(num)
        {
        case 1:     gongneng();     break;
        case 2:     exit(1);    break;
        default:    printf("Enter error,Please try again\n");   break;
        }
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值