C语言通讯录

Windows vc++6.0环境下可用代码。
结构体数组实现。
已知问题:排序只能排序一次。

#include <windows.h> 
#include <stdlib.h>
#include <string.h>
//////////////////////////////////////////////全局变量////////////////////////////////////////////////////////////////
int n=0;            //表示正在使用或修改哪一组数据
struct Sign{                    //定义一个结构体

    char name[8];          //姓名

    char sex[4];           //性别

    char birthday[12];     //生日

    char phone[11];        //电话

    char addr[30];         //地址
}  *pe;  

/////////////////////////////////////////函数声明///////////////////////////////////////////////////////////////////
void input();
void CheckFace();
void Selelctname();
void Selelctphone();
void Selelctaddr();
void Selelcbir();
void Change();
void ShowMenu();
void Sortname();
void Sortphone();
void sortface();
void Sortbir();
int cmp_name();
int cmp_phone();
int cmp_addr();
int cmp_bir();
//////////////////////////////////////////////排序函数/////////////////////////////////////////////////////////////////

void Sortphone()//按电话排序
{
    qsort(pe,n,sizeof(pe[0]),cmp_phone);
    system("cls");
    ShowMenu();
}
void Sortaddr()//按地址排序
{
    qsort(pe,n,sizeof(pe[0]),cmp_addr);
    system("cls");
    ShowMenu();
}
void Sortbir()//按生日排序
{
    qsort(pe,n,sizeof(pe[0]),cmp_bir);
    system("cls");
    ShowMenu();
}
void Sortname()//按姓名排序
{
    qsort(pe,n,sizeof(pe[0]),cmp_name);
    system("cls");
    ShowMenu();
}
// int cmp(const void *p1, const void *p2)  //这种是对数据排序
//{
//return(( *(const struct Sign *)p1).name - (*(const struct Sign *)p2).name;
//}

int cmp_name(const void *p1, const void *p2)    //对结构体里的数组排序
{
    struct Sign *sp1 = *(struct Sign * const *)p1;
    struct Sign *sp2 = *(struct Sign * const *)p2;
    return sp1->name - sp2->name;
}
int cmp_phone(const void *p1, const void *p2)    //对结构体里的数组排序
{
    struct Sign *sp1 = *(struct Sign * const *)p1;
    struct Sign *sp2 = *(struct Sign * const *)p2;
    return sp1->phone - sp2->phone;
}
int cmp_addr(const void *p1, const void *p2)    //对结构体里的数组排序
{
    struct Sign *sp1 = *(struct Sign * const *)p1;
    struct Sign *sp2 = *(struct Sign * const *)p2;
    return sp1->addr - sp2->addr;
}
int cmp_bir(const void *p1, const void *p2)    //对结构体里的数组排序
{
    struct Sign *sp1 = *(struct Sign * const *)p1;
    struct Sign *sp2 = *(struct Sign * const *)p2;
    return sp1->birthday - sp2->birthday;
}
void sortface()//排序界面
{
    int Check_key; //决定进入什么功能
    system("color 0C");
    printf("###########          通讯录  v1.0           ################\n");

    printf("############################################################\n");

    printf("#                                                          #\n");

    printf("#                 1------按姓名排序                        #\n");

    printf("#                                                          #\n");

    printf("#                 2------按电话号码排序                    #\n");

    printf("#                                                          #\n");

    printf("#                 3------按地址排序                        #\n");

    printf("#                                                          #\n");

    printf("#                 4------按生日排序                        #\n");

    printf("#                                                          #\n");

    printf("############################################################\n");

    printf("#                                                201807    #\n");

    printf("############################################################\n");

    scanf("%d",&Check_key);
    switch(Check_key)
    {
    case 1:
        system("cls");
        Sortname(); 
        break;
    case 2:
        system("cls");
        Sortphone();
        break;
    case 3:
        system("cls");
        Sortaddr();
        break;
    case 4:
        system("cls");
        Sortbir();
        break;      

    }

}

//////////////////////////////////////修改函数/////////////////////////////////////////////////
void Change()

