链表练习 城市信息处理

#include <iostream>
#include <math.h>
#include <conio.h>
#include <string>
using namespace std;
struct Node
{
char Name[50];
double x, y;
Node*next;
};
class List
{
private:
Node*head, *f;
int size;
public:
List();
void Insert();
void Delete();
void Search();
void distance();
void show();
void update();
};
List::List()
{
head = new Node;
f = head;
size = 0;
}
void List::Insert()
{
Node*p = new Node;
cout << "请输入你想添加的城市";
cin >> p->Name;
cin >> p->x;
cin >> p->y;
if (size == 0)
{
cout << "地图上暂无任何城市\n";
f->next = p;
f = p;
p->next = NULL;
++size;
return;
}
else
{
f->next = p;
++size;
f = p;
p->next = NULL;
}
}
void List::Delete()
{
Node*p;
Node*t;
char name[50];
cout << "请输入你想删除的城市";
cin >> name;
for (p = head; p->next != NULL; p = p->next)
{
if (strcmp(p->next->Name, name))
{
t = p->next;
delete(t);
--size;
break;
}
}
}
void List::Search()
{
char name[20];
Node*p;
cout << "请输入你想查询的城市";
cin >> name;
for (p = head; p->next != NULL; p = p->next)
{
if (strcmp(p->next->Name, name))
{
cout << p->Name;
cout << '(' << p->x << ',' << p->y << ')' << endl;
break;
}
}
}
void List::update()
{
char name[20];
Node*p;
cout << "请输入你想查询的城市";
cin >> name;
for (p = head; p->next != NULL; p = p->next)
{
if (strcmp(p->next->Name, name))
{
cout << "请输入新的城市名";
cin >> p->Name;
cout << "请输入新的坐标";
cin >> p->x >> p->y;
break;
}
}
}
void List::distance()
{
char name[20];
Node*p;
Node n;
int i=0;
double d, de;
cout << "您目前所在的城市是";
cin >> name;
cout << "最大距离为";
cin >> d;
for (p = head; p->next != NULL; p = p->next)
{
if (strcmp(p->next->Name, name))
{
break;
}
}
n = *p;
p = head->next;
for (; i < size; i++, p = p->next)
{
de = sqrt(((*p).x - n.x) * ((*p).x - n.x) + ((*p).y - n.y) * ((*p).y - n.y));
if (de <= d&&strcmp(p->Name, name))
{
cout << p->Name;
cout << '(' << p->x << ',' << p->y << ')'<<endl;
}
}
}
void List::show()
{
Node*p;
p = head->next;
int i=0;
for (; i < size; i++)
{
cout << p->Name;
cout << '(' << p->x << ',' << p->y << ')' << endl;
p = p->next;
}
}
void main()
{
List t;
int k;
cout << "\n\n 1.增加城市";
cout << "\n\n 2.删除城市";
cout << "\n\n 3.修改城市信息";
cout << "\n\n 4.查询城市坐标";
cout << "\n\n 5.给定坐标,查询距离D以内的城市";
do
{
cout<<endl<<endl;
cout << "\n 请输入你的操作指令:\n";
cin >> k;
if (k > 0 && k < 6)
{
switch (k)
{
case 1:
{
t.Insert();
t.show();
}break;
case 2:
{
t.Delete();
t.show();
}break;
case 3:
{
t.update();
t.show();
}break;
case 4:
{
t.Search();
}break;
case 5:
{
t.distance();
}break;
default:cout << "输入错误"; break;
}
}
}while (k > 0 && k < 6);
system("pause");
}