您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 城市链表-数据结构课程设计
数据结构课程设计报告1设计题目一:2.4.3城市链表查询系统一、设计要求1.问题描述将若干个城市的信息,存入一个带头结点的单链表。结点中的城市信息包含城市名和城市的位置坐标。要求能够利用城市名和位置坐标进行相关查找、插入、删除、更新等操作。2.需求分析(1)、创建一个城市链表,能够输入城市信息,即城市名和城市位置坐标;(2)、能够根据城市名查询其位置坐标;(3)、根据离中心坐标距离查询城市名;(4)、能够插入城市信息;(5)、能够删除城市信息;(6)、能够更新城市信息;(7)、执行完毕,退出程序。二、概要设计1.主界面设计为了实现串基本操作演示系统各功能的管理,本系统设计一个含有多个菜单项的主控单,方便用户使用。本系统主控菜单运行界面如图1所示。图1城市链表操作系统主菜单2.存储结构设计数据结构课程设计报告2typedefstructCityList{charCityName[10];floatX,Y;structCityList*Next;}CityList,*LHead;//结点类型,指针类型3.系统功能设计(1)创建城市链表。有函数voidCreate()实现。调用主函数main()和插入函数Insert()来完成创建操作。(2)查找操作。有函数voidFindCity()和函数voidFindCityDistance()实现。在创建链表的基础上正向和反向查找城市的信息。(3)插入操作。有函数voidInsert()实现。根据用户的输入,系统自动在原有的链表中插入新的信息。(4)删除操作。有函数voidDelete()实现。根据用户的输入,系统自动判断是否存在该信息,若存在,就给出提示进行删除操作,否则提示不存在输入的信息。(5)更新操作。有函数voidUpdateCity()实现。根据用户的输入,系统自动判断是否存在该信息,若存在,就给出替换信息,否则提示不存在该信息并返回。(6)退出操作。当用户选择7时即退出本系统,有主函数中的选择函数switch来实现。三、模块设计1.模块设计本程序包含8个函数模块,其调用关系如图2所示。图2模块调用关系示意图2.系统子程序及功能设计(1)typedefstructCITYLISTCityList;//定义结构类型(2)voidInit(CityList*LHead);//初始化函数操作(3)voidInsert(CityList*LHead);//插入函数主程序模块子功能模块数据结构课程设计报告3(4)voidDelete(CityList*LHead);//删除函数(5)voidCreate(CityList*LHead);//创建函数(6)voidFindCity(CityList*LHead);//查找城市操作(7)voidFindCityDistance(CityList*LHead);//根据中心坐标和距离进行的查找操作(8)voidUpdateCity(CityList*L//更新函数3.函数主要调用关系图图3系统函数调用关系图四、详细设计1.数据类型定义(1)源程序文件名清单:#includestdlib.h#includestdio.h#includestring.h//字符串处理函数的头文件#includemalloc.h//动态存储分配实现单元#includeconio.h(2)结构类型构造typedefstructCityList{charCityName[10];floatX,Y;structCityList*Next;}CityList,*LHead;//结点类型,指针类型2.系统主要子程序详细设计main()12456783数据结构课程设计报告4(1).//****插入操作voidInsert(CityList*LHead){CityList*newNode;//定义指针结构为cityList型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指针的位置向后移}printf(已成功插入新城市信息!\n);newNode-Next=LHead-Next;LHead-Next=newNode;//将新节点插入链表}(2).//****删除操作voidDelete(CityList*LHead){chardelCity[10];printf(请输入要删除的城市名称并回车:);scanf(%s,delCity);if(LHead-Next==NULL){数据结构课程设计报告5printf(您删除的城市不存在,请先创建城市!\n);return;}while(strcmp(LHead-Next-CityName,delCity))//从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。{LHead=LHead-Next;//不相等则指针LHead下移,继续查找}LHead-Next=LHead-Next-Next;//相等则删除此节点printf(以成功删除此城市信息!\n);}(3).//****更新操作voidUpdateCity(CityList*LHead){charCityName[10];printf(请输入您要更新的城市名称并回车:);scanf(%s,CityName);if(LHead-Next==NULL){printf(您要更新的城市不存在,请先创建城市!\n);return;}while(strcmp(LHead-Next-CityName,CityName))//从LHead指向得头结点的下一个结点开判断结点中的城市名与输入城市名是否相等。{LHead=LHead-Next;//当不相等则指针LHead下移,继续查找}printf(请输入城市新信息.\n);//输入城市新信息printf(请输入城市新名并回车:);scanf(%s,LHead-Next-CityName);printf(请输入城市新坐标并回车:);数据结构课程设计报告6scanf(%f,&LHead-Next-X);scanf(%f,&LHead-Next-Y);printf(已成功更新城市信息!\n);}(4).//****正向查找操作voidFindCity(CityList*LHead){charCityName[30];intj=0;printf(请输入您要查找的城市名称并回车:);scanf(%s,CityName);while(LHead-Next!=NULL&&strcmp(LHead-Next-CityName,CityName)){LHead=LHead-Next;}if(LHead-Next==NULL){printf(您要查找的城市不存在,请先创建城市!\n);return;}printf(已找到该城市,坐标为:%.2f,%.2f\n,LHead-Next-X,LHead-Next-Y);}(5).//****反向查找操作voidFindCityDistance(CityList*LHead){//给定坐标和距离返回城市名charm;floatx;floaty;floatdistance;printf(请输入中心坐标x,y:);scanf(%f%c%f,&x,&m,&y);数据结构课程设计报告7printf(请输入距离:);scanf(%f,&distance);if(LHead-Next==NULL){printf(您要查找的城市不存在,请先创建城市!\n);return;}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(已找到该城市,坐标为:%.2f,%.2f\n,LHead-X,LHead-Y);}LHead=LHead-Next;}}五、测试分析系统运行主界面如图1所示。各子系统测试运行结果如下。1.创建城市链表在主菜单下,输入1并回车,根据提示进行创建城市信息。运行结果如图4所示。数据结构课程设计报告8图4城市链表的创建2.查询操作然后返回主菜单,输入2并回车,根据提示输入查找的城市信息。运行结果如图5所示。图5城市查询运行界面3.根据位置坐标和距离查询城市在主菜单下,输入3并回车,根据提示输入查找的城市信息。运行结果如图6所示。数据结构课程设计报告9图6根据位置坐标和距离进行查询4.插入操作在主菜单下,输入4并回车,根据提示插入城市信息。运行结果如图7所示。图7城市信息的插入4.删除操作在主菜单下,输入5并回车,根据提示进行删除城市信息操作。运行结果如图8所示。图8城市信息的删除5.更新操作在主菜单下,输入6并回车,根据提示进行城市信息的修改。运行结果如图9所示。数据结构课程设计报告10图9城市信息的更新6.退出。在主菜单下,输入7并回车,即可退出本程序。六、用户手册(1)本程序执行文件为“城市链表操作系统.exe”。(2)进入本系统之后,随即显示系统主菜单界面。用户可在该界面下按提示信息输入命令。七、调试报告(1)错误分析调试时while(strcmp(LHead-Next-CityName,CityName))出现错误,显示错误为‘cannotconvertparameter1from'char'to'constchar*'’前一个是char类型不能用于strcmp函数,后将charCityName[10](2)创建城市链表时,输入城市信息较为麻烦,每个城市信息输入完后,若还想输入其它城市信息,则输入任意键继续,否则输入END退出,所以在输入信息时需注意输入步骤,以免发生输入混乱。(3)花了一个礼拜来弄这个程序,结果做完后,虽然能成功运行,但还是有很多bug,反复的调试,修改,我头都晕了,程序员真的很难做啊。八、程序清单#includestdlib.h#includestdio.h#includestring.h//字符串处理函数的头文件#includemalloc.h//动态存储分配实现单元#includeconio.h数据结构课程设计报告11//****结构类型构造typedefstructCityList{charCityName[10];floatX,Y;structCityList*Next;}CityList,*LHead;//结点类型,指针类型//****初始化操作voidInit(CityList*LHead){//建立一个带头结点的单链线性表,LHead指向头结点LHead-Next=NULL;}//****插入操作voidInsert(CityList*LHead){CityList*newNode;//定义指针结构为cityList型charm;newNode=(CityList*)malloc(sizeof(CityList));//生成新结点if(newNode==NULL)//验证空间申请是否成功{printf(内存分配失败\n);return;//若分配内存不成功,则返回继续分配。}printf(请输入城
本文标题:城市链表-数据结构课程设计
链接地址:https://www.777doc.com/doc-4226889 .html