程序设计报告城市管理.docx
- 文档编号:12711753
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:54
- 大小:571.20KB
程序设计报告城市管理.docx
《程序设计报告城市管理.docx》由会员分享,可在线阅读,更多相关《程序设计报告城市管理.docx(54页珍藏版)》请在冰豆网上搜索。
程序设计报告城市管理
课程设计报告
设计题目:
城市管理学生姓名:
魏于博
专业:
电子信息工程班级:
电信工17-1班学号:
2017212064
指导教师:
方帅
完成日期:
2018年6月29日
合肥工业大学计算机与信息学院
(1))需求和规格说明问题描述:
问题描述:
用无序表实现一个城市数据库。
每条数据库记录包括城市名(任意长的字符串)和城市的坐标(用整数x和y表示)。
实现数据的插入、删除、查询功能,并实现指定距离内的所有城市。
设计算法实现指定一定数目的具体城市,寻找遍历这些城市并回到出发点的最佳路径,观察随着城市数目的增加,算法执行效率的变化。
编程任务:
1)用列表对城市进行记录和管理,实现城市的增加、删除和查询功能,并实现文件保存和读取
2)计算城市之间距离,统计输出距离某城市一定范围内的所有城市。
3)实现一定规模城市的遍历最佳路径选择。
4)分析随着城市数目增加时,算法执行效果的改变,深刻理解旅行商问题。
(2))设计
建立一个CityNode,包含城市的名称,横纵坐标和指针。
再建立一CityManage类属性和方法定义
CityNode属性String
cityname
城市名称
int
x
城市的横坐标
int
y
城市的纵坐标
CityNode*
next
其连接作用
Class中的方法
boolInsert_CityNode(stringcityname,intx,inty);(添加城市)
boolInsert_CityNode_2(stringcityname,intx,inty);(添加城市---文件读入)boolInsert_CityNode_3(stringcityname,floatx,floaty);(遍历指定城市中使用)boolSearch_CityNode(stringcityname);(通过城市名字查找)
boolSearch_CityNode(intx,inty);(用过城市坐标查找)
boolDelete_CityNode(stringcityname);(用过城市名字删除)
boolDelete_CityNode(intx,inty);(通过城市坐标删除)floatDistance(stringcityname1,stringcityname2);(两城市间的距离)voidSaveFile(stringcityname,intx,inty);(保存文件)
voidReadFile();(读取文件)
voidOperation();(switc语句,便于操作)
voidSaveAgain();(删除节点时重新保存文件)
voidClear();(遍历指定城市后清空链表)
voidIsExist(intx,inty,stringcityname,int&temp);(判断是否已经存在)
boolDistance_In_Range(intnum,intx,inty);(一定范围内的城市)
boolTravel_Edge();(将城市和坐标分别存在数组中,便于求最短路径)
voidTravel_Path();(贪心算法求最短路径)
boolTravel_Edge_ALL();(遍历所有城市)
boolZDCZ(stringcityname);(添加需要便利的指定城市)
CityNode*head;(保存所有城市数据)
CityNode*head2;(保存指定城市的信息)
(3))用户手册
(4))调试及测试
1.添加城市
2.查找城市
通过名称查找
3.删除城市
通过名称删除
通过坐标删除
4..查看两城市间的距离
5..查找距离定点一定距离的城市
《2》全部城市最短路径
测试数据(环形数据能更好的检测)
中国91合肥96广州56深圳51安徽16北京11
7.查看所有城市
(5))附录程序代码
#include
#include
#include
#include
#include
usingnamespacestd;
intnumber=0,number2=0;
floatWeight[100][100];
stringcitys[100];
structCityNode
{
stringcityname;
floatx,y;
CityNode*next;
};
structminedge
{
intvex;
intlow;
};
minedgeEdge[100];
voidTravel();
classCityManage
{
public:
CityManage();
//~CityManage();
boolInsert_CityNode(stringcityname,floatx,floaty);
boolInsert_CityNode_2(stringcityname,floatx,floaty);
boolInsert_CityNode_3(stringcityname,floatx,floaty);
boolSearch_CityNode(stringcityname);
boolSearch_CityNode(floatx,floaty);
boolDelete_CityNode(stringcityname);
boolDelete_CityNode(floatx,floaty);
floatDistance(stringcityname1,stringcityname2);
voidSaveFile(stringcityname,floatx,floaty);
voidReadFile();
voidOperation();
voidSaveAgain();
voidClear();
voidIsExist(floatx,floaty,stringcityname,int&temp);
boolDistance_In_Range(intnum,floatx,floaty);
boolTravel_Edge();
boolTravel_Edge_ALL();
boolZDCZ(stringcityname);
private:
CityNode*head;
CityNode*head2;
};
CityManage:
:
CityManage()
{
head=newCityNode;
head->next=NULL;
head2=newCityNode;
head2->next=NULL;
}
boolCityManage:
:
Insert_CityNode(stringcityname,floatx,floaty)
//(添加城市)
{
CityNode*p=newCityNode;
p->cityname=cityname;
p->x=x;
p->y=y;
inttemp1=0;
IsExist(x,y,cityname,temp1);
if(temp1==0)
{
SaveFile(cityname,x,y);
cout<<"添加成功"<
{
head->next=p;
p->next=NULL;
number=1;
returntrue;
}
p->next=head->next;
head->next=p;
number++;
returntrue;
}
returntrue;
}
boolCityManage:
:
Insert_CityNode_2(stringcityname,floatx,floaty)
//(添加城市---文件读入)
{
CityNode*p=newCityNode;
p->cityname=cityname;
p->x=x;
p->y=y;
if(head->next==NULL)
{
head->next=p;
p->next=NULL;
number=1;
returntrue;
}
p->next=head->next;
head->next=p;
number++;
returntrue;
}
boolCityManage:
:
Insert_CityNode_3(stringcityname,floatx,floaty)
//(添加城市---文件读入)
{
CityNode*p=newCityNode;
p->cityname=cityname;
p->x=x;
p->y=y;
if(head2->next==NULL)
{
head2->next=p;
p->next=NULL;
number2=1;
returntrue;
}
p->next=head2->next;
head2->next=p;
number2++;
returntrue;
}
boolCityManage:
:
ZDCZ(stringcityname)
{
CityNode*p;
p=newCityNode;
p=head->next;
while(p!
=NULL)
{
if(p->cityname==cityname)
{
Insert_CityNode_3(p->cityname,p->x,p->y);
returntrue;
}
p=p->next;
}
returntrue;
}
boolCityManage:
:
Search_CityNode(stringcityname)
//(通过城市名字查找)
{
CityNode*p;
p=newCityNode;
p=head->next;
while(p!
=NULL)
{
if(p->cityname==cityname)
{
cout<<"*****************************"< cout<<""< cout<<"*****************************"< returntrue; } p=p->next; } cout<<"未发现此城市"< } boolCityManage: : Search_CityNode(floatx,floaty) //(用过城市坐标查找) { CityNode*p; p=newCityNode; p=head->next; while(p! =NULL) { if(p->x==x&&p->y==y) { cout< cout<<"*****************************"< cout<<""< cout<<"*****************************"< cout< returntrue; } p=p->next; } cout<<"所在坐标下没有城市"< } voidCityManage: : IsExist(floatx,floaty,stringcityname,int&temp) //(判断是否已经存在) { CityNode*k; k=newCityNode; k=head->next; while(k! =NULL) { if(k->x==x&&k->y==y||k->cityname==cityname) { cout<<"该城市已存在"< break; } k=k->next; } } boolCityManage: : Delete_CityNode(stringcityname) //(用过城市名字删除) { CityNode*p,*s; p=newCityNode; s=newCityNode; s=head; p=head->next; while(p! =NULL) { if(p->cityname==cityname) { s->next=p->next; deletep; cout<<"该城市已删除"< returntrue; } p=p->next; s=s->next; } returnfalse; } boolCityManage: : Delete_CityNode(floatx,floaty) //(通过城市坐标删除) { CityNode*p,*s; p=newCityNode; s=newCityNode; s=head; p=head->next; while(p! =NULL) { if(p->x==x&&p->y==y) { s->next=p->next; deletep; number--; cout<<"该城市已删除"< returntrue; } p=p->next; s=s->next; } returnfalse; } voidCityManage: : SaveAgain() { ofstreamfout("City.txt",ios: : out); CityNode*p; p=newCityNode; p=head->next; while(p! =NULL) { SaveFile(p->cityname,p->x,p->y); p=p->next; } } floatCityManage: : Distance(stringcityname1,stringcityname2) //(两城市间的距离) { CityNode*p,*s; floatc1x,c1y,c2x,c2y,dis; p=newCityNode; s=newCityNode; p=head->next; s=head->next; while(p! =NULL) { if(p->cityname==cityname1) { c1x=p->x; c1y=p->y; break; } p=p->next; } //if(p->cityname! =cityname1) if(p==NULL) { cout<<"未找到您所输入的第一个城市"< } while(s! =NULL) { if(s->cityname==cityname2) { c2x=s->x; c2y=s->y; break; } s=s->next; } //if(s->cityname! =cityname2) if(s==NULL) { cout<<"未找到您所输入的第二个城市"< } dis=sqrt((c1x-c2x)*(c1x-c2x)+(c1y-c2y)*(c1y-c2y)); cout< cout< "< } boolCityManage: : Distance_In_Range(intnum,floatx,floaty) //(一定范围内的城市) { CityNode*p; intn=0; p=newCityNode; p=head->next; while(p! =NULL) { if(sqrt((pow(p->x-x,2)+pow(p->y-y,2)))<=num) { cout< n++; } p=p->next; } if(n==0) { cout<<"该范围内没有发现城市! "; } returntrue; } voidCityManage: : Clear() { CityNode*p; p=newCityNode; while(head2->next) { p=head2->next; head2->next=p->next; free(p); number2--; } } boolCityManage: : Travel_Edge() //(将城市和坐标分别存在数组中,便于求最短路径) { CityNode*p,*s; p=newCityNode; s=newCityNode; p=head2->next; inta=0,b=0,c=0; for(a=0;a<100;a++) for(b=0;b<100;b++) Weight[a][b]=100; for(a=0;a { s=p->next; for(b=a+1;b { Weight[b][a]=Weight[a][b]=sqrt(pow(abs(p->x-s->x),2)+pow(abs(p->y-s->y),2)); s=s->next; } p=p->next; } p=head2->next; for(c=0;c { citys[c]=p->cityname; p=p->next; } returntrue; } boolCityManage: : Travel_Edge_ALL() //(将城市和坐标分别存在数组中,便于求最短路径) { CityNode*p,*s; p=newCityNode; s=newCityNode; p=head->next; inta=0,b=0,c=0; for(a=0;a<100;a++) for(b=0;b<100;b++) Weight[a][b]=100; for(a=0;a { s=p->next; for(b=a+1;b { Weight[b][a]=Weight[a][b]=sqrt(pow(abs(p->x-s->x),2)+pow(abs(p->y-s->y),2)); s=s->next; } p=p->next; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 报告 城市管理