城市链表.docx
- 文档编号:23726624
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:19
- 大小:371.23KB
城市链表.docx
《城市链表.docx》由会员分享,可在线阅读,更多相关《城市链表.docx(19页珍藏版)》请在冰豆网上搜索。
城市链表
课
程
设
计
报
告
项目名称:
项目组长:
项目成员:
班级名称:
专业名称:
完成时间:
一、案例描述(一级标题标题四号黑体,段前断后0.5行)-1-
1、总体描述(二级标题小四号宋体加粗)-1-
2、模块描述-1-
二、设计思路-2-
三、程序设计-3-
1、数据结构描述-3-
2、主函数及其流程图-3-
3、源程序-3-
四、调试与分析-9-
1开始运行程序-9-
2创建城市链表-10-
3根据城市名查询城市-11-
4根据离中心坐标距离查询城市-11-
5插入新城市信息-12-
6删除城市信息-12-
7更新城市信息-13-
五、设计总结-13-
1、完成情况-13-
2、心得体会-13-
一、案例描述
1、总体描述
城市链表系统是将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:
城市名、城市的位置坐标。
要求能够城市名和位置坐标进行有关的查找、插入、删除和更新等操作。
2、模块描述
1)菜单设计:
本程序菜单设计如下,用户可以根据菜单提示进行操作
(1)、创建城市链表;
(2)、根据城市名查询城市;
(3)、根据离中心坐标距离查询城市名;
(4)、插入城市信息;
(5)、删除城市信息;
(6)、更新城市信息;
(7)、退出程序。
2)添加模块:
(1)主程序模块:
Voidmain()
{
初始化
Switch(){
接受命令;
处理命令;
}
}
System(“pause”); //从程序里调用“pause”命令
Return0;
(2)、函数调用模块:
voidInit(cityList*LHead);//初始化函数
voidInsert(cityList*LHead);//插入函数
voidDelete(cityList*LHead);//删除函数
voidCreate(cityList*LHead);//创建函数
voidFindCity(cityList*LHead);//根据城市名查询城市
voidFindCityDistance(cityList*LHead);//根据距离查询城市名
voidUpdateCity(cityList*LHead);//更新函数
二、设计思路
本程序要求模块化管理,分成菜单函数、输入函数、输出函数、查询函数等,控制各个部分从而将程序简单化出来分析。
本程序的主要功能是:
创建一个城市链表,能够输入城市信息,能够根据城市名查询其位置坐标,根据离中心坐标距离查询城市名。
城市链表系统功能模块图
三、程序设计
1、数据结构描述
本程序定义了一个结构体:
城市结构体
structCITYLIST{
charcityName[30];
floatx;
floaty;
structCITYLIST*Next;
};
typedefstructCITYLISTcityList;// 定义的变量名
2、主函数及其流程图
voidInit(cityList*LHead);初始化
voidInsert(cityList*LHead);插入
voidDelete(cityList*LHead);删除
voidCreate(cityList*LHead);创建
voidFindCity(cityList*LHead);查找
voidFindCityDistance(cityList*LHead);根据中心距离查找城市
voidUpdateCity(cityList*LHead);更新
3、源程序
#include
#include
#include
#include
#include
structCITYLIST{
charcityName[30];
floatx;
floaty;
structCITYLIST*Next;
};
typedefstructCITYLISTcityList;
voidInit(cityList*LHead);
voidInsert(cityList*LHead);
voidDelete(cityList*LHead);
voidCreate(cityList*LHead);
voidFindCity(cityList*LHead);
voidFindCityDistance(cityList*LHead);
voidUpdateCity(cityList*LHead);
FILE*fp;
intmain()
{
cityList*LHead;
cityList*Store;
charchoice[3]={1,2,3};
LHead=(cityList*)malloc(sizeof(cityList));
Init(LHead);
Store=LHead;
while(strcmp(choice,"7")){
printf("\t\t\tの┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉の\n");
time_tt=time(0);
chartmp[64];
strftime(tmp,sizeof(tmp),"\t\t\tの%Y/%m/%d%X%Aの",localtime(&t));//获取当地时间和日期
puts(tmp);
printf("\t\t\tの@@@@@@@@@@@@@@@の\n");
printf("\t\t\tの@@@@@@@@@@@@@@@の\n");
printf("\t\t\tのの\n");
printf("\t\t\tの欢迎使用城市链表系统の\n");
printf("\t\t\tのの\n");
printf("\t\t\tの@@@@@@@@@@@@@@@の\n");
printf("\t\t\tの@@@@@@@@@@@@@@@の\n");
printf("\t\t\t┇1.创建城市链表┇\n");
printf("\t\t\t┇2.根据城市名查询城市┇\n");
printf("\t\t\t┇3.根据离中心坐标距离查询城市┇\n");
printf("\t\t\t┇4.插入新城市信息┇\n");
printf("\t\t\t┇5.删除城市信息┇\n");
printf("\t\t\t┇6.更新城市信息┇\n");
printf("\t\t\t┇7.退出┇\n");
printf("\t\t\tの┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉の\n");
printf("请输入选项:
");
scanf("%s",&choice);
switch(choice[0]){
case'1':
Create(Store);
break;
case'2':
FindCity(Store);
break;
case'3':
FindCityDistance(Store);
break;
case'4':
Insert(Store);
break;
case'5':
Delete(Store);
break;
case'6':
UpdateCity(Store);
break;
case'7':
break;
default:
printf("输入错误,请重新输入:
");
break;
}
}
return0;
}
voidInit(cityList*LHead)//初始化
{
LHead->Next=NULL;
}
voidCreate(cityList*LHead)//创建
{
charsign[20];
chara[20]={'N'};
charb[20]={'n'};
printf("输入n/N退出,输入其余值继续:
");
scanf("%s",sign);//输入一个值
while
(1)
{
if(strcmp(sign,a)==0)//sign和a比较
break;
if(strcmp(sign,b)==0)//sign和b比较
break;
Insert(LHead);//调用插入代码
printf("输入n/N退出,输入其余值继续:
");
scanf("%s",sign);
}
system("cls");
puts("");
}
voidFindCity(cityList*LHead)//查找
{
charcityName[30];
printf("请输入您要搜索的城市名:
");
scanf("%s",cityName);
while(LHead->Next!
=NULL&&strcmp(LHead->Next->cityName,cityName))
{
LHead=LHead->Next;
}
if(LHead->Next==NULL)
{
printf("您要搜索的城市不存在!
\n");
system("pause");
system("cls");
return;
}
printf("城市坐标为:
(%.1f,%.1f)\n",LHead->Next->x,LHead->Next->y);
system("pause");
system("cls");
}
voidFindCityDistance(cityList*LHead)//根据中心距离查城市
{
charm;
floatx;
floaty;
floatdistance;
printf("请输入中心坐标x,y:
");
scanf("%f%c%f",&x,&m,&y);
printf("请输入距离:
");
scanf("%f",&distance);
LHead=LHead->Next;
while(LHead!
=NULL)
{
if((x-LHead->x)*(x-LHead->x)+(y-LHead->y)*(y-LHead->y)<=distance*distance)
{
printf("城市名为%s:
\n",LHead->cityName);
printf("城市坐标为:
(%.1f,%.1f)\n",LHead->x,LHead->y);
}
LHead=LHead->Next;
system("pause");
system("cls");
}
}
voidInsert(cityList*LHead)//插入城市链表
{
cityList*newNode;
charm;
newNode=(cityList*)malloc(sizeof(cityList));
if(newNode==NULL)//验证空间申请是否成功
{
printf("内存分配失败!
\n");
return;//若分配内存不成功,则返回继续分配
}
printf("请输入城市名:
");
scanf("%s",newNode->cityName);
printf("请输入城市坐标x,y:
");
scanf("%f%c%f",&newNode->x,&m,&newNode->y);//将城市信息填入新节点中
while(LHead->Next!
=NULL)
{
LHead=LHead->Next;//如果非空,HLead指针的位置向后移
}
newNode->Next=LHead->Next;
LHead->Next=newNode;//将新节点插入链表
printf("插入成功!
\n");
system("pause");
system("cls");
}
voidDelete(cityList*LHead)//删除城市链表
{
chardelCity[30];
printf("请输入要删除的城市名:
");
scanf("%s",delCity);
if(LHead->Next==NULL)
{
printf("您要搜索的城市不存在!
\n");
system("pause");
system("cls");
return;
}
while(strcmp(LHead->Next->cityName,delCity))
{
LHead=LHead->Next;//不相等则指针LHead下移,继续查找
}
LHead->Next=LHead->Next->Next;//相等则删除此节点
printf("删除成功!
\n");
system("pause");
system("cls");
}
voidUpdateCity(cityList*LHead)//更新
{
charcityName[30];
printf("请输入您要更新的城市名:
");
scanf("%s",cityName);
if(LHead->Next==NULL)
{
printf("您要搜索的城市不存在!
\n");
system("pause");
system("cls");
return;
}
while(strcmp(LHead->Next->cityName,cityName))//从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。
{
LHead=LHead->Next;//当不相等则指针LHead下移,继续查找
}
printf("请输入城市新名:
");
scanf("%s",LHead->Next->cityName);
printf("请输入城市新坐标:
");
scanf("%f%f",&LHead->Next->x,&LHead->Next->y);
printf("更新成功!
");
system("pause");
system("cls");
}
四、调试与分析
1开始运行程序
将源程序编译、链接后生成可执行文件,运行该文件会看到如图所示的提示信息
城市链表系统界面
运行程序,根据提示进行操作
2创建城市链表
创建城市链表
3根据城市名查询城市
根据城市名查询城市
4根据离中心坐标距离查询城市
根据离中心坐标距离查询城市
5插入新城市信息
插入新城市信息
6删除城市信息
删除城市信息
7更新城市信息
更新城市信息
五、设计总结
1、完成情况
何寿炯:
视频制作
陈邦胜:
程序代码
李森淼:
实验报告
王赛:
程序代码
2、心得体会
何寿炯
数据结构的第一个项目就让我感觉的无形的压力,因为自己的能力不够,所以在编写程序的方面我存在这很大的漏洞,在这些日子的学习中自己感觉到自己是那么的心有余而力不足了,尽管在编写程序的过程中我们组遇到了很大的困难,但是在最终的时候我们还是完成了我们的程序,尽管这个程序不是很完善,也不是很优秀,但是因为我们的能力也不是那么的强,所以能够完成作业对于我来说也是非常的开心了,这次让自己接受了教训,希望可以在接下来的程序实验中更好的完成老师所布置的作业。
陈邦胜
通过这次作业,我也不得不承认我对书本上的知识掌握的并不扎实,而且,也很容易在细节上出现错误。
而且这是一个小组一起完成的项目,不是自己一个能独立完成的,我们需要相互见的配合。
我们最后是程序地实现和视频的拍摄都需要我们一起合作,共同对程序加以改进。
在整个过程中,我们对数据结构这门课地应用有了一定地了解,知道对线性表插入、删除等操作的实现,加深对课本地理解。
另一方面就是小组成员的合作。
怎样协调大家共同做好一件事的问题。
只有参与此过程才会体会团队合作所带来的快乐。
李森淼
在这次的实验中,我发现许多的不足之处,有很多知识感觉很模糊,也许是写的少的原因吧,但是我相信在以后的学习中,我会更加努力,通过不断的实验,我相信这些问题都不是问题,争取把不足之处给弥补了。
另外我觉得团队合作能力也是不可或缺的。
最后感谢老师对我的指导。
王赛
通过这次实验我明白自己的知识薄弱,需要不断的学习进步。
首先是对程序的分析。
虽然题目的要求很简单,但我们需要更深入地思考程序的结构和数据的运用。
了解实验所需要的基本程序,并用所学知识实现它一方面,对数据结构这门课地应用有了一定地了解,知道对线性表插入、删除等操作的实现,加深对课本地理解。
另一方面就是小组成员的合作。
怎样协调大家共同做好一件事的问题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 城市