C语言课程设计实验报告1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告题目:景点查询系统
课程名称:C语言课程设计
专业班级:信息安全二班
任务书
⑴主要内容
建立国内景点信息系统,提供创建、编辑和综合查询等基本业务管理和服务。

⑵任务要求
收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交《课程设计报告》。

⑶参考文献
[1]曹计昌,卢萍,李开. C语言程序设计,北京:科学出版社,2008
[2]张引. C程序设计基础课程设计, 杭州: 浙江大学出版社,2007
[3]黄明,梁旭,万洪莉. C语言课程设计,北京: 电子工业出版社,2006
目录
1 绪言 (1)
1.1 课题背景 (1)
1.2 课题目的及意义 (1)
1.3 课题应解决的主要问题及应达到的技术要求 (1)
1.4 研究与发展概况及存在的问题 (2)
1.5 设计的指导思想 (2)
2 方案论证 (3)
2.1 菜单的选择 (3)
2.2 链表的选择 (3)
2.3 主菜单和子菜单的设定 (3)
3 课设过程论述 (5)
3.1 系统数据 (5)
3.2 系统各模块功能 (6)
3.3 数据结构设计及用法说明 (8)
3.4 程序结构 (9)
4 结果分析 (10)
5 课程设计总结 (13)
6 参考文献 (14)
附录程序清单 (15)
1 绪言
本章阐述课程设计课题的背景、目的与意义、应解决的主要问题及应达到的技术要求;简述研究与发展概况及存在的问题,本设计的指导思想。

1.1 课题背景
随着社会的发展,旅游成为一个越来越热门的话题,很多人都会以旅游的方式度过自己的假期、生日、结婚纪念日等等,但是要想充分享受旅游带来的快乐,前期的准备就显得非常重要,只有前期的准备做好了,才能充分规划自己的旅游,才能充分享受自己的旅游。

前期的准备很大一方面是要查询自己要去的地方的一些基本信息,比如景区地点,景区门票。

城市中所含有的景区等等,如果有一个系统能够快速的查询景点信息,那么这就为人们出去旅游提供了很多的信息,帮助人们为旅游做好充分的准备!
1.2 课题目的及意义
课题目的:
本课题主要是通过景点查询系统向人们提供景点,景区,城市等方面信息的查询,修改,统计等服务,让人们快速获得有关旅游景点、景区、城市方面的信息,帮助人们充分规划自己的出行方案。

课题意义:
给出建立景点查询系统的方法,并创建景点查询系统,帮助人们对自己的旅游进行规划。

1.3 课题应解决的主要问题及应达到的技术要求
景点查询系统要解决的主要问题是菜单的选择,子菜单内容的选择,如何创建三个方向的十字交叉链表,如何查询信息等方面的问题。

技术要求方面则是要求本系统能够显示景点、景区、城市等方面的信息,并且能够对信息进行修改,删除、统计,还要求本系统能够对用户输入的一些错误信息进行正确的处理,以及提示输入的错误。

本课题的难点主要集中在菜单方面,首先是以前没有接触过菜单的制作,其次是在菜单的制作方面缺乏相应的理论基础。

1.4 研究与发展概况及存在的问题
随着互联网的快速发展,人们在网上查询景点的方式也是越来越多,较早出现的是在网页上进行查询,发展到现主要还是通过这种方式进行查询,而通过短信,电话查询也是在网页查询出现之后相继出现的,现在的查询方式依然是多种多样,同时手机的快速发展让手机成为了查询旅游信息的一种快捷手段,用户可以通过手机上网,也可以通过短息,电话等方式查询。

现在景点查询系统存在的问题就是一些景点信息查询系统的功能有待完善,像有些网站就显示了景点开放的时间,而有些网站就不显示景点开放的时间,还有就是一些系统的数据不够完善,有很多景点在网站中都无法查询到。

1.5 设计的指导思想
本设计的指导思想是从用户出发,尽可能的为用户提供景点、景区、城市信息的查询,也提供信息的修改、统计,帮助用户快速获得有关自己旅游目的地的信息,帮助用户做好旅游的准备。

系统要尽可能的使用起来方便,同时也要求系统能够对输入的错误信息做一些处理,并将处理的结果放映给用户,让用户能够知道自己输入有误,从而让用户输入正确的信息。

