程序设计报告城市管理.docx

上传人:b****5 文档编号:6430773 上传时间:2023-01-06 格式:DOCX 页数:32 大小:555.36KB
下载 相关 举报
程序设计报告城市管理.docx_第1页
第1页 / 共32页
程序设计报告城市管理.docx_第2页
第2页 / 共32页
程序设计报告城市管理.docx_第3页
第3页 / 共32页
程序设计报告城市管理.docx_第4页
第4页 / 共32页
程序设计报告城市管理.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

程序设计报告城市管理.docx

《程序设计报告城市管理.docx》由会员分享,可在线阅读,更多相关《程序设计报告城市管理.docx(32页珍藏版)》请在冰豆网上搜索。

程序设计报告城市管理.docx

程序设计报告城市管理

 

课程设计报告

 

设计题目:

城市管理

学生姓名:

魏于博

专业:

电子信息工程

班级:

电信工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..查找距离定点一定距离的城市

6.查找最优路径

《1》制定城市查询最短路径

《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<<"添加成功"<

if(head->next==NULL)

{

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<<""<x<<","<y<<">"<

cout<<"*****************************"<

returntrue;

}

p=p->next;

}

cout<<"未发现此城市"<

returnfalse;

}

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<<""<cityname<<"<"<x<<","<y<<">"<

cout<<"*****************************"<

cout<

returntrue;

}

p=p->next;

}

cout<<"所在坐标下没有城市"<

returnfalse;

}

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<<"该城市已存在"<

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<<"该城市已删除"<

number--;

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<<"未找到您所输入的第一个城市"<

return0;

}

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<<"未找到您所输入的第二个城市"<

return1;

}

dis=sqrt((c1x-c2x)*(c1x-c2x)+(c1y-c2y)*(c1y-c2y));

cout<cityname<<""<<"<"<x<<","<y<<">"<<"到";

cout<cityname<<""<<"<"<x<<","<y<<">"<<"的距离为:

"<

returndis;

}

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<cityname<<"<"<x<<","<y<<">"<

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;

}

p=head->next;

for(c=0;c

{

citys[c]=p->cityname;

p=p->next;

}

returntrue;

}

voidTravel(intNumber)//(求最短路径)

{

inti,j,k,l;

intS[100];//用于存储已访问过的城市//用于存储两个城市之间的距离

floatsum=0;//用于记算已访问过的城市的最小路径长度

floatDtemp;//保证Dtemp比任意两个城市之间的距离都大(其实在算法描述中更准确的应为无穷大)

intflag;////最为访问的标志,若被访问过则为1,从未被访问过则为0

/*初始化*/

i=1;//i是至今已访问过的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1