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***********************/

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

C语言编写的通讯录管理程序设计 #include"stdio.h" #include"stdlib.h" #include"string.h" #include"conio.h" #define HEADER1"------------------------------------------MESSAGE MENU--------------------------------------------------------------\n" #define HEADER2" | num | name | phonenumber | address |\n" #define HEADER3" |-------------------------------------------------------------------|\n" #define FORMAT " | %-10s %-10s %-15s %-20s |\n" #define DATA p->num,p->name,p->phonenum,p->address #define END " ------------------------------------------------------------------------------------------------------------------\n" #define N 100 int saveflag=0; /*是否需要存盘的标志变量*/ typedef struct record /*标记为record*/ { char num[4]; /*编号*/ char name[10]; /*姓名*/ char phonenum[15]; /*电话*/ char address[20]; /*地址*/ } RECORD; RECORD tele[N]; void menu(); void Disp(); void Qur(); void Modify(); void SelectSort(); void Wrong(); void Save(); void main() { RECORD tele[N]; /*定义RECOED结构体*/ FILE *fp; /*文件指针*/ int select; /*保持内选择结果变量*/ char ch; /*保存y,Y,n,N*/ int count=0; /*保存文件中的记录条数(或元素个数)*/ fp=fopen("C:\\record.txt","a+"); /*以追加方式打开文本文件c;\record,可读可写,若此文件不存在,会创建此文件*/ if(fp==NULL) { printf("\n=>Can not open file!\n"); exit(0); } while(!feof(fp)) { if(fread(&tele[count],sizeof(RECORD),1,fp)==1) /*一次从文件中读取一条通讯记录*/ count++; } fclose(fp); /*关闭文件*/ printf("\n=>Open file success,the total records number is:%d.\n",count); getchar(); menu(); while(1) { system("cls"); menu(); cprintf("\n Please input your choice(0-8):"); /*显示提示信息*/ ch=getch(); if(ch=='0') { if(saveflag==1) /*若对数组的数据有修且未进行存盘操作,则此标志为1*/ { getchar(); printf("\n==>Whether save the modified record to file?(y/n):"); scanf("%c",&ch); if(ch=='y'||ch=='Y') Save(tele,count); } printf("\n=>Thank you for useness!"); getchar(); break ; } switch(ch) { case'0':break; case'1':count=Add(tele,count);break; /*增加通讯记录*/ case'2':system("cls");Disp(tele,count);break; /*显示通讯记录*/ case'3':count=Del(tele,count) ;break; /*删除通讯记录*/ case'4':Qur(tele,count);break; /*查询通讯记录*/ case'5':Modify(tele,count);break; /*修改通讯记录*/ case'6':count=Insert(tele,count);break; /*插入通讯记录*/ case'7':SelectSort(tele,count);break;/*排序通讯记录*/ case'8':Save(tele,count);break; /*保存通讯记录*/ default: Wrong();getchar();break; /*按键有误,必需为0~8*/ } } } void menu() { system("cls"); /*调用DOS命令清屏,与clrscr()功能相同*/ textcolor(63); /*在文本模式中选择新的字符颜色*/ gotoxy(10,5); /*在文本窗口中设置光标*/ printf(" The communication management system\n"); gotoxy(10,8); printf(" ****Menu**** \n"); gotoxy(10,9); printf("\n"); gotoxy(10,10); printf("\* 1. Add record\n"); /*增加*/ gotoxy(10,11); printf("\* 2. Display record\n"); /*展览*/ gotoxy(10,12); printf("\* 3. Delete record\n"); /*删除*/ gotoxy(10,13); printf("\* 4. Search record\n"); /*查找*/ gotoxy(10,14); printf("\* 5. Modify record\n"); /*更改*/ gotoxy(10,15); printf("\* 6. Insert record\n"); /*插入*/ gotoxy(10,16); printf("\* 7. Sort record\n"); /*整理*/ gotoxy(10,17); printf("\* 8. Save record\n"); /*保存*/ gotoxy(10,18); printf("\* 0 Quit system\n"); /*退出*/ gotoxy(10,19); printf(" ************ \n"); /*cprintf()送格式话输出至文本窗口屏幕中*/ } /*格式化输出表头*/ void printheader() { printf(HEADER1); printf(HEADER2); printf(HEADER3); } /*格式化输出表中数据*/ void printdata(RECORD q) { RECORD *p; p=&q; printf(FORMAT,DATA); } void Disp( RECORD temp[],int n) /*显示数组temp[]中存储的通讯记录,内容为record结构中定义的内容*/ { int i; if(n==0) /*表示没有通讯记录*/ { printf("\n=>No menu record!\n"); getchar(); return ; } printf("\n\n"); printheader(); /*输出表格头部*/ i=0; while(i<n) /*逐条输出数组中存储的通讯记录*/ { printdata(temp[i]); i++; printf(HEADER3); } getchar(); } void Wrong() /*输出按键错误信息*/ { printf("\n\n\n\n\n**********Error:input has wrong! press any key to continue***********\n"); getchar(); } void Nofind() /*输出未查找到此记录的信息*/ { printf("\n=>Not find this menu record!\n"); } int Locate(RECORD temp[],int n,char findmess[],char nameorphonenum[]) { int i=0; if(strcmp(nameorphonenum,"phonenum")==0) /*按电话号码查询*/ { while(i<n) { if(strcmp(temp[i].phonenum,findmess)==0) /*若找到findmess值的电话号码*/ return i; i++; } } else if(strcmp(nameorphonenum,"name")==0) /*按姓名查询*/ { while(i<n) { if(strcmp(temp[i].name,findmess)==0) /*若找到findmess值的姓名*/ return i; i++; } } return -1; /*若未找到,返回一个整数-1*/ } void stringinput(char *t,int lens,char *notice) { char n[255]; do { printf(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>lens) printf("\n Exceed the required length! \n"); /*进行长度检测,超过lens值重新输入*/ } while(strlen(n)>lens); strcpy(t,n); /*将输入发字符串拷贝到字符串t中*/ } int Add(RECORD temp[],int n) /*增加通讯记录*/ { char ch,num[10]; int i,flag=0; system("cls"); Disp(temp,n); /*先打印出已有的通讯录信息*/ while(1) /*一次可输入多条记录,直至输入编号为0的记录才结束添加操作*/ { while(1) /*输入记录编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/ { stringinput(num,10,"Input number(press '0' return menu):"); /*格式化输入编号并检验*/ flag=0; if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/ { return n; } i=0; while(i<n) /*产寻该编号是否已经存在,若存在则要求重新输入一个未被占用的编号*/ { if(strcmp(temp[i].num,num)==0) { flag=1; break; } i++; } if(flag==1) /*提示拥护是否重新输入*/ { getchar(); printf("==>The number %s is existing,try again?(y/n):",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') continue; else return n; } else {break;} } strcpy(temp[n].num,num); /*将字符串num拷贝到temp[n].num中*/ stringinput(temp[n].name,15,"Name:\n"); stringinput(temp[n].phonenum,15,"Telephone:\n"); stringinput(temp[n].address,15,"Address:\n"); saveflag=1; n++; } return n; } void Qur(RECORD temp[],int n) /*按编号或姓名查询通讯记录*/ { int select; /*按1:按姓名查,2:按电话号码查,其他:返回住界面(菜单)*/ char searchinput[20]; /*包寻用户输入的查询内容*/ int p=0; if(n<=0) /*若数组为空*/ { system("cls"); printf("\n=>No menu record!\n"); getchar(); return ; } system("cls"); printf("\n =>1 Search by name =>2 Search by telephonenumber\n"); printf(" Please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按姓名查询*/ { stringinput(searchinput,10,"Input the existing name:"); p=Locate(temp,n,searchinput,"name"); /*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/ if(p!=-1) /*若找到该记录*/ { printheader(); printdata(temp[p]); printf(END); printf("Press any key to return"); getchar(); } else Nofind(); getchar(); } else if(select==2) /*按电话号码查询*/ { stringinput(searchinput,15,"Input the existing telephone number:"); p=Locate(temp,n,searchinput,"phonenum"); if(p!=-1) { printheader(); printdata(temp[p]); printf(END); printf("Press any key to return"); getchar(); } else Nofind(); getchar(); } else Wrong(); getchar(); } int Del(RECORD temp[],int n) { int sel; char findmess[20]; int p=0,i=0; if(n<=0) { system("cls"); printf("\n=>No menu record!\n"); getchar(); return n; } system("cls"); Disp(temp,n); printf("\n =>1 Delete by name =>2 Delete by telephonenumber\n"); printf(" Please choice[1,2]:"); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"Input the existing name:"); p=Locate(temp,n,findmess,"name"); getchar(); if(p!=-1) { for(i=p+1;i<n;i++) /*删除此记录,后面记录向前移*/ { strcpy(temp[i-1].num,temp[i].num); strcpy(temp[i-1].name,temp[i].name); strcpy(temp[i-1].phonenum,temp[i].phonenum); strcpy(temp[i-1].address,temp[i].address); } printf("\n=>Delete success!\n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } else if(sel==2) /*先按电话号码查询到该记录所在的数组元素的下标值*/ { stringinput(findmess,15,"Input the existing telephone number:"); p=Locate(temp,n,findmess,"phonenum"); getchar(); if(p!=-1) { for(i=p+1;i<n;i++) /*删除此记录,后面的记录向前移*/ { strcpy(temp[i-1].num,temp[i].num); strcpy(temp[i-1].name,temp[i].name); strcpy(temp[i-1].phonenum,temp[i].phonenum); strcpy(temp[i-1].address,temp[i].address); } printf("\n=>Delete success!\n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } return n; } void Modify(RECORD temp[],int n) { char findmess[20]; int p=0; if(n<=0) { system("cls"); printf("\n=>No menu record!\n"); getchar(); return ; } system("cls"); printf("modify menu book recorder"); Disp(temp,n); stringinput(findmess,10,"Input the existing name:"); /*输入并检验该姓名*/ p=Locate(temp,n,findmess,"name"); /*查询到该数组元素,并返回下标值*/ if(p!=-1) /*若p!=-1,表明已经找到该数组元素*/ { printf("Number:%s,\n",temp[p].num); printf("Name:%s,",temp[p].name); stringinput(temp[p].name,15,"Input new name:"); printf("Name:%s,",temp[p].phonenum); stringinput(temp[p].name,15,"Input new telephone:"); printf("Name:%s,",temp[p].address); stringinput(temp[p].address,30,"Input new address:"); printf("\n=>modify success!\n");getchar(); Disp(temp,n); getchar();saveflag=1; } else { Nofind(); getchar(); } return ; } int Insert(RECORD temp[],int n) { char ch,num[10],s[10]; /*s[]保存插入点位置之前的记录编号,num[]保存输入的新记录的编号*/ RECORD newinfo; int flag=0,i=0,m=0; system("cls"); Disp(temp,n); while(1) { stringinput(s,10,"Please input insert location after the Number:"); flag=0;i=0; while(i<n) /*查询该编号是否存在,flag=1表示该编号存在*/ { if(strcmp(temp[i].num,s)==0) { m=i; flag=1; break; } i++; } if(flag==1) break; /*若编号存在,则进行插之前的新记录输入操作*/ else { getchar(); printf("\n=>The number is not existing,try again?(y\n):",s); scanf("%c",&ch); if(ch=='y'||ch=='Y') { continue; } else { return n; } } } /*以下新记录的输入操作与Add()相同*/ while(1) { stringinput(num,10,"Input new Number:"); flag=0;i=0; while(i<n) /*查询该编号是否存在,flag=1表示该编号存在*/ { if(strcmp(temp[i].num,num)==0) { flag=1; break; } i++; } if(flag==1) { getchar(); printf("\n=>Sorry,The number %s is existing,try again?(y\n):",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') { continue; } else { return n; } } else break; } strcpy(newinfo.num,num); /*将字符串num拷贝到newinfo.num中*/ stringinput(newinfo.name,15,"Name:"); stringinput(newinfo.phonenum,15,"Telephone:"); stringinput(newinfo.address,15,"Address:"); saveflag=1; /*在main()中有对该全局变量的判断,若为1,则进行存盘操作*/ for(i=n-1;i>m;i--) /*从最后一个组织元素开始往前移一个元素位置*/ { strcpy(temp[i+1].num,temp[i].num); strcpy(temp[i+1].name,temp[i].name); strcpy(temp[i+1].phonenum,temp[i].phonenum); strcpy(temp[i+1].address,temp[i].address); } strcpy(temp[m+1].num,newinfo.num); strcpy(temp[m+1].name,newinfo.name); strcpy(temp[m+1].phonenum,newinfo.phonenum); strcpy(temp[m+1].address,newinfo.address); n++; Disp(temp,n); printf("\n\n");getchar(); return n; } void SelectSort(RECORD temp[],int n) { int i=0,j=0,flag=0,indexmin,select; char charflag[10]; RECORD newinfo; if(n<=0) { system("cls"); printf("\n=>Not record!\n"); getchar(); return ; } system("cls"); Disp(temp,n); /*显示排序前的所有记录*/ printf("\n =>1 SORT by num =>2 SORT by another way \n"); printf(" Please choice[1,2]:"); scanf("%d",&select); if(select==1) /*按记录编号排序*/ { for(i=0;i<n-1;i++) { flag=32767; indexmin=0; for(j=i;j<n;j++) { if(atoi(temp[j].num)<flag) { flag=atoi(temp[j].num); indexmin=j; } } strcpy(newinfo.num,temp[i].num); /*利用结构变量nesinfo实现数组元素的交换*/ strcpy(newinfo.name,temp[i].name); strcpy(newinfo.phonenum,temp[i].phonenum); strcpy(newinfo.address,temp[i].address); strcpy(temp[i].num,temp[indexmin].num); strcpy(temp[i].name,temp[indexmin].name); strcpy(temp[i].phonenum,temp[indexmin].phonenum); strcpy(temp[i].address,temp[indexmin].address); strcpy(temp[indexmin].num,newinfo.num); strcpy(temp[indexmin].name,newinfo.name); strcpy(temp[indexmin].phonenum,newinfo.phonenum); strcpy(temp[indexmin].address,newinfo.address); } Disp(temp,n); /*显示排序后的所有记录*/ saveflag=1; printf("\n=>Sort complete!\n");getchar(); return; } else if(select==2) { for(i=0;i<n-1;i++) { charflag[0]=255; indexmin=0; strcpy(newinfo.num,temp[i].num); /*利用结构变量nesinfo实现数组元素的交换*/ strcpy(newinfo.name,temp[i].name); strcpy(newinfo.phonenum,temp[i].phonenum); strcpy(newinfo.address,temp[i].address); strcpy(temp[i].num,temp[indexmin].num); strcpy(temp[i].name,temp[indexmin].name); strcpy(temp[i].phonenum,temp[indexmin].phonenum); strcpy(temp[i].address,temp[indexmin].address); strcpy(temp[indexmin].num,newinfo.num); strcpy(temp[indexmin].name,newinfo.name); strcpy(temp[indexmin].phonenum,newinfo.phonenum); strcpy(temp[indexmin].address,newinfo.address); } Disp(temp,n); /*显示排序后的所有记录*/ saveflag=1; printf("\n=>Sort complete!\n");getchar(); return; } else { Wrong(); getchar(); getchar(); return; } } void Save(RECORD temp[],int n) { int i=0; FILE *fp; fp=fopen("c:\\record.txt","w"); /*以只写方式打开文本文件*/ if(fp==NULL) /*打开文件失败*/ { printf("\n=>Open file error!\n"); getchar(); return; } for(i=0;i<n;i++) { if(fwrite(&temp[i],sizeof(RECORD),1,fp)==1) /*每次写一条记录或一个结构数组元素至文件*/ { continue; } else { break; } } if(i>0) { getchar(); printf("\n\n=>Save file complete,total saved's record number is:%d\n",i); getchar(); saveflag=0; } else { system("cls"); printf("The current link is empty,no menu record is saved!\n"); getchar(); } fclose(fp); /*关闭此文件*/ }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值