C语言编程问题 高手请进
1个回答
展开全部
/*
程序说明:
本程序可输入通讯录,并按姓名的升序存放到磁盘文件中,
可显示指定的通讯录磁盘文件的所有内容,
可查找指定姓名的通讯地址,
可根据姓名删除记录,还可以一次性插入多个个记录。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
struct
address
{
char
name[10];
char
street[40];
char
city[10];
char
province[10];
char
zip[7];
struct
address
*
next;
};
struct
address
*head;
int
i;/*存放记录个数*/
int
menu_select()
{
int
a;
char
c[20];
printf("\t请选择功能:\n\n");
printf("\t1.新建并输入通讯录\n");
printf("\t2.将刚输入的通讯录按姓名的升序按指定的文件名字存盘\n");
printf("\t3.显示指定的通讯录文件内容\n");
printf("\t4.在指定的通讯录文件中按姓名查找通讯地址\n");
printf("\t5.从指定的通讯录文件中根据姓名删除一个人的记录\n");
printf("\t6.在指定的通讯录文件中添加记录\n");
printf("\t7.退出\n");
do
{
printf("\t请输入数字选择对应的功能:");
scanf("%d",&a);
gets(c);/*接收回车等字符*/
}while(a<0||a>7);
return
a;
}
void
inputs(char
*
prompt,char
*s,unsigned
count)
{
char
p[255];
do
{
printf(prompt);
gets(p);
if(strlen(p)>count)
printf("\t太长了!\n");
}while(strlen(p)>count);
strcpy(s,p);
}
/*将结点i链接到以头结点head为最小名字的单向链表中,保持按名字的升序排列,返回头结点指针*/
struct
address
*
put_in(struct
address
*
i,struct
address
*
head)
{
struct
address
*
pbefore
,*
p;
if(head==NULL)
{
head=i;
head->next=NULL;
return
head;
}
p=head;
pbefore=NULL;
while(p)
{
if(strcmp(p->name,i->name)<0)
{
pbefore=p;
p=p->next;
}
else
{
if(p==head)
{
i->next=head;
head=i;
return
head;
}
pbefore->next=i;
i->next=p;
return
head;
}
}
pbefore->next=i;
i->next=NULL;
return
head;
}
void
enter()
{
struct
address
*
info;
while(1)
{
info=(struct
address
*)malloc(sizeof(struct
address));
if(!info)
{
printf("\t内存已用完!\n");
return;
}
inputs("\t请输入姓名(为空时结束):",info->name,9);
if(!*info->name)
{
free(info);
printf("\n\n\t输入通讯记录结束!\n\n");
return;
}
inputs("\t请输入街名:",info->street,39);
inputs("\t请输入市(镇)名:",info->city,9);
inputs("\t请输入省名:",info->province,9);
inputs("\t请输入邮政编码:",info->zip,9);
head=put_in(info,head);
}
}
程序说明:
本程序可输入通讯录,并按姓名的升序存放到磁盘文件中,
可显示指定的通讯录磁盘文件的所有内容,
可查找指定姓名的通讯地址,
可根据姓名删除记录,还可以一次性插入多个个记录。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
struct
address
{
char
name[10];
char
street[40];
char
city[10];
char
province[10];
char
zip[7];
struct
address
*
next;
};
struct
address
*head;
int
i;/*存放记录个数*/
int
menu_select()
{
int
a;
char
c[20];
printf("\t请选择功能:\n\n");
printf("\t1.新建并输入通讯录\n");
printf("\t2.将刚输入的通讯录按姓名的升序按指定的文件名字存盘\n");
printf("\t3.显示指定的通讯录文件内容\n");
printf("\t4.在指定的通讯录文件中按姓名查找通讯地址\n");
printf("\t5.从指定的通讯录文件中根据姓名删除一个人的记录\n");
printf("\t6.在指定的通讯录文件中添加记录\n");
printf("\t7.退出\n");
do
{
printf("\t请输入数字选择对应的功能:");
scanf("%d",&a);
gets(c);/*接收回车等字符*/
}while(a<0||a>7);
return
a;
}
void
inputs(char
*
prompt,char
*s,unsigned
count)
{
char
p[255];
do
{
printf(prompt);
gets(p);
if(strlen(p)>count)
printf("\t太长了!\n");
}while(strlen(p)>count);
strcpy(s,p);
}
/*将结点i链接到以头结点head为最小名字的单向链表中,保持按名字的升序排列,返回头结点指针*/
struct
address
*
put_in(struct
address
*
i,struct
address
*
head)
{
struct
address
*
pbefore
,*
p;
if(head==NULL)
{
head=i;
head->next=NULL;
return
head;
}
p=head;
pbefore=NULL;
while(p)
{
if(strcmp(p->name,i->name)<0)
{
pbefore=p;
p=p->next;
}
else
{
if(p==head)
{
i->next=head;
head=i;
return
head;
}
pbefore->next=i;
i->next=p;
return
head;
}
}
pbefore->next=i;
i->next=NULL;
return
head;
}
void
enter()
{
struct
address
*
info;
while(1)
{
info=(struct
address
*)malloc(sizeof(struct
address));
if(!info)
{
printf("\t内存已用完!\n");
return;
}
inputs("\t请输入姓名(为空时结束):",info->name,9);
if(!*info->name)
{
free(info);
printf("\n\n\t输入通讯记录结束!\n\n");
return;
}
inputs("\t请输入街名:",info->street,39);
inputs("\t请输入市(镇)名:",info->city,9);
inputs("\t请输入省名:",info->province,9);
inputs("\t请输入邮政编码:",info->zip,9);
head=put_in(info,head);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询