求助:通讯录管理系统
设计内容通讯录管理系统:
至少有姓名、性别、年龄、住址、电话号码;
汉字界面;
至少有输入数据、显示数据、编辑、修改、删除等功能,可增加排序、查询等功能。
界面要求全屏设计,比较美观,提示信息准确汉化,所有功能可以反复使用。数据类型至少要用到结构体和数组,使用文件进行存储和管理,鼓励采用链表结构
这个怎么做啊?我不会做···希望有人帮忙一下 我百度的那些程序不对的
程序代码:#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;
}
}
这个大概差不多了