求助:通讯录管理系统
设计内容通讯录管理系统:
至少有姓名、性别、年龄、住址、电话号码;
汉字界面;
至少有输入数据、显示数据、编辑、修改、删除等功能,可增加排序、查询等功能。
界面要求全屏设计,比较美观,提示信息准确汉化,所有功能可以反复使用。数据类型至少要用到结构体和数组,使用文件进行存储和管理,鼓励采用链表结构
这个怎么做啊?我不会做···希望有人帮忙一下 我百度的那些程序不对的
#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 head=NULL,end=NULL; listlink create(); //建立通讯录并将信息存入文件 listlink readfp(); //将文件的信息独处并转存如链表 void Show(listlink head); //显示信息 listlink Delete(listlink head);//删除一条记录的信息 void Find(listlink head); //查找记录 listlink Input(listlink head); //向通讯录加入一条记录 void Alter(listlink head); //修改一条记录的信息 void Save(listlink head); //保存信息到文件 int main() { 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:head=Delete(head);break; case 3:Find(head);break; case 4:head=Input(head);break; case 5:Alter(head);break; case 0:Save(head);return 0; } } return 0; } //----------------------------建立通讯录 listlink create() { listlink s; printf("\n通讯录为空!\n"); 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; printf("\n"); if(p1==NULL) { printf("没有记录!\n"); return ; } 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; printf("\n"); } } //----------------------------将文件的信息读出并转存如链表中 listlink readfp() { FILE *fp; struct add_person persons; listlink s; fp=fopen("people.txt","r"); if(fp==NULL) { printf("cannot open file!\n"); return NULL; } printf("\n\n通讯录打开成功! \n"); fread(&persons,sizeof(struct add_person),1,fp); while(!feof(fp)) { s=(listlink)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=s; 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); p=p->next; } fclose(fp); } //----------------------------------删除一条记录 listlink Delete(listlink head) { listlink p1,p2; char Name[10],ch; int k=1; p1=p2=head; if(p1==NULL) { printf("没有记录!\n"); return NULL; } while(k) { printf("请输入要删除人的姓名:"); scanf("%s",&Name); while(p1!=NULL) { p2=p1; if(strcmp(p1->name,Name)==0) { if(p1==head) { if(p1->next!=NULL) head=p1->next; else head=NULL; } else p2->next=p1->next; free(p1); printf("删除成功!\n"); return head; } p1=p1->next; } printf("要删除的记录不存在!\n"); printf("是否继续?(Y/N):"); getchar(); ch=getchar(); if(ch=='Y'||ch=='y') k=1; else k=0; } return head; } //--------------------------------------查找指定记录 void Find(listlink head) { listlink p1=head; char Name[10],ch; int k=1; if(p1==NULL) { printf("没有记录!\n"); return ; } 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):"); getchar(); ch=getchar(); if(ch=='Y'||ch=='y') k=1; else k=0; } } //------------------------------------------向通讯录中插入新的记录 listlink Input(listlink head) { int k=1; char ch; listlink s,p; p=head; while(k) { s=(listlink)malloc(sizeof(listnode)); 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; if(p==NULL) head=s; else { end->next=s; end=s; } printf("是否继续?(Y/N):"); getchar(); ch=getchar(); if(ch=='Y'||ch=='y') k=1; else k=0; } return head; } //-----------------------------------------修改一条记录的信息 void Alter(listlink head) { listlink p=head; char pname[10],ch; int k=1; if(p==NULL) { printf("没有记录!\n"); return ; } while(k) { printf("请输入要修改人的姓名:"); scanf("%s",&pname); while(p!=NULL) { if(strcmp(pname,p->name)==0) { 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); break; } p=p->next; } if(p==NULL) printf("没有要修改人的记录!\n"); printf("是否继续?(Y/N):"); getchar(); ch=getchar(); if(ch=='Y'||ch=='y') k=1; else k=0; } }这个大概差不多了