语c言课程设计航空售票系统大学论文.docx

上传人:b****8 文档编号:29552605 上传时间:2023-07-24 格式:DOCX 页数:40 大小:355.69KB
下载 相关 举报
语c言课程设计航空售票系统大学论文.docx_第1页
第1页 / 共40页
语c言课程设计航空售票系统大学论文.docx_第2页
第2页 / 共40页
语c言课程设计航空售票系统大学论文.docx_第3页
第3页 / 共40页
语c言课程设计航空售票系统大学论文.docx_第4页
第4页 / 共40页
语c言课程设计航空售票系统大学论文.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

语c言课程设计航空售票系统大学论文.docx

《语c言课程设计航空售票系统大学论文.docx》由会员分享,可在线阅读,更多相关《语c言课程设计航空售票系统大学论文.docx(40页珍藏版)》请在冰豆网上搜索。

语c言课程设计航空售票系统大学论文.docx

语c言课程设计航空售票系统大学论文

C语言程序设计课程设计

评语:

 

考勤(10)

纪律(10)

过程(40)

设计报告(30)

答辩(10)

总成绩(100)

 

专业:

轨道交通信号与控制

班级:

信号1402

姓名:

牛志强

学号:

201409217

指导教师:

张振海

兰州交通大学自动化与电气工程学院

2015年7月22日

一、基础题

1、题目

有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后再数下去。

直到最后只剩下一个人为止。

问此人原来的位置是多少号。

2、解题分析

利用结构体数组中加入指针构成循环链模拟进行报数,并加入标志,表示此人是否离开游戏。

游戏开始,报数等于三的倍数的人离开,直到淘汰16个玩家为止,则剩余一人为胜利者,输出该游戏者的结构体数组位置即是此人原来的位置。

3、流程图

图1基础题流程图

 

4、源程序

#include

structSign

{

intno_out;//出局标志

intnextp;//指针指向下一个元素,形成圈形链表

}sign[17];

main()

