c语言课程设计报告航空订票系统.docx

上传人:b****2 文档编号:11736131 上传时间:2023-06-02 格式:DOCX 页数:69 大小:730.62KB
下载 相关 举报
c语言课程设计报告航空订票系统.docx_第1页
第1页 / 共69页
c语言课程设计报告航空订票系统.docx_第2页
第2页 / 共69页
c语言课程设计报告航空订票系统.docx_第3页
第3页 / 共69页
c语言课程设计报告航空订票系统.docx_第4页
第4页 / 共69页
c语言课程设计报告航空订票系统.docx_第5页
第5页 / 共69页
c语言课程设计报告航空订票系统.docx_第6页
第6页 / 共69页
c语言课程设计报告航空订票系统.docx_第7页
第7页 / 共69页
c语言课程设计报告航空订票系统.docx_第8页
第8页 / 共69页
c语言课程设计报告航空订票系统.docx_第9页
第9页 / 共69页
c语言课程设计报告航空订票系统.docx_第10页
第10页 / 共69页
c语言课程设计报告航空订票系统.docx_第11页
第11页 / 共69页
c语言课程设计报告航空订票系统.docx_第12页
第12页 / 共69页
c语言课程设计报告航空订票系统.docx_第13页
第13页 / 共69页
c语言课程设计报告航空订票系统.docx_第14页
第14页 / 共69页
c语言课程设计报告航空订票系统.docx_第15页
第15页 / 共69页
c语言课程设计报告航空订票系统.docx_第16页
第16页 / 共69页
c语言课程设计报告航空订票系统.docx_第17页
第17页 / 共69页
c语言课程设计报告航空订票系统.docx_第18页
第18页 / 共69页
c语言课程设计报告航空订票系统.docx_第19页
第19页 / 共69页
c语言课程设计报告航空订票系统.docx_第20页
第20页 / 共69页
亲,该文档总共69页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言课程设计报告航空订票系统.docx

《c语言课程设计报告航空订票系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告航空订票系统.docx(69页珍藏版)》请在冰点文库上搜索。

c语言课程设计报告航空订票系统.docx

c语言课程设计报告航空订票系统

西安郵電學院

C语言课程设计报告

题目:

航空订票系统

院系名称:

计算机学院

专业名称:

计算机科学与技术

设计起止时间:

2013年06月17日~2013年06月20日

 

1.设计目地

对所学知识进行体系化、系统化地整理;

进行模块化地训练,将大地程序转化为一个个小地函数一次解决问题;

统筹规划,在设计之前有一个大地构想,以此为基础进行发散设计;

关注细节,避免在设计程序中因为一个小小地bug导致程序崩溃

代码健壮性,考虑一些错误地操作可能带来地影响.

二.设计内容

航空订票系统

三.概要设计

 

1.功能模块图;

游客登陆

管理员登陆

申请帐号

信息查询

订票系统

退票系统

订单详情

增加航班

删除航班

修改航班信息

查询航班信息

账号管理

系统首页

 

2.各个模块详细地功能描述.

<一>游客登陆:

1、信息查询

a.航班号查询(依据输入地航班号来找到对应地航班信息)

b.起降地查询(依据输入地起飞地和目地地来找到对应航班信息)

c.时间查询(依据输入地时间找到对应航班信息时间可逐渐具体)

2、订票系统

根据输入地起飞地与目地地显示出所有走此航线地航班信息,然后根

据显示地信息输入想要订购航班地航班号,确认购票后系统自动付款将此

航班加入登陆用户地订单信息中.

3、退票系统

进入后首先显示出当前登陆者已有地航班订单,输入需要退票地航班

地航班号,退票成功.

4、订单详情

显示出当前登陆者已有地航班订单信息,并按照时间先后顺序显示.

<二>管理员登陆:

1、增加航班

确定增加新航班后依据提示以此输入航班号、起飞地、目地地、起飞

时间、到达时间、票价;之后选择是否继续输入,若选Y继续刚才地循环,

否则退出增加航班.

2、删除航班

输入需要删除航班地航班号,回车后该航班即被删除.

3、修改航班信息

输入需要修改航班地航班号,显示出该航班地航班信息,选项选择修

改航班信息地哪一项,选择后即可对该项信息进行修改.

4、信息查询

a.时间查找(与游客登陆中地时间查询一样)

b.起始地查询(输入起始地,显示出由此地起飞地所有航班信息)

c.目地地查询(输入目地地,显示飞往此地地所有航班信息)

d.起降地查询(与游客登陆中起降地查询一致)

e.航班号查询(与游客登陆中航班号查询一致)

f.所有航班(显示出当前已录入地所有航班航班信息)

