#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct stu
{
int h;
int z;
char name[10];
struct stu *next;
}City,*Linklist;
City *CreatFromHead(Linklist L)
{
Linklist j,i;
L=(Linklist)malloc(sizeof(City));
L->next=NULL;
j=L;
while(1)
{
i=(Linklist)malloc(sizeof(City));
printf("请输入城市的横坐标、纵坐标和名称:");
scanf("%d%d",&i->h,&i->z);
scanf("%s",i->name);
if(i->h==0)
break;
L->next=i;
L=i;
}
L->next =NULL;
return(j);
}
void PutList(Linklist j)
{
// printf("123");
while(1)
{//printf("123");
j=j->next ;
break;
}
printf("名称(横坐标,纵坐标)\n");
while(j!=NULL)
{
printf("%s( %d , %d)\n",j->name,j->h,j->z);
j=j->next;
}
}
void GetList(Linklist f)
{
int j=0;
char s[10];
printf("输入查询的城市名称:");
scanf("%s",s);
while(f!=NULL)
{
if(strcmp(s,f->name )==0)
{
printf("城市%s的坐标为:",f->name );
printf("(%d,%d)\n",f->h ,f->z );
j=1;
}
f=f->next ;
}
if(j==0)
printf("无此城市信息!\n");
}
void Outlist(Linklist k)
{
int i,j,n;
double h;
printf("给定坐标:");
scanf("%d%d",&i,&j);
printf("给定距离:");
scanf("%d",&n);
printf("在给定距离内的城市有:");
while(k!=NULL)
{
h=sqrt((k->h -i)*(k->h -i)+(k->z -j)*(k->z -j));
if(n>=h)
printf("%s\n",k->name );
k=k->next ;
}
}
void main()
{
Linklist h;
int d;
printf("\t\t\t****城市距离管理****\n");
printf("\t\t\t1***输入城市信息****\n");
printf("\t\t\t2***输出城市信息****\n");
printf("\t\t\t3***查询城市信息****\n");
printf("\t\t\t4***查询城市距离****\n");
printf("\t\t\t0***退出城市管理****\n");
scanf("%d",&d);
do
{
switch(d)
{
case 1:h=CreatFromHead(h);break;
case 2:PutList(h);break;
case 3:GetList(h);break;
case 4:Outlist(h);break;
case 0:break;
}
printf("\t\t\t****城市距离管理****\n");
printf("\t\t\t1***输入城市信息****\n");
printf("\t\t\t2***输出城市信息****\n");
printf("\t\t\t3***查询城市信息****\n");
printf("\t\t\t4***查询城市距离****\n");
printf("\t\t\t0***推出城市管理****\n");
scanf("%d",&d);
}while(d!=0);
printf("谢谢使用");
}