{   char ChangeName[8]; 

int changekey;
int n_name=0;
int i;              
system("color 01");
printf("请输入你要修改的条目的姓名:");

scanf("%s",&ChangeName);


for(;n_name<=n;n_name++)

{   

    if(strcmp(pe[n_name].name,ChangeName)==0)   

       {    printf("%10.8s %6.6s %10.12s %11.11s %16.16s\n",pe[n_name].name,pe[n_name].sex,pe[n_name].birthday,pe[n_name].phone,pe[n_name].addr);
    printf("您要修改的是这条记录吗?1---是|2---否\n");

    scanf("%d",&i);

    if(i==1)

    { 

        printf("你要修改的通讯录为:\n");

        printf("%10.8s %6.6s %10.12s %11.11s %16.16s\n",pe[n_name].name,pe[n_name].sex,pe[n_name].birthday,pe[n_name].phone,pe[n_name].addr);

        printf("请选择您的操作     1---删除|2---修改\n");

        scanf("%d",&changekey); 

        if(changekey==1) //信息删除

        {


            int num=0;
            for(;num<=n;num++)
            {
                strcpy(pe[n_name].name,pe[n_name+1].name);

                strcpy( pe[n_name].sex, pe[n_name+1].sex);

                strcpy( pe[n_name].birthday,pe[n_name+1].birthday);

                strcpy( pe[n_name].phone,pe[n_name+1].phone);

                strcpy(  pe[n_name].addr,pe[n_name+1].addr);
                n_name++;
            }

        }

        system("cls");  

    } 

    if(changekey==2)//信息修改

    {
        printf("姓名:");scanf("%s",pe[n_name].name);

        printf("性别:");scanf("%s",pe[n_name].sex);

        printf("生日:");scanf("%s",pe[n_name].birthday);

        printf("电话号码:");scanf("%s",pe[n_name].phone);

        printf("地址:");scanf("%s",pe[n_name].addr);

        printf("\n  OK!    \n");
        system("cls");

    }   

    }           



}

ShowMenu() ;

}

///////////////////////查找函数////////////////////////////////////////////


void Selelcbir()//按生日查找

{   
    char Findbir[30];  //保存输入的查询生日
    int i=0;
    int n_bir=0;        //在生日查询中的循环变量
    printf("%10.8s %6.6s %10.10s %11.4s %16.6s \n","姓名","性别","生日","电话","地址");   

    printf("---------------------------------------------------------------------\n");

    printf("请输入要查询的生日:");

    scanf("%s",&Findbir);

    for(;n_bir<=n;n_bir++)

    {

        if(strcmp(pe[n_bir].name,Findbir)==0       ) 

        {
            printf("%10.8s %6.6s %10.12s %11.11s %16.16s\n",pe[n_bir].name,pe[n_bir].sex,pe[n_bir].birthday,pe[n_bir].phone,pe[n_bir].addr);
            i++;
        }   
    } 

    printf("共  %d  条\n",i);

} 


void Selelctaddr()//按地址查找

{   
    char Findaddr[30];  //保存输入的查询地址
    int i=0;
    int n_addr=0;        //在地址查询中的循环变量
    printf("%10.8s %6.6s %10.10s %11.4s %16.6s \n","姓名","性别","生日","电话","地址");   

    printf("---------------------------------------------------------------------\n");

    printf("请输入要查询的地址:");

    scanf("%s",&Findaddr);

    for(;n_addr<=n;n_addr++)

    {

        if(strcmp(pe[n_addr].name,Findaddr)==0       ) 

        {
            printf("%10.8s %6.6s %10.12s %11.11s %16.16s\n",pe[n_addr].name,pe[n_addr].sex,pe[n_addr].birthday,pe[n_addr].phone,pe[n_addr].addr);
            i++;
        }   

    } 

    printf("共  %d  条\n",i);

} 

void Selelctphone()//按电话查找

{   
    char phone[11];  //保存输入的电话
    int i=0;
    int n_phone=0;        //在姓名查询中的循环变量
    printf("%10.8s %6.6s %10.10s %11.4s %16.6s \n","姓名","性别","生日","电话","地址");   

    printf("---------------------------------------------------------------------\n");

    printf("请输入要查询的电话:");

    scanf("%s",&phone);

    for(;n_phone<=n;n_phone++)

    {

        if(strcmp(pe[n_phone].name,phone)==0       ) 

        {
            printf("%10.8s %6.6s %10.12s %11.11s %16.16s\n",pe[n_phone].name,pe[n_phone].sex,pe[n_phone].birthday,pe[n_phone].phone,pe[n_phone].addr);
            i++;
        }

    } 

    printf("共  %d  条\n",i);

} 

void Selelctname()//按名字查找

{   
    char FindName[8];  //保存输入的查询姓名 
    int i=0;
    int n_name=0;        //在姓名查询中的循环变量
    printf("%10.8s %6.6s %10.10s %11.4s %16.6s \n","姓名","性别","生日","电话","地址");   

    printf("---------------------------------------------------------------------\n");

    printf("请输入要查询的姓名:");

    scanf("%s",&FindName);

    for(;n_name<=n;n_name++)

    {

        if(strcmp(pe[n_name].name,FindName)==0       ) 

        {
            printf("%10.8s %6.6s %10.12s %11.11s %16.16s\n",pe[n_name].name,pe[n_name].sex,pe[n_name].birthday,pe[n_name].phone,pe[n_name].addr);
            i++;
        }

    } 

    printf("共  %d  条\n",i);

} 