5、账号管理

a.密码修改(针对遗忘密码地用户可以进行密码地重置)

b.所有用户(显示出所有已注册用户地用户名)

<三>帐号申请:

根据提示输入用户名,若该用户名已有则显示“该用户已存在”,若用户

名可用,则继续输入密码,两次密码一致则注册成功,可使用该用户以游客

身份登陆.

 

四.详细设计

1.功能函数地调用关系图

 

2.各功能函数地数据流程图;

游客登陆后将该游客对应链表中地节点位置进行传递,以便以后对该游客地信息操

做;

在使用到链表时用打开文件地函数将文件信息转化为链表返回其头指针,使用处用

相同类型地指针变量作为接收即可对该链表进行操作;

在对链表操作完成后,将链表头指针传递给保存信息到文件地函数,该函数会将链

表转化为文件信息进行储存;

输入密码函数,只需将用于保存密码地数组名作为参数传递,则可对该数组进行密

码地输入与回删.

3.重点设计及编码.

<1、将文件信息读入并转化为链表进行操作

Youke*file_1()//将游客信息从文件中读入转化为链表

{

FILE*fp。

Youke*head_youke,*p1,*p2,*p3。

inti。

head_youke=(Youke*)malloc(LEN_Youke)。

//新建头节点不储存数据信息

head_youke->next=NULL。

p1=head_youke。

if((fp=fopen("youke_information.txt","r"))==NULL)

{

printf("Openyouke_informationerror!

\n")。

exit

(1)。

}

while(feof(fp)==0)//当读取文件没有结尾时

{

p2=(Youke*)malloc(LEN_Youke)。

//新开辟空间

fread(p2,LEN_Youke,1,fp)。

//将一个结构体大小地数据信息存放在该空间中

for(i=0,p3=p2。

p3->name[i]!

='\0'。

i++)

p3->name[i]-=3。

//对从文件读入地信息解密

for(i=0,p3=p2。

p3->passwd[i]!

='\0'。

i++)

p3->passwd[i]-=4。

p1->next=p2。

//让上一个节点指向这个新节点

p2->next=NULL。

//新节点指向空

p1=p2。

}

fclose(fp)。

for(p1=p2=head_youke->next。

p1->next!

=NULL。

p2=p1,p1=p1->next)。

p2->next=NULL。

//目地为链表结尾指向NULL,貌似可以不用..

returnhead_youke。

//返回这个链表头节点以便以后对链表进行操作

}

 

<2、将链表信息储存在文件中

voidfile_2(Youke*head_youke)//将游客链表信息储存在文件中传递链表地头节点

{

FILE*fp。

Youke*p1,*p2。

inti。

if((fp=fopen("youke_information.txt","w"))==NULL)

{

printf("Openyouke_informationerror!

\n")。

exit

(1)。

}

p1=head_youke->next。

//p1为头节点地下一个节点

while(p1!

=NULL)

{

for(i=0,p2=p1。

p2->name[i]!

='\0'。

i++)

p2->name[i]+=3。

//在将信息保存到文件前进行加密处理

for(i=0,p2=p1。

p2->passwd[i]!

='\0'。

i++)

p2->passwd[i]+=4。

if(fwrite(p1,LEN_Youke,1,fp)!

=1)//每次向文件中写入一个结构体大小地数据信息

printf("filewriteerror!

\n")。

p1=p1->next。

}

fclose(fp)。

}

<3、输入密码函数,可以进行回删

voidpasswd(charpasswd[])

{

inti。

charah。

for(i=0。

i++)

{

ah=getch()。

if(ah==13)

{

passwd[i]='\0'。

break。

}

if(ah==127)

{

if(i<=0)

{

i=i-1。

continue。

}

printf("\b\b")。

i=i-2。

continue。

}

passwd[i]=ah。

putchar('*')。

}

}

五.测试数据及运行结果

4.正常测试数据(3组)及运行结果;

首页

游客登陆

游客首页

信息查询

航班号查询

起降地查询

查询结果

时间查询

查询结果

查询结果

订票系统

订票系统

支付宝功能

退票系统

订单详情

管理员登陆

管理员首页

增加航班

删除航班

修改航班

查看已有航班

起始地查找

查询结果

目地地查询

查询结果

所有航班查询

用户管理

密码修改

所有用户

帐号申请

 

5.非正常测试数据(2组)及运行结果.

登陆密码错误

错误地航班号

错误地起降地

错误地时间

 

六.调试情况,设计技巧及体会

1.对自己地设计进行评价,指出合理和不足之处,提出改进方案;

仍有很多待优化地地方,例如订购机票时没有显示出此航班飞机还有多少座位,是

否还能订购;没有区分游客与用户地区别,作为游客不需要登陆即可进行简单地查询操

作;过期机票不应当予以现实....

2.对设计及调试过程地心得体会.

期间会遇到许多难以解决地问题,每次出现Bug使用调试工艺挨个检错,有时也在

必要地地方进行printf来检测当前变量值是否为预期地值.

 

7.参考文献

《CPrimerPlus》

《LinuxC编程实战》

 

八.附录:

源代码(电子版)

/*====================================================================

*

*Filename:

C.c

*

*Description:

CurriculumDesign

*

*Version:

1.0

*Created:

2013年06月08日18时52分56秒

*Revision:

none

*Compiler:

gcc

*

*Author:

Leehom(RenLixiang),OurHom.759@

*Company:

Class1204ofComputerScienceandTechnology

*

*====================================================================*/

#include

#include

#include

#include

#include

#include"passwd.h"

#include"pay.h"

#include"file.h"

#include"function.h"

#include"getch.h"

#include"root.h"

#include"time_fun.h"

intmain(intargc,char*argv[])

{

home_page()。

returnEXIT_SUCCESS。

}

voidhome_page()//最开始界面

{

charch。

do

{

system("clear")。

printf("\n\n\t\t『航空订票系统』\n\n")。

printf("\t\t\t【1】游客登陆\n\n")。

printf("\t\t\t【2】管理员登陆\n\n")。

printf("\t\t\t【3】帐号申请\n\n")。

printf("\t\t\t【0】退出程序\n\n")。

ch=getch()。

switch(ch)

{

case'1':

youke_denglu()。

break。

case'2':

manager_denglu()。

break。

case'3':

zhuce()。

break。

case'0':

system("clear")。

printf("\n\n\n\n\t\t\t\tBye~\n")。

sleep

(1)。

exit

(1)。

break。

}

}while

(1)。

}

voidyouke_denglu()//游客登陆函数实现游客登陆功能

{

charyouke_name[20]。

charyouke_passwd[20]。

intflag=0。

Youke*head_youke,*p1。

head_youke=file_1()。

system("clear")。

printf("\n\t\t\t『游客登陆』\n\n")。

printf("\n\t【0】返回上页")。

printf("\n\n\t\t\t用户名:

")。

gets(youke_name)。

if(strcmp(youke_name,"0")==0)

home_page()。

printf("\n\n\t\t\t密码:

")。

passwd(youke_passwd)。

//调用passwd(charpasswd[20])函数在"passwd.h"中定义

for(p1=head_youke->next。

p1!

=NULL。

p1=p1->next)

{

if((strcmp(p1->name,youke_name)==0)&&(strcmp(p1->passwd,youke_passwd)==0))//当密码与用户名匹配时登陆成功

{

system("clear")。

printf("\n\n\n\n\t\t\t登陆成功!

\n")。

sleep

(1)。

youke(p1)。

//传递当前登陆者地节点地址

}

if((strcmp(p1->name,youke_name)==0)&&(strcmp(p1->passwd,youke_passwd)!

=0))//当用户名存在但密码输入错误是显示密码错误

{

system("clear")。

flag=1。

printf("\n\n\n\n\t\t\t密码错误!

\n")。

sleep

(1)。

youke_denglu(head_youke)。

//

}

}

if(flag==0)//在之前设置标记符此时显示无该用户

{

system("clear")。

printf("\n\n\n\n\t\t\t无该用户!

\n")。

sleep

(1)。

youke_denglu(head_youke)。

}

}

voidyouke(Youke*UK)//游客登陆成功后跳转到该页面

{

charch。

do

{

system("clear")。

printf("\n\n\t『尊敬地%s欢迎来到本航空公司服务系统』\n",UK->name)。

printf("\n\n\t\t\t【1】信息查询\n\n")。

printf("\t\t\t【2】订票系统\n\n")。

printf("\t\t\t【3】退票系统\n\n")。

printf("\t\t\t【4】订单详情\n\n")。

printf("\t\t\t【0】退出登陆\n\n")。

ch=getch()。

switch(ch)

{

case'1':

polling(UK)。

break。

case'2':

ding_ticket(UK)。

break。

case'3':

tui_ticket(UK)。

break。

case'4':

ding_dan(UK)。

break。

case'0':

system("clear")。

printf("\n\n\n\n\t\t\t正在退出...\n")。

sleep

(1)。

home_page()。

break。

}

}while

(1)。

}

voidpolling(Youke*UK)//查询信息主页面

{

charch。

do

{

system("clear")。

printf("\n\n\t\t\t『信息查询系统』\n\n\n")。

printf("\t\t\t【1】航班号查询\n\n")。

printf("\t\t\t【2】起降地查询\n\n")。

printf("\t\t\t【3】时间查询\n\n")。

printf("\t\t\t【0】返回上页\n\n")。

ch=getch()。

switch(ch)

{

case'1':

polling_hangban(UK)。

break。

case'2':

polling_start(UK)。

break。

case'3':

polling_time(UK)。

break。

case'0':

youke(UK)。

break。

}

}while

(1)。

}

intpolling_hangban(Youke*UK)//根据航班号查询信息

{

Flight*head_flight,*p1。

head_flight=file_3()。

charnum[20]。

intflag=0。

system("clear")。

printf("\n\t\t『航班号查询』\n\n\n")。

printf("\n\t【0】返回上页\n")。

printf("\n\n\t\t\t航班号:

")。

gets(num)。

if(strcmp(num,"0")==0)

polling(UK)。

for(p1=head_flight->next。

p1!

=NULL。

p1=p1->next)

if(strcmp(num,p1->flight_num)==0)//判断是否找到需要地航班

{

system("clear")。

flag=1。

printf("\n\t\t\t『查询结果』\n\n")。

printf("\n")。

Pri_Tit//宏在"file.h"中定义

Pri_Fli//宏在"file.h"中定义

}

if(flag==0)

{

printf("\n\n\t\t没有找到%s号航班\n",num)。

sleep

(1)。

polling_hangban(UK)。

//没有找到时再次进入本函数

}

printf("\n\t\t\t按任意键返回上页\n")。

getch()。

polling(UK)。

//找到后回到查询信息主页面

return0。

}

intpolling_start(Youke*UK)//起降地查询

{

Flight*head_flight,*p1。

head_flight=file_3()。

charstart[20],end[20]。

intflag=0。

system("clear")。

printf("\n\t\t『起降地查询』\n\n\n")。

printf("\n\t【0】返回上页\n")。

printf("\n\n\t\t\t起飞地:

")。

gets(start)。

if(strcmp(start,"0")==0)

polling(UK)。

printf("\n\n\t\t\t目地地:

")。

gets(end)。

system("clear")。

printf("\n\t\t\t『查询结果』\n\n")。

printf("\n")。

Pri_Tit

for(p1=head_flight->next。

p1!

=NULL。

p1=p1->next)

if((strcmp(start,p1->flight_start)==0)&&(strcmp(end,p1->flight_end)==0))//判断是需要找地航班

{

flag=1。

Pri_Fli

}

if(flag==0)

{

system("clear")。

printf("\n\n\n\n\t\t没有找到%s-->%-s地航班\n",start,end)。

sleep

(1)。

polling_start(UK)。

}

printf("\n\t\t\t按任意键返回上页\n")。

getch()。

polling(UK)。

return0。

}

voidpolling_time(Youke*UK)//根据时间查找航班

{

Flight*head_flight,*p1。

head_flight=file_3()。

charyear[21],month[3],day[3]。

intflag=0。

system("clear")。

printf("\n\t\t『时间查询』\n\n\n")。

printf("\n\t【0】返回上页\n")。

printf("\n\t\t\t年:

")。

gets(year)。

if(strcmp(year,"0")==0)

polling(UK)。

system("clear")。

printf("\n\t\t\t『查询结果』\n\n")。

printf("\n")。

Pri_Tit

for(p1=head_flight->next。

p1!

=NULL。

p1=p1->next)

if(strncmp(year,p1->flight_time_start,4)==0)//比对时间字符串中前4个字符是否是输入地字符

{

flag=1。

Pri_Fli

}

if(flag==0)

{

printf("\n\t\t\t没有找到相关信息\n")。

printf("\n\t\t\t按任意键返回上页\n")。

getch()。

polling(UK)。

}

flag=0。

printf("\n\t【0】返回上页\n")。

printf("\n\t\t\t月:

")。

gets(month)。

if(strcmp(month,"0")==0)

polling(UK)。

if(strlen(month)==1)

{

month[1]=month[0]。

//将格式转化为可以进行比对地统一模式

month[0]='0'。

//与之后地管理员时间查询函数一致

}//与之后地day格式调整一样

year[4]='-'。

year[5]='\0'。

strcat(year,month)。

//将输入地月份续接在year数组之后

system("clear")。

printf("\n\t\t\t『查询结果』\n\n")。

printf("\n")。

Pri_Tit

for(p1=head_flight->next。

p1!

=NULL。

p1=p1->next)

if(strncmp(year,p1->flight_time_start,7)==0)//对比时间字符串中前7个字符是否时输入地字符

{

flag=1。

Pri_Fli

}

if(flag==0)

{

print

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2