C语言课程设计实验报告.docx
《C语言课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告.docx(76页珍藏版)》请在冰豆网上搜索。
C语言课程设计实验报告
课程设计报告
题目:
景点查询系统
课程名称:
C语言课程设计
专业班级:
信息安全二班
任务书
⑴主要内容
建立国内景点信息系统,提供创建、编辑和综合查询等基本业务管理和服务。
⑵任务要求
收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交《课程设计报告》。
⑶参考文献
[1]曹计昌,卢萍,李开.C语言程序设计,北京:
科学出版社,2008
[2]张引.C程序设计基础课程设计,杭州:
浙江大学出版社,2007
[3]黄明,梁旭,万洪莉.C语言课程设计,北京:
电子工业出版社,2006
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城市基本信息表
中文字段名
类型及长度
举例或说明
城市编号
charchengshibianhao[5]
001
城市名称
Charchengshimingcheng[10]
北京
城市级别
charchengshijibie[10]
一线城市
监督电话
charjiandudianhua[15]
010-
咨询电话
charzixundianhua[15]
010-
景区信息主要包括9个部分,这9个部分分别是城市编号、景区编号、景区名称、景区级别、景区地址、门票价格、咨询电话、开放时间、景区简介,上述9个部分在系统中的类型都是char型数组,其中城市编号的数组长度是5.景区编号的数组长度是5,景区名称的数组长度是20,景区级别的数组长度是10,景区地址的数组长度是60,门票价格的数组长度是10,咨询电话的数组长度是15,开放时间的数组长度是15,景区简介的数组长度是150,下表是景区基本信息表:
表3.2景区基本信息表
中文字段名
类型及长度
举例或说明
城市编号
charchengshibianhao[5]
用来去取数据
景区编号
charjingqubianhao[5]
001
景区名称
Charjingqumingcheng[20]
故宫
景区级别
charjingqujibie[10]
AAAAA
景区地址
charjingqudizhi[60]
存储景区所在地
门票价格
charmenpiaojiage[10]
70元/人
咨询电话
charzixundianhua[15]
010-
中文字段名
类型及长度
举例或说明
开放时间
Charkaifangshijian[15]
O8:
00-18:
00
景区简介
Charjingqujianjie[150]
简要介绍景区
景点信息主要包括6个部分,这6各部分分别是城市编号、景区编号、景点编号、景点名称、景点位置、景点特色,上述6个部分在系统中都是char型数组,其中城市编号的数组长度是5,景区编号的数组长度是5,景点编号的数组长度是5,景点名称的数组长度是15,景点位置的数组长度是50,景点特色的数组长度是60,下表是景点基本信息表:
表3.3景点基本信息表
中文字段名
类型及长度
举例或说明
城市编号
charchengshibianhao[5]
用于读取数据
景区编号
charjingqubianhao[5]
用于读取数据
景点编号
charjingdianbianhao[5]
0001
景点名称
charjingdianmingcheng[15]
金水桥
景点位置
charjingdianweizhi[50]
故宫内
景点特色
charjingdiantese[60]
简要介绍景点
3.2系统各模块功能
本系统的功能是由8个部分组成,这8个部分分别是“文件”、“查询”、“修改”、“添加”、“删除”、“统计”、“帮助”“退出系统”。
除了“退出系统”不含有子功能,其他的都含有“返回主菜单”这一功能,以下介绍便不做赘述。
“文件”由“新建”、“保存”、“读取”三个部分组成,其中“新建”的功能是用来创建新的十字链表,但是创建新的链表的同时,原来的数据将会丢失。
“保存”的功能是保存当前的数据,将新的数据保存到dat文件中。
“读取”的功能是将dat文件中的数据读取到系统中,让用户可以使用本系统进行信息的查询,修改等。
“查询”由“查询城市信息”、“查询景区信息”、“查询景点信息”、“按城市查询景点信息”、“按景区查询景点信息”、“按照城市和景区综合查询景点信息”6部分组成,其中前五项只要输入正确的数据就会显示出想要查询的相关信息,最后一个则是要输入城市以及城市内的景区才能显示出相应的景点,如果输入有误则不能显示出相应的数据。
“修改”由“修改城市信息”,“修改景区信息”,“修改景点信息”3部分组成,其中“修改城市信息”这个选项可以修改有关城市的所有信息,只要输入要修改的信息,系统就会自动的把输入的有关信息替代掉原来的信息;“修改景区信息”,“修改景点信息”分别修改景区和景点有关的信息,输入要修改的信息,系统就会自动的把输入的有关信息替代掉原来的信息。
“添加”由“添加城市”、“添加景区”、“添加景点”3部分组成,“添加城市”就是在原有的城市信息基础上添加新的城市,当添加过一个新的城市后,系统会自动弹出让用户添加城市中的景区的提示,当添加过景区,系统会自动弹出让用户添加景点的提示;“添加景区”则是让用户首先输入要添加的景区所在的城市,当系统中有用户输入的城市,再弹出让用户添加城市中的景区的提示,当添加过景区,系统会自动弹出让用户添加景点的提示;“添加景点”则是要用户先输入城市,再输入景区,两者都存在且有对应关系时,系统才会让用户输入景点信息。
“删除”由“删除城市”、“删除景区”、“删除景点”3部分组成,其中“删除城市”就是删除城市以及城市内的景区和景点的信息;“删除景区”就是删除景区以及景区内包含的景点所有的信息;“删除景点”是删除景点有关的信息。
以上就是“删除”的功能。
“统计”由“统计某个城市的景区个数”、“统计某个城市的景点个数”、“统计某个景区的景点个数”、“统计某个城市某个景区的景点”4个部分组成,“统计某个城市的景区个数”是输入有关城市,如果城市在本系统中存在,那么就会显示这个城市中有多少景区,以及每个景区有关的信息。
后面的三个与“统计城市的景区个数”类似。
“帮助”由“为什么我总是显示查不到景点?
”、“为什么我总是读取失败?
”、“本系统的声明”3个部分组成。
每个问题都对应相应的答案。
“退出系统”则是直接退出本操作系统。
图3.4系统功能模块结构图
3.3数据结构设计及用法说明
这个系统的菜单为简易菜单,用的链表是三个方向的十字交叉链表。
第一条链是城市基本信息链,该链包括:
城市编号,城市名称,城市级别,监督电话,咨询电话这些城市信息,第二条链是景区基本信息链,该链包括:
城市编号,景区编号,景区名称,景区级别,景区地址,门票价格,开放时间,咨询电话,景区简介这些景区信息,第三条链是景点基本信息链,该链包括:
城市编号,景区编号,景点编号,景点名称,景点位置,景点特色这些景点基本信息。
图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"
typedefstructscenespot{/*景点的信息*/
charjingdianbianhao[5];/*景点编号*/
charchengshibianhao[5];/*城市编号*/
charjingqubianhao[5];/*景区编号*/
charjingdianmingcheng[15];/*景点名称*/
charjingdianweizhi[50];/*景点位置*/
charjingdiantese[60];/*景点特色*/
structscenespot*next;/*指向景点的下一个节点*/
}SS;
typedefstructcityscene{/*景区的信息*/
charchengshibianhao[5];/*城市编号*/
charjingqumingcheng[20];/*景区名称*/
charjingqubianhao[5];/*景区编号*/
charjingqujibie[10];/*景区级别*/
charjingqudizhi[60];/*景区地址*/
charmenpiaojiage[10];/*门票价格*/
charkaifangshijian[15];/*开放时间*/
charzixundianhua[15];/*咨询电话*/
charjingqujianjie[150];/*景区简介*/
structcityscene*next;/*指向景区的下一个结点*/
structscenespot*right;/*指向景点链的头指针*/
}CS;
typedefstructcity{/*城市的信息*/
charchengshibianhao[5];/*城市编号*/
charchengshimingcheng[10];/*城市名称*/
charchengshijibie[10];/*城市级别*/
charjiandudianhua[15];/*监督电话*/
charzixundianhua[15];/*咨询电话*/
structcity*next;/*指向城市的下一个结点*/
structcityscene*down;/*指向景区的头指针*/
}C;
voidLoad(C**head);/*读取数据的函数*/
voidNew(C**head);/*新建数据的函数*/
voidSave(C*head);/*保存数据的函数*/
voidSearch_city(C*head);/*按照城市查询景点的函数*/
voidSearch_cityscene(C*head);/*按照景区查询景点的函数*/
voidSearch_scenespot(C*head);/*按照城市和景区综合查询景点的函数*/
voidModify_city(C*head);/*修改城市信息的函数*/
voidModify_cityscene(C*head);/*修改景区信息的函数*/
voidModify_scenespot(C*head);/*修改景点信息的函数*/
voidOutput_city(C*head);/*查询城市信息的函数*/
voidOutput_cityscene(C*head);/*查询景区信息的函数*/
voidOutput_scenespot(C*head);/*直接查询景点信息的函数*/
voidInsert_city(C**head);/*插入新的城市的函数*/
voidInsert_cityscene(C*head);/*插入新的景区的函数*/
voidInsert_scenespot(C*head);/*插入新的景点的函数*/
voidDelete_city(C**head);/*删除城市的函数*/
voidDelete_cityscene(C*head);/*删除景区的函数*/
voidDelete_scenespot(C*head);/*删除景点的函数*/
voidTongji1(C*head);/*统计某个城市的景区个数*/
voidTongji2(C*head);/*统计某个城市的景点个数*/
voidTongji3(C*head);/*统计某个景区的景点个数*/
voidTongji4(C*head);/*统计某个城市所有的景区和景点*/
voidhuanying(void);/*欢迎界面*/
intHelp(void);/*帮助的函数*/
C*head=NULL;
intmain()
{
intn,n1,n2=0;
charch1;
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){
case1:
{
n1=0;
qidian1:
system("cls");
huanying();
printf("1.新建2.保存3.读取0.返回主菜单\n");/*文件中包含的内容*/
switch(n1){
case1:
printf("您已经成功的建立了新的数据库!
\n");break;
case2:
printf("您已经成功的将数据保存!
\n");break;
case3:
printf("您已经成功地将数据导入!
\n");break;
case4:
printf("您的输入有误请重新输入!
\n");break;}
printf("请选择您要的服务!
\n");
scanf("%d",&n1);
switch(n1){
case1:
printf("警告\n如果您新建,那么原来的数据将全部丢失您要继续新建吗?
'y'(yes)or'n'(no)\n");/*新建*/
ch1=getchar();getchar();
if(ch1=='y'||ch1=='Y'){
New(&head);break;}
else{
n1=0;
gotoqidian1;}
case2:
Save(head);break;/*保存*/
case3:
Load(&head);break;/*读取*/
case0:
gotoqidian;break;
default:
/*输入错误的时候处理办法*/
n1=4;
gotoqidian1;break;}
if(n1)gotoqidian1;
}break;
case2:
{