课程设计报告设计题目:城市管理学生姓名:魏于博专业:电子信息工程班级:电信工17-1班学号:2017212064指导教师:完成日期:合肥工业大学计算机与信息学院(1)需求和规格说明问题描述:问题描述:用无序表实现一个城市数据库。每条数据库记录包括城市名(任意长的字符串)和城市的坐标(用整数x和y表示)。实现数据的插入、删除、查询功能,并实现指定距离内的所有城市。设计算法实现指定一定数目的具体城市,寻找遍历这些城市并回到出发点的最佳路径,观察随着城市数目的增加,算法执行效率的变化。编程任务:1)用列表对城市进行记录和管理,实现城市的增加、删除和查询功能,并实现文件保存和读取2)计算城市之间距离,统计输出距离某城市一定范围内的所有城市。3)实现一定规模城市的遍历最佳路径选择。4)分析随着城市数目增加时,算法执行效果的改变,深刻理解旅行商问题。(2)设计首先建立一个CityNode,包含城市的名称,横纵坐标和指针。再建立一CityManage类属性和方法定义类名成员类别类型成员名描述CityNode属性Stringcityname城市名称intx城市的横坐标inty城市的纵坐标CityNode*next其连接作用类名成员类别类型成员名描述CityManage属性Stringcityname城市名称intx城市横坐标inty城市纵坐标CityNode*next指针,起连接作用Class中的方法boolInsert_CityNode(stringcityname,intx,inty);(添加城市)boolInsert_CityNode_2(stringcityname,intx,inty);(添加城市---文件读入)boolSearch_CityNode(stringcityname);(通过城市名字查找)boolSearch_CityNode(intx,inty);(用过城市坐标查找)boolDelete_CityNode(stringcityname);(用过城市名字删除)boolDelete_CityNode(intx,inty);(通过城市坐标删除)floatDistance(stringcityname1,stringcityname2);(两城市间的距离)voidSaveFile(stringcityname,intx,inty);(保存文件)voidReadFile();(读取文件)voidOperation();(switc语句,便于操作)voidIsExist(intx,inty,stringcityname,int&temp);(判断是否已经存在)boolDistance_In_Range(intnum,intx,inty);(一定范围内的城市)boolTravel_Edge();(将城市和坐标分别存在数组中,便于求最短路径)voidTravel_Path();(贪心算法求最短路径)(3)用户手册(4)调试及测试1.添加城市若城市已存在,则提示存在,不能添加2.查找城市通过名称查找通过坐标查找3.删除城市通过名称删除通过坐标删除4..查看两城市间的距离5..查找距离定点一定距离的城市6.查找最优路径测试数据(环形数据能更好的检测)中国91合肥96广州56深圳51安徽16北京11(5)附录程序代码#includeiostream#includestring#includecmath#includefstreamusingnamespacestd;intnumber=0;//城市数目intWeight[100][100];//边距stringcitys[100];//城市名称structCityNode{stringcityname;intx,y;CityNode*next;};structminedge{intvex;intlow;};minedgeEdge[100];voidTravel_Path(intv0);classCityManage{public:CityManage();//~CityManage();boolInsert_CityNode(stringcityname,intx,inty);boolInsert_CityNode_2(stringcityname,intx,inty);boolSearch_CityNode(stringcityname);boolSearch_CityNode(intx,inty);boolDelete_CityNode(stringcityname);boolDelete_CityNode(intx,inty);floatDistance(stringcityname1,stringcityname2);voidSaveFile(stringcityname,intx,inty);voidReadFile();voidOperation();voidSaveAgain();voidIsExist(intx,inty,stringcityname,int&temp);boolDistance_In_Range(intnum,intx,inty);boolTravel_Edge();boolTest();private:CityNode*head;};CityManage::CityManage(){head=newCityNode;head-next=NULL;}boolCityManage::Insert_CityNode(stringcityname,intx,inty)//(添加城市){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添加成功endl;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_2(stringcityname,intx,inty)//(添加城市---文件读入){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::Search_CityNode(stringcityname)//(通过城市名字查找){CityNode*p;p=newCityNode;p=head-next;while(p!=NULL){if(p-cityname==cityname){cout*****************************endl;coutcitynamep-x,p-yendl;cout*****************************endl;returntrue;}p=p-next;}cout未发现此城市endl;returnfalse;}boolCityManage::Search_CityNode(intx,inty)//(用过城市坐标查找){CityNode*p;p=newCityNode;p=head-next;while(p!=NULL){if(p-x==x&&p-y==y){coutendl;cout*****************************endl;coutp-citynamep-x,p-yendl;cout*****************************endl;coutendl;returntrue;}p=p-next;}cout所在坐标下没有城市endl;returnfalse;}voidCityManage::IsExist(intx,inty,stringcityname,int&temp)//(判断是否已经存在){CityNode*k;k=newCityNode;k=head-next;while(k!=NULL){if(k-x==x&&k-y==y||k-cityname==cityname){cout该城市已存在endl;temp=1;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该城市已删除endl;number--;returntrue;}p=p-next;s=s-next;}returnfalse;}boolCityManage::Delete_CityNode(intx,inty)//(通过城市坐标删除){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该城市已删除endl;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){cout未找到您所输入的第一个城市endl;return0;}while(s!=NULL){if(s-cityname==cityname2){c2x=s-x;c2y=s-y;break;}s=s-next;}if(s-cityname!=cityname2){cout未找到您所输入的第二个城市endl;return1;}dis=sqrt((c1x-c2x)*(c1x-c2x)+(c1y-c2y)*(c1y-c2y));coutp-citynamep-x,p-y到;couts-citynames-x,s-y的距离为:disendl;returnd