{

printf("有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后再数下去。

直到最后只剩下一个人为止。

问此人原来的位置是多少号。

\n");

inti,j,k,l;

for(i=0;i<17;i++)//循环链表赋初值

{

sign[i].no_out=1;

sign[i].nextp=i+1;

}

sign[16].nextp=0;

printf("初始队列情况(Y代表存在,N代表出局):

");

for(i=0;i<17;i++)

printf("%c%c",sign[i].no_out?

'Y':

'N',(i+1)%17!

=0?

'\0':

'\n');

j=16;

for(i=0;i<16;i++)//淘汰16个人为止

{

for(k=0;;)

{

if(k%3!

=0||k==0)//不是3的倍数指向下一个

{

j=sign[j].nextp;

k+=sign[j].no_out;

}

else//3的倍数出局,标志改为0

{

sign[j].no_out=0;

break;

}

}

printf("第%d个人第%d号淘汰后:

",i+1,j);//每淘汰一个人就输出,模拟真实的游戏过程

for(l=0;l<17;l++)

printf("%c%c",sign[l].no_out?

'Y':

'N',(l+1)%17!

=0?

'\0':

'\n');

}

for(i=0;i<17;i++)

if(sign[i].no_out)

printf("最后剩余一人原来号码为%d\n",i);

}

5、测试数据及运行结果

图2基础题运行图

二、改错题

1、题目

下列给定程序中,函数fun的功能是:

用选择法对数组中的n个元素按从小到大的顺序进行排序。

请改正程序中的错误,使程序能得出正确的结果。

注意,不要改多main函数,不得增行或删行,也不得更改程序的结构。

程序如下:

#include

#defineN20

voidfun(inta[],intn)

{

inti,j,t,p;

for(j=0;j

{

p=j

for(i=j;i,n;i++)

if(a[i]

t=a[p];a[p]=a[j];a[j]=t;

}

}

main()

{

inta[N]={9,6,8,3,-1},i,m=5;

printf("排序前的数据:

");

for(i=0;i

printf("%d",a[i]);

printf("\n");

fun(a,m);

printf("排序后的数据:

");

for(i=0;i

printf("%d",a[i]);

printf("\n");

}

2、程序功能

把数组中的数按从小到大依次排序。

3、错误分析

(1)第8行:

“p=j”改为“p=j;”构成语句。

(2)第9行:

“i=j;”改为“i=j+1;”,使得小排序次数依次减1。

(3)第9行:

“i,n;”改为“i

(4)第11行:

“p=j;”改为“p=i;”使能够正确交换数进行排序。

4、流程图

图3改错题流程图

5、改正过的程序

#include

#defineN20

voidfun(inta[],intn)

{

inti,j,t,p;

for(j=0;j

{

p=j;//末尾加“;”

for(i=j+1;i

if(a[i]

p=i;//j改为i

t=a[p];a[p]=a[j];a[j]=t;

}

}

main()

{

inta[N]={9,6,8,3,-1},i,m=5;

printf("排序前的数据:

");

for(i=0;i

printf("%d",a[i]);

printf("\n");

fun(a,m);

printf("排序后的数据:

");

for(i=0;i

printf("%d",a[i]);

printf("\n");

}

6、测试数据及运行结果

图4改错题运行图

三、综合题

1、题目

飞机订票系统:

一、问题描述:

假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。

通过该系统来实现机票的订购问题。

二、功能要求:

1.本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:

起飞地、目的地航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。

2.本系统显示这样的菜单:

(1)输入航班信息

(2)输出航班信息

(3)查找航班信息

a.显示空座的数量

b.显示空座的信息

c.显示已订座的信息

d.起飞时间

(4)订票预约

(5)删除定票预约

(6)退出系统

3.本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入,并且它们都允许用户收回其输入。

4.查找航班信息既可按线路查,也可按目的地查。

5.在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,它首先从该文件读入数据。

三、算法提示:

1.数据结构:

结构体类型数组

2.数据库结构:

下表构成该系统的基本数据库。

航班号

起飞时间

目的地

座次号

座次订出与否的标记

订票者姓名

订票者身份证号码

int

char

char

int

char

char

char

四、测试数据:

每架飞机的座位N=12,M=5

五、其它:

对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。

2、解题分析

利用工程化思想解决,将程序功能模块化,每个模块完成一项功能,每人完成一部分,主函数做成菜单,各种功能调用子函数完成,有利于系统的运行和维护,且便于拓展功能。

飞机订票系统,有M架飞机,每架飞机有N个座位,将数据类型做成结构体数组的嵌套,方便管理,且将M,N作为宏定义,这样后续就可以通过改宏定义的值就可以扩大系统的适用范围。

在这个程序中,特别的加入一个自建的头文件,里面包含了输入输出等头文件,结构体数组等,使得每个小组成员更方便的使用调用全局变量和一些参数。

3、流程图

图5综合题main函数流程图

图6综合题func1函数流程图图7综合题func2函数流程图

 

图8综合题func3函数流程图

 

图9综合题func31函数流程图

 

图10综合题func311函数流程图图11综合题func312函数流程图

图12综合题func313函数流程图图13综合题func314函数流程图

图14综合题func4函数流程图图15综合题func5函数流程图

图16综合题func6函数流程图图17综合题func7函数流程图

4、源程序

头文件:

bag.h:

#include//自定义头文件包含各个函数常用和必要部分

#include

#include

#include

#defineM5//飞机数宏定义

#defineN12//座位数宏定义

structInfor//自定义Infor信息结构体

{

intsnum;//seatnumber座位号(数字表示)

charsign;//标记(用Y和N表示)

charname[20];//姓名(汉字英文均可)

charid[20];//身份证号(由于有人身份证号末尾为X所以类型采用cahr)

}infor[N];

structFlight//自定义Flight航班信息结构体

{

intfnum;//flightnumber航班号(数字表示)

chartime[12];//例如2015/07/20,20150720,2015-07-20或20150720均可

charoffg[20];//offground起飞地(汉字英文均可)

chardes[20];//destination目的地(汉字英文均可)

structInforinfor[N];//Infor信息结构体数组从属于Flight航班信息结构体数组,结构体数组的嵌套

}flight[M];

FILE*fp;//文件指针

源文件:

main.c:

#include"bag.h"//主函数

voidmain()

{

intfunc1();

intfunc2();

intfunc3();

voidfunc4();

voidfunc5();

voidfunc6();

intfunc7();

inti,x;

if((fp=fopen("D:

\\Flight.txt","a+"))==NULL)//a+方式打开文件,存在则读写指向文件末尾,不存在新建

{

printf("打开文件失败!

\n");

}

fseek(fp,0,SEEK_SET);//使文件内部指针指向文件开头,以便读取记录

for(i=0;i

{

fread(&flight[i],sizeof(structFlight),1,fp);//sizeof()运算要读入数据的大小

}

fclose(fp);

printf("\t************************************************\n\n\t\t欢迎使用航空订票系统!

\n\tWelcometoAirlineReservationSystem!

\n\tOficialVersionPowefrbySuperGroup.\n\t\t\t\tBuild1.2.150716\n\n\t************************************************\n");

printf("注意:

首次运行本系统请先选择初始化系统,以防发生未知错误!

\n");

printf("提示:

\n1.航班号用数字表示\n2.起飞时间输入例如2015/07/20,20150720,2015-07-20或20150720均可\n3.订座标记为英文大写字母Y(已定出)和N(空座)\n\n");

for(;;)//for循环使程序只有一个出口,即退出系统

{

printf("菜单:

\n1.输入航班信息\n2.输出航班信息\n3.查找航班信息\n4.订票预约\n5.删除订票预约\n6.退出系统\n7.初始化系统\n请输入相应操作选项数字:

\n");

scanf("%d",&x);

getchar();//接收回车,以防对后续输入造成干扰

switch(x)

{

case1:

system("cls");func1();system("cls");break;

case2:

system("cls");func2();system("cls");break;

case3:

system("cls");func3();system("cls");break;

case4:

system("cls");func4();system("cls");break;

case5:

system("cls");func5();system("cls");break;

case6:

system("cls");func6();

case7:

system("cls");func7();system("cls");break;

default:

system("cls");printf("输入错误,请重新输入!

\n");system("pause");

}

}

}

func1.c:

#include"bag.h"//输入航班信息一级子函数

intfunc1()

{

inti;

printf("您已选择1.输入航班信息。

\n");

printf("共有%d架飞机,请选择要输入飞机的序号1—%d(输入0返回上一菜单)。

\n",M,M);

for(;;)//for循环使程序只有一个出口,即输入0返回上一菜单

{

scanf("%d",&i);

getchar();

if(i==0)

return0;

if(i<=M)

{

system("cls");

printf("请输入%d号飞机的航班号:

\n",i);

scanf("%d",&flight[i-1].fnum);

getchar();

printf("请输入%d号飞机的起飞时间:

\n",i);

scanf("%s",flight[i-1].time);

getchar();

printf("请输入%d号飞机的起飞地:

\n",i);

scanf("%s",flight[i-1].offg);

getchar();

printf("请输入%d号飞机的目的地:

\n",i);

scanf("%s",flight[i-1].des);

getchar();

printf("%d号飞机航班信息输入完毕,请选择其他1—%d飞机或0返回上一菜单!

\n",i,M);

}

else

printf("输入错误,请重新输入!

\n");

}

}

func2.c:

#include"bag.h"//输出航班信息一级子函数

intfunc2()

{

inti;

structFlight*p;//结构体指针

system("cls");

printf("您已选择2.输出航班信息。

\n\n");

p=flight;//结构体指针赋初值

for(i=0;i

{

printf("%d号飞机的航班号:

%d\n",i+1,(*(p+i-1)).fnum);

printf("%d号飞机的起飞时间:

%s\n",i+1,(*(p+i-1)).time);

printf("%d号飞机的起飞地:

%s\n",i+1,(*(p+i-1)).offg);

printf("%d号飞机的目的地:

%s\n\n",i+1,(*(p+i-1)).des);

}

printf("按0返回上一菜单!

\n");

scanf("%d",&i);

getchar();

if(i==0)

return0;

}

func3.c:

#include"bag.h"//查找航班信息一级子函数

intfunc3()

{

intfunc31(intx);

inti,j,fnum;

chara[20],b[20];

printf("您已选择3.查找航班信息。

\n");

for(;;)

{

fnum=1;

printf("请选择查找航班信息方式(0返回菜单):

\n1.按航班号查找\n2.按线路查找\n3.按目的地查找\n");

scanf("%d",&i);

getchar();

system("cls");

if(i==0)

return0;

elseif(i==1)

{

for(;;)

{

if(fnum==0)

break;

printf("您已选择1.按航班号查找。

\n");

printf("请输入航班号:

\n");

scanf("%d",&fnum);

getchar();

for(j=0;j

if(fnum==flight[j].fnum)

{

func31(j);

break;

}

else

{

if(j==M-1)

{

printf("查找失败,请核对航班号后按任意数字继续查找或按0用其他方式查找!

\n");

scanf("%d",&fnum);

getchar();

system("cls");

break;

}

}

}

}

elseif(i==2)

{

for(;;)

{

if(fnum==0)

break;

printf("您已选择2.按线路查找。

\n");

printf("请输入查询线路的起点和目的地:

\n");

printf("请输入起点:

\n");

scanf("%s",a);

getchar();

printf("请输入目的地:

\n");

scanf("%s",b);

getchar();

for(j=0;j

if((strcmp(a,flight[j].offg)==(strcmp(b,flight[j].des)))==0)

{

func31(j);

break;

}

else

{

if(j==M-1)

{

printf("查找失败,请核对线路后按任意数字继续查找或按0用其他方式查找!

\n");

scanf("%d",&fnum);

getchar();

system("cls");

if(fnum==0)

break;

}

}

}

}

elseif(i==3)

{

for(;;)

{

if(fnum==0)

break;

printf("您已选择3.按目的地查找。

\n");

printf("请输入目的地:

\n");

scanf("%s",a);

getchar();

for(j=0;j

{

if(strcmp(a,flight[j].des)==0)

{

func31(j);

break;

}

else

{

if(j==M-1)

{

printf("查找失败,请核对目的地后按任意数字继续查找或按0用其他方式查找!

\n");

scanf("%d",&fnum);

getchar();

system("cls");

if(fnum==0)

break;

}

}

}

}

}

else

{

printf("输入错误,请重新输入!

\n");

system("pause");

system("cls");

}

}

return0;

}

func31.c:

#include"bag.h"//查找航班信息二级子函数

intfunc31(intx)

{

intfunc311(intx);

intfunc312(intx);

intfunc313(intx);

intfunc314(intx);

inti;

system("cls");

printf("成功匹配到%d航班。

\n",flight[x].fnum);

for(;;)

{

printf("请选择查询选项(0返回菜单):

\n1.显示空座的数量\n2.显示空座的信息\n3.显示已订座的信息\n4.显示起飞时间\n");

scanf("%d",&i);

getchar();

switch(i)

{

case0:

return0;

case1:

system("cls");func311(x);system("cls");break;

case2:

system("

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

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1