#include <stdio.h> #include <stdlib.h> /*与malloc.h差不多*/ #include <string.h> #define maxlen 100 strUCt persons { char name[10]; /*定义结构体数组用于缓存数据*/ char addr[20]; char phnum[10]; }persons[maxlen]; ; ; ; typedef struct lnode{ /*通讯录结构中结点的定义*/ char name[10]; /*姓名*/ char addr[20]; /*地址*/ char phnum[10]; /*电话*/ struct lnode *next; }listnode,*linklist; ; ; ; linklist head=NULL,r=NULL; /*定义头指针和尾指针*/ listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7; int i; char name1[10],ch; char str1[20]; FILE *fp; /*定义文件指针*/ ; ; void creat() /*将文件的信息读入结构体数组在转存入链表中*/ { int j; long k; fp=fopen("people.txt","r+t"); /*打开文件*/ if(fp!=NULL) {for(i=1;i<maxlen;i++) { j=fgetc(fp); if(j==EOF) return; k=i-1; fseek(fp,k*sizeof(struct persons),0); /*读取一个人的信息*/ fread(&persons[i],sizeof(struct persons),1,fp); s=(linklist)malloc(sizeof(listnode)); /*装存入链表中*/ strcpy(s->name,persons[i].name); strcpy(s->addr,persons[i].addr); strcpy(s->phnum,persons[i].phnum); if(head==NULL) /*用尾插法将其插入链表中*/ head=s; else r->next=s; r=s;} } else { fp=fopen("people.txt","w"); /*不能打开另开辟一个文件*/ i=1; } } ; ; ; void Show() /*显示所有的信息*/ { p1=head; while(p1!=NULL) { printf(" name:%s ",p1->name); printf(" addr:%s",p1->addr); printf(" phnum:%s",p1->phnum); p1=p1->next; } } ; ; ; void Delete() /*定义一个删除的函数*/ { printf(" please input the name:"); gets(name1); /*输入要删除人的姓名*/ p4=head; if(strcmp(p4->name,name1)==0) { p4=p4->next; /*根据各种情况判定可能性*/ head=p4; } else { while(strcmp(p4->next->name,name1)!=0) p4=p4->next; p5=p4->next; p4->next=p5->next; free(p5); }
}
; ; ; void Find() /*查找的函数定义*/ { printf(" please input the name:"); p0=head; gets(name1); /*查找人的姓名输入*/ while(strcmp(name1,p0->name)!=0&&p0!=NULL) p0=p0->next; if(p0==NULL)
printf(" It is not exit in the addr-book!"); else { printf(" name:%s ",p0->name); printf(" addr:%s",p0->addr); printf(" phnum:%s",p0->phnum); } } ; ; ; void Input() /*向通讯录中输入一个人的信息*/ { s=(linklist)malloc(sizeof(listnode)); printf(" please input the sb's meg:"); printf(" name:"); scanf("%s",s->name); printf(" Addr:"); scanf("%s",s->addr); printf(" phnum:"); scanf("%s",s->phnum); if(head==NULL) head=s; else r->next=s; r=s; } ; ; ; void Alter() /*改变一个人的信息*/ { int j; printf(" Please input the name:"); gets(name1); /*输入要人的姓名*/ p3=head; while(strcmp(name1,p3->name)!=0&&p3!=NULL) p3=p3->next; if(p3==NULL) printf(" It is not exit in the addr-book!"); else { printf(" please input the new meg!"); /*输入要改人的新信息*/ printf(" name:"); scanf("%s",name1); strcpy(p3->name,name1); printf(" Addr:"); scanf("%s",name1); strcpy(p3->addr,name1); printf(" phnum:"); scanf("%s",name1); strcpy(p3->phnum,name1); } } ; ; ; void Save() /*保存信息*/ { int j; fp=fopen("people.txt","w"); for(p2=head,j=0;p2!=NULL;j++,p2=p2->next)/*将信息装出入结构体数组在出入链表中*/ { /*避免地址的出入,造成乱码文件*/ strcpy(persons[j].name,p2->name); strcpy(persons[j].addr,p2->addr); strcpy(persons[j].phnum,p2->phnum); fwrite(&persons[j],sizeof(struct persons),1,fp); } } ; ; ; void main() { creat(); do { printf(" WELCOME TO USE Pan Weifeng's Address book");/*显示提示的信息*/ printf(" Please make a choice below:"); printf(" 1.Show all the meg"); printf(" 2.Delete a piece of meg"); printf(" 3.Find a piece of meg"); printf(" 4.Insert a piece of meg"); printf(" 5.Alter a piece of meg"); printf(" 6.Save and Exit"); printf(" "); printf(" Input Your Choice:"); ch=getche(); switch(ch) { case '1': Show(); /*用单条件多选择语句实现调用与循环*/ break; case '2': Delete(); break; case '3': Find(); break;
case '4': Input(); break; case '5': Alter(); break; case '6': Save(); fclose(fp); exit(0); break; default: printf(" ********************************* "); printf(" The num should 1-4!!! "); printf(" **********************************"); break; } }while(1); }
|