软件课程设计报告(飞机票系统)
软件课程设计报告
班级: 光电0905班
姓名: 王伟
学号: [1**********]6
1软件设计 . ................................................................................................. 1
1.1设计题目 ....................................................................................... 1 1.2设计要求 ....................................................................................... 1 1.3设计思想 ....................................................................................... 1 1.4流程图............................................................................................ 2 2软件测试 . ................................................................................................. 9 2.1航班信息查询模块测试 ............................................................... 9 2.2订票模块测试 ............................................................................. 14 2.3机票信息查询模块测试 ............................................................. 17 2.4退票模块测试 ............................................................................. 18 3算法改进 . ............................................................................................... 21 4开发体会 . ............................................................................................... 22 附录:源代码清单 .................................................................................. 24 参考文献 . .................................................................................................. 42
1软件设计
1.1设计题目 飞机票销售系统。 1.2设计要求
运用C 语言基本知识,结合相关算法思想和数据结构,编写一个单微机系统下运行的飞机票销售系统。飞机票销售系统应实现航班信息查询、机票购买、机票信息查询、机票退购等功能。 1.3设计思想
本程序分为四个模块,即航班信息查询模块、订票模块、机票信息查询模块和退票模块。程序中定义了三种结构为PLANES 、BOOK 和TICKETS ,分别用于航班信息、旅客信息和机票信息的存取和修改。为了储存航班信息、旅客信息和机票信息,程序中建立了三个文件分别为planes.txt 、book.txt 和tickets.txt 。
航班信息查询模块的功能主要由函数search1()实现,而航班信息查询模块中又分为按航班号查询航班信息模块、按目的地查询航班信息模块和按起飞时间查询航班信息模块三个小模块,因此search1()中分别调用函数search11()、search12()和search13()来实现每个小模块的功能。
订票模块的功能由函数book(int *k,BOOK *q,TICKETS *m)实现。
机票信息查询模块功能由函数search2(int *n,TICKETS *w)实现。
退票模块功能由函数refund(int *a,BOOK *b,TICKETS *c)实现。 每个模块的函数都通过对结构数组和文件的操作来实现对数据的存取和修改,从而实现各自的功能。
程序中采用的查找数据方式为顺序查找。
1.4流程图
主函数流程图
search1()为航班信息查询函数,book(int *k,BOOK *q,TICKETS *m)为订票函数,search2(int *n,TICKETS *w)为机票信息查询函数,refund(int *a,BOOK *b,TICKETS *c)为退票函数。
航班信息查询函数search1()流程图
search11()为按航班号查询航班信息函数,search12()为按目的地查询航班信息函数,search13()为按起飞时间查询航班信息函数。
按航班号查询航班信息函数search11()流程图
search12()和search13()的流程图同理,仅需改变判断条件。
订购机票函数book(int *k,BOOK *q,TICKETS *m)流程图
机票信息查询函数search2(int *n,TICKETS *w)流程图
退票函数refund(int *a,BOOK *b,TICKETS *c)流程图
2软件测试
2.1航班信息查询模块测试 运行程序,首先进入主菜单界面。
选择1,进入航班信息查询模块。显示子菜单界面。
选择1,按航班号查询航班信息。输入航班号“ZH9658”。
若在子菜单中选择2,按目的地查询航班信息,输入目的地“上海”。
若在子菜单中选择3,按起飞时间查找航班信息。输入起飞时间“08:00”。
查找到相应航班信息如下:
2.2订票模块测试
在主菜单中选择2,进行机票购买。显示购票界面。
如要购买从武汉飞往深圳的航班机票,则输入相应航班号UK1266。系统将提示旅客输入姓名,性别和身份证号等旅客信息。如下图,输入姓名“张三”,性别“男”,身份证号“[***********]”。
若该航班仍有剩余机票,则旅客购票成功,显示“购票成功”,同时生成机票编号并显示到屏幕上。
回到主菜单,选择1进入航班信息查询模块,再选择1,输入张三购买机票对应的航班号。
在显示的航班信息中,剩余机票数已由100变为99。
2.3机票信息查询模块测试
接着上次步骤,回到主菜单,选择3进入机票信息查询模块。系统提示输入机票编号。输入张三购买的机票的编号“51”。
系统查询到相应的机票信息并显示到屏幕如下:
2.4退票模块测试
在主菜单中选择4,进入退票模块。系统提示输入需要退还的机票的编号,输入张三购买的机票的编号“51”。
屏幕上显示“退票成功”字样,则表示旅客已成功退票。
此时若回到主菜单中选择3进入机票信息查询模块,输入张三曾购买
的机票的编号,则显示“对不起,该机票编号不存在”。
在主菜单中选择1进入航班信息查询模块,按任意一种查找方式查找
到张三曾购买的机票的航班信息,剩余机票数由99变回100。
以上测试仅以单人次购买单张机票为例,对于多人次购买多张机票,
该系统的测试结果仍正确无误。
3算法改进
改进一:
在主函数中定义的数组BOOK a[1400]和TICKETS t[1400]用于临
时存储旅客信息和机票信息,并可对其进行修改,同时也可以实现多
次购票的功能。在经过认真思考后,我认为可以省去BOOK a[1400]
和TICKETS t[1400]。在购票函数、机票信息查询函数和退票函数中
可以临时定义BOOK 型数组和TICKETS 型数组,用追加方式打开
book.txt 和planes.txt 并将文件中的信息读到相应数组中,如此一
来也能实现对旅客信息和机票信息的修改、添加和删除,且能多次购
票。
改进二:
程序中10个航班信息和50个已售出机票信息均通过初始化方式
赋给相应的结构数组,再储存到相应的文件中。这种方式处理信息不
够灵活,也不便于管理。因此,程序中可以增加一个航班信息添加模
块。
4开发体会
为了开发飞机票信息管理系统,我耗费了大量时间和精力,在开
发的过程中,我遇到了许许多多的挫折,但也因此进行了反反复复的
思考,从中得到了不少体会。
体会一:此次编程的内容较多,与以往的编程大不相同,因此刚
开始设计软件时我有许多困惑,甚至无从下手。在后来的编程过程中,
我深刻地体会到“模块化”这一设计思想的重要性。一个程序只有具
备“模块化”这一特征才能有条不紊、条理清晰,否则会混乱不堪,
可读性也受到影响。因此,要编写出一段正确且美观整洁的程序,必
须先大致将程序划分为几个模块,然后再分别让每个模块实现各自的
功能。在我所编写的程序中,我将它大致划分成了航班信息查询模块、
订票模块、机票信息查询模块和退票模块四个模块,而在航班信息查
询模块中,我又将其细分为按航班号查询航班信息模块、按目的地查
询航班信息模块和按起飞时间查询航班信息模块三个更小的模块。如
此一来,程序大致的框架便有了,我的思路也因此变得清晰明了,从
而也就不会无从下手了。
体会二:在第一次编写购票函数时,函数中没有使用任何形参,
也没有采用追加方式打开文件,这导致系统无法记录已售出机票数,
也不能实现多次购票。为了解决这个问题,我在购票函数中添加了形
参int *a,BOOK *q和TICKETS *m,并在主函数中定义了整型变量j 、
TICKETS 型数组和BOOK 型数组,从而使系统能记录已售出机票数并
可以进行多次购票。
体会三:在完成任务的过程中,我深刻体会到软件的开发需要缜
密的思维和一丝不苟的态度。一个不经意的小小的错误就可能导致程
序错漏百出、面目全非,真可谓“失之毫厘,差之千里”。在编写退
票函数时,我采用for 循环记录机票信息和旅客信息,由于错将判断
是否执行循环体的条件“k
确。因此每当我查询机票信息时总得不到正确的结果。经过多番的检
查和思考,才发现这一错误。将错误纠正后,程序测试结果无误。这
一纠错过程耗费了我大量时间,严重影响了效率。所以我觉得严谨的
思维是一个优秀的程序员所应具备的。多从事编程活动有助于培养良
好的思维习惯。
这次飞机票销售系统的开发虽经历了不少挑战,遭遇了许多的挫
折和打击,但我凭着自己的努力最终克服困难,完成了任务。尽管软
件中仍存在诸多不足,但它是我多日心血的结晶,它包含了我这一路
走来的酸甜苦辣。
通过这次软件设计,我成功地把所学C 语言和数据结构知识应用
到实际软件开发中去,掌握了中小规模软件设计和开发的方法和步
骤,也深深地领略到了软件设计的魅力。
附录:源代码清单
#include
#include
#include
#include
typedef struct planes //储存航班信息的结构
{
char planenum[7];
char start[12];
char destination[12];
char flytime[6];
int tickets;
int people;
int price;
}PLANES;
typedef struct book //储存旅客信息的结构
{
char name[20];
char sex[8];
char ID[20];
int ticketnum;
}BOOK;
typedef struct tickets //储存机票信息的结构
{
int ticketnum;
char planenum[7];
char start[12];
char destination[12];
char flytime[6];
char name[20];
char sex[8];
}TICKETS;
void menu();
void information1();
void information2(TICKETS *x);
void search1();
void menu1();
void search11();
void search12();
void search13();
void book(int *k,BOOK *q,TICKETS *m);
void search2(int *n,TICKETS *w);
void refund(int *a,BOOK *b,TICKETS *c);
void main()
{
menu(); //显示主菜单
information1(); //录入10个航班信息
int choice=0;
int j=50; //已售出机票数
BOOK a[1400]; //用于储存旅客信息的结构数组,最
多有1400组
TICKETS t[1400]; //用于储存机票信息的结构数组,最多
有1400组
information2(t); //录入50个已售出机票信息
for(;choice!=5;)
{
scanf("%d",&choice);
switch(choice)
{
case 1:
search1();
break;
case 2:
book(&j,a,t);
break;
case 3:
search2(&j,t);
break;
case 4:
refund(&j,a,t);
break;
case 5:
system("cls");
break;
default :
break;
}
}
system("color CF");
printf( "\t\t **********************************************\n"
"\t\t * 感谢您的使用,祝您旅途愉快,再见!
*\n"
"\t\t **********************************************\n");
remove("planes.txt");
remove("tickets.txt");
remove("book.txt");
}
void menu()
{
system("color B4");
printf( "\t\t***************************************************\n"
"\t\t* 欢迎使用飞机票销售系统 *\n"
"\t\t***************************************************\n"
"\t\t*请选择服务: *\n"
"\t\t* 1. 航班信息查询 *\n"
"\t\t*
*\n"
"\t\t* 2. 机票购买 *\n"
"\t\t*
*\n"
"\t\t* 3. 机票信息查询 *\n"
"\t\t*
*\n"
"\t\t* 4. 机票退购 *\n"
"\t\t*
*\n"
"\t\t* 5. 退出系统 *\n"
"\t\t***************************************************\n");
}
void information1()
{
PLANES air[10]={
{"ZH9658","武汉"," 广州","09:00",200,200,900},
{"GS7546","武汉"," 郑州","11:40",90,100,685},
{"CZ3445","武汉"," 重庆","17:35",91,100,885},
{"KZ5567","武汉"," 北京","08:00",200,200,790},
{"DW4612","武汉"," 上海","14:25",200,200,356},
{"MZ5431","武汉"," 杭州","18:00",91,100,456},
{"UK1266","武汉"," 深圳","12:45",100,100,800},
{"KS3256","武汉"," 南宁","10:00",92,100,455},
{"KZ6532","武汉"," 天津","21:00",193,200,356},
{"GM9825","武汉"," 香港","19:00",93,100,575}
};
FILE *fp;
PLANES *p=air;
fp=fopen("planes.txt","w"); //所有航班信息储存到文件
"planes.txt" 中
fwrite(p,sizeof(PLANES),10,fp);
rewind(fp);
fclose(fp);
}
void information2(TICKETS *x)
{
TICKETS a[50]={{1,"GS7546","武汉"," 郑州","11:40","王大伟","
男"},
{2,"GS7546","武汉"," 郑州","11:40","胡宾"," 男"},
{3,"GS7546","武汉"," 郑州","11:40","王玲"," 女"},
{4,"CZ3445","武汉"," 重庆","17:35","许永宾"," 男"},
{5,"CZ3445","武汉"," 重庆","17:35","王华"," 男"},
{6,"MZ5431","武汉"," 杭州","18:00","刘春"," 女"},
{7,"KS3256","武汉"," 南宁","10:00","郑安"," 男"},
{8,"GM9825","武汉"," 香港","19:00","李明"," 男"},
{9,"KZ6532","武汉"," 天津","21:00","杨向东"," 男"},
{10,"KS3256","武汉"," 南宁","10:00","胡华"," 男"}, {11,"KS3256","武汉"," 南宁","10:00","刘美"," 女"}, {12,"KS3256","武汉"," 南宁","10:00","江成"," 男"}, {13,"MZ5431","武汉"," 杭州","18:00","黄龙"," 男"}, {14,"MZ5431","武汉"," 杭州","18:00","刘小月"," 女"}, {15,"MZ5431","武汉"," 杭州","18:00","刘亮"," 男"}, {16,"GS7546","武汉"," 郑州","11:40","李红"," 女"}, {17,"GS7546","武汉"," 郑州","11:40","王枫"," 男"}, {18,"GS7546","武汉"," 郑州","11:40","石江"," 男"}, {19,"CZ3445","武汉"," 重庆","17:35","王明月"," 男"}, {20,"GM9825","武汉"," 香港","19:00","郑安"," 男"}, {21,"GM9825","武汉"," 香港","19:00","刘建国"," 男"}, {22,"GM9825","武汉"," 香港","19:00","胡太平"," 男"}, {23,"GS7546","武汉"," 郑州","11:40","王德"," 男"}, {24,"GS7546","武汉"," 郑州","11:40","张远"," 男"}, {25,"CZ3445","武汉"," 重庆","17:35","陈梅"," 女"}, {26,"GS7546","武汉"," 郑州","11:40","苏红"," 女"}, {27,"GS7546","武汉"," 郑州","11:40","黄单"," 男"}, {28,"KS3256","武汉"," 南宁","10:00","苏非"," 女"}, {29,"KZ6532","武汉"," 天津","21:00","欧平"," 男"}, {30,"CZ3445","武汉"," 重庆","17:35","刘威"," 男"}, {31,"CZ3445","武汉"," 重庆","17:35","黄依"," 女"}, {32,"GM9825","武汉"," 香港","19:00","王小明"," 男"}, {33,"KZ6532","武汉"," 天津","21:00","张节"," 男"}, {34,"CZ3445","武汉"," 重庆","17:35","刘南"," 男"}, {35,"GM9825","武汉"," 香港","19:00","付素"," 女"}, {36,"KZ6532","武汉"," 天津","21:00","魏江"," 男"}, {37,"KZ6532","武汉"," 天津","21:00","黄红"," 女"}, {38,"CZ3445","武汉"," 重庆","17:35","刘辉"," 男"}, {39,"KZ6532","武汉"," 天津","21:00","胡威"," 男"}, {40,"KZ6532","武汉"," 天津","21:00","李鹏"," 男"}, {41,"KS3256","武汉"," 南宁","10:00","郭洋"," 男"}, {42,"GM9825","武汉"," 香港","19:00","刘玉"," 男"}, {43,"CZ3445","武汉"," 重庆","17:35","白飞"," 男"}, {44,"KS3256","武汉"," 南宁","10:00","吴迪"," 男"}, {45,"MZ5431","武汉"," 杭州","18:00","刘月"," 女"}, {46,"KS3256","武汉"," 南宁","10:00","江明"," 男"}, {47,"MZ5431","武汉"," 杭州","18:00","郭辉"," 男"},
{48,"MZ5431","武汉"," 杭州","18:00","朱红"," 女"},
{49,"MZ5431","武汉"," 杭州","18:00","牛威"," 男"},
{50,"MZ5431","武汉"," 杭州","18:00","马辉"," 男"},
};
int i=0;
for(i=0;i
{
x[i]=a[i];
}
FILE *fp;
TICKETS *p=x;
fp=fopen("tickets.txt","w");
fwrite(p,sizeof(TICKETS),50,fp);
rewind(fp);
fclose(fp);
}
void search1() //查询航班信息模块
{
system("cls");
menu1(); //显示子菜单
int choice1;
do
{
scanf("%d",&choice1);
switch(choice1)
{
case 1:
search11();
break;
case 2:
search12();
break;
case 3:
search13();
break;
case 4:
system("cls");
break;
default:
break;
}
}while(choice1!=4);
menu();
}
void menu1() //子菜单
{
system("color 9F");
printf("\t\t***************************************************\n"
"\t\t* 航班信息查询菜单 *\n"
"\t\t***************************************************\n"
"\t\t*请选择: *\n"
"\t\t* 1. 按航班号查询 *\n"
"\t\t*
*\n"
"\t\t* 2. 按目的地查询 *\n"
"\t\t*
*\n"
"\t\t* 3. 按起飞时间查询 *\n"
"\t\t*
*\n"
"\t\t* 4. 返回上级菜单 *\n"
"\t\t***************************************************\n");
}
void search11() //按航班号查询航班信息模块
{
system("cls");
char planenum1[7];
printf("请输入航班号:\n");
scanf("%s",planenum1);
int i;
int flag=0;
FILE *fp1;
PLANES air1[10];
PLANES *p1=air1;
fp1=fopen("planes.txt","r");
fread(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
for(i=0;i
{
if(strcmp(air1[i].planenum,planenum1)==0)
{
system("cls");
printf("您所查询的航班信息为\n\n\n");
printf("*****************************************************************************\n");
printf("航班号\t起始地\t目的地\t起飞时间\t剩余票数\t最大载客数\t票价\n\n");
printf("%s\t%s\t%s\t%s\t\t%d\t\t%d\t\t%d\n",air1[i].planenum,air1[i].start,air1[i].destination,air1[i].flytime,air1[i].tickets,air1[i].people,air1[i].price);
printf("*****************************************************************************\n\n");
printf("按任意键返回上级菜单\n");
getch();
flag=1;
break;
}
}
if(flag==0)
{
printf("对不起,您的输入有误,按任意键返回上级菜单\n"); getch();
system("cls");
menu1();
}
p1=air1;
fp1=fopen("planes.txt","w");
fwrite(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
system("cls");
menu1();
}
void search12() //按目的地查询航班信息模块 {
system("cls");
char destination1[7];
printf("请输入目的地:\n");
scanf("%s",destination1);
int i;
int flag=0;
FILE *fp1;
PLANES air1[10];
PLANES *p1=air1;
fp1=fopen("planes.txt","r");
fread(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
for(i=0;i
{
if(strcmp(air1[i].destination,destination1)==0)
{
system("cls");
printf("您所查询的航班信息为\n\n\n");
printf("*****************************************************************************\n");
printf("航班号\t起始地\t目的地\t起飞时间\t剩余票数\t最大载客数\t票价\n\n");
printf("%s\t%s\t%s\t%s\t\t%d\t\t%d\t\t%d\n",air1[i].planenum,air
1[i].start,air1[i].destination,air1[i].flytime,air1[i].tickets,air1[i].people,air1[i].price);
printf("*****************************************************************************\n\n");
printf("按任意键返回上级菜单\n");
getch();
flag=1;
break;
}
}
if(flag==0)
{
printf("对不起,您的输入有误,按任意键回到上级菜单\n"); getch();
system("cls");
menu1();
}
p1=air1;
fp1=fopen("planes.txt","w");
fwrite(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
system("cls");
menu1();
}
void search13() //按起飞时间查询航班信息模块 {
system("cls");
char flytime1[7];
printf("请输入起飞时间:\n");
scanf("%s",flytime1);
int i;
int flag=0;
FILE *fp1;
PLANES air1[10];
PLANES *p1=air1;
fp1=fopen("planes.txt","r");
fread(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
for(i=0;i
{
if(strcmp(air1[i].flytime,flytime1)==0)
{
system("cls");
printf("您所查询的航班信息为\n\n\n");
printf("*****************************************************************************\n");
printf("航班号\t起始地\t目的地\t起飞时间\t剩余票数\t最大载客数\t票价\n\n");
printf("%s\t%s\t%s\t%s\t\t%d\t\t%d\t\t%d\n",air1[i].planenum,air1[i].start,air1[i].destination,air1[i].flytime,air1[i].tickets,air1[i].people,air1[i].price);
printf("*****************************************************************************\n\n");
printf("按任意键返回上级菜单\n");
getch();
flag=1;
break;
}
}
if(flag==0)
{
printf("对不起,您的输入有误,按任意键回到上级菜单\n"); getch();
system("cls");
menu1();
}
p1=air1;
fp1=fopen("planes.txt","w");
fwrite(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
system("cls");
menu1();
}
void book(int *k,BOOK *q,TICKETS *m) //订票模块 {
system("cls");
char planenum1[7];
int i;
int flag=0;
BOOK *p2=&q[*k];
TICKETS *p3=&m[*k];
q[50].ticketnum=51;
FILE *fp1,*fp2,*fp3;
PLANES air1[10];
PLANES *p1=air1;
fp1=fopen("planes.txt","r");
fread(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
printf("\t*******************************************************************\n");
printf("\t航班号\t起始地\t目的地\t起飞时间\t剩余票数\t最大载客数\n");
for(i=0;i
{
printf("\t%s\t%s\t%s\t%s\t\t%d\t\t%d\n",air1[i].planenum,air1[i].start,air1[i].destination,air1[i].flytime,air1[i].tickets,air1[i].people); }
printf("\t*******************************************************************\n");
printf("请输入您要乘坐的飞机的航班号\n");
scanf("%s",planenum1);
for(i=0;i
{
if(strcmp(air1[i].planenum,planenum1)==0)
{
flag=1;
if(air1[i].tickets==0)
{
printf("对不起,机票已售完\n");
printf("按任意键返回上级菜单\n");
p1=air1;
fp1=fopen("planes.txt","w");
fwrite(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
getch();
system("cls");
menu();
break;
}
else
{
printf("请输入您的姓名\n"); //输入订票时需要的旅客信息
scanf("%s",q[*k].name);
printf("请输入您的性别\n");
scanf("%s",q[*k].sex);
printf("请输入您的身份证号\n");
scanf("%s",q[*k].ID);
printf("购票成功!\n");
printf("机票编号为:%d\n",q[*k].ticketnum);
printf("按任意键返回上级菜单\n");
strcpy(m[*k].start,air1[i].start); //将信息记录到机票信息结构中
strcpy(m[*k].destination,air1[i].destination);
strcpy(m[*k].flytime,air1[i].flytime);
strcpy(m[*k].planenum,air1[i].planenum);
strcpy(m[*k].name,q[*k].name);
strcpy(m[*k].sex,q[*k].sex);
m[*k].ticketnum=q[*k].ticketnum;
fp3=fopen("tickets.txt","a"); //将机票信息储存到文件"tickets.txt" 中
fwrite(p3,sizeof(TICKETS),1,fp3);
fclose(fp3);
fp2=fopen("book.txt","a"); //将旅客信息储存到文件"book.txt" 中
fwrite(p2,sizeof(BOOK),1,fp2);
fclose(fp2);
*k=*k+1;
q[*k].ticketnum=q[*k-1].ticketnum+1;
air1[i].tickets=air1[i].tickets-1;
p1=air1;
fp1=fopen("planes.txt","w");
fwrite(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
getch();
system("cls");
menu();
break;
}
}
}
if(flag==0)
{
printf("对不起,您所输入的航班号有误\n");
printf("按任意键返回上级菜单\n");
p1=air1;
fp1=fopen("planes.txt","w");
fwrite(p1,sizeof(PLANES),10,fp1);
rewind(fp1);
fclose(fp1);
getch();
system("cls");
menu();
}
}
void search2(int *n,TICKETS *w) //机票信息查询模块 {
system("cls");
int ticketnum1;
printf("请输入机票编号\n");
scanf("%d",&ticketnum1);
int i;
int flag=0;
FILE *fp;
TICKETS *p=w;
fp=fopen("tickets.txt","r");
fread(p,sizeof(TICKETS),*n,fp);
rewind(fp);
fclose(fp);
for(i=0;i
{
if(w[i].ticketnum==ticketnum1)
{
flag=1;
system("cls");
printf("您所查询的机票信息为:\n\n\n");
printf("***********************************************************************\n");
printf("机票编号\t航班号\t起始地\t目的地\t起飞时间\t姓名\t性别\n\n");
printf("%d\t\t%s\t%s\t%s\t%s\t\t%s\t%s\n",w[i].ticketnum,w[i].planenum,w[i].start,w[i].destination,w[i].flytime,w[i].name,w[i].sex);
printf("***********************************************************************\n\n");
printf("按任意键返回上级菜单\n");
p=w;
fp=fopen("tickets.txt","w");
fwrite(p,sizeof(TICKETS),*n,fp);
rewind(fp);
fclose(fp);
getch();
system("cls");
menu();
break;
}
}
if(flag==0)
{
printf("对不起,该机票编号不存在,请按任意键返回\n"); p=w;
fp=fopen("tickets.txt","w");
fwrite(p,sizeof(TICKETS),*n,fp);
rewind(fp);
fclose(fp);
getch();
system("cls");
menu();
}
}
void refund(int *a,BOOK *b,TICKETS *c) //退票模块
{
system("cls");
int i,k,g;
int flag=0;
PLANES f[10];
PLANES *r=f;
FILE *fp1,*fp2,*fp3;
TICKETS *d=c;
BOOK *e=b;
int ticketnum2;
printf("请输入您要退购的机票的编号:\n");
scanf("%d",&ticketnum2);
for(i=0;i
{
if(c[i].ticketnum==ticketnum2)
{
flag=1;
printf("退票成功!\n");
printf("按任意键返回上级菜单\n");
fp1=fopen("tickets.txt","r");
fread(d,sizeof(TICKETS),*a,fp1);
rewind(fp1);
fclose(fp1);
d=c;
fp2=fopen("book.txt","r");
fread(e,sizeof(BOOK),*a,fp2);
rewind(fp2);
fclose(fp2);
e=b;
fp3=fopen("planes.txt","r");
fread(r,sizeof(PLANES),10,fp3);
rewind(fp3);
fclose(fp3);
for(g=0;g
{
if(strcmp(f[g].planenum,c[i].planenum)==0)
{
f[g].tickets=f[g].tickets+1; //将对应航班的剩余机票数加1
break;
}
}
r=f;
fp3=fopen("planes.txt","w");
fwrite(r,sizeof(PLANES),10,fp3);
rewind(fp3);
fclose(fp3);
for(k=i+1;k
{
c[i].ticketnum=c[k].ticketnum;
strcpy(c[i].planenum,c[k].planenum);
strcpy(c[i].start,c[k].start);
strcpy(c[i].destination,c[k].destination);
strcpy(c[i].flytime,c[k].flytime);
strcpy(c[i].name,c[k].name);
strcpy(c[i].sex,c[k].sex);
strcpy(b[i].name,b[k].name);
strcpy(b[i].sex,b[k].sex);
strcpy(b[i].ID,b[k].ID);
}
b[i].ticketnum=b[k].ticketnum; } fp1=fopen("tickets.txt","w"); fwrite(d,sizeof(TICKETS),*a-1,fp1); rewind(fp1); fclose(fp1); fp2=fopen("book.txt","w"); fwrite(e,sizeof(BOOK),*a-1,fp2); rewind(fp2); fclose(fp2); *a=*a-1; getch(); system("cls"); menu(); break; } } if(flag==0) { printf("对不起,该编号不存在,请按任意键返回\n"); getch(); system("cls"); menu(); }
参考文献
【1】 《大学计算机基础》,人民邮电出版社,兰碧顺等编,2009年。
【2】 《标准C 语言程序设计及应用》,华中科技大学出版社,周纯
杰等编,
2005年。