很诡异的事件。。。。
程序代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> typedef struct person //通讯录结构中节点的定义 { char name[30]; //姓名 char addr[30]; //地址 char offphnum[15]; //办公电话 char hmphnum[15]; //家庭电话 char mbnub[15]; //移动电话 struct person *next; }listnode,*listlink; struct add_person //通讯录记录结构 { char name[30]; char addr[30]; char offphnum[15]; char hmphnum[15]; char mbnub[15]; }; listlink create(); //建立通讯录并将信息存入文件 listlink readfp(); //将文件的信息独处并转存如链表 void Show(listlink head); //显示信息 void Delete(listlink head);//删除一条记录的信息 void Find(listlink head); //查找记录 void Input(listlink head); //向通讯录加入一条记录 void Alter(listlink head); //修改一条记录的信息 void Save(listlink head); //保存信息到文件 int main() { listlink head=NULL; int n; head=readfp(); if(head==NULL) head=create(head); while(1) { printf("------------------------------------\n"); printf("请选择操作:1 显示所有 2 删除记录 \n"); printf(" 3 查询记录 4 插入新记录\n"); printf(" 5 修改记录 0 保存退出 \n"); printf("请选择操作:"); scanf("%d",&n); switch(n) { case 1:Show(head);break; case 2:Delete(head);break; case 3:Find(head);break; case 4:Input(head);break; case 5:Alter(head);break; case 0:Save(head);return 0; } } return 0; } //----------------------------建立通讯录 listlink create() { listlink s; listlink head=NULL,end=NULL; printf("请输入信息(结束请在姓名处输入‘#’)\n\n"); while(1) { s=(listlink)malloc(sizeof(listnode)); printf("姓名:"); scanf("%s",&s->name); if(strcmp(s->name,"#")==0) break; printf("地址:"); scanf("%s",&s->addr); printf("办公电话:"); scanf("%s",&s->offphnum); printf("家庭电话:"); scanf("%s",&s->hmphnum); printf("移动电话:"); scanf("%s",&s->mbnub); s->next=NULL; if(head==NULL) head=end=s; else { end->next=s; end=s; } printf("\n"); } return (head); } //-----------------------------显示全部记录 void Show(listlink head) { listlink p1; p1=head; while(p1!=NULL) { printf("姓名:%s\n",p1->name); printf("地址:%s\n",p1->addr); printf("办公电话:%s\n",p1->offphnum); printf("家庭电话:%s\n",p1->hmphnum); printf("移动电话:%s\n",p1->mbnub); p1=p1->next; } } //----------------------------将文件的信息读出并转存如链表中 listlink readfp() { FILE *fp; struct add_person persons; listnode *s; listlink head=NULL,end=NULL; fp=fopen("people.txt","rb"); if(fp==NULL) { printf("cannot open file!\n"); return head; } fread(&persons,sizeof(struct add_person),1,fp); while(!feof(fp)) { s=(listnode *)malloc(sizeof(listnode)); //存入链表中 strcpy(s->name,persons.name); strcpy(s->addr,persons.addr); strcpy(s->offphnum,persons.offphnum); strcpy(s->hmphnum,persons.hmphnum); strcpy(s->mbnub,persons.mbnub); s->next=NULL; if(head==NULL) //尾插法将其插入链表中 head=end=NULL; else { end->next=s; end=s; } fread(&persons,sizeof(struct add_person),1,fp); } return head; } //-------------------------------------将信息保存到文件中 void Save(listlink head) { FILE *fp; static struct add_person persons; listlink p; fp=fopen("people.txt","wb"); p=head; while(p!=NULL) { strcpy(persons.name,p->name); strcpy(persons.addr,p->addr); strcpy(persons.offphnum,p->offphnum); strcpy(persons.hmphnum,p->hmphnum); strcpy(persons.mbnub,p->mbnub); fwrite(&persons,sizeof(struct add_person),1,fp); } fclose(fp); } //----------------------------------删除一条记录 void Delete(listlink head) { listlink p1,p2; char Name[10]; p1=p2=head; if(p1==NULL) { printf("没有记录!\n"); return ; } printf("请输入要删除人的姓名:"); scanf("%s",&Name); while(strcmp(p1->name,Name)!=0&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(strcmp(p1->name,Name)==0) { if(p1==head) p1=p1->next; else p2->next=p1->next; free(p1); } else printf("要删除的记录不存在!\n"); } //--------------------------------------查找指定记录 void Find(listlink head) { listlink p1; char Name[10]; int k=1; while(k) { p1=head; printf("请输入要查找人的姓名:"); scanf("%s",&Name); while(strcmp(Name,p1->name)!=0&&p1->next!=NULL) { p1=p1->next; } if(strcmp(Name,p1->name)!=0) printf("要查找的记录不存在!\n"); else { printf("姓名:%s\n",p1->name); printf("地址:%s\n",p1->addr); printf("办公电话:%s\n",p1->offphnum); printf("家庭电话:%s\n",p1->hmphnum); printf("移动电话:%s\n",p1->mbnub); } printf("是否继续?(Y/N)"); if(getchar()!='Y'||getchar()!='y') k=0; } } //------------------------------------------向通讯录中插入新的记录 void Input(listlink head) { int k=1; listlink s,end; end=head; while(k) { s=(listlink)malloc(sizeof(listnode)); while(end->next!=NULL) end=end->next; printf("姓名:"); scanf("%s",&s->name); printf("地址:"); scanf("%s",&s->addr); printf("办公电话:"); scanf("%s",&s->offphnum); printf("家庭电话:"); scanf("%s",&s->hmphnum); printf("移动电话:"); scanf("%s",&s->mbnub); s->next=NULL; end->next=s; s=end; printf("是否继续?(Y/N)"); if(getchar()!='Y'||getchar()!='y') k=0; } } //-----------------------------------------修改一条记录的信息 void Alter(listlink head) { listlink p=head; char pname[10]; printf("请输入要修改人的姓名:"); scanf("%s",&pname); while(strcmp(pname,p->name)!=0&&p->next!=NULL) p=p->next; if(strcmp(pname,p->name)!=0) { printf("没有要修改人的记录!\n"); return; } else { printf("请输入要修改的信息!\n"); printf("姓名:"); scanf("%s",&p->name); printf("地址:"); scanf("%s",&p->addr); printf("办公电话:"); scanf("%s",&p->offphnum); printf("家庭电话:"); scanf("%s",&p->hmphnum); printf("移动电话:"); scanf("%s",&p->mbnub); } }
今天写了一个通讯录,运行后输入数据,保存。。
但是产生的文件 竟然有1.86G!!
很是无语啊。。谁知道怎么回事??
[ 本帖最后由 bccn_2012 于 2011-6-11 19:23 编辑 ]