1.课程论文题目
飞机订票管理系统
内容:
要求:
输入订票信息,提供订票、退票、修改和显示等功能。
系统功能模块如下:
(1)
建立飞机订票信息库;
(2)
菜单实现以下功能:
①定票功能;
②已定票信息查询功能;
③退票功能;
④显示功能。
⑤修改订票信息。
2.程序设计思路
(1)需求分析
系统要以菜单方式工作,因而根据题目要求,提供菜单实现功能选择,飞机订票信息采用文件保存,所以应提供文件的输入、输出等操作。在程序中需要浏览飞机订票的信息,应提供显示、查找、等操作;要实现订票的查询,就要提供查找功能(按订票编号查询和按始发站、终点站两种查询方式);要求实现飞机订票信息的删除、修改,则要提供文件记录的删除、修改功能。
(2)总体设计
有上面的需求分析,可以将这个系统的设计分为以下模块:输入航班信息,浏览航班信息,修改航班信息,查找航班信息,删除航班信息,订票信息,退票信息。
(3)数据信息
建立飞机订票的结构体,结构体成员包括:航班号,起始站,终点站,时间,机票数,机票单价。
int num;
char start[20];
char over[20];
char time[10];
int count;
char prince[20];
[if !supportLists](4) [endif]算法设计
[if !supportLists]1. [endif]输入模块:int input()来实现
[if !supportLists]2. [endif]打印模块:int print()来实现
[if !supportLists]3. [endif]保存模块:int save()来实现
[if !supportLists]4. [endif]读取模块:int read()来实现
[if !supportLists]5. [endif]查询模块:int search()来实现
[if !supportLists]6. [endif]删除模块:int shanchu()来实现
[if !supportLists]7. [endif]订票模块:int dingpiao()来实现
[if !supportLists]8. [endif]退票模块:int tuipiao()来实现
[if !supportLists]9. [endif]修改模块:int xiugai()来实现
程序代码:
#include
#include //包含字符串处理函数的头文件
#include
#define N 10000
struct air
{
int num;
char start[20];
char over[20];
char time[10];
int count;
char prince[20];
}s[N];
int i;
int m=0;
#define PRINT "%d %12s %12s %12s %12d %12s\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count,s[i].prince
int input();
int print();
int save();
int read();
int search();
int shanchu();
int dingpiao();
int tuipiao();
int xiugai();
int main()
{
int j;
printf(" ★---您好,欢迎进入飞机订票管理系统!---★\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
do
{
printf(" -------- ☆ 1.输入航班信息 ☆-------- \n\n"
" -------- ☆ 2.浏览航班信息 ☆-------- \n\n"
" -------- ☆ 3.修改航班信息 ☆-------- \n\n"
" -------- ☆ 4.查找航班信息 ☆-------- \n\n"
" -------- ☆ 5.删除航班信息 ☆-------- \n\n"
" -------- ☆ 6.订票信息 ☆-------- \n\n"
" -------- ☆ 7.退票信息 ☆-------- \n\n"
" -------- ☆ 0.退出 ☆-------- \n\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("请在0-7中选择以回车键结束:\n\n");
scanf("%d",&j);
switch(j)
{
case 1: input();
break;
case 2:print();
break;
case 3:xiugai();
break;
case 4:search();
break;
case 5:shanchu();
break;
case 6:dingpiao();
break;
case 7:tuipiao();
break;
case 0:;
break;
}
}
while(j!=0); //当j不等于0时继续执行循环体
printf("谢谢使用,再见!\n");
}
int input()
{
int y;
{
printf("请依次输入航班信息(机票数位0结束输入):\n\n"
"完成输入信息请键入w以回车键结束\n");
printf("--------------------------------------------------------------------------\n");
for(i=0;i { printf("请输入航班号:\n\n"); scanf("%d",&s[i].num); printf("请输入起始站:\n\n"); scanf("%s",&s[i].start); printf("请输入终点站:\n\n"); scanf("%s",&s[i].over); printf("请输入时间:\n\n"); scanf("%s",&s[i].time); printf("请输入机票数(机票数为0结束输入):\n\n",m); scanf("%d",&s[i].count); printf("请输入机票单价:\n\n"); scanf("%s",&s[i].prince); m++; printf("第%d个信息已经输完是否继续?按任意数字键继续,按 0结束",m); scanf("%d",&y); if(y==0) { save(); print(); break; } } } } int save() { FILE *fp,*fp1;//定义文件指针/FILE *fp; 变量类型声明。声明 fp 是 FILE型指针,用于指向 FILE类型 (文件结构)。 if((fp=fopen("yhp.chat","wb"))==NULL)//打开文件并判断是否出错 { printf("创建文件失败!\n\n"); getchar(); return 0; } if((fp1=fopen("yhpzuishuai.chat","wb"))==NULL)//打开文件并判断是否出错 { printf("创建文件失败!\n\n"); getchar(); return 0; } for(i=0;i if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件写入数据,并判断是否出错 printf("向文件输入数据失败!\n\n"); fprintf(fp1,"%d",m); fclose(fp); fclose(fp1);//关闭文件 } int read() { FILE *fp,*fp1; if((fp=fopen("yhp.chat","rb"))==NULL) { printf("出错,请检查文件是否存在,按任意键返回住菜单"); getchar(); } if((fp1=fopen("yhpzuishuai.chat","rb"))==NULL) { printf("创建文件失败!\n\n"); getchar(); return 0; } fscanf(fp1,"%d",&m); fclose(fp1); for(i=0;i { fread(&s[i],sizeof(air),1,fp);//从文件中读取信息 } fclose(fp); } int print()//打印 { char w[10]; read();//调用读取文件函数 printf("航班号 起始站 终点站 时间 机票数 单价\n"); for(i=0;i { printf(PRINT);//将需要的内容打印出来 } printf("请按w以回车键结束返回上层菜单:\n\n"); scanf("%s",w); } int search() { char name1[20]; char name2[20]; char ii[10]; int n,no; do { printf("请选择查找方式:\n\n"); printf("1.按航班号查找\n\n" "2.按终点站查找\n\n" "3.按航线查找\n\n" "0.返回\n\n"); printf("请在0-3中选择:\n\n" "按其他键以回车键结束返回主菜单:\n\n"); scanf("%d",&n);//读取查找方式 if(n==0) break; switch(n) { case 1: printf("请输入航班号:\n"); scanf("%d",&no); break; case 2: printf("请输入终点站名称:\n"); scanf("%s",name2); break; case 3: printf("请输入起始站名称:\n"); scanf("%s",name1); printf("请输入终点站名称:\n"); scanf("%s",name2); break; } read(); for(i=0;i { if(strcmp(s[i].start,name1)==0||strcmp(s[i].over,name2)==0)//按终点站起始站判断 //strcmp比较两个字符串 { printf("\n查找航班信息成功!\n"); printf("航班号 起始站 终点站 时间 机票数 单价\n"); printf(PRINT); break; } if(s[i].num==no)//按航班号判断 { printf("\n查找航班信息成功!\n"); printf("航班号 起始站 终点站 时间 机票数 单价\n"); printf(PRINT); break; } } no=0;//将航班号赋值为0 printf("没有您需要的信息或查找完毕:\n\n" "是否继续查找?请键入yes或no以回车键结束\n"); scanf("%s",ii); } while(strcmp(ii,"yes")==0); } int shanchu()//删除模块 { char name1[20]; char name2[20]; char ii[10]; int no,n; { do { printf("请选择删除方式以回车键结束:\n\n"); printf("1.按航班号删除\n\n" "2.按航线删除\n\n" "0.返回\n\n"); printf("请在0-2中选择以回车键结束:\n"); scanf("%d",&n); if(n==0) break; switch(n) { case 1: printf("请输入航班号:\n"); scanf("%d",&no); read(); break; case 2: printf("请输入起始站 名称:\n"); scanf("%s",name1); printf("请输入终点站名称:\n"); scanf("%s",name2); read(); break; } for(i=0;i { if(s[i].num==no||strcmp(s[i].start,name1)==0&&strcmp(s[i].over,name2)==0) { s[i]=s[m-1]; m--; } } printf("查找完毕或没有这个信息\n\n"); printf("是否继续删除\n"); printf("请键入yes或no以回车键结束\n"); scanf("%s",ii); //读取是否继续信息 save(); if(!strcmp(ii,"yes")) //判断是否继续删除 printf("请按任意键以回车键结束返回上层菜单:\n"); break; }while(n!=1&&n!=2&&n!=3&&n!=4&&n!=0); } } int dingpiao() { int n; char a[10]; do { search(); printf("请输入您要订的机票数以回车键结束:\n"); scanf("%d",&n); if(n<0) { printf("请输入有效的机票数!\n"); break; } if(s[i].count!=0&&s[i].count>=n) { s[i].count=s[i].count-n; save(); printf("订票成功!\n\n"); break; } if(s[i].count { printf("请输入有效的机票数:\n"); break; } printf("是否继续? 请输入yes或no以回车键结束:\n");//判断是否继续订票 scanf("%s",a); } while(!strcmp(a,"yes")); } int tuipiao() { int n; char a[10]; do { search(); printf("请输入您要退的机票数目:\n"); scanf("%d",&n);//所退票数 if(n<0) //判断票数是否有效 printf("请输入有效的机票数!\n"); s[i].count=s[i].count+n; save(); printf("退票成功!\n\n"); printf("是否继续? 请键入yes或no以回车键结束:\n\n");//是否继续退票 scanf("%s",a); }while(!strcmp(a,"yes")); getchar(); } int xiugai() { struct xiu //定义结构体 { int no; char name1[20]; char name2[20]; char time[20]; int count; char prince[20]; }x[0]; char j[10]; int n; { read(); do { printf( "请选择修改方式:\n\n" "*1,按航班号修改:\n\n" "*2,按航线修改: \n\n"); printf("请在1---2中修改以回车键结束:\n\n"); scanf("%d",&n); switch(n) { case 1:printf("请输入航班号:\n"); scanf("%d",&x[0].no); break; case 2:printf("请输入起始站:\n"); scanf("%s",x[0].name1); printf("请输入终点站:\n"); scanf("%s",x[0].name2); break; } for(i=0;i { if(strcmp(s[i].over,x[0].name1)==0&&strcmp(s[i].over,x[0].name2)==0) { printf("航班号 起始站 终点站 时间 机票数 单价\n"); printf(PRINT); break; } if(s[i].num==x[0].no) { printf("航班号 起始站 终点站 时间 机票数 单价\n"); printf(PRINT); break; } } x[0].no=0; //将结构体中的号为零 printf("请输入新航班号、起始站、终点站、时间(星期几)、机票数、单价:\n"); scanf("%d %s %s %s %d",&x[0].no,x[0].name1,x[0].name2,x[0].time,&x[0].count,&x[0].prince); s[i].num=x[0].no; strcpy(s[i].start,x[0].name1); strcpy(s[i].over,x[0].name2); strcpy(s[i].time,x[0].time); //strcpy字符串复制 s[i].count=x[0].count; save(); printf("是否继续?请键入yes或no以回车键结束:\n\n"); scanf("%s",j); }while(strcmp(j,"yes")==0); } }