通讯录包含保存文本数据和读取文本数据功能

来源:互联网 发布:淘宝定金尾款是同价格 编辑:程序博客网 时间:2024/05/19 12:12

使用链表实现增加(在增加人员的过程中有一个自动排序功能,比如按姓名排序)、删除、修改、查找(比如:工号查找、电话查找)的功能;

(1)添加用户信息(号码长度   号码是否重复)

(2)列出好友信息(按姓名排序)

(3)查找好友信息(按姓名查找)

(4)删除好友

(5)退出

头文件#ifndef _ADDRESSBOOK_H_#define _ADDRESSBOOK_H_struct Addressbook{char name[10];char id[20];char address[20];char tele[20];char mobile[20];struct Addressbook *next;};typedef struct Addressbook addressbook;typedef addressbook *LinkList;#endif//接口函数#include<stdio.h>#include<stdlib.h>#include<string.h>#include"addressbook.h"void ListInit(LinkList *l){(*l) = (LinkList)malloc(sizeof(addressbook));(*l)->next = NULL;}int InsertInfo(LinkList *l){LinkList p = *l;LinkList s;printf("请输入好友信息:\n");s = (LinkList)malloc(sizeof(addressbook));scanf("%s%s%s%s%s",s->name,s->id,s->mobile,s->tele,s->address);if(strlen(s->mobile) != 11){printf("无效手机号码!\n");return 0;}if(strlen(s->tele) != 8){printf("无效家庭电话号码!\n");return 0;}    while(p->next){if(strcmp((p->next)->mobile,s->mobile) == 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;}}}int ShowInfo(LinkList l){if(l->next == NULL){printf("通讯录为空!\n");}else{LinkList p = l->next;while(p){printf("Name: %s  Id: %s  Mobile: %s  Tele: %s  Address: %s\n",p->name,p->id,p->mobile,p->tele,p->address);p=p->next;}}}int SearchInfo(LinkList l){LinkList p = l->next;char n[10];printf("请输入您想要查找的好友名字:\n");scanf("%s",n);while(p){if(strcmp(p->name,n) == 0){printf("ID: %s Tele: %s Mobile: %s Address: %s\n",p->id,p->tele,p->mobile,p->address);break;}else{p =p->next;}}if(p == NULL){printf("查无此人!\n");}}int DeleteInfo(LinkList l){LinkList p = l;LinkList tmp;char n[10];printf("请输入你想删除的好友名字:\n");scanf("%s",n);while(p->next){if(strcmp((p->next)->name,n) == 0){tmp = p->next;p->next = tmp->next;free(tmp);printf("删除好友信息成功!\n");break;}else{p = p->next;}}}int ChangeInfo(LinkList *l){LinkList p = (*l)->next;LinkList t = *l;LinkList s ;char n[10];printf("请输入您想修改的好友姓名:\n");scanf("%s",n);while(p){s = (LinkList)malloc(sizeof(addressbook));if(strcmp(p->name,n) == 0){printf("请输入您要修改的信息:姓名 编号 电话 家庭电话 住址\n");scanf("%s%s%s%s%s",s->name,s->id,s->mobile,s->tele,s->address);if(strlen(s->mobile) != 11){printf("无效手机号码!\n");return 0;}if(strlen(s->tele) != 8){printf("无效家庭电话号码!\n");return 0;}while(t->next){if(strcmp((t->next)->mobile,s->mobile) == 0){printf("已存在相同手机号码!\n");return 0;}t = t->next;}strcpy(p->name , s->name);strcpy(p->id , s->id);strcpy(p->mobile , s->mobile);strcpy(p->tele , s->tele);strcpy(p->address , s->address);free(s);printf("修改成功!\n");break;}else{p = p->next;}}if(p == NULL){printf("查无此人!\n");}}int outlink(LinkList l){    FILE *fp;    fp=fopen("output.txt","w");    if(NULL==fp)    {        perror("fopen");        exit(1);    }    LinkList temp=l->next;    while(temp)    {        fwrite(temp,sizeof(addressbook),1,fp);        temp=temp->next;    }    printf("保存中\n");    sleep(2);    fclose(fp);}void readlink(LinkList l){    LinkList p,r;    FILE *fp;    l->next=NULL;    r=l;    if((fp=fopen("output.txt","r"))==NULL)    {        perror("can not open\n");        exit(1);    }    printf("reading\n");    while(!feof(fp))    {        p=(LinkList)malloc(sizeof(addressbook));        if(!p)        {            printf("malloc failure\n");            return;        }        if(fread(p,sizeof(addressbook),1,fp)!=1)        {            break;        }        else        {            p->next=NULL;            r->next=p;            r=p;        }    }    sleep(2);    fclose(fp);}主函数#include<stdio.h>#include<stdlib.h>#include"addressbook.h"void PrintInfo(){printf("********************************************\n");printf("***1.添加用户信息  2.列出好友信息***********\n");printf("***3.查找好友信息  4.删除好友***************\n");printf("***5.修改好友信息  6.保存文本    ***********\n");printf("***7.退出             **********************\n\n");printf("***********请输入你的选择***********\n");}int main(){LinkList addbook;int choice;ListInit(&addbook);    readlink(addbook);while(1){PrintInfo();scanf("%d",&choice);switch(choice){case 1:InsertInfo(&addbook);break;case 2:ShowInfo(addbook);break;case 3:SearchInfo(addbook);break;case 4:DeleteInfo(addbook);break;case 5:ChangeInfo(&addbook);break;case 6:                outlink(addbook);break;            case 7:                exit(1);                break;default:printf("无效操作!\n");}}return 0;}