通讯录管理系统

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
typedef struct DATE{
        char name[20];
        char address[40];
        char email_num[20];
        char telephone_num[20];
        struct DATE* pNext;
    } Date,*Pdate;
void space(void);
void init_printf(void);
int main(void){
    int get;
    Pdate phead;
    int flag=0;
    Pdate init_list(void);
    void show_booklist(Pdate );
    void append_people(Pdate );
    void delete_for_name(Pdate );
    void delete_for_num(Pdate );
    void delete_people(Pdate );
    void found_for_name(Pdate );
    printf("\t\t\t\t欢迎来到XXX通讯录\n");
    init_printf();
     while(scanf("%d",&get)==1){
        if(get!=5&&flag==0){
            if(get==6){
                printf("拜拜!\n");exit(-2);
            }else{
                printf("你输入的序号貌似哪里不对的样子~~~\n");
                printf("请重新输入:\n");
            }
        }
        else{
            flag=1;
            switch(get){
                case 1:show_booklist(phead);break;
                case 2:append_people(phead);break;
                case 3:delete_people(phead);break;
                case 4:found_for_name(phead);break;
                case 5:phead=init_list();break;
                }
        }
    };
    return 0;
}
Pdate init_list(void){                      //初始化整个工作薄
    Pdate pTail;
    int i,len;
    Pdate phead=(Pdate)malloc(sizeof(Date));
    if(phead==NULL){
        printf("\t额,这是一个不应该出现的错误,你换台电脑吧~~~~\n");
        exit(-1);
    }
    pTail=phead;
    pTail->pNext=NULL;
    printf("正在初始化整个电话薄\n");
    printf("请输入你要创建的电话薄最大存储容量(PS:最多存放多少人的信息):\n");
    scanf("%d",&len);
    space();
    if(len>100){
        printf("您的野心也忒大了点吧~~~写个小点的数吧~~~\n");
    }
    else if(len<0){
        printf("亲!!!您见过有负数数量的人类吗??我怀疑您是喵星球来的~~~\n");
    }
    else{
         printf("你将会创建一个存放有%d个人的电话薄\n",len);
         for(i=0;i<len;i++){
            Pdate pNew=(Pdate)malloc(sizeof(Date));
            if(pNew==NULL){
                printf("额,这是一个不应该出现的错误,你换台电脑吧~~~~\n");
                exit(-1);
                }
                printf("这是第%d个联系人",i+1);
            printf("请输入联系人的名字:");
            scanf("%s",pNew->name);
            space();
            printf("请输入联系人的地址:");
            scanf("%s",pNew->address);
            space();
            printf("请输入联系人的邮箱:");
            scanf("%s",pNew->email_num);
            space();
            printf("请输入联系人的电话号码:");
            scanf("%s",pNew->telephone_num);
            space();
            pNew->pNext=pTail->pNext;
            pTail->pNext=pNew;
            pTail=pNew;
         }
         printf("通讯录初始化完毕!\n");
         init_printf();
    }
    return phead;
}
void show_booklist(Pdate phead){                        //显示通讯录姓名
    Pdate p=phead->pNext;
    if(p==NULL){
        printf("//\n");
        printf("没有任何记录.\n");
        printf("//\n");
    }else{
        printf("//\n");
        printf("\t姓名 \t地址 \t\t邮箱 \t\t电话\n");
        while(p!=NULL){
            printf("%10s\t%15s\t%15s\t%15s\n",p->name,p->address,p->email_num,p->telephone_num);
            p=p->pNext;
        }
        printf("//\n");
    }

    init_printf();
}
void append_people(Pdate phead){                        //向后追加一个
    Pdate pNew=(Pdate)malloc(sizeof(Date));
    Pdate pTemp=phead;
    int i=0;
    while(pTemp->pNext!=NULL){
        i++;
        pTemp=pTemp->pNext;
    }
    if(pNew==NULL){
            printf("额,这是一个不应该出现的错误,你换台电脑吧~~~~\n");
            exit(-1);
            }
        printf("这是第%d个联系人\n",i+1);
        printf("请输入新建联系人的名字:");
        scanf("%s",pNew->name);
        space();
        printf("请输入新建联系人的地址:");
        scanf("%s",pNew->address);
        space();
        printf("请输入新建联系人的邮箱:");
        scanf("%s",pNew->email_num);
        space();
        printf("请输入新建联系人的电话号码:");
        scanf("%s",pNew->telephone_num);
        space();
        pTemp->pNext=pNew;
        pNew->pNext=NULL;
        init_printf();
    }
void delete_people(Pdate phead){                        //删除一个
    int i;
    void delete_for_name(Pdate phead);
    void delete_for_num(Pdate phead);
    printf("你可以通过两种方式来删除联系人信息\n");
    printf("1.通过联系人姓名 \t2.通过联系人电话号码\n");
    printf("请输入你选择的方式:");
    scanf("%d",&i);
    switch(i){
        case 1:delete_for_name(phead);break;
        case 2:delete_for_num(phead);break;
    }
    init_printf();
}
void delete_for_name(Pdate phead){                  //按姓名删除
    Pdate pbefore=phead->pNext,pTemp=phead->pNext;
    Pdate pafter;
    char name[20];
    if(phead->pNext==NULL){
        printf("数据为空,不能执行删除命令!\n");
    }else{
        printf("请输入你要删除的姓名:");
        scanf("%s",name);
        while(pTemp!=NULL&&strcmp(pTemp->name,name)!=0){
            pTemp=pTemp->pNext;
        }
        if(pTemp==NULL){
            printf("你要删除的人不存在!\n");
        }else{
            pafter=pTemp->pNext;
            if(pTemp==phead->pNext){
                phead->pNext=pafter;
            }else{
                while(pbefore->pNext!=pTemp){
                    pbefore=pbefore->pNext;
                }
                pbefore->pNext=pafter;
            }
            free(pTemp);
        }
    }
}
void delete_for_num(Pdate phead){                  //按姓名删除
    Pdate pbefore=phead->pNext,pTemp=phead->pNext;
    Pdate pafter;
    char name[20];
    if(phead->pNext==NULL){
        printf("数据为空,不能执行删除命令!\n");
    }else{
        printf("请输入你要删除的号码:");
        scanf("%s",name);
        while(pTemp!=NULL&&strcmp(pTemp->telephone_num,name)!=0){
            pTemp=pTemp->pNext;
        }
        if(pTemp==NULL){
            printf("你要删除的人不存在!\n");
        }else{
            pafter=pTemp->pNext;
            if(pTemp==phead->pNext){
                phead->pNext=pafter;
            }else{
                while(pbefore->pNext!=pTemp){
                    pbefore=pbefore->pNext;
                }
                pbefore->pNext=pafter;
            }
            free(pTemp);
        }

    }

}
void space(void){                       //去除输入之后的回车
    while(getchar()!='\n')
        {
            continue;
        }
}
void init_printf(void){                 //显示主目录
    printf("请选择你需要的操作\n");
    printf("1.查看通讯录中的信息\t\t\t2.新建联系人并添加\n");
    printf("3.删除指定联系人\t\t\t4.查询指定联系人\n");
    printf("5.初始化整个通讯录\t\t\t6.离开我~~~\n");
    printf("你必须首先初始化整个通讯录,否则通讯录不能正常工作\n");
}
void found_for_name(Pdate phead){
    char name[20];
    Pdate temp=phead->pNext;
    printf("请输入查找的姓名:");
    scanf("%s",name);
    while(temp!=NULL&&strcmp(temp->name,name)!=0){
        temp=temp->pNext;
    }
    if(temp==NULL){
        printf("\n");
        printf("木有这条记录\n");
    }
    else{
        printf("\t姓名 \t地址 \t\t邮箱 \t\t电话\n");
        printf("%10s\t%15s\t%15s\t%15s\n",temp->name,temp->address,temp->email_num,temp->telephone_num);
    }
    init_printf();
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值