版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告设计题目<一>: 2.4.3城市链表查询系统 一、设计要求1问题描述将若干个城市的信息,存入一个带头结点的单链表。结点中的城市信息包含城市名和城市的位置坐标。要求能够利用城市名和位置坐标进行相关查找、插入、删除、更新等操作。2需求分析(1)、创建一个城市链表,能够输入城市信息,即城市名和城市位置坐标;(2)、能够根据城市名查询其位置坐标;(3)、根据离中心坐标距离查询城市名;(4)、能够插入城市信息;(5)、能够删除城市信息;(6)、能够更新城市信息;(7)、执行完毕,退出程序。二、概要设计1主界面设计为了实现串基本操作演示系统各功能的管理,本系统设计一个含有多
2、个菜单项的主控单,方便用户使用。本系统主控菜单运行界面如图1所示。图1 城市链表操作系统主菜单2存储结构设计typedef struct CityListchar CityName10;float X,Y;struct CityList *Next; CityList, *LHead; / 结点类型,指针类型3系统功能设计(1)创建城市链表。有函数void Create()实现。调用主函数main()和插入函数Insert()来完成创建操作。(2)查找操作。有函数void FindCity()和函数void FindCityDistance()实现。在创建链表的基础上正向和反向查找城市的信息。
3、(3)插入操作。有函数void Insert()实现。根据用户的输入,系统自动在原有的链表中插入新的信息。(4)删除操作。有函数void Delete()实现。根据用户的输入,系统自动判断是否存在该信息,若存在,就给出提示进行删除操作,否则提示不存在输入的信息。(5)更新操作。有函数void UpdateCity()实现。根据用户的输入,系统自动判断是否存在该信息,若存在,就给出替换信息,否则提示不存在该信息并返回。(6)退出操作。当用户选择7时即退出本系统,有主函数中的选择函数switch来实现。三、模块设计1模块设计 本程序包含8个函数模块,其调用关系如图2所示。子功能模块主程序模块图2模
4、块调用关系示意图2系统子程序及功能设计(1) typedef struct CITYLIST CityList; / 定义结构类型(2) void Init(CityList *LHead); /初始化函数操作(3) void Insert(CityList *LHead); /插入函数(4) void Delete(CityList *LHead); /删除函数(5) void Create(CityList *LHead); /创建函数(6) void FindCity(CityList* LHead); /查找城市操作(7) void FindCityDistance(CityList*
5、 LHead); /根据中心坐标和距离进行的查找操作(8) void UpdateCity(CityList* L /更新函数3函数主要调用关系图main()42765183图3 系统函数调用关系图四、详细设计1数据类型定义(1)源程序文件名清单:#include<stdlib.h> #include<stdio.h> #include<string.h> /字符串处理函数的头文件#include<malloc.h> /动态存储分配实现单元#include <conio.h>(2)结构类型构造typedef struct CityLi
6、stchar CityName10;float X,Y;struct CityList *Next; CityList, *LHead; / 结点类型,指针类型2系统主要子程序详细设计(1)./*插入操作 void Insert(CityList *LHead) CityList* newNode; /定义指针结构为cityList型char m;newNode = (CityList*)malloc(sizeof(CityList); /生成新结点if(newNode = NULL) /验证空间申请是否成功printf("内存分配失败n");return; /若分配内存不
7、成功,则返回继续分配。 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指针的位置向后移printf("
8、;已成功插入新城市信息!n");newNode->Next = LHead->Next;LHead->Next = newNode; /将新节点插入链表(2)./*删除操作 void Delete(CityList *LHead)char delCity10;printf("请输入要删除的城市名称并回车:");scanf("%s",delCity);if(LHead->Next = NULL)printf("您删除的城市不存在,请先创建城市!n");return;while(strcmp(LHead-
9、>Next->CityName,delCity ) /从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。LHead = LHead->Next; /不相等则指针LHead下移,继续查找LHead ->Next = LHead->Next->Next; /相等则删除此节点printf("以成功删除此城市信息!n");(3). /*更新操作 void UpdateCity(CityList* LHead)char CityName10;printf("请输入您要更新的城市名称并回车:");sca
10、nf("%s",CityName);if(LHead->Next = NULL)printf("您要更新的城市不存在,请先创建城市!n");return;while(strcmp(LHead->Next->CityName,CityName) /从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。LHead = LHead->Next; /当不相等则指针LHead下移,继续查找 printf("请输入城市新信息.n"); /输入城市新信息printf("请输入城市新名并回车:
11、");scanf("%s",LHead->Next->CityName);printf("请输入城市新坐标并回车:");scanf("%f",&LHead->Next->X);scanf("%f",&LHead->Next->Y);printf("已成功更新城市信息!n");(4). /*正向查找操作 void FindCity(CityList* LHead)char CityName30;int j=0;printf("
12、请输入您要查找的城市名称并回车:");scanf("%s",CityName);while(LHead->Next != NULL && strcmp(LHead->Next->CityName,CityName)LHead = LHead->Next;if(LHead->Next = NULL)printf("您要查找的城市不存在,请先创建城市!n");return;printf("已找到该城市,坐标为:%.2f,%.2fn",LHead->Next->X,LHea
13、d->Next->Y);(5). /*反向查找操作 void FindCityDistance(CityList* LHead) /给定坐标和距离返回城市名char m;float x;float y;float distance;printf("请输入中心坐标x,y:");scanf("%f%c%f",&x,&m,&y);printf("请输入距离:");scanf("%f",&distance);if(LHead->Next = NULL)printf(&quo
14、t;您要查找的城市不存在,请先创建城市!n");return;LHead = LHead->Next;while(LHead != NULL)if(x-LHead->X)*(x-LHead->X) + (y-LHead->Y)*(y-LHead->Y) <= distance*distance)printf("已找到该城市,名称为:%sn",LHead->CityName);printf("已找到该城市,坐标为:%.2f,%.2fn",LHead->X,LHead->Y);LHead = L
15、Head->Next;五、测试分析系统运行主界面如图1所示。各子系统测试运行结果如下。1. 创建城市链表在主菜单下,输入1并回车,根据提示进行创建城市信息。运行结果如图4所示。图4 城市链表的创建2. 查询操作然后返回主菜单,输入2并回车,根据提示输入查找的城市信息。运行结果如图5所示。图5 城市查询运行界面3. 根据位置坐标和距离查询城市在主菜单下,输入3并回车,根据提示输入查找的城市信息。运行结果如图6所示。图6 根据位置坐标和距离进行查询4.插入操作在主菜单下,输入4并回车,根据提示插入城市信息。运行结果如图7所示。图7 城市信息的插入4. 删除操作在主菜单下,输入5并回车,根据提
16、示进行删除城市信息操作。运行结果如图8所示。图8 城市信息的删除5. 更新操作在主菜单下,输入6并回车,根据提示进行城市信息的修改。运行结果如图9所示。图9 城市信息的更新6 退出。在主菜单下,输入7并回车,即可退出本程序。六、用户手册 (1)本程序执行文件为“城市链表操作系统.exe”。(2)进入本系统之后,随即显示系统主菜单界面。用户可在该界面下按提示信息输入命令。七、调试报告(1) 错误分析调试时while(strcmp(LHead->Next->CityName,CityName)出现错误,显示错误为cannot convert parameter 1 from '
17、char' to 'const char *'前一个是char类型不能用于strcmp函数,后将char CityName10(2) 创建城市链表时,输入城市信息较为麻烦,每个城市信息输入完后,若还想输入其它城市信息,则输入任意键继续,否则输入END退出,所以在输入信息时需注意输入步骤,以免发生输入混乱。(3)花了一个礼拜来弄这个程序,结果做完后,虽然能成功运行,但还是有很多bug,反复的调试,修改,我头都晕了,程序员真的很难做啊。八、程序清单#include<stdlib.h> #include<stdio.h> #include<str
18、ing.h> /字符串处理函数的头文件#include<malloc.h> /动态存储分配实现单元#include <conio.h>/*结构类型构造typedef struct CityListchar CityName10;float X,Y;struct CityList *Next; CityList, *LHead; / 结点类型,指针类型/*初始化操作void Init(CityList *LHead) /建立一个带头结点的单链线性表,LHead指向头结点LHead->Next = NULL; /*插入操作 void Insert(CityLis
19、t *LHead) CityList* newNode; /定义指针结构为cityList型char m;newNode = (CityList*)malloc(sizeof(CityList); /生成新结点if(newNode = NULL) /验证空间申请是否成功printf("内存分配失败n");return; /若分配内存不成功,则返回继续分配。 printf("请输入城市名称并回车:");scanf("%s",newNode->CityName); /指针的数据域printf("请输入城市坐标x,y并回车:
20、"); scanf("%f%c%f",&newNode->X,&m,&newNode->Y); /将城市信息填入新节点中while(LHead->Next != NULL) LHead = LHead->Next; /如果非空,HLead指针的位置向后移printf("已成功插入新城市信息!n");newNode->Next = LHead->Next;LHead->Next = newNode; /将新节点插入链表 /*删除操作 void Delete(CityList *LH
21、ead)char delCity10;printf("请输入要删除的城市名称并回车:");scanf("%s",delCity);if(LHead->Next = NULL)printf("您删除的城市不存在,请先创建城市!n");return;while(strcmp(LHead->Next->CityName,delCity ) /从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。LHead = LHead->Next; /不相等则指针LHead下移,继续查找LHead ->
22、;Next = LHead->Next->Next; /相等则删除此节点printf("以成功删除此城市信息!n");/*创建选择项操作 void Create(CityList *LHead)char sign20; /定义输入信息类型及长度printf("【输入任意值后并回车,开始创建城市链表】or【输入END返回主菜单】n"); /当输入END时,在任意输入,则退出此操作scanf("%s",sign);while(strcmp(sign,"END") /当输入END时,再任意输入,则退出此操作I
23、nsert(LHead);printf("【输入任意值后并回车,开始创建城市链表】or【输入END返回主菜单】n");scanf("%s",sign);/*更新操作 void UpdateCity(CityList* LHead)char CityName10;printf("请输入您要更新的城市名称并回车:");scanf("%s",CityName);if(LHead->Next = NULL)printf("您要更新的城市不存在,请先创建城市!n");return;while(str
24、cmp(LHead->Next->CityName,CityName) /从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。LHead = LHead->Next; /当不相等则指针LHead下移,继续查找 printf("请输入城市新信息.n"); /输入城市新信息printf("请输入城市新名称并回车:");scanf("%s",LHead->Next->CityName);printf("请输入城市新坐标并回车:");scanf("%f&qu
25、ot;,&LHead->Next->X);scanf("%f",&LHead->Next->Y);printf("已成功更新城市信息!n"); /*正向查找操作 void FindCity(CityList* LHead)char CityName30;int j=0;printf("请输入您要查找的城市名称并回车:");scanf("%s",CityName);while(LHead->Next != NULL && strcmp(LHead->
26、Next->CityName,CityName)LHead = LHead->Next;if(LHead->Next = NULL)printf("您要查找的城市不存在,请先创建城市!n");return;printf("已找到该城市,坐标为:%.2f,%.2fn",LHead->Next->X,LHead->Next->Y);/*反向查找操作 void FindCityDistance(CityList* LHead) /给定坐标和距离返回城市名char m;float x;float y;float dist
27、ance;printf("请输入中心坐标x,y:");scanf("%f%c%f",&x,&m,&y);printf("请输入距离:");scanf("%f",&distance);if(LHead->Next = NULL)printf("您要查找的城市不存在,请先创建城市!n");return;LHead = LHead->Next;while(LHead != NULL)if(x-LHead->X)*(x-LHead->X) + (y
28、-LHead->Y)*(y-LHead->Y) <= distance*distance)printf("已找到该城市,名称为:%sn",LHead->CityName);printf("已找到该城市,坐标为:%.2f,%.2fn",LHead->X,LHead->Y);LHead = LHead->Next;/*主函数,设定界面void main()system("color 0E");CityList* LHead;CityList* Store;char choice3 = 1,2,3;LHead = (CityList*)malloc(sizeof(CityList);Init(LHead); /建立空表 Store = LHead; while(strcmp(choice,"7") /操作界面 p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026福建厦门市翔安区舫山小学非在编合同教师招聘1人备考题库及参考答案详解(综合卷)
- 2026广东深圳市罗湖区新华外国语学校诚聘4人备考题库附答案详解
- 2026广西师范大学高层次人才招聘148人备考题库带答案详解(综合题)
- 2026上半年安徽黄山市休宁城乡建设投资集团有限公司及权属子公司招聘18人备考题库附答案详解(培优b卷)
- 2026内蒙古呼和浩特职业技术大学第二批人才引进23人备考题库及答案详解【全优】
- 2026江苏扬州市消防救援局政府专职消防人员国上半年招聘59人备考题库附答案详解(突破训练)
- 2026江西省江投老年医养有限公司招聘9人备考题库附参考答案详解(典型题)
- 雨课堂学堂在线学堂云《市场营销基础(贵州电子商务职业技术学院)》单元测试考核答案
- 2026年河北省中考模拟考试-数学试卷
- 房屋维修服务合同
- 基于深度学习的印刷电路板缺陷智能检测技术研究
- 兼职保密员培训
- DL∕T 1841-2018 交流高压架空输电线路与对空情报雷达站防护距离要求
- 乙烯基酯玻璃钢防腐施工方案
- 《建筑基坑工程监测技术标准》(50497-2019)
- 乳房假体和植入物的机械性并发症护理
- 数字经济学导论-全套课件
- 蔡旭伟-食管癌术后靶区-济南20170706
- 植入式静脉输液港的并发症及护理
- 心肺复苏我国专家共识
- 井巷冒顶片帮必讲课
评论
0/150
提交评论