《C语言程序设计》课程设计报告(1)
《C语言程序设计》课程设计报告(1)本文简介:课程设计报告题目:旅游景点查询系统课程名称:C语言课程设计专业班级:信息安全1302学号:姓名:指导教师:报告日期:2014.10.10计算机科学与技术学院华中科技大学计算机学院C语言程序设计课程设计任务书题目㈢景点查询系统一、主要内容建立国内景点信息系统,提供创建、编辑和综合查询等基本业务管理和服
《C语言程序设计》课程设计报告(1)本文内容:
课
程
设
计
报
告
题目:
旅游景点查询系统
课程名称:
C语言课程设计
专业班级:
信息安全1302
学
号:
姓
名:
指导教师:
报告日期:
2014.10.10
计算机科学与技术学院
华中科技大学计算机学院C语言程序设计课程设计
任务书
题目㈢
景点查询系统
一、主要内容
建立国内景点信息系统,提供创建、编辑和综合查询等基本业务管理和服务。
二、任务要求
收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交《课程设计报告》。
三、参考文献
[1]曹计昌,卢萍,李开.
C语言程序设计,北京:科学出版社,2013
[2]李开,卢萍,曹计昌.
C语言实验与课程设计,北京:科学出版社,2011
目
录
目
录I
1
引言1
1.1
课题背景和意义1
1.2
国内外研究现状1
1.3
课程设计的主要研究工作1
2
系统需求分析与总体设计2
2.1
系统需求分析2
2.2
系统总体设计2
3
系统详细设计5
3.1
有关数据结构的定义5
3.2
主要算法设计7
主函数7
主函数负责主界面的构造以及对程序的各个功能函数的调用。7
文件13
文件菜单下的保存
功能的函数:13
数据维护16
数据查询24
清屏31
帮助32
4.系统实现与测试32
4.1
系统测试32
初始界面32
文件34
6.3.信息查询48
5.总结57
5.1
全文总结57
5.2
工作展望58
5.3
体会59
参考文献62
附录
程序清单62
System.h62
main.c68
II
华中科技大学计算机学院C语言程序设计课程设计
1
引言
1.1
课题背景和意义
在当今网络化、信息化、数字化的社会中,大多数人们都会使用网络电脑查询自己想要的信息,上网查找资料已经成为人们获取信息的主要方式,而随着人们生活水平的提高,外出旅游已经成为人们休闲娱乐的一种主要方式。然而,全国上下的旅游的景点景区五花八门,咨询一些相关景点的信息更为复杂,人们经常因为查询旅游景点过程繁琐而打消了外出游玩的念头,为了能够方便人们查询外出游玩的相关信息,我们制作了这个旅游景点查询系统,景点查询系统。
这个系统是面向游客的,所以我得从游客的角度思考,我的系统应该具备哪些信息,当然,我也上网搜了一些资料,比如:湖北旅游查询系统。这个系统能够是个很好的例子,所以在任务数的基础上,我对城市景区和景点的信息都做了些调整和修改,是信息更全面更有用。并且确定了信息查询功能,包括精确查询和模糊查询。该系统可以在短时间内筛选繁杂的旅游景点相关数据,在第一时间帮助用户查找到自己想要查询的信息。
制作这个课题,就是将计算机编程技术与人们的实际生活相连接,体现了现代化技术的先进和优越,从很大方面反映了计算机技术对人们生活的重要作用和意义。
1.2
国内外研究现状
如今随着人们生活水平的提高,一些为了方便人们生活的先进科技日益发达,国内国外对于这些方面的研究也如日中天,为了能够设计出令用户满意的系统,人们不断地改进界面,优化算法,这些方面的发展十分迅速,现在,类似的查询系统五花八门,各式各样,如果想做到脱颖而出,必须制作出人性化的界面,并设计出高效率的算法,使得系统能用最短的时间在大量的数据中筛选出用户想要的信息,而这方面的研究仍然是当下的热门话题,由于本人水平方面的限制,我只能做出这个简陋的查询系统,通过这个系统,我希望加深对C程序设计的认识,为以后的研究奠定基础。
2
系统需求分析与总体设计
2.1
系统需求分析
根据旅游景点的相关基本信息以及大多数用户的基本需求,我们给该系统配备了以下功能:
1.
帮助游客根据城市编号查询城市的特色,邮编。根据景区编号查询景区电话,以及景区的景点和景区开放时间,根据景点编号查询景点风景,景点电话以及该景点人均消费水平。
2.
帮助游客根据城市,景区和景点的相关信息查询该城市,景区和景点的详细信息。
3.
帮助管理员修改,插入和删除城市,景区和景点的信息。
4.
帮助管理员备份恢复数据和保存数据,防止用户丢失重要数据。
5.
帮助游客统计出了所有城市,景点,景区的总信息。
该系统的这几个功能基本满足了用户的需求。
2.2
系统总体设计
整个程序分为以下五个大块:
景点信息查询系统
文件
数据维护
数据查询
清屏
帮助
每一块的功能:
文件
数据保存
数据备份
数据恢复
数据加载
退出系统
界面初始化
景点
信息修改
景点
信息插入
景点
信息删除
景区
信息删除
景区
信息插入
景区
信息修改
数据维护
城市信息维护
景区信息维护
景点信息维护
城市
信息删除
城市
信息插入
城市
信息修改
城市精确查询
城市组合查询
景区精确查询
景区组合查询
景点精确查询
景点组合查询
景点信息查询
数据查询
景区信息查询
城市信息查询
帮助
帮助
关于
所有信息
清理屏幕
3
系统详细设计
3.1
有关数据结构的定义
系统所操作的数据分三类,使用三级的十字交叉链表,链表使用单向链表,其数据结构
图是如下:
…
head
…
景区11
景区12
景区1m
城市1
城市2
城市n
景点111
…
景点11p
∧
∧
∧
在程序中对数据结构的定义如下:
struct
scespo
/*景点*/
{
char
sp_sr_num[NUM];
/*景区编号*/
char
sp_c_num[NUM];
/*城市编号*/
char
scespo[NUM];
/*景点名称*/
char
sp_num[NUM];
/*景点编号*/
char
sp_location[NUM];
/*景点地址*/
char
sp_time[NUM];
/*花费时间*/
struct
scesponext;
/*指向下一个景点节点*/
};
struct
scearea
/*景区*/
{
char
sr_c_num[NUM];
/*城市编号*/
char
scearea[NUM];
/*景区名称*/
char
sr_num[NUM];
/*景区编号*/
char
sr_level[NUM];
/*景区级别*/
char
sr_location[NUM];
/*景区地址*/
char
sr_ticket[NUM];
/*景区分类*/
char
sr_time[NUM];
/*开放时间*/
char
sr_connum[NUM];
/*查询电话*/
struct
sceareanext;
/*指向下一个景区节点*/
struct
scesposp_head;
/*景点链表的头指针*/
};
struct
city
/*城市*/
{
char
city[NUM];
/*城市名称*/
char
c_num[NUM];
/*城市编号*/
char
c_inspnum[NUM],c_consnum[NUM];
/*城市邮编、城市特色*/
struct
citynext;
/*指向下一个城市节点*/
struct
sceareasr_head;
/*景区链表的头指针*/
};
其中城市、景区的每一个节点都有两个指针,城市的节点的一个指针(struct
cityp->sr_head)指向在该城市的景区链表,另一个指针(struct
cityp->next)指向该节点的下一结点;景区的节点的一个指针(struct
sceareapsr->sp_head)指向该景区的景点信息链表,另一个指针(struct*
psr->next)指向该节点的下一结点;景点的节点的一个指针(struct*
psp->next)指向该节点的下一结点;
另外在内存中是以链表的形式储存的。其数据结构图是如下:
head
…
景区1
城市1
城市2
城市n
…
景区n
NULL
NULL
head
景区2
head
…
景点1
景点2
景点n
NULL
3.2
主要算法设计
主函数
主函数负责主界面的构造以及对程序的各个功能函数的调用。
其原型声明如下:void
main(void);该函数在文件
main.c
中。
其主要调用了以下函数:
LoadData();
/*数据加载*/
InitInterface();
/*界面初始化*/
RunSys(
/*系统功能模块的选择及运行*/
CloseSys(gp_head);
/*退出系统*/
主函数中加载功能的函数
函数原型:BOOL
LoadData();
函数功能:从三个文件中加载城市、景区、景点信息形成链表。
该程序流程图如下:
Y
开始
BOOL
Re=FALSE
gc_sys_state
|=
1;
gc_sys_state
|=
2;
Re
=
createlist(
gc_sys_state
gc_sys_state
c_num,p
->city,p->c_inspnum,p->c_consnum);
/读取文件中的城市信息,存在刚申请的单元中/
p->sr_head=NULL;/景区头指针置空/
/先进后出/
p->next=hp;
hp=p;
!
feof(pFile)
N
Y
printf(“城市信息数据文件打开失败!\n“);
return
re;
printf(“城市信息数据文件打开成功!\n“);
pFile=fopen(gp_c_info_filename,“r+“)==NULL
定义变量:
struct
cityhp=NULL,*p;/头指针/
struct
sceareapsr;/景区信息链指针/
struct
scespopsp;/景点信息链指针/
FILEpFile;
int
find
int
re=0;
开始
N
1
Y
N
p=p->next;
2
psr=(struct
scearea)malloc(sizeof(struct
scearea));//创建结点,存放从数据文件中读出的景区基本信息
fscanf(pFile,“%s
\t\t
%s
\t\t
%s
\t\t
%s
\t\t
%s
\t\t
%s
\t\t
%s
\t\t
%s\n“,psr->sr_c_num,psr->sr_num,psr->scearea,psr->sr_level,psr->sr_location,psr->sr_ticket,psr->sr_time,psr->sr_connum);
psr->sp_head=NULL;
p=hp;
/先进后出/
p!=NULL
re+=8;
Y
printf(“城市信息数据加载成功!\n“);
(*head)=hp;
/指向链头/
re+=4;
(pFile=fopen(gp_sr_info_filename,“r+“))==NULL
1
printf(“景区基本信息数据文件打开败!\n“);
return
re;
N
5
4
Y
psp=(struct
scespo)malloc(sizeof(struct
scespo));
//创建结点,存放从数据文件中读出的景点信息
fscanf(pFile,“%s
\t\t
%s
\t\t
%s
\t\t
%s
\t\t
%s
\t\t
%s
\n“,psp
->sp_c_num,psp
->sp_sr_num,psp
->sp_num,psp
->scespo,psp
->sp_location,psp
->sp_time);
/*查找景区信息支链上对应的景点结点*/
p=hp;
find=0;
3
!feof(pFile)
N
printf(“景点信息文件打开成功!\n“);
re+=16;
fclose(pFile);/关闭文件/
printf(“景点信息文件打开失败!\n“);
return
re;
Y
(pFile=fopen(gp_sp_info_filename,“r+“))==NULL
N
Y
N
free(psr);
/释放所创建结点的内存空间/
psr->next=p->sr_head;
p->sr_head=psr;
2
p!=NULL
4
5
6
fclose(pFile)
return
re
Y
free(psp);
psp->next=psr->sp_head;
psr->sp_head=psp;
以后进先出方式插入景点信息支链中
psr=p->sr_head;
Y
Y
N
Y
p!=NULL
p=p->next;
3
N
psr!=NULL
break;
N
find=1
N
6
文件
文件菜单下的保存
功能的函数:
函数原型:BOOL
save(void);
函数功能:调用createlist函数,将城市、景区、景点三级链表分别存在三个文件中,分别是c.txt、sr.txt、sp.txt。
该程序的流程图如下:
开始
定义所需变量:
struct
cityp/指向城市信息链的指针/
struct
sceareapsr/指向景区信息链的指针/
struct
scespopsp/指向景点信息链的指gp_sp_info_filename针/
FILEpfout=NULL/文件指针/
BOOL
bret
=
TRUE/返回布尔值/
gp_c_info_filename,gp_sr_info_filename,gp_sp_info_filename是存放链表的三个文件
打开gp_c_info_filename
P指向链头
N
P!=NULL
Y
关闭文件
读一条城市信息存到gp_c_info_filename中
p=p->next
2
2
打开gp_sr_info_filename
关闭文件
p=p->next
psr=psr->next
psr=p->sr_head
p=gp_head
N
p!=NULL
Y
psr!=NULL
打开gp_sp_info_filename
Y
读一条景区信息存到gp_sr_info_filename中
6
p=gp_head
N
p!=NULL
Y
psr=p->sr_head
N
psr!=NULL
set_text_success()
关闭文件
打开gp_sp_info_filename
3
p=p->next
psr=psr->next
Y
返回bret
psp=psr->pr_head
N
4
5
3
3
N
6
5
4
Y
psp!=NULL
p=p->next
psp=psp->next
psr=psr->next
读一条景点信息存到gp_sp_info_filename中
文件菜单下的备份功能的函数:
函数原型:BOOL
BackupData(void)
函数功能:备份数据,将三类基础数据备份到一个数据文件backup.txt中
文件菜单下的恢复功能的函数:
函数原型:BOOL
RestoreData(void)
函数功能:恢复数据,备份数据后,文件被修改,可以通过回复函数,是三个文件的
内容恢复到和备份文件里的数据相同。
文件菜单下的退出功能的函数:
函数原型:BOOL
ExitSys(void)
函数功能:退出系统。
数据维护
城市信息维护
数据维护菜单下的城市信息维护功能的函数
函数原型:BOOL
Maintainc_Info(void)
函数功能:维护城市信息,包括删除、插入以及修改。
调用了以下函数:BOOL
delc(struct
city*hp,charc_num);/*删除城市信息结点*/
BOOL
ins_city
(struct
city*hp,struct
cityp);
/*插入城市信息结点*/
BOOL
modifc(struct
cityhp,char*
c_num,struct
cityp);
/*修改城市信息结点*/
景区信息维护
数据维护菜单下的景区信息维护功能的函数
函数原型:BOOL
Maintainsr_Info(void)
函数功能:维护景区信息,包括删除、插入以及修改。
调用了以下函数:BOOL
ins_scespo(struct
cityhp,struct
scespopsp);
/*插入景点信息结点*/
BOOL
delsp(struct
cityhp,charsr_num,charsp_num);
/*删除景点信息结点*/
BOOL
modifsp(struct
cityhp,charsr_num,char
sp_num,struct
scespopsp);
/*修改景点信息结点*/
景点信息维护
数据维护菜单下的景点信息维护功能的函数
函数原型:BOOL
Maintainsp_Info(void)
函数功能:维护景点信息,包括删除、插入以及修改。
调用了以下函数:BOOL
delsr(struct
cityhp,charsr_num);
/*删除景区信息结点*/
BOOL
ins_scearea(struct
cityhp,struct
sceareapsr);
/*插入景区信息结点*/
BOOL
modifsr(struct
cityhp,charsr_num,struct
sceareapsr);
/*修改景区信息结点*/.
现就城市链表给出Maintainc_Info的流程图:(见p)
Y
输出操作成功
输出操作失败
输入:需要删除的城市编号
并把其存放在c_num
调用delc函数
返回值为TRUE
N
显示:
1、
删除城市信息
2、
插入城市信息
3、
修改城市信息
用户选择1
定义:
字符数组c_num
用来存放要删除的城市编号
Y
N
1
开始
结束
输入操作成功
输出操作失败
调用ins_city函数
返回值为TRUE
Y
N
1
用户选择2
Y
struct
citypc1=(struct
city)malloc(sizeof(struct
city))
申请一个动态空间节点用来存放要插入的城市信息
输入:
城市编号pc1->c_num,
城市名称pc1->
city,
城市邮编pc1->c_inspnum,
城市特色pc1->c_consnum,
2
结束
用户选择3
输入操作成功
输出操作失败
调用modifc函数
返回值为TRUE
Y
N
2
struct
citypc2=(struct
city)malloc(sizeof(struct
city))
申请一个动态空间节点用来存放要新修改的城市信息
字符数组c_num来存放要修改的城市编号
输入:
城市编号pc2->c_num,
城市名称pc2->city,
城市邮编pc2->
c_inspnum,
城市特色c_consnum,
原城市编号
结束
开始
strcmp(p->c_num,c_num)==0
编号相同,为要删除的城市
Find=1,找到
Y
p=p->next
指针往下移一位
Find=1
申请:
指向城市节点指针p,用来遍历链表
整型变量find,用来标识是否找到,置初值为0
p=hp;使遍历指针指向链表开头
p!=NULL,未到链表尾部
Y
N
返回该城市指针pc
结束
Y
申请:
struct
cityp;
指向要删除节点指针
struct
cityp_prior=NULL;
指向要删除节点的前一节点
struct
sceareapsr;
指向要删除节点指针
struct
sceareapsr_prior;
指向要删除节点的前一节点
struct
scespopsp;
指向要删除节点指针
struct
scespopsp_prior;
指向要删除节点的前一节点
BOOL
del=FALSE;
判断是否删除成功所用变量
p=*hp
使p指向链表头
p!=NULL
p=p->next
把指针向后移一位
N
p!=NULL,找到
Y
del=TRUE
3
开始
Y
psp_prior=psp;
psp=psp->next;
free(psp_prior);
释放景点节点空间
psr=psr->next;
free(psr_prior);
释放景点节点空间
psp=psr->sp_head
;
psr_prior=psr;
psp!=NULL
N
3
Y
N
psr=p->sr_head;
free(pc);
释放要删除的城市节点空间
p_prior->next=p->next;
使要删除节点的前一节点与其后一节点相连hp=p->next;
使头指针指向要删除的节点的下一结点
p_prior==NULL;
判断是否为第一个城市节点点
psr!=NULL
N
4
4
del=TRUE
输出操作成功
输出操作失败
结束
数据查询
城市信息查询
数据查询菜单下的城市信息查询功能的函数
函数原型:BOOL
Queryc_Info(void))
函数功能:查询城市信息,包括精确查找(城市编号)和精确查找(所有信息)
调用了以下函数:struct
cityseekc(struct
cityhp,charc_num);
/*查找城市信息结点*/
struct
cityseek_c(struct
cityph,int
cond_num,.);
景区信息查询
数据查询菜单下的景区信息查询功能的函数
函数原型:BOOL
Querysr_Info(void)
函数功能:查询景区信息,包括精确查找(城市编号)和精确查找(所有信息)
调用了以下函数:struct
sceareaseeksr(struct
cityhp,charsr_num);
/*查找景区信息结点*/
struct
sceareaseek_sr(struct
cityhp,int
cond_num,.);
/*模糊查询城市信息结点*/
景点信息查询
数据查询菜单下的景区信息查询功能的函数
函数原型:BOOL
Querysr_Info(void)
函数功能:查询景区信息,包括精确查找(城市编号)和精确查找(所有信息)
调用了以下函数:struct
scesposeeksp(struct
cityhp,charsr_num,charsp_num);
/*查找景点信息结点*/
struct
scesposeek_sp(struct
cityhp,int
cond_num,.);
/*模糊查询景点信息结点*/
现就城市链表给出Querysr_Info的流程图:
Y
Y
定义所需变量:
struct
cityp;
struct
sceareapsr;
struct
sceareapsr_net==NULL;
struct
sceareapsr_temp;
sp_c_num;
sp_sr_num;/*城市编号、景区编号*/
ihot;/*用户选择操作*/
i=0;/*循环控制变量*/
result;/*函数操作结果*/
ihot!=0
绘制窗口;
用户选择:
1、精确查询;
2、多条件组合查询;
0、返回
N
结束
ihot=1
用户选择:
1、开始输入;
0、取消;
1
用户选择:
1、开始输入;
0、取消;
2
开始
Y
ihot!=0
1
N
输入:
城市编号sp_c_num;
景区编号sp_sr_num;
调用函数seekc(gp_head,p_num);
返回p
输出确切查找出的景区信息到屏幕
返回值!=void
Y
N
输出“操作无效”,结束
ihot!=0;
N
Y
输入:
组合条件个数cond_num;
查询条件;
2
调用函数seek_c
(gp_head,p_num);
返回p
_ret
输出确切查找出的景区信息到屏幕
返回值!=void
Y
N
输出“操作无效”,结束
结束
结束
结束
结束
开始
N
N
返回psr
Y
调用函数strcmp(psr->sr_num,major),返回值为result;
result!=0
N
psr=psr->next;
Y
p!=
NULL;
psr!=
NULL;
Y
psr=p->sr_head;
输出“操作无效”,结束
结束
输出“操作无效”,结束
Psr=p
->sr_head;
0next;
6
P
=p
->next;
N
Inext=psr_ret;
Psr_ret=psr_temp;
返回psra_ret;
8
9
N
结束
清屏
其原型声明如下:void
ClearScreen
(void);该函数在文件
main.c
中。
其主要调用了以下函数:void
ClearScreen(void);
函数功能:清屏负责清除界面文字
帮助
帮助菜单下的帮助
功能的函数:
函数原型:BOOL
BackupData(void)
函数功能:使用说明
帮助菜单下的关于
功能的函数:
函数原型:BOOL
AboutDorm
(void)
函数功能:制作人、指导老师、完成时间
帮助菜单下的帮助
功能的函数:
函数原型:BOOL
information(void)
函数功能:调用void
travers(struct
cityhead)函数,打出表中所有的的城市景区和景点信息,其中实参为链表的头指针gp_head.
4.系统实现与测试
4.1
系统测试
测试一个系统的优良是程序设计中必不可少的环节,测试一个系统的好坏要尽量做到测试数据全面,测试方面全面,在测试系统是否有漏洞的同时也要检测该系统是否方便用户使用。
测试本系统,我们采取的方法是测试该系统的每一个功能,测试每一个功能函数是否起到作用,同时我们输入了大量数据,测试了这个系统筛选信息的能力和效率,下面附上截图:
初始界面:
A.加载成功
B.加载失败
C.
下拉菜单
文件:
A.
城市信息维护
①
城市信息删除
输入:027
删除成功:
删除失败:
②
城市信息插入
输入:040
**
440000
风景优美的地方
输入:enter
插入成功
输入:
027
武汉
440000
风景优美的地方
输入:enter
插入失败(城市编号已经存在)
③
城市信息修改
输入:027
厦门
470000
海边城市
027
输入:enter
修改成功
输入:050
厦门
470000
海边城市
050
输入:enter
修改失败(城市编号不存在)
B.景区信息维护
①
景区信息删除
输入:01
输入:enter
删除成功
输入:15
输入:enter
删除失败(景区编号不存在)
②
景区信息插入
输入:027
10
户部巷
4A
武昌区司门口
人文美食
四季
87654321
输入:enter
插入成功
输入:090
11
户部巷
4A
武昌区司门口
人文美食
四季
987654321
输入:enter
插入失败(城市编号不存在)
输入:027
2
某某
5A
武昌区
自然景观
四季
87654321
输入:enter
插入失败(景区编号已经存在)
③
景区信息修改
输入:027
01
户部巷
4A
武昌区司门口
美食人文
全天
87654321
01
输入:enter
修改成功
输入:040
01
户部巷
4A
武昌区司门口
美食人文
全天
87654321
01
输入:enter
修改失败(城市彪悍或景区编号不存在)
C.景点信息维护
点击数据维护下拉菜单的景区信息维护选项
跳出窗口:
①
景点信息删除
输入:06
061
输入:enter
删除成功
当景区编号或景点标号不存在时删除失败
②
景点信息插入
输入:027
03
东湖
武昌区珞瑜路
80元/人
输入:enter
插入成功
当城市编号、景区编号或景点编号不存在时插入失败。
当景点编号已经存在是插入失败。
③
景点信息修改
输入:027
02
021
黄鹤楼
武昌区大东门
70元/人
输入:ener
修改成功
当城市编号、景区编号和景点编号不存在或不匹配时修改失败。
6.3.信息查询:
A.城市信息查询
点击数据查询下拉菜单下的城市信息查询跳出窗口:
①.城市精确查询
输入:0571
输入:enter
②.城市组合查询
输入:1
01=武汉
输入:enter
B.景区信息查询
①.景区精确查询
输入:09
输入:enter
②.景区组合查询
输入:2
[emailprotected]池
2>3A
输入:enter
C.景点信息查询
①.景点精确查询
输入:05
051
输入:enter
②.景点组合查询
输入:1
[emailprotected]岛
输入:enter
1.帮助
点击帮助下拉菜单的帮助选项跳出窗口:
2.所有信息
点击帮助下拉菜单的所有信息选项跳出窗口:
5.总结
5.1
全文总结
主要工作如下:
(1)根据用户需要设计了这个旅游景点查询系统。设计了这个系统的各个功能函数,并且制作了这个人机交互界面。
(2)录入了众多城市,景区,景点数据,完善了这个系统。
(3)测试了系统的各个功能,改良了一些漏洞。
(4)将旅游景点查询系统的功能和算法写成了实验报告,方便阅读和交流心得体会。
5.2
工作展望
在今后的研究中,围绕着如下几个方面开展工作
(1)界面的美观和人性化,美观和人性的界面会方便用户的操作,界面的制作是一个可待研究的课题。
(2)算法的高效性,高效的算法可以减少计算机的运算量,节约大量的时间。设计出高效的算法是一门重要的学问,需要良好的逻辑思维能力,希望在以后的工作中,能开发出更加简便的算法来实现数据的查询和筛选。
5.3
体会
接到这个课设题目的时候其实我心里是没底的,因为对这样一个系统,没有整体的认识,也不知道应该从哪里下手。后来在和同学讨论之后又来大概的了解和明确的目的,于是在暑假刚开始我就开始着手写课设。
充分了解供需关系
景点查询系统,是面向游客的,所以我得从游客的角度思考,我的系统应该具备哪些信息,当然,我也上网搜了一些资料,比如:湖北旅游查询系统。这个系统能够是个很好的例子,所以在任务数的基础上,我对城市景区和景点的信息都做了些调整和修改,是信息更全面更有用。并且确定了信息查询功能,包括精确查询和模糊查询。
在这,针对管理员,此系统应该有基本的文件保存,备份,恢复,以及信息的删除,插入和修改功能。
链表的创建
最开始我就定义了三个动态链表,分别是城市,景区和景点,但是明显这样做是不够的,必须把这三个链表连起来,于是我通过两个指针,一个下一级另一个则指向下一个链表的头。于是链表就创建出来了。
功能函数的编写测试
前面做的都是些准备工作,到功能函数时就遇到了麻烦。
3.1创建链表
例:
while(!
feof(pFile))
{
p=(struct
city)malloc(sizeof(struct
city));
fscanf(pFile,“%s
\t\t
%s
\t\t
%s
\t\t
%s
\n“,p->c_num,p
->city,p->c_inspnum,p->c_consnum);
p->sr_head=NULL;
p->next=hp;
hp=p;
}
fclose(pFile);
a.刚开始我是用fread函数从文件中读取信息,但是在这种情况下,判断是否为空功能的
函数(feof)在读取最后一个信息后不会立刻跳出while循环,而是又走了一次,这样导致
我读取的信息都是乱码,或者干脆停止工作.
b.在修改了这个问题后,我发现我的系统只能读取第一级的全部信息,但是读第二级也就是
景区信息的时候会无法读入。在经过断点调试后最终发现是因为p->sr_head没有置空,导致
指针失效。
3.2保存
保存的函数比较简单,但是和创建链表一起用时却会停止工作,我起先以为是创建链表哪里
出问题了,但是在debug无果后
,原来是save和createlist两个函数创建链表的方式不同,
我一个写的是先进后出,一个是先进先出,导致出错,在改正后,就可以正常运行了。
3.3数据维护
a.写删除函数时,忽略了被删除链表下的其他链表,导致,这些链表依然存在文件中却已经
没有用处,反而会干扰程序的正常运行
例:if(p_prior
==
NULL)
//如果是链头
{hp
=
p_current
->next;
}
else
{
p_prior
->next
=
p_current
->next;
}
b.做这些处理时,因为忽略了头指针和其他指针的区别,也出了错
,还好立马发现并且改
了过来。
3.4界面
这个是最让我头疼的,刚开始看资料时根本看不懂,太多的变量名让我头昏眼花,后来是问
的同学,外加通过不断使实验,了解这些变量的作用,做出了现在的界面。
收获
通过这次的课程设计,我对链表和链表的操作都有了更深的理解和运用,初步了解了人机交
换界面,最重要的是,通过不断地debug,掌握了找出bug的经验,比如断点调试等多种方
法。
参考文献
[1]曹计昌,卢萍,李开.
C语言程序设计,北京:科学出版社,2013
[2]李开,卢萍,曹计昌.
C语言实验与课程设计,北京:科学出版社,2011
附录
程序清单
System.h
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define
NUM
100
#ifndef
TYPE_H_INCLUDED
#define
TYPE_H_INCLUDED
#define
SCR_ROW
9999
/*屏幕行数*/
#define
SCR_COL
80
/*屏幕列数*/
struct
scespo
/*景点*/
{
char
sp_sr_num[NUM];
/*景区编号*/
char
sp_c_num[NUM];
/*城市编号*/
char
scespo[NUM];
/*景点名称*/
char
sp_num[NUM];
/*景点编号*/
char
sp_location[NUM];
/*景点地址*/
char
sp_time[NUM];
/*花费时间*/
struct
scesponext;
/*指向下一个景点节点*/
};
struct
scearea
/*景区*/
{
char
sr_c_num[NUM];
/*城市编号*/
char
scearea[NUM];
/*景区名称*/
char
sr_num[NUM];
/*景区编号*/
char
sr_level[NUM];
/*景区级别*/
char
sr_location[NUM];
/*景区地址*/
char
sr_ticket[NUM];
/*景区分类*/
char
sr_time[NUM];
/*开放时间*/
char
sr_connum[NUM];
/*查询电话*/
struct
sceareanext;
/*指向下一个景区节点*/
struct
scesposp_head;
/*景点链表的头指针*/
};
struct
city
/*城市*/
{
char
city[NUM];
/*城市名称*/
char
c_num[NUM];
/*城市编号*/
char
c_inspnum[NUM],c_consnum[NUM];
/*城市邮编、城市特色*/
struct
citynext;
/*指向下一个城市节点*/
struct
sceareasr_head;
/*景区链表的头指针*/
};
/**屏幕窗口信息链结点结点结构/
typedef
struct
layer_node
{
char
LayerNo;
/**<
弹出窗口层数*/
SMALL_RECT
rcArea;
/**<
弹出窗口区域坐标*/
CHAR_INFOpContent;
/**<
弹出窗口区域字符单元原信息存储缓冲区*/
charpScrAtt;
/**<
弹出窗口区域字符单元原属性值存储缓冲区*/
struct
layer_nodenext;
/**<
指向下一结点的指针*/
}
LAYER_NODE;
/**标签束结构/
typedef
struct
labe1_bundle
{
char*ppLabel;
/**<
标签字符串数组首地址*/
COORDpLoc;
/**<
标签定位数组首地址*/
int
num;
/**<
标签个数*/
}
LABEL_BUNDLE;
/**热区结构/
typedef
struct
hot_area
{
SMALL_RECTpArea;
/**<
热区定位数组首地址*
相关文章
- 礼物盒简笔画
- 点对点考研名师
- 铁化学符号
- 福建医科大学2019年10月自考面向社会开考专业理论课程报名通知
- 元旦策划方案4篇
- 李耳(关于李耳简述)
- 睡觉前发个幽默的说说 有关睡觉的幽默句子
- 简笔画蟋蟀的画法
- 求之不得寤寐思服的表达效果(求之不得 寤寐思服)
- hear的同音异词(hear的同音词)
- 石墨炸弹
- 目前有全球定位系统的国家有英国吗(目前有全球定位系统的国家有哪些)
- 猪脚海带汤怎么做
- 此去花丛懒回顾半缘修道半缘君(取次花丛懒回顾半缘修道半缘君的意思)
- 螳螂吃什么食物视频(螳螂吃什么食物)
- 全面的猫眼石的作用与功效
- 高考成语大全及解释(成语解释大全)
- 但组词二个字(但组词)
- 大龙虾怎么洗的干净(大龙虾怎么洗)
- 编导专业大学排名,编导专业哪个学校好