2 方案论证
本章阐述说明设计原理并进行方案选择,阐明为什么要选择这个设计方案(包括各种方案的分析、比较)以及所采用方案的特点。

2.1 菜单的选择
菜单采用的是简易菜单,具体的方法是直接用printf输出菜单的格式,并让用户通过键盘输入1、2、3…等数字来进行相应功能的选择,同时通过输入‘y’(Y)或者是‘n’(N)来判断是否继续执行某些功能,通过输入0来返回上一级菜单或者退出系统。

这本课题中,菜单方面有两个选择,一种是文本菜单,一种是简易菜单,简易是通过输入相应的数字来实现对系统的操作,简易菜单的代码相对于文本菜单要容易;文本菜单的特点通过方向键来选择相应的功能,形式上更面向大众;综合考虑了一下,简易菜单能够实现本系统的全部功能,而且简易菜单上手比较快,代码可以自己写出来,所以就选择了简易菜单。

2.2 链表的选择
链表采用的是三个方向的十字交叉链表,三个方向的链表分别存储城市,景区,景点的信息,通过遍历十字交叉链表来获得相应的信息。

在本课题中链表有两个选择,一种是两个方向的十字交叉链表,另外一种是三个方向的十字交叉链表。

两个方向的十字交叉链表的编码相对简单,遍历十字交叉链表的效率相对于三个方向的较低;三个方向的十字交叉链表编码相对复杂,且遍历交叉链表的时候效率比较高。

综合考虑,本系统选用了三个方向的是十字交叉链表,三个方向的十字交叉链表遍历查找的时候效率比较高,因此选用了三个方向的十字交叉链表。

2.3 主菜单和子菜单的设定
主菜单和子菜单的设定一方面考虑到用户,一方面考虑到任务书上的要求,所以主菜单包括:“文件”、“查询”、“添加”、“修改”、“删除”、“统计”、“帮助”、“退出系统”,“文件”所对应的子菜单包括:“新建”、“保存”、“读取”、“返回主菜单”;“查询”的子菜单包括:“查询城市信息”、“查询景区信息”、“查询景点信息”、“按城市查询景点信息”、“按景区查询景点信息”、“按照城市和景区综
合查询景点信息”、“返回主菜单”;“修改”的子菜单包括:“修改城市信息”,“修改景区信息”,“修改景点信息”、“返回主菜单”;“添加”的子菜单包括:“添加城市”、“添加景区”、“添加景点”、“返回主菜单”;“删除”的子菜单包括:“删除城市”、“删除景区”、“删除景点”、“返回主菜单”;“统计”的子菜单包括:“统计某个城市的景区个数”、“统计某个城市的景点个数”、“统计某个景区的景点个数”、“统计某个城市某个景区的景点”、“返回主菜单”;“帮助”的子菜单包括:“为什么我总是显示查不到景点?”、“为什么我总是读取失败?”、“本系统的声明”、“返回主菜单”。

3 课设过程论述
本章是对本系统的开放过程的详细讲述,同时详细介绍本系统的功能和结构。

3.1 系统数据
本系统主要涉及“城市”、“景区”和“景点”三类信息。

城市信息主要包括5个部分,这5个部分分别是城市编号、城市名称、城市级别、监督电话、咨询电话,上述5个部分在系统中的类型都是char型数组,其中城市编号的数组长度是5,城市名称的数组长度是10,城市级别数组的长度是10,监督电话数组的长度是15,咨询电话数组长度是15,下表是城市基本信息表:
表3.1 城市基本信息表
景区信息主要包括9个部分,这9个部分分别是城市编号、景区编号、景区名称、景区级别、景区地址、门票价格、咨询电话、开放时间、景区简介,上述9个部分在系统中的类型都是char型数组,其中城市编号的数组长度是5.景区编号的数组长度是5,景区名称的数组长度是20,景区级别的数组长度是10,景区地址的数组长度是60,门票价格的数组长度是10,咨询电话的数组长度是15,开放时间的数组长度是15,景区简介的数组长度是150,下表是景区基本信息表:
表3.2 景区基本信息表
景点信息主要包括6个部分,这6各部分分别是城市编号、景区编号、景点编号、景点名称、景点位置、景点特色,上述6个部分在系统中都是char型数组,其中城市编号的数组长度是5,景区编号的数组长度是5,景点编号的数组长度是5,景点名称的数组长度是15,景点位置的数组长度是50,景点特色的数组长度是60,下表是景点基本信息表:
表3.3 景点基本信息表
3.2 系统各模块功能
本系统的功能是由8个部分组成,这8个部分分别是“文件”、“查询”、“修改”、“添加”、“删除”、“统计”、“帮助”“退出系统”。