/////////////////////////////////////////菜单界面//////////////////////////////////////////////////////////
void ShowMenu()            //菜单界面
{
    system("color 0A");

    printf("#################          通讯录  v1.0           ###################\n");

    printf("#####################################################################\n");

    printf("#                                                                   #\n");

    printf("#           1-----------------信息录入-------------------           #\n");

    printf("#                                                                   #\n");

    printf("#           2-----------------信息查询-------------------           #\n");

    printf("#                                                                   #\n");

    printf("#           3-----------------信息查看-------------------           #\n");

    printf("#                                                                   #\n");

    printf("#           4-----------------信息修改-------------------           #\n");

    printf("#                                                                   #\n");

    printf("#           5-----------------信息排序-------------------           #\n");

    printf("#####################################################################\n");

    printf("#                                                  201807           #\n");

    printf("#####################################################################\n");
    input();

}
/////////////////////////////////添加数据//////////////////////////////////////////////////////////////////
void add()             //添加一个成员
{   

    //  char ch; 

    system("cls");
    printf("请输入__\n");

    printf("姓名:");scanf("%s",pe[n].name);

    printf("性别:");scanf("%s",pe[n].sex);

    printf("生日:");scanf("%s",pe[n].birthday);

    printf("电话号码:");scanf("%s",pe[n].phone);

    printf("地址:");scanf("%s",pe[n].addr);
    n++;
    system("cls");
    ShowMenu() ;
    //  printf("输入E或e来结束输入?");

    //  getchar();

    //  ch=getchar();

    //  if(ch=='e'||ch=='E')


}


/////////////////////////////////显示函数//////////////////////////////////////////////////
void show()
{  int i;
char *a;//放按的任意按键值
system("color 06");
system("cls");
printf("%10.8s %6.6s %10.10s %11.4s %16.6s \n","姓名","性别","生日","电话","地址");   

printf("---------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
    printf("%10.8s %6.6s %10.12s %11.11s %16.16s\n",pe[i].name,pe[i].sex,pe[i].birthday,pe[i].phone,pe[i].addr);
}
printf("按任意键+回车返回主界面");
scanf("%s",&a);
system("cls");
ShowMenu();

}
///////////////////////////////////按键输入函数////////////////////////////////////////////////////////////////////////////

void input()//负责检测输入和控制使用什么功能
{
    char num;//判断输入的那个数字的容器
    scanf("%s",&num);
    switch(num)
    {
    case '1':
        add();//增添数据
        break;
    case '2':
        CheckFace();//查找数据
        break;
    case '3':
        show();//显示所有数据 
        break;
    case '4':
        Change();//修改或删除数据 
        break;                  

    case '5':
        system("cls");
        sortface();//排序界面
        break;              
    default:
        system("cls");
        printf("输入错误!请重新输入。\n");
        break;
    }
}
//////////////////////////////////////////查询界面///////////////////////////////////////////////////////////
void CheckFace()

{   int Check_key; //决定进入什么功能
system("color 03");
system("cls");
printf("###########          通讯录  v1.0           ################\n");

printf("############################################################\n");

printf("#                                                          #\n");

printf("#                 1------按姓名查询                        #\n");

printf("#                                                          #\n");

printf("#                 2------按电话号码查询                    #\n");

printf("#                                                          #\n");

printf("#                 3------按地址查询                        #\n");

printf("#                                                          #\n");

printf("#                 4------按生日查询                        #\n");

printf("#                                                          #\n");

printf("############################################################\n");

printf("#                                               201807    #\n");

printf("############################################################\n");

scanf("%d",&Check_key);
switch(Check_key)
{
    char ch;
case 1:
    system("cls");
    Selelctname();
    printf("输入任意键结束");
    getchar();
    ch=getchar();
    system("cls");
    break;
case 2:
    system("cls");
    Selelctphone();
    printf("输入任意键结束");
    getchar();
    ch=getchar();
    system("cls");
    break;
case 3:
    system("cls");
    Selelctaddr();
    printf("输入任意键结束");
    getchar();
    ch=getchar();
    system("cls");
    break;
case 4:
    system("cls");
    Selelcbir();
    printf("输入任意键结束");
    getchar();
    ch=getchar();
    system("cls");
    break;



}

}
////////////////////////////////////主函数//////////////////////////////////////////////////////////////

void main()//主函数
{
    while(1)
    {
        ShowMenu() ;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_42828324/article/details/81274575