c语言——通讯录程序

不知不觉发现已经在苏嵌学习了半个月了,开学前在大连的四天睡觉十几个小时实在是体力透支太大,五号凌晨回来上午就上课,那第一天确实是懵的,后来的课觉得讲真压力挺大的,一是不知道老师在讲什么,二是基础本来就不咋地,大学的课早就让我学成了考前背题库的文科了,要说高三的上课接受效率是百分之八十,那么我大学两年的上课接受效率估计就百分之十(当然考前一周效率可以打到百分之二百),苏嵌的头几天也可能是跟老师还没能磨合好吧,接受效率大概只有百分之三十左右,随着慢慢得适应,也能达到百分之五十左右了,不过每天对着一堆堆代码真的好闷啊,感谢这些天跟我吹牛逼的人,没人吹牛逼估计我这个话唠早就抑郁了。每天看那些看不懂的代码看到懵,还记得,15号王者荣耀抽恺的碎片的时候,那天点按钮的时候发现碎片一直在重复的开启,但没有输出一开始以为是网卡了,后来发现抽第二次也是这样,然后突然一个念头闪现在脑海里“int flag==0;do{ int a =碎片;if(碎片==恺)flag=1;}while(0==flag);printf(“恺”);”当时就觉得自己虽然听不懂课但已经走火入魔了。。。17号老师布置了一个作业,然后我们写一个通讯录程序,最好能加入容错处理,当时看了老师输入功能的思路,觉得这东西好简单思路都给了随便写写就行了,可是真的到自己写的时候发现接连出现好多问题,从18号早上自习到今天凌晨总算是磕磕碰碰地完成了这个程序,很感谢帮助我的老师同学们,给我们师范的冯老师,帮我们答疑的郑辅导员,班主任峰哥,在教室一起讨论的伙伴们,晚上回宿舍帮我查错的梅子,这几天一直帮我答疑查错的健琦(今天这个程序少了一个致命的“}”我自己找了一个多小时没找出来,最后求助你,你还是稳稳地把那个右括号给揪出来了)~
最后自己完善程序到这会儿,所有的功能都能很好的实现,成功的把所有可能的输入也都做了容错处理,最后一看已经写了近500行了(虽然不知道为什么,可能是第一次写这么长的程序,留了好多没用的废话和好多重复冗余的东西在里面吧),虽然这个程序不算太难,但我觉得今天一天完成这个程序我的知识接受效率能达到了百分之七八十,在实践中学到东西才是真的懂了,程序的确不难,我仅会的那几条简单的语句已经够写了,也没用到我不太会的指针(指针一直不太懂),初学者来说是很好的练习。不过虽然简单但是写完还是有种莫名的成就感的,毕竟是第一次整出个五百行的代码出来,写完最后一组容错代码,gcc没有报错的时候,心里那高兴的(可能我是个农民吧),一看空间,上次动态已经是五号浪完回来的时候了,上课这些天空间也没啥功夫去刷一波,索性写了这么一段话就当是下周的“周总结”吧。
(明早上课怕是要睡觉了)

那么
晚安

                                                  2017.7.19    

附程序全代码:

/*************************TOP*****************************

用结构体数组实现通讯录管理系统

存储内容:编号,姓名,出生日期(结构体嵌套),地址,联系电话

可以实现按照姓名和出生日期、联系电话进行查询、删除、修改功能。

**************************TOP****************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX 10
/*********函数声明*******/
int menu(void);     //菜单函数
void www();             //写入函数write
void sss(int num);  //全查询函数search
void clear();               //清空函数(全部赋值空,但并未删除项目,作用是在执行修改功能时防止原来项目内的数据长度比新输入的长度长,新的输入未能覆盖原数据导致显示错误)
void xxxddd();          //按项目查询函数(按姓名、出生日期、联系方式查询)
void ddd();             //修改或删除函数
/***********************/
struct book
{
    char ID[20];
    char name[20];
    struct 
    {
        int year;
        int month;
        int day;
    }birthday;
    char address[100];
    char tel[20];
}person[MAX]={{"01","HenchYoung",{1996,10,14},"NJIT","17721573705"}};                /************定义结构体*********/
    int count=1;  //定义的全局初始化变量用于记录当前有几个成员,写入和查询时作为指向和限制循环次数常量;*69*162*395*443
    int d[MAX];   //d[count]=count;由于count是全局计数变量在查询是不宜修改调用,故用d[b]来调用,值等于count,可修改;*76*123*167*294*373
    int b=0;      //查询是的索引代替count调用d[b];*159
    int flagg=1;  //*******************************************************************************************************************//
    int flagh=1;  //这三个标志用于按项目查询时,查询无果时,用该标志输出返回值并回到主菜单,由于在修改函数中也用到这三个标志,达到查询有结                    果时才进入修改或者删除模式,以免出现程序错误,故定义为了全局变量;*160*311
    int flagi=1;  //*******************************************************************************************************************//
    int seed;     //索引变量,d[b]值在查询结束时可能会被初始化,所以提前将值赋给seed进行另外索引;*318
    int ssid;     //索引变量,防止在seed调用后被初始化;*292*313



int menu(void)  /*******菜单函数**********/
{
    int i,flag=0;
    char in;
    char* mlist[]={"welcome you!请选择模式:","1.写入","2.查询","3.修改/删除","0.quit","please input your choice:"};
    printf("\n");
    for(i=0;i<sizeof(mlist)/sizeof(void *);i++)
    {
        printf("%s\n",mlist[i]);
    }
    do
    {
        scanf(" %c",&in);
        if (in>='0'&&in<='3') flag=1;
        else printf("请重新选择模式:\n");
    }
    while(0==flag);
    return (int)(in-'0');
}                                 /**************菜单模式选择*************/

void www()
{   
    if(count==MAX)
    {
        printf("\n通讯录已满,请清理......\n");  //溢出处理*******************************/
    }
    else
    {
        int f1=0,f2=0,f3=0;
        d[count]=count;

        printf("input ID:");
        scanf("%s",person[count].ID);
        printf("input name:");
        scanf("%s",person[count].name);

            //      person[count].birthday.year=0;
        printf("input year(1900--2020):");
        do
        {
            scanf(" %d",&person[count].birthday.year);
            //      printf("%d\n",person[count].birthday.year);
            if (person[count].birthday.year>=1900&&person[count].birthday.year<=2020) f1=1;
            else printf("请输入正确的年份:\n");
        }           
        while(0==f1);

        printf("input month:");
        do
        {
            scanf(" %d",&person[count].birthday.month);
            if (person[count].birthday.month>=1&&person[count].birthday.month<=12) f2=1;
            else printf("请输入正确的月份:\n");
        }           
        while(0==f2);

        printf("input day:");
        do
        {
            scanf(" %d",&person[count].birthday.day);
            if (person[count].birthday.day>=1&&person[count].birthday.day<=31) f3=1;
            else printf("请输入正确的日期:\n");
        }           
        while(0==f3);

        printf("input address:");
        scanf("%s",person[count].address);
        printf("input tel:");
        scanf("%s",person[count].tel);
        count++;
    }
}                                 /**************写入模式***********/

void sss(int num)
{   
    {
        printf("************SSID=%d***********\n ID:",d[num]);
        printf("%s\n",person[num].ID);
        printf(" name:");
        printf("%s\n",person[num].name);
        printf(" year:");
        printf("%d\n",person[num].birthday.year);
        printf(" month:");
        printf("%d\n",person[num].birthday.month);
        printf(" day:");
        printf("%d\n",person[num].birthday.day);
        printf(" address:");
        printf("%s\n",person[num].address);
        printf(" tel:");
        printf("%s\n",person[num].tel);
    }
}                                 /**************全查询模式*************/

void xxxddd()
{   
    char ff;
    int flag0=0;
    printf("\n欢迎进入项目查询模式!\n");
    printf("\n请输入查询方式:1.按姓名查询;2.按生日查询;3.按联系方式查询:");
    do
    {
        scanf(" %c",&ff);
        if (ff>='1'&&ff<='3') flag0=1;
        else printf("请重新选择查询方式:\n");
    }
    while(0==flag0);

    if(ff=='1'){   
    /*按照姓名查询*/
    char a[20];
    printf("请输入姓名:");
    scanf("%s",a);

    b=0;
    flagg=0;
    for(b=0;b<count;b++)
    {
    if(strcmp(a,person[b].name)==0)
    {
    flagg=1;
    seed=d[b];
    printf("************SSID=%d***********\n ",d[b]);
    printf("******你要查询的信息如下:\n ID:");
    printf("%s\n",person[b].ID);
    printf(" name:");
    printf("%s\n",person[b].name);
    printf(" year:");
    printf("%d\n",person[b].birthday.year);
    printf(" month:");
    printf("%d\n",person[b].birthday.month);
    printf(" day:");
    printf("%d\n",person[b].birthday.day);
    printf(" address:");
    printf("%s\n",person[b].address);
    printf(" tel:");
    printf("%s\n",person[b].tel);
    }
    }
    if(flagg==0)
    {
        printf("\n未能查询到匹配项,正在回到首页......\n");
    }
    }


    if(ff=='2'){
    /*按照出生日期查询*/
    int a,k,c,f5=0,f6=0,f7=0;
    flagh=0;
    printf("请输入出生日期:\n");
    do
    {
        printf("year:");
        scanf("%d",&a);
        if (a>=1900&&a<=2020) f5=1;
        else printf("请输入正确的年份:\n");
    }
    while(0==f5);


    do
    {
        printf("month:");
        scanf("%d",&k);
        if (k>=1&&k<=12) f6=1;
        else printf("请输入正确的月份:\n");
    }
    while(0==f6);

    do
    {
        printf("day:");
        scanf("%d",&c);
        if (c>=1&&c<=31) f7=1;
        else printf("请输入正确的日期:\n");
    }
    while(0==f7);

    b=0;
    for(b=0;b<count;b++)
    {
    if(a==person[b].birthday.year&&k==person[b].birthday.month&&c==person[b].birthday.day)
    {
    flagh=1;
    seed=d[b];
    printf("************SSID=%d***********\n",d[b]);
    printf("*******你要查询的信息如下:\n ID:");
    printf("%s\n",person[b].ID);
    printf(" name:");
    printf("%s\n",person[b].name);
    printf(" year:");
    printf("%d\n",person[b].birthday.year);
    printf(" month:");
    printf("%d\n",person[b].birthday.month);
    printf(" day:");
    printf("%d\n",person[b].birthday.day);
    printf(" address:");
    printf("%s\n",person[b].address);
    printf(" tel:");
    printf("%s\n",person[b].tel);
    }
    }
    if(flagh==0)
    {
        printf("\n未能查询到匹配项,正在回到首页......\n");
    }
    }

    if(ff=='3'){
    /*按照联系方式查询*/
    char a[20];
    printf("请输入联系方式:");
    scanf("%s",a);
    b=0;
    flagi=0;
    for(b=0;b<count;b++)
    {
    if(strcmp(a,person[b].tel)==0)
    {
    flagi=1;
    seed=d[b];
    printf("************SSID=%d***********\n ",d[b]);
    printf("******你要查询的信息如下:\n ID:");
    printf("%s\n",person[b].ID);
    printf(" name:");
    printf("%s\n",person[b].name);
    printf(" year:");
    printf("%d\n",person[b].birthday.year);
    printf(" month:");
    printf("%d\n",person[b].birthday.month);
    printf(" day:");
    printf("%d\n",person[b].birthday.day);
    printf(" address:");
    printf("%s\n",person[b].address);
    printf(" tel:");
    printf("%s\n",person[b].tel);
    }
    }
    if(flagi==0)
    {
        printf("\n未能查询到匹配项,正在回到首页......\n");
    }
    }
}  

void clear()       /***清空一个成员**sizeof==7*/  
{
    printf("************SSID=%d***********\n ",d[ssid]);
    strcpy(person[ssid].ID,"0");
    strcpy(person[ssid].name,"0");
    person[ssid].birthday.year=1900;
    person[ssid].birthday.month=1;
    person[ssid].birthday.day=1;
    strcpy(person[ssid].address,"0");
    strcpy(person[ssid].tel,"0");
}

void ddd()
{
    int flag2=0;
    printf("**********************\n欢迎进入修改/删除模式!\n**********************\n即将进入查询模式来查找你需要操作的成员的SSID\n");



    xxxddd();
    if(flagh==1&&flagi==1&&flagg==1)
    {

        ssid=seed;

        printf("\n您是想:1.修改该成员信息;还是:2.删除该成员信息;请输入:");
        {
            int flag3=0;
            int xuan;
            do
            {
                scanf("%d",&xuan);
                if (xuan>=1&&xuan<=2) flag3=1;
                else printf("请重新选择:\n");
            }
            while(0==flag3);

            if(xuan==1)             /*修改选项*****************************/
            {
                printf("\n即将进入修改界面*loading......\n");

                clear();           /***********这里一定要进行清零操作,防止新输入的字符串长度没有原来的长导致数据残留************/
            {
                int f1=0,f2=0,f3=0;
                printf("input ID:");
                scanf("%s",person[ssid].ID);
                printf("input name:");
                scanf("%s",person[ssid].name);
                printf("input year(1900--2020):");
                do
                {
                    scanf(" %d",&person[ssid].birthday.year);
                    if (person[ssid].birthday.year>=1900&&person[ssid].birthday.year<=2020) f1=1;
                    else printf("请输入正确的年份:\n");
                }           
                while(0==f1);

                printf("input month:");
                do
                {
                    scanf(" %d",&person[ssid].birthday.month);
                    if (person[ssid].birthday.month>=1&&person[ssid].birthday.month<=12) f2=1;
                    else printf("请输入正确的月份:\n");
                }               
                while(0==f2);

                printf("input day:");
                do
                {
                    scanf(" %d",&person[ssid].birthday.day);
                    if (person[ssid].birthday.day>=1&&person[ssid].birthday.day<=31) f3=1;
                    else printf("请输入正确的日期:\n");
                }           
                while(0==f3);

                printf("input address:");
                scanf("%s",person[ssid].address);
                printf("input tel:");
                scanf("%s",person[ssid].tel);
                printf("已完成修改*Ending......\n");

                printf("************SSID=%d***********\n ",d[ssid]);
                printf("******修改完成的信息如下:\n ID:");
                printf("%s\n",person[ssid].ID);
                printf(" name:");
                printf("%s\n",person[ssid].name);
                printf(" year:");
                printf("%d\n",person[ssid].birthday.year);
                printf(" month:");
                printf("%d\n",person[ssid].birthday.month);
                printf(" day:");
                printf("%d\n",person[ssid].birthday.day);
                printf(" address:");
                printf("%s\n",person[ssid].address);
                printf(" tel:");
                printf("%s\n",person[ssid].tel);
            }/*************写入模式***********/
            }
            else if(xuan==2)            /*删除模式*************************************/
            {
                int t;
                printf("\n正在删除项目SSID=%d  ****loading......",ssid);
                for(t=ssid;t<count;t++)
                {
                    person[t]=person[t+1];
                }
                printf("\n********删除完成SSID=%d******\n",ssid);
                printf("***********以下显示全查询信息**************\n");

                {   
                    int tt=0;
                    count=count-1;                          //count-1复位之前的状态,否则之前的count位置的内存将无法使用!!!!!!!
                    for(tt=0;tt<(count);tt++)                       
                    {
                        sss(tt);
                    }
                }



            }
        }   
    }
}   /***************删除/修改模式*************/

int main()
{
    int in;
    char fun;
    int flag1=0;

    while((in=menu()))
    {
        switch(in)
        {
            case 1:www();break;  /**********case1****/
            case 2:              /**********case2****/
                    printf("请输入选项:1.显示所有联系人信息;2.进入项目查询模式;");
                    do
    {
        scanf(" %c",&fun);
        if (fun>='1'&&fun<='2') flag1=1;
        else printf("请重新选择模式:\n");
    }
    while(0==flag1);

    if(fun=='1')
    {   
        int flaga=0;
        int i=0;
        for(i=0;i<count;i++)                        
        {
            if(count>=0)
            {
                sss(i);
                flaga=1;
            }
        }
        if(flaga==0)    
        {   
            printf("\n通讯录为空,即将返回主菜单......\n");
        }
        break;
    }
    if(fun=='2')
    {
        xxxddd();
        break;
    }
            case 3:ddd();break;  /*********case3****/
    }
    }
    return 0;
}

/*******************END*************************

已实现TOP要求的所有功能!

可以很好地是实现容错管理!

2017.7.20  10:00    HenchYoung

********************END***********************/

(以上内容未经作者同意严禁转载)

猜你喜欢

转载自blog.csdn.net/qq_39540224/article/details/75538439