除了“退出系统”不含有子功能,其他的都含有“返回主菜单”这一功能,以下介绍便不做赘述。

“文件”由“新建”、“保存”、“读取”三个部分组成,其中“新建”的功能是用来创建新的十字链表,但是创建新的链表的同时,原来的数据将会丢失。

“保存”的功能是保存当前的数据,将新的数据保存到dat文件中。

“读取”的功能是将dat文件中的数据读取到系统中,让用户可以使用本系统进行信息的查询,修改等。

“查询”由“查询城市信息”、“查询景区信息”、“查询景点信息”、“按城市查询景点信息”、“按景区查询景点信息”、“按照城市和景区综合查询景点信息”6部分组成,其中前五项只要输入正确的数据就会显示出想要查询的相关信息,最后一个则是要输入城市以及城市内的景区才能显示出相应的景点,如果输入有误则不能显示出相应的数据。

“修改”由“修改城市信息”,“修改景区信息”,“修改景点信息”3部分组成,其中“修改城市信息”这个选项可以修改有关城市的所有信息,只要输入要修改的信息,系统就会自动的把输入的有关信息替代掉原来的信息;“修改景区
信息”,“修改景点信息”分别修改景区和景点有关的信息,输入要修改的信息,系统就会自动的把输入的有关信息替代掉原来的信息。

“添加”由“添加城市”、“添加景区”、“添加景点”3部分组成,“添加城市”就是在原有的城市信息基础上添加新的城市,当添加过一个新的城市后,系统会自动弹出让用户添加城市中的景区的提示,当添加过景区,系统会自动弹出让用户添加景点的提示;“添加景区”则是让用户首先输入要添加的景区所在的城市,当系统中有用户输入的城市,再弹出让用户添加城市中的景区的提示,当添加过景区,系统会自动弹出让用户添加景点的提示;“添加景点”则是要用户先输入城市,再输入景区,两者都存在且有对应关系时,系统才会让用户输入景点信息。

“删除”由“删除城市”、“删除景区”、“删除景点”3部分组成,其中“删除城市”就是删除城市以及城市内的景区和景点的信息;“删除景区”就是删除景区以及景区内包含的景点所有的信息;“删除景点”是删除景点有关的信息。

以上就是“删除”的功能。

“统计”由“统计某个城市的景区个数”、“统计某个城市的景点个数”、“统计某个景区的景点个数”、“统计某个城市某个景区的景点”4个部分组成,“统计某个城市的景区个数”是输入有关城市,如果城市在本系统中存在,那么就会显示这个城市中有多少景区,以及每个景区有关的信息。

后面的三个与“统计城市的景区个数”类似。

“帮助”由“为什么我总是显示查不到景点?”、“为什么我总是读取失败?”、“本系统的声明”3个部分组成。

每个问题都对应相应的答案。

“退出系统”则是直接退出本操作系统。

图3.4系统功能模块结构图
3.3 数据结构设计及用法说明
这个系统的菜单为简易菜单,用的链表是三个方向的十字交叉链表。

第一条链是城市基本信息链,该链包括:城市编号,城市名称,城市级别,监督电话,咨询电话这些城市信息,第二条链是景区基本信息链,该链包括:城市编号,景区编号,景区名称,景区级别,景区地址,门票价格,开放时间,咨询电话,景区简介这些景区信息,第三条链是景点基本信息链,该链包括:城市编号,景区编号,景点编号,景点名称,景点位置,景点特色这些景点基本信息。

head
图3.5三个方向的十字交叉链表
本系统只要在键盘输入相应功能对应的数字并按回车键那么系统就会自动转跳到相应功能界面,用户就能进行相应的操作。

