首页 > 知识与问答 > 《C语言程序设计》课程设计报告(1)

《C语言程序设计》课程设计报告(1)

来源:互联网转载 时间:2025-04-19 07:00:48 浏览量:

《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;

/**<

热区定位数组首地址*

© 转乾企业管理-攻考网 版权所有 | 黔ICP备2023009682号

免责声明:本站内容仅用于学习参考,信息和图片素材来源于互联网,如内容侵权与违规,请联系我们进行删除,我们将在三个工作日内处理。联系邮箱:303555158#QQ.COM (把#换成@)