帮忙看看可以吗!
问题描述:实现航班信息的管理和顾客订票功能,分管理员和顾客两种角色
2条回答 默认 最新
- 技术专家团-小桥流水 2022-02-15 08:26关注
区分好每个角色的功能,登陆的时候让用户选择登陆的角色,根据角色显示不同的功能。
写了一个代码,供参考。#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> /*************************************************************************/ /* 登陆分管理员和用户 */ /* 管理员功能: */ /* 1.管理航班信息(如增加、删除、修改航班信息) */ /* 2.查看订票信息(如查看所有航班的售票情况、查询某次航班信息)*/ /* 用户功能: */ /* 1.查看所有航班信息(根据航班号、出发地、目的地等) */ /* 2.订票 */ /* 3.退票 */ /*************************************************************************/ //机票实际上应够由航班号、日期来共同确定其唯一性,这里为了简便,不再做具体处理 //定义日期结构体 struct Date { int year; int month; int day; }; //定义时间 struct StTime { int hour; int mint; int sec; }; //定义购票信息结构体 struct StTickInfo { char id[16]; //订单号(根据时间生成,或者随机生成,这里这个这个字段可以没有,实际系统中肯定是要有的) Date date; //订票日期 char hangban[16];//航班号,通过航班号,可以查询航班信息 char guest[20]; //订票人名 char guId[20]; //订票人身份证号 char phone[12]; //订票人电话 }; //航班信息 struct StHangbanInfo { char hangban[16];//航班号 char name[16]; //航空公司名称 char src[16]; //出发地 char dst[16]; //目的地 Date date; //航班日期 StTime tm; //起飞时间 int nmbZw; //座位数量 int nmbUse; //已售票数 int price; //票价 }; //定义全局变量,管理航班和订票信息 struct StHangbanInfo g_allHb[100]; //保存当前所有航班信息 int g_nmbHb=0; //实际航班数量 struct StTickInfo g_allTicks[200]; //保存当前所有的订单信息 int g_nmbTicks=0; //当前系统中实际购票数量 //根据航班号查询航班信息 struct StHangbanInfo searchById(char* id) { int i; struct StHangbanInfo stnull; memset(&stnull.hangban,0,16); for (i=0;i<g_nmbHb;i++) { if(strcmp(g_allHb[i].hangban,id)==0) return g_allHb[i]; } printf("未找到航班信息\n"); return stnull; } //根据时间生成订单编号 void getId(char buf[]) { time_t t; struct tm * lt; time (&t);//获取时间戳 lt = localtime (&t);//转为时间结构 //sprintf不安全,可以更换为sprintf_s sprintf(buf,"%d%02d/%02d%02d%02d%02d",lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);//输出结果 } //获取当前时间 struct Date getCurrentDate() { Date oo; time_t t; struct tm * lt; time (&t);//获取时间戳 lt = localtime (&t);//转为时间结构 //sprintf不安全,可以更换为sprintf_s //sprintf(buf,"%d%02d/%02d%02d%02d%02d",lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);//输出结果 oo.year = lt->tm_year+1900; oo.month = lt->tm_mon; oo.day = lt->tm_mday; return oo; } //显示航班信息标题 void showHbTitle() { printf("航班号 航空公司 起始地 目的地 起飞日期及时间 价格 座位数 剩余票数\n"); } //显示单条航班信息 void showSingleHbInfo(struct StHangbanInfo st) { printf("%s %s %s %s %d-%02d-%02d %02d:%02d %d %d %d\n",st.hangban,st.name,st.src,st.dst, st.date.year,st.date.month,st.date.day,st.tm.hour,st.tm.mint,st.price,st.nmbZw,st.nmbZw-st.nmbUse); } //查询航班-管理员和用户通用 void search() { int opt,i; char ch; char id[16]={0}; char start[16]={0},end[16]={0}; struct StHangbanInfo hb; int nmb=0; system("cls"); if(g_nmbHb==0) { printf("目前暂无航班信息,请先添加航班\n"); system("pause"); return; } while (1) { system("cls"); printf("1.根据航班号查询\n"); printf("2.根据出发地、目的地查询\n"); while(1) { scanf("%d",&opt); if(opt ==1 || opt ==2) break; } fflush(stdin); //清空输入缓存 switch(opt) { case 1: printf("请输入航班号:"); scanf("%s",id); hb = searchById(id); if(strlen(hb.hangban) > 0) { showHbTitle(); showSingleHbInfo(hb); } break; case 2: printf("请输入起始地、目的地:"); scanf("%s %s",start,end); showHbTitle(); for (i=0;i<g_nmbHb;i++) { if(strcmp(g_allHb[i].src,start)==0 && strcmp(g_allHb[i].dst,end)==0) showSingleHbInfo(g_allHb[i]); } break; } printf("是否继续查询(Y/N)?"); fflush(stdin); ch = getchar(); if(ch=='N' || ch=='n') break; } } //----------------管理员功能------------------// //新增航班 void addHangban() { struct StHangbanInfo st; system("cls"); fflush(stdin); printf("请输入航班号:"); scanf("%s",st.hangban); printf("请输入航班公司名称:"); scanf("%s",st.name); printf("请输入起始地:"); scanf("%s",st.src); printf("请输入目的地:"); scanf("%s",st.dst); printf("请输入起飞日期(YYYY-M-D):"); scanf("%d-%d-%d",&st.date.year,&st.date.month,&st.date.day); printf("请输入起飞时间(H:M):"); scanf("%d:%d",&st.tm.hour,&st.tm.mint); printf("请输入票价:"); //这里不再区分头等舱和经济舱 scanf("%d",&st.price); printf("请输入座位数量:"); scanf("%d",&st.nmbZw); st.nmbUse = 0; g_allHb[g_nmbHb++] = st; //保存数据 printf("添加航班成功\n"); system("pause"); } //从订单信息中删除某航班的所有订票信息 void delSpecHb(char* id) { int i,j; for (i=0;i<g_nmbTicks;i++) { if(strcmp(g_allTicks[i].hangban,id)==0) { for(j=i;j<g_nmbTicks-1;j++) { g_allTicks[j] = g_allTicks[j-1]; } g_nmbTicks--; i--; //i回退一下,for循环i++后,仍指向该删除元素的位置,并开始判断 } } } //删除航班(航班也需要从订票信息中删除) void delHb() { int i; char id[16]={0}; fflush(stdin); system("cls"); printf("请输入要删除的航班号:"); scanf("%s",id); for (i=0;i<g_nmbHb;i++) { if (strcmp(id,g_allHb[i].hangban)==0) { //从订票信息中删除该航班的所有订票信息(退费、短信通知等功能这里就不写了) delSpecHb(g_allHb[i].hangban); printf("删除成功\n"); g_nmbHb--; system("pause"); return ; } } printf("未找到该航班号\n"); system("pause"); } //管理员功能入口 void deal_manager() { int opt; while(1) { system("cls"); printf("1.查询航班\n"); printf("2.添加航班\n"); printf("3.删除航班\n"); printf("4.退出\n"); printf("请选择:"); scanf("%d",&opt); switch(opt) { case 1: search(); break; case 2: addHangban(); break; case 3: delHb(); break; case 4: return; } } } //----------------客户功能------------------// //购票 void gouPiao() { struct StTickInfo tk; int i,flag=0; system("cls"); fflush(stdin); printf("请输入航班号:"); while(1) { scanf("%s",tk.hangban); //这里最好对航班进行处理,比如查看航班是否存在,票是否已经售完 for (i=0;i<g_nmbHb;i++) { if (strcmp(g_allHb[i].hangban,tk.hangban)==0 ) { if( g_allHb[i].nmbZw-g_allHb[i].nmbUse == 0) flag = 1; break; } } if(i==g_nmbHb) { printf("未找到该航班,请重新输入航班号:"); }else { if(flag==1) printf("该航班机票已售罄,请选择其他航班:\n"); else { g_allHb[i].nmbUse+=1; //将该航班的已售票数+1 break; } } } printf("请输入订票人姓名"); scanf("%s",tk.guest); printf("请输入订票人身份证号:"); scanf("%s",tk.guId); printf("请输入订票人手机号:"); scanf("%s",tk.phone); //生成订单号 getId(tk.id); //填充购票时间 tk.date = getCurrentDate(); //保存 g_allTicks[g_nmbTicks++] = tk; printf("购票成功\n"); system("pause"); } //退票(通过身份证退票,限定一人只能买一张票) void tuiPiao() { char buf[16]; int i,j; fflush(stdin); printf("请输入退票人的身份证号:"); scanf("%s",buf); for (i=0;i<g_nmbTicks;i++) { if(strcmp(g_allTicks[i].guId,buf)==0) { //修改该航班的已售票数 for (j=0;j<g_nmbHb;j++) { if(strcmp(g_allHb[j].hangban,g_allTicks[i].hangban)==0) { g_allHb[j].nmbUse-=1; break; } } //删除该订票信息 for (j=i;j<g_nmbTicks-1;j++) { g_allTicks[j] = g_allTicks[j+1]; } g_nmbTicks--; printf("退票成功\n"); break; } } if(i==g_nmbTicks) printf("没有此人的购票信息\n"); system("pause"); } //客户功能入口 void deal_customer() { int opt; while(1) { system("cls"); printf("1.查询航班\n"); printf("2.购票\n"); printf("3.退票\n"); printf("4.退出\n"); printf("请选择:"); scanf("%d",&opt); switch(opt) { case 1: search(); break; case 2: gouPiao(); break; case 3: tuiPiao(); break; case 4: return; } } } int main(void) { int opt; while(1) { system("cls"); printf("----------订票管理系统-----------------|\n"); printf("| 1.管理员登陆 |\n"); printf("| 2.客户登陆 |\n"); printf("| 9.退出系统 |\n"); printf("---------------------------------------|\n"); printf("请选择:"); scanf("%d",&opt); switch(opt) { case 1: deal_manager(); break; case 2: deal_customer(); break; case 9: return 0; } } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 请问各位,如何在Jetson nano主控板的Ubuntu系统中安装PyQt5
- ¥15 MAC安装佳能LBP2900驱动的网盘提取码
- ¥400 微信停车小程序谁懂的来
- ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
- ¥15 安装ubantu过程中第一个vfat 文件挂载失败
- ¥20 GZ::CTF如何兼容一些靶机?
- ¥15 etcd集群部署问题
- ¥20 谁可以帮我一下问一下各位
- ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
- ¥150 求 《小魔指》街机游戏机整合模拟软件