3.4 程序结构
本系统的程序结构是系统下有8个功能板块,这8个功能板块分别是“文件”、“查询”、“修改”、“添加”、“删除”、“统计”、“帮助”“退出系统”。

其程序结构如下图:
图3.6程序结构流程图
4 结果分析
本章对一些实验结果做出截图,展示本系统的操作界面,不同模块的功能,以及数据的输入和输出的截图。

图4.1系统的主菜单
图4.2“查询”的子菜单
图4.3数据的输出
下图是系统中的“添加城市”的截图,用户只要按照提示输入有关城市信息,中间以空格键隔开,系统就会把用户输入的数据存储到系统中去,增加系统的数据。

图4.4数据的输入
图4.5查询城市内的景区
5 课程设计总结
在本次课程设计中把在下学期学的东西应用到实践中去,第一次独立做了系统在本系统中有很多优点,也有很多缺点,下面我本系统做一些总结:优点:
(1)当用户输入错误的数字时,系统会自动纠错。

例如当界面的选择
只有1到5时,如果用户输入了9,那么系统就会自动显示输入
有误。

(2)系统的功能较多,可以给用户更多的服务。

本系统有7个主功能,
每个功能都下设3到7个不等的子功能,让用户以不同的方式获
得所学的信息。

(3)系统清屏及时。

当用户选择不同的功能时系统会自动清屏,保证
界面的整洁
缺点:
(1)界面不够美观。

界面采用的是简易菜单,而不是文本菜单,界面
只有黑色和白色两种颜色组成,略显单调。

(2)当用户进行选择功能的话,如果输入字母,就会出现未知的错误。

当用户输入的不是数字而是英文字母的时候系统就会出现未知的
错误,有时候会自动选择其他的功能,有时候会不断的清屏等等。

(3)当用户进行选择是否继续的时候当输入“y”或者“Y”系统就会
按照“是”进行处理,而输入其他字母系统就会按照“否”进行
处理,且在选择的时候只能输入一个字母,当输入两个或者两个
以上的时候系统就会产生未知的错误。

个人经验总结:(1)当做一个大系统的时候,纠错的话要分阶段进行,不可等把系统的代码写完之后再进行纠错,在这个系统中,纠错是写完一
个子函数进行一次纠错,这样错误也容易找出。

纠错要两遍,第
一遍纠正语法的错误,第二遍纠正逻辑的错误。

(2)要想做好一个系统,没有一定的理论知识是不行的,在做
比较大的系统时,要把本系统所需的的理论知识掌握,这样才不
会在做系统的时候没有思路而烦恼。

6 参考文献
[1]曹计昌,卢萍,李开. C语言与程序设计,北京:电子工业出版社,2013
[2]李开,卢萍,曹计昌. C语言实验与课程设计,北京:科学出版社,2011
附录程序清单
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"process.h"
typedef struct scenespot{ /*景点的信息*/ char jingdianbianhao[5]; /*景点编号*/
char chengshibianhao[5]; /*城市编号*/
char jingqubianhao[5]; /*景区编号*/
char jingdianmingcheng[15]; /*景点名称*/
char jingdianweizhi[50]; /*景点位置*/
char jingdiantese[60]; /*景点特色*/ struct scenespot *next; /*指向景点的下一个
节点*/
}SS;
typedef struct cityscene{ /*景区的信息*/ char chengshibianhao[5]; /*城市编号*/
char jingqumingcheng[20]; /*景区名称*/
char jingqubianhao[5]; /*景区编号*/
char jingqujibie[10]; /*景区级别*/
char jingqudizhi[60]; /*景区地址*/
char menpiaojiage[10]; /*门票价格*/
char kaifangshijian[15]; /*开放时间*/
char zixundianhua[15]; /*咨询电话*/
char jingqujianjie[150]; /*景区简介*/
struct cityscene *next; /*指向景区的下一个
结点*/
struct scenespot *right; /*指向景点链的头指
针*/
}CS;
typedef struct city{ /*城市的信息*/ char chengshibianhao[5]; /*城市编号*/
char chengshimingcheng[10]; /*城市名称*/
char chengshijibie[10]; /*城市级别*/
char jiandudianhua[15]; /*监督电话*/
char zixundianhua[15]; /*咨询电话*/
struct city *next; /*指向城市的下一个结点*/
struct cityscene *down; /*指向景区的头指针*/
}C;
void Load (C **head); /*读取数据的函数*/ void New(C **head); /*新建数据的函数*/ void Save (C *head); /*保存数据的函数*/ void Search_city(C *head); /*按照城市查询景点的函数*/
void Search_cityscene(C *head); /*按照景区查询景点的函数*/
void Search_scenespot(C *head); /*按照城市和景区综合查询景点的函数*/
void Modify_city(C *head); /*修改城市信息的函数*/
void Modify_cityscene(C * head); /*修改景区信息的函数*/
void Modify_scenespot(C *head); /*修改景点信息的函数*/
void Output_city(C *head); /*查询城市信息的函数*/
void Output_cityscene(C *head); /*查询景区信息的函数*/
void Output_scenespot(C *head); /*直接查询景点信息的函数*/
void Insert_city(C **head); /*插入新的城市的函数*/
void Insert_cityscene(C *head); /*插入新的景区的函数*/
void Insert_scenespot(C *head); /*插入新的景点的函数*/
void Delete_city(C **head); /*删除城市的函数*/ void Delete_cityscene(C *head); /*删除景区的函数*/ void Delete_scenespot(C *head); /*删除景点的函数*/ void Tongji1(C *head); /*统计某个城市的景区个数*/
void Tongji2(C *head); /*统计某个城市的景点个数*/
void Tongji3(C *head); /*统计某个景区的景点个数*/
void Tongji4(C *head); /*统计某个城市所有的景区和景点*/
void huanying(void); /*欢迎界面*/
int Help(void); /*帮助的函数*/
C *head=NULL;
int main()
{
int n,n1,n2=0;
char ch1;
qidian: system("cls"); /*清屏*/ huanying(); /*输出欢迎界面*/
printf(" 1.文件 2.查询 3.修改 4.添加 5.删除 6.统计 7.帮助 0.退出系统\n");
if(n2)
printf("您的输入有误请重新输入\n");
n2=0;
scanf("%d",&n);
Load(&head); /*读入数据*/
switch(n){
case 1:{
n1=0;
qidian1: system("cls");
huanying();
printf(" 1.新建 2.保存 3.读取0.返回主菜单\n");/*文件中包含的内容*/
switch(n1){
case 1:printf("您已经成功的建立了新的数据库!\n");break;
case 2:printf("您已经成功的将数据保存!\n");break;
case 3:printf("您已经成功地将数据导入!\n");break;
case 4:printf("您的输入有误请重新输入!\n");break;}
printf("请选择您要的服务!\n");
scanf("%d",&n1);
switch(n1){
case 1:printf(" 警告!!!\n如果您新建,
那么原来的数据将全部丢失您要继续新建吗?'y'(yes) or 'n'(no)\n"); /*新建*/
ch1=getchar();getchar();
if(ch1=='y'||ch1=='Y'){
New(&head);break;}
else {
n1=0;
goto qidian1;}
case 2:Save(head);break; /*保存*/
case 3:Load(&head);break; /*读取*/
case 0:goto qidian;break;
default: /*输入错误的时候处理办法
*/
n1=4;
goto qidian1;break;}
if(n1) goto qidian1;
}break;
case 2:{ /*查询*/
n1=0;
qidian2: system("cls"); /*清屏*/
huanying(); /*欢迎界面*/
printf(" 1.查询城市信息\n 2.查询景区信息\n 3.直接查询景
点信息\n 4.按城市查询景点信息\n 5.按景区查询景点信息\n 6.按照城市和景
区综合查询景点信息\n 0.返回主菜单\n");/*查询所包含的内容*/
if(n1==7)
printf("您的输入有误请重新输入\n");
n1=0;
printf("请选择您要的服务\n");
scanf("%d",&n1);
switch(n1){ /*选择不同的查询方式*/
case 1:Output_city(head);break;
case 2:Output_cityscene(head);break;
case 3:Output_scenespot(head);break;
case 4:Search_city(head);break;
case 5:Search_cityscene(head);break;
case 6:Search_scenespot(head);break;
case 0:goto qidian;break;
default:n1=7;
goto qidian2;break;}
if (n1) goto qidian2;
}break;
case 3:{ /*修改*/
n1=0;
qidian3: system("cls");
huanying();
printf(" 1.修改城市信息 2.修改景区信息 3.修改景点信息 0.返回主菜单\n");/*修改所包含的内容*/
if(n1==5)
printf("您的输入有误请重新输入!\n");
printf("请选择你要的服务\n");
scanf("%d",&n1);
switch(n1){ /*选择修改不同的方面*/
case 1:Modify_city(head);Save(head);break;
case 2:Modify_cityscene(head);Save(head);;break;
case 3:Modify_scenespot(head);Save(head);;break;
case 0:goto qidian;break;
default:n1=5;
goto qidian3;break;}
if(n1) goto qidian3;
}break;
case 4:{ /*添加*/
n1=0;
qidian4: system("cls");
huanying();
printf(" 1.添加城市 2.添加景区 3.添加景点 0.返回主菜单\n");/*添加所包含的内容*/
switch(n1){
case 1:printf("您已成功添加了新的城市\n");break;
case 2:printf("您已成功添加新的景区\n");break;
case 3:printf("您已成功添加新的景点\n");break;
case 4: printf("您的输入有误请重新输入!\n");break;} printf("请选择你要的服务\n");
scanf("%d",&n1);
switch(n1){ /*选择添加不同的信息*/
case 1:Insert_city(&head);Save(head);break;
case 2:Insert_cityscene(head);Save(head);break;
case 3:Insert_scenespot(head);Save(head);break;
case 0:goto qidian;break;
default:n1=4;
goto qidian4;break;}
if(n1) goto qidian4;
}break;
case 5:{ /*删除*/
n1=0;
qidian5: system("cls");
huanying();
printf(" 1.删除城市 2.删除景区 3.删除景点 0.返回主菜单\n");/*删除所包含的内容*/
if(n1==4)
printf("您的输入有误\n");
printf("请选择你要的服务\n");
scanf("%d",&n1);
switch(n1){ /*选择删除不同的信息*/
case 1:Delete_city(&head);Save(head);break;
case 2:Delete_cityscene(head);Save(head);break;
case 3:Delete_scenespot(head);Save(head);break;
case 0:goto qidian;break;
default:n1=4;
goto qidian5;break;}
if(n1) goto qidian5;
}break;
case 6:{ /*统计*/
n1=0;
qidian6: system("cls");
huanying();
printf(" 1.统计某个城市的景区个数 \n 2.统计某个城市的景点个数 \n 3.统计某个景区的景点个数 \n 4.统计某个城市某个景区的景点\n 0.返回主菜单 \n");/*统计所包含的内容*/
if(n1==5)
printf("您的输入有误请重新输入\n");
printf("请选择您要的服务\n");
scanf("%d",&n1);
switch(n1){ /*选择不同的统计方式*/
case 1: Tongji1(head);break;
case 2:Tongji2(head);break;
case 3:Tongji3(head);break;
case 4:Tongji4(head);break;
case 0:goto qidian;break;
default :n1=5;
goto qidian6;break;}
if(n1) goto qidian6;
}break;
case 7:{ /*帮助*/
qidian7: system("cls");
huanying();
n1=Help();
if(n1==1)
goto qidian7;
else
goto qidian;
}break;
case 0:{
goto end;
break;}
default:{
n2=1;
goto qidian;
break;}
}
goto qidian;
end: return 0;
}
void huanying(void) /*欢迎的函数*/
{
printf("\n
********************************************************************\
n");
printf(" * *\n");
printf(" * 欢迎使用景区查询系统!
*\n");
printf(" * *\n");
printf("
********************************************************************\
n");
}
void New(C **head) /*创建交叉链表的函数*/
{
C *hp=NULL,*p;
CS *cs;
SS *ss;
char ch;
do{
p=(C *)malloc(sizeof(C)); /*创建城市信息的第一个结点*/
printf("请输入城市编号,城市名称,城市级别,监督电话,咨询电话,且他们之间空一个空格,以回车键结束输入\n");
scanf("%s %s %s %s %s",p->chengshibianhao,p->chengshimingcheng,p->chengshijibie,p->jiandudianhua,p->zixundianhua);/*输入城市基本数据*/ getchar(); /*读取回车*/
p->down=NULL; /*置景区链头指针为NULL*/
p->next=hp; /*城市基本信息链头指针的值赋值给结点的next域*/
hp=p; /*头指针指向新创建的结点*/
printf("是否继续输入新的城市数据?'y'(yes) or 'n'(no)\n");
ch=getchar();getchar(); /*选择是否创建新的城市*/ }while(ch=='y'||ch=='Y');
(*head)=hp; /*调用函数的head头指针指向新创建的城市基本信息连*/
p=(*head); /*p指向城市信息链*/
while(p!=NULL) /*输入景区的信息链*/
{
printf("请输入%s的有关景区信息\n",p->chengshimingcheng);
do{
cs=(CS *)malloc(sizeof(CS)); /*创建1景区信息的第一个结点*/
printf("请输入景区编号,景区名称,景区级别,景区地址,门票价格,开放时间,咨询电话,景区简介,且他们之间空一个空格,以回车键结束输入\n");
scanf("%s %s %s %s %s %s %s %s",cs->jingqubianhao,cs->jingqumingcheng ,cs->jingqujibie,cs->jingqudizhi,cs->menpiaojiage,cs->kaifangshijian, cs->zixundianhua,cs->jingqujianjie);
getchar();
strcpy(cs->chengshibianhao,p->chengshibianhao); /*将城市编号复制到景区中的城市编号*/
cs->right=NULL; /*将景
点信息链的头指针为NULL*/
cs->next=p->down;
p->down=cs;
printf("是否继续输入%s的新的景区数据?'y'(yes) or 'n'(no)\n",p->chengshimingcheng);
ch=getchar();getchar();
}while(ch=='y'||ch=='Y');
p=p->next;
}
p=(*head); /*p指向城市信息
链*/
while(p!=NULL){ /*创建景点信息
链*/
cs=p->down;
while(cs!=NULL){
printf("请输入%s的有关景点信息",cs->jingqumingcheng);
do{
ss=(SS *)malloc(sizeof(SS));
printf("请输入景点编号,景点名称,景点位置,景点特色,且他们之间空一个空格,以回车键结束输入\n");/*输入景点信息*/
scanf("%s %s %s %s",ss->jingdianbianhao,ss->jingdianmingcheng,ss-
>jingdianweizhi,ss->jingdiantese);
getchar(); /*专门用于读scanf中的回车符*/
strcpy(ss->chengshibianhao,p->chengshibianhao); /*将城市编号拷贝到景点中的城市编号*/
strcpy(ss->jingqubianhao,cs->jingqubianhao); /*将景区编号拷贝到景点中的景区编号*/
ss->next=cs->right;
cs->right=ss;
printf("是否输入%s新的景点数据?'y'(yes) or 'n'(no)\n",cs->jingqumingcheng);
ch=getchar();getchar();}
while(ch=='y'||ch=='Y');
cs=cs->next;}
p=p->next;}
}
void Save (C *head){ /*保存的函数*/ FILE *out1,*out2,*out3;
C *p=head;
CS *cs;
SS *ss;
if((out1=fopen("D:\\学习\\城市.dat","wb"))==NULL) /*打开城市基本信息文件*/
exit(-1);
if((out2=fopen("D:\\学习\\景区.dat","wb"))==NULL) /*打开景区基本信息文件*/
exit(-1);
if((out3=fopen("D:\\学习\\景点.dat","wb"))==NULL) /*打开景点基本信息文件*/
exit(-1);
while(p!=NULL){
fwrite(p,sizeof(C),1,out1); /*写城市基本信息记录*/
cs=p->down;
while(cs!=NULL){
fwrite(cs,sizeof(CS),1,out2); /*写景区基本信息记录*/
ss=cs->right;
while(ss!=NULL){
fwrite(ss,sizeof(SS),1,out3); /*写景点基本信息记录*/
ss=ss->next;}
cs=cs->next;}
p=p->next;}
fclose(out1); /*关闭城市基本信息文件*/
fclose(out2); /*关闭景区基本信息文件*/
fclose(out3); /*。

相关文档
最新文档