C语言课设:通讯录

第一次写课设,在某些方面可能有些bug,望各位指正。

功能为增、删、查、改、预览;

目录:

                ____________________________________
                |                                  |
                |         欢迎使用通讯录            |
                |          添加基本信息  :1         |
                |          删除名单记录  :2         |
                |          查询基本信息  :3         |
                |          修改基本信息  :4         |
                |         全体联系人信息 :5         |
                |              退出      :0        |
                |           请选择功能:            |
                |__________________________________|

登录界面:

                欢迎登陆通讯录

                请输入登录密码

密码:123456

代码:

int login()
{
        char key[20],ch;
        int flag = 0;
        printf("\t\t欢迎登陆通讯录\n\n");
        printf("\t\t请输入登录密码\n\n");
        printf("密码:");
        scanf("%s",key);
        printf("\n");
		if(strcmp(key,"123456") == 0)
        {
            flag = 1;
            ch = getchar();
            printf("\t\t登陆成功\n\n");
            system("cls");
            ch = getchar();
            return 1;
        }
        else
        {
            do
            {
                printf("\t\t密码错误,请重新输入\n\n");
                printf("密码:");
                scanf("%s",key);
                printf("\n");
                if(strcmp(key,"xuehao123_") == 0)
                {
                    flag = 1;
                    ch = getchar();
                    printf("\t\t登陆成功\n\n");
                    system("cls"); 
                    ch = getchar();
                }
            }while(flag==0);
        }
        return 0;
}

总代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int sum=0;
void menu();
void add();
void deletion();
void inquire();
void modification();
void infromation();
void free(void *p);
typedef struct message
{
    char name[20];
    char num[20];
    char city[10];
    char postcode[20];
    char serialnumber[20];
    message *next;
}*mes;
mes head=(mes)malloc(sizeof(message));
void select()
{
    char c;
    scanf("%s",&c);
    while(c<'0'||c>'5')
    {
        printf("\t无此功能,请重新选择:");
        scanf("%s",&c);
    }
    system("cls");
    switch(c)
    {
        case '1':printf("\n\t添加名单到通讯录中\n");
                add();
                break;
        case '2':printf("\n\t删除通讯录中的名单\n");
                deletion();
                break;
        case '3':printf("\n\t查询通讯录中的名单\n");
                inquire();
                break;
        case '4':printf("\n\t修改通讯录中的信息\n");
                modification();
                   break;
        case '5':printf("\n\t全部联系人的信息\n");
                infromation();
                break;
        case '0':printf("\n\t退出成功\n");
                break;    
    }
}
int login()
{
        char key[20],ch;
        int flag = 0;
        printf("\t\t欢迎登陆通讯录\n\n");
        printf("\t\t请输入登录密码\n\n");
        printf("密码:");
        scanf("%s",key);
        printf("\n");
		if(strcmp(key,"123456") == 0)
        {
            flag = 1;
            ch = getchar();
            printf("\t\t登陆成功\n\n");
            system("cls");
            ch = getchar();
            return 1;
        }
        else
        {
            do
            {
                printf("\t\t密码错误,请重新输入\n\n");
                printf("密码:");
                scanf("%s",key);
                printf("\n");
                if(strcmp(key,"xuehao123_") == 0)
                {
                    flag = 1;
                    ch = getchar();
                    printf("\t\t登陆成功\n\n");
                    system("cls"); 
                    ch = getchar();
                }
            }while(flag==0);
        }
        return 0;
}
void menu()
{
    system("cls");
    printf("\t\t____________________________________\n");
    printf("\t\t|                                  |\n");
    printf("\t\t|         欢迎使用通讯录           |\n");
    printf("\t\t|          添加基本信息  :1        |\n");
    printf("\t\t|          删除名单记录  :2        |\n");
    printf("\t\t|          查询基本信息  :3        |\n");
    printf("\t\t|          修改基本信息  :4        |\n");
    printf("\t\t|         全体联系人信息 :5        |\n");
    printf("\t\t|              退出      :0        |\n");
    printf("\t\t|           请选择功能:           |\n");
    printf("\t\t|__________________________________|\n");
}
int cala(char *p)        //控制位数 
{
    int i,n=0;
    for(i=0;p[i]!='\0';i++)
    {
        n++;
    }
    return n;
}
void add()//添加联系人
{
    int n;
    mes p=head,q;
    char flag='y';    
    while(flag!='n'&&flag!='N')
    {
        sum=sum+1;
        q=(mes)malloc(sizeof(message));
        p->next=q;
        p=q;
        printf("\n\t请输入:\n");
        printf("\t学生编号:");
        scanf("\t%s",q->serialnumber);
        printf("\t姓名:");
        scanf("\t%s",q->name);
        printf("\t电话号码:");
        scanf("\t%s",q->num);
        do  
        {  
            n=0;  
            if(cala(q->num)!=11)  
            {                     
                n=1;  
                printf("\t您输入的手机号码格式不存在,请重新输入:");  
                scanf("\t%s",q->num);  
            }  
            else   
            {  
                for(int t=0;t<11;t++)  
                {  
                    if(q->num[t]<'0'||q->num[t]>'9'){ 
                          n=1;  
                        printf("\t您输入的手机号码格式不合理,请重新输入:");  
                        scanf("\t%s",q->num);  
                        break;  
                    }  
                }  
            }  
        }while(n);
        printf("\t城市:");
        scanf("\t%s",q->city);
        printf("\t邮编号码:");
        scanf("\t%s",q->postcode);
        do  
        {  
            n=0;  
            if(cala(q->postcode)!=6)  
            {                     
                n=1;  
                printf("\t您输入的邮编格式不存在,请重新输入:");  
                scanf("\t%s",q->postcode);  
            }  
            else   
            {  
                for(int t=0;t<6;t++)  
                {  
                    if(q->postcode[t]<'0'||q->postcode[t]>'9'){ 
                          n=1;  
                        printf("\t您输入的邮编格式不合理,请重新输入:");  
                        scanf("\t%s",q->postcode);  
                        break;  
                    }  
                }  
            }  
        }while(n);
        printf("\n\t是否继续添加?(Y/N)");
        scanf("\t%c",&flag); 
    }    
    menu();select();
}
void deletion()        //删除 
{
    char number[20];
    char flag='y';
    mes p=head,a,b;
    p=head->next; 
    int i=1;
    if(sum==0)
    {
        printf("\t该通讯录中暂无联系人\n");
    }
    else
    {
        printf("\t编号\t姓名\t电话\t\t城市\t\t邮编\n");
        while(p)
        {
            printf("\t%s\t%s\t%s\t%s\t\t%s\n",p->serialnumber,p->name,p->num,p->city,p->postcode);
            i=i+1;
            if(i<=sum)
            {
                p=p->next;
            }
            else
            {
                p=NULL;
            }
        }
        while(flag!='n'&&flag!='N')
        {
            p=head->next;
            printf("\t请输入您要删除的联系人编号:");
            scanf("\t%s",number);
            while(p != NULL && strcmp(p->serialnumber,number) != 0)  
                {
                        if(i<=sum)
                        {
                            a=p;
                            p=p->next;
                        }
                        else
                        {
                            p=NULL;
                        }
                }
            if(!p)
            {
                printf("\t该联系人不存在!\n");
                printf("\t是否继续删除?(Y/N)");
                scanf("\t%c",&flag);
            }
            if(p)
            {
                sum=sum-1;
                b=p->next;
                if(p==head->next)
                {head->next=b;}
                else
                {a->next=b;}
                printf("\t该联系人已删除!\n");
                free(p); 
                printf("\t是否继续删除?(Y/N)");
                scanf("\t%c",&flag); 
            }
        }
    }
    system("pause");
    menu();select(); 
}
void menu1()
{
    printf("\t\t************************************\n");
    printf("\t\t*          欢迎使用查询系统        *\n");
    printf("\t\t*           通过姓名查询:1         *\n");
    printf("\t\t*           通过电话查询:2         *\n");
    printf("\t\t*            请选择功能:          *\n");
    printf("\t\t************************************\n");
}
void inquire()//查询联系人 
{
    if(sum==0)
    {
        printf("\t通讯录中暂无联系人\n"); 
        system("pause");
    }   
    else
    {
        menu1();
        int a,n;
        mes p=head;
        char flag='y';
        scanf("%d",&a);
           while(a<1||a>3)
        {
        printf("\t无此功能,请重新选择:");
        scanf("%d",&a);
        }                   
        while(flag!='n'&&flag!='N'){
            switch(a){
                case 1:{
                    char nm[20]; 
                    p=head->next;
                    printf("请输入您要查询的联系人的姓名:");
                    scanf("%s",nm);
                    int i=1;
                    while(p!=NULL&&strcmp(p->name,nm)!=0){  
                        i=i+1;
                        if(i<=sum)
                        {
                            p=p->next;
                        }
                        else
                        {
                            p=NULL;
                        }
                    }
                    if(!p)
                    {    
                        printf("\n\t您要查询的联系人不存在!\n");  
                        printf("\t是否继续查询?(Y/N)");  
                        scanf("\t%c",&flag);
                    }
                    else 
                    {
                        printf("\t编号:%s\n",p->serialnumber);
                        printf("\t姓名:%s\n",p->name);
                        printf("\t手机号码:%s\n",p->num);
                        printf("\t城市:%s\n",p->city);  
                        printf("\t邮编:%s\n",p->postcode);
                        printf("\t是否继续查询?(Y/N)");  
                        scanf("\t%c",&flag); 
                    }
                    break;
                }                 
                case 2:
                {
                    char nu[20];
                    p=head->next;
                    printf("请输入您要查询的联系人的电话:");
                    scanf("%s",nu);
                    int i=1;
                    while(p!=NULL&&strcmp(p->num,nu)!=0)  
                    {
                        i=i+1;
                        if(i<=sum)
                        {
                            p=p->next;
                        }
                        else
                        {
                            p=NULL;
                        }
                    }
                    if(!p)
                    {
                        printf("\t您要查询的联系人不存在!\n");  
                        printf("\t是否继续查询?(Y/N)");  
                        scanf("\t%c",&flag);
                    }
                    else    
                    {
                        printf("\t编号:%s\n",p->serialnumber);    
                        printf("\t姓名:%s\n",p->name);
                        printf("\t号码:%s\n",p->num);
                        printf("\t城市:%s\n",p->city);  
                        printf("\t邮编:%s\n",p->postcode);
                        printf("\t是否继续查询?(Y/N)");  
                        scanf("\t%c",&flag);
                    }        
                    break;    
                }
            }
        }    system("cls");
    }    menu();select();
}
void menu2()
{
    printf("\t\t************************************\n");
    printf("\t\t*          欢迎使用修改系统        *\n");
    printf("\t\t*              修改姓名:1          *\n");
    printf("\t\t*              修改电话:2          *\n");
    printf("\t\t*              修改城市:3          *\n");
    printf("\t\t*              修改邮编:4          *\n");
    printf("\t\t*                返回  :0          *\n");
    printf("\t\t*            请选择功能:          *\n");
    printf("\t\t************************************\n");
} 
void modification() //修改 
{
    if(sum==0)
    {
        printf("\t该通讯录暂无联系人\n");
        system("pause");
    }
    else
    {
    menu2();                        
    int n,a;
    mes p=head,q;
    char flag='y';
    scanf("%d",&a);
    while(a<0||a>4)
    {
        printf("\t无此功能,请重新选择:");
        scanf("%d",&a);
    }
    switch(a)
        {
            case 1:
            {
                char nm[20];
                p=head->next;
                printf("请输入要修改的联系人姓名:");
                scanf("%s",nm);
                int i=1;
                while(p != NULL&&strcmp(p->name,nm)!=0)  
                {    
                    if(i<=sum)
                    {
                        i=i+1;
                        p=p->next;
                    }
                    else
                    {
                        p=NULL;
                    }
                }
                if(!p)
                {
                    printf("\t您输入的联系人不存在\n");
                    system("pause");
                }
                else
                {
                    printf("\t请输入修改后的姓名:");
                    scanf("\t%s",p->name);
                    printf("\t修改成功\n");
                    system("pause");
                }
                break;
            }
            case 2:
            {
                char nu[20];
                printf("请输入要修改的联系人电话:");
                scanf("%s",nu);
                int i=1;
                while(p != NULL&&strcmp(p->num,nu)!=0)  
                {    
                    if(i<=sum)
                    {
                        i=i+1;
                        p=p->next;
                    }
                    else
                    {
                        p=NULL;
                    }
                }
                if(!p)
                {
                    printf("\t您输入的联系人不存在\n");
                    system("pause");
                }
                else
                {
                    printf("\t请输入修改后的电话:");
                    scanf("\t%s",p->num);
                    printf("\t修改成功\n");
                    system("pause");
                }
                break;
            }
            case 3:  
            {
                char ci[10];
                printf("请输入要修改的联系人城市:");
                scanf("%s",ci);
                int i=1;
                while(p != NULL&&strcmp(p->city,ci)!=0)  
                {    
                    if(i<=sum)
                    {
                        i=i+1;
                        p=p->next;
                    }
                    else
                    {
                        p=NULL;
                    }
                }
                if(!p)
                {
                    printf("\t您输入的联系人不存在\n");
                    system("pause");
                }
                else
                {
                    printf("\t请输入修改后的城市:");
                    scanf("\t%s",p->city);
                    printf("\t修改成功\n");
                    system("pause");
                }
                break;
            }
            case 4:
            {
                char post[20];
                printf("请输入要修改的联系人邮编:");
                scanf("%s",post);
                int i=1;
                while(p != NULL&&strcmp(p->postcode,post)!=0)  
                {    
                    if(i<=sum)
                    {
                        i=i+1;
                        p=p->next;
                    }
                    else
                    {
                        p=NULL;
                    }
                }
                if(!p)
                {
                    printf("\t您输入的联系人不存在\n");
                    system("pause");
                }
                else
                {
                    printf("\t请输入修改后的邮编:");
                    scanf("\t%s",p->postcode);
                    printf("\t修改成功\n");
                    system("pause");
                }
                break;
            } 
            case 0:
            {
                break;    
            }
        }
    }
    menu();select();
}
void infromation()
{
    mes p=head;
    p=head->next; 
    int i=1;
    if(sum==0){
        printf("\t该通讯录中暂无联系人\n");
    }
    else{
        printf("\t编号\t姓名\t电话\t\t城市\t\t邮编\n");
        while(p){
            printf("\t%s\t%s\t%s\t%s\t\t%s\n",p->serialnumber,p->name,p->num,p->city,p->postcode);
            i=i+1;
            if(i<=sum){
                p=p->next;
            }
            else{
                p=NULL;
            }
        }
    }
    system("pause");
    menu();select();
}
int main()
{
    login();
    menu();
    select();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值