通讯录改进(可以保存至文件并读取)

来源:互联网 发布:中文域名重要性 编辑:程序博客网 时间:2024/06/05 07:13

头文件:

#ifndef _NODE_H_#define _NODE_H_struct node {    char id[100] ;    char name[10];    char address[10];    char tel[100];    char mob[100];    struct node *next;};typedef struct node Node;typedef Node *STU;#endif

子函数:

#include <stdio.h>#include "student.h"#include <stdlib.h>#include <string.h>void ListInit(STU *L){    (*L) = (STU)malloc(sizeof(Node));    (*L)->next = NULL;}int AddInfo(STU *L){       STU p = *L;    STU s;    printf("Please input name,id,mob,tel,address:\n");    s = (STU)malloc(sizeof(Node));    scanf("%s%s%s%s%s",s->name,s->id,s->mob,s->tel,s->address);    if(strlen(s->mob) != 11)    {        printf("无效手机号码!\n");        return 0;    }    if(strlen(s->tel) != 8)    {        printf("无效家庭电话号码!\n");        return 0;    }    while(p->next)    {        if(strcmp((p->next)->mob,s->mob) == 0 || strcmp((p->next)->tel,s->tel) == 0)        {            printf("已存在相同号码!\n");            return 0;        }        p = p->next;    }    p=*L;    if(p->next ==NULL)    {        s->next = p->next;        p->next = s;    }    else    {        while(p->next)        {            if(strcmp((p->next)->name,s->name)>0)            {                           s->next = p->next;                p->next = s;                break;            }               p = p->next;        }        if(p->next ==NULL)        {            s->next = p->next;            p->next = s;        }    }}void Save(STU l){    STU p;    FILE *fp;    int ret;    p = l->next;    fp = fopen("save.txt","w");    if(NULL == fp )    {        perror("Fopen Failure!\n");        exit(1);    }    while(p)    {        ret = fwrite(p,1,sizeof(Node),fp);        if(0 == ret)        {            perror("Fwrite Failure!\n");            exit(1);        }        p=p->next;    }    fclose(fp);}void Read(STU l){    STU p;    STU r;    FILE *fp;    l->next = NULL;    r = l;    int ret;    fp = fopen("save.txt","r");    if(NULL == fp)    {        perror("Fopen Failure!\n");        exit(1);    }    while(!feof(fp))    {        p = (STU)malloc(sizeof(Node));        if(!p)        {            printf("Malloc Failure!\n");            return;        }        if(fread(p,sizeof(Node),1,fp) != 1)        {            break;        }        else        {            p->next = NULL;            r->next = p;            r = p;        }    }    fclose(fp);}int ShowInfo(STU l){    if(l->next == NULL)    {        printf("It is NULL!\n");    }    else    {        STU p = l->next;        while(p)        {            printf("Name: %s  Id: %s  Mobile: %s  Tele: %s  Address: %s\n",p->name,p->id,p->mob,p->tel,p->address);            p=p->next;        }    }}int ChangeInfo(STU *l){    STU p = (*l)->next;    STU t = *l;    STU s ;    char n[10];    printf("Please input the name you want to change:\n");    scanf("%s",n);    while(p)    {        s = (STU)malloc(sizeof(Node));        if(strcmp(p->name,n) == 0)        {            printf("Please input the new information:\n");            scanf("%s%s%s%s%s",s->name,s->id,s->mob,s->tel,s->address);            if(strlen(s->mob) != 11)            {                printf("无效手机号码!\n");                return 0;            }            if(strlen(s->tel) != 8)            {                printf("无效家庭电话号码!\n");                return 0;            }            while(t->next)            {                if(strcmp((t->next)->mob,s->mob) == 0|| strcmp((t->next)->tel,s->tel) == 0)                {                    printf("已存在相同号码!\n");                    return 0;                }                t = t->next;            }            strcpy(p->name , s->name);            strcpy(p->id , s->id);            strcpy(p->mob , s->mob);            strcpy(p->tel, s->tel);            strcpy(p->address , s->address);            free(s);            printf("Change Success!\n");            break;        }        else        {            p = p->next;        }    }    if(p == NULL)    {        printf("Unknown person!\n");    }}int DeleteInfo(STU l){    STU p = l;    STU tmp;    char n[10];    printf("Please input the name you want to delete:\n");    scanf("%s",n);    while(p->next)    {        if(strcmp((p->next)->name,n) == 0)        {            tmp = p->next;            p->next = tmp->next;            free(tmp);            printf("Delete Success!\n");            break;        }        else        {            p = p->next;        }    }}int SearchInfo(STU l){    STU p = l->next;    char n[10];    printf("Please input the name you want to search:\n");    scanf("%s",n);    while(p)    {        if(strcmp(p->name,n) == 0)        {            printf("ID: %s Tel: %s Mob: %s Address: %s\n",p->id,p->tel,p->mob,p->address);            break;        }        else        {            p =p->next;        }    }    if(p == NULL)    {        printf("Unknown name!\n");    }}

主函数:

#include <stdio.h>#include "student.h"#include <stdlib.h>void show(){    printf("***********************************\n\n");    printf("*******1.Add         2.Show********\n\n");    printf("*******3.Change      4.Delete******\n\n");    printf("*******5.Search      6.Save********\n\n");    printf("*******7.Read        8.Quit********\n\n");    printf("***********************************\n\n");    printf("*******Please input your choice****\n\n");}int main(){    int choice;    STU stu;    ListInit(&stu);    while(1)    {        show();        scanf("%d",&choice);        switch (choice)        {            case 1:                 AddInfo(&stu);                 break;            case 2:                 ShowInfo(stu);                 break;            case 3:                      ChangeInfo(&stu);                 break;            case 4:                 DeleteInfo(stu);                 break;            case 5:                 SearchInfo(stu);                   break;            case 6:                 Save(stu);                 break;            case 7:                 Read(stu);                 break;            case 8:                 exit(0);                    break;             default:                           printf("Unknown Input!\n");                        }    }    return 0;}
阅读全文
0 0