求助:前辈帮忙用C语言写个程序吧!
飞机订票系统设计
本飞机共有80个坐位,分20排,每排4个位子。编号为A,B,C,D。如10D表示10排D座。A和D靠窗,19到20排为吸烟区。本系统可让乘客自己选座号和区域,直到乘客满意为止,无法满足的话,只能改乘另一个航班。定上票的乘客需给出姓名和身份证号,最后要打印出乘客清单。
各位帮帮忙好吗?
[解决办法]
作业贴?
[解决办法]
作业还是要自己写好的……
[解决办法]
就这么几个数,自己搞个随即取数,用户满意,就ok,不满意继续录入新的数字
[解决办法]
这个简单
typedef struct XXX{ char k; /*0表示无人,1表示有人*/ char Name[30]; char Code[20];}SB;SB Set[20][4];void Select(); /*选座位*/void ShowList(); /*显示清单*/void Menu(); /*菜单*/int YNSelect(char *info,int cls);/*yes-No选择*/void ShowNull(int window,int smoken); /*显示满足条件位置清单*/ void main(){ char key=0; int Run=1; memset(Set,0,80*sizeof(SB)); while(Run) { Menu(); key=getchar(); switch(key) { case '1':Select();break; case '2':ShowList();break; case '3':Run=0;break; } }}int YNSelect(char *info,int cls){ char key; while(1) { if(cls) system("cls"); printf("\n%s Y/y - 要 N/n - 不要\n",info); key=getchar(); if(key=='Y'||key=='y') return 1; if(key=='N'||key=='n') return 0; }}void ShowNull(int window,int smoken){ int i,j; system("cls") printf("符合你条件的座位有:\n") for(j=0;j<20;j++) for(i=0;i<4;i++) { Con1=((window==1)&&(i==0||i==3))||(window==0); Con2=((smoken==1)&&(j>=19))||(smoken==0); Con3=(Set[j][i].k==0); if(Con1&&Con2&&Con3) printf("\n %d%c : 无人可选 ",j,'A'+i); }}void Select(){ char isWin=0; char isSmk=0; char isOK=0; int Con1,Con2,con3; int i,j; int LOOP=1; while(LOOP) { isWin=YNSelect("要靠窗口边吗?",1); isSmk=YNSelect("要吸烟吗?",1); ShowNull(isWin,isSmk) isOK=YNSelect("有你觉得合适的吗?",0); if(isOK==0) LOOP=YNSelect("还要继续选吗?",0); else { printf("\n请输入座位排号:"); fscanf("%d",&j); printf("\n请输入座位号:"); fscanf("%d",&i); printf("\n请输入姓名:"); fscanf("%s",Set[j][i].Name); printf("\n请输身份证号:"); fscanf("%s",Set[j][i].Code); Set[j][i].k=1; LOOP=0; } }}void ShowList(){ int i,j; system("cls"); printf("\n整机位置分配状况清单:\n"); for(j=0;j<20;j++) for(i=0;i<4;i++) { printf("\n %d%c位置: ",j,'A'+i); if(Set[j][i].k==0) printf("没人") else printf("%s %s",Set[j][i].Name,Set[j][i].Code); } }void Menu(){ system("cls"); printf("\n 飞机票订票系统\n"); printf("\n 1 - 选择座位"); printf("\n 2 - 查看清单"); printf("\n 3 - 退出系统"); printf("\n\n 请选择\n");}
[解决办法]
经过本人调试,这个才是完整的正确的
调试环境:VC6.0控制台
#include "stdio.h"#include "stdlib.h"#include "string.h"#include "conio.h"typedef struct XXX{ char k; /* 0表示无人,1表示有人 */ char n; /* 0表示可选,1表示不复合条件 */ char Name[30]; char Code[20];}SB;SB Set[20][4];void Select(); /*选座位*/void ShowList(); /*显示位置详细清单*/void Menu(); /*菜单*/int YNSelect(char *info,int cls); /*yes-No选择*/void ShowNull(int window,int smoken); /*显示满足条件的位置索引*/void InputInfo(); /*输入乘客资料*/ void main(){ char key=0; int Run=1; memset(Set,0,80*sizeof(SB)); while(Run) { Menu(); key=getch(); switch(key) { case '1':Select();break; case '2':ShowList();break; case '3':Run=0;break; } }}int YNSelect(char *info,int cls){ char key; if(cls) system("cls"); else printf("\n"); printf("\n%s Y/y - 要 N/n - 不要",info); while(1) { key=getch(); if(key=='Y'||key=='y') return 1; if(key=='N'||key=='n') return 0; }}void ShowNull(int window,int smoken){ int i,j; int Con1,Con2,Con3; int count=0; system("cls"); printf("符合你条件的座位有:\n\n"); for(j=0;j<20;j++) for(i=0;i<4;i++) { Con1=((window==1)&&(i==0||i==3))||(window==0); Con2=((smoken==1)&&(j>=19))||(smoken==0); Con3=(Set[j][i].k==0); if(Con1&&Con2&&Con3) { Set[j][i].n=0; printf(" %2d%c ",j+1,'A'+i); } else { Set[j][i].n=1; printf(" --- "); } count++; if(count%4==0) printf("\n"); }}void Select(){ char isWin=0; char isSmk=0; char isOK=0; int LOOP=1; while(LOOP) { isWin=YNSelect("要靠窗口边吗?",1); isSmk=YNSelect("要吸烟吗?",1); ShowNull(isWin,isSmk); isOK=YNSelect("要选择位置吗?",0); if(isOK==0) LOOP=YNSelect("还要继续选吗?",0); else { InputInfo(); LOOP=0; } }}void InputInfo(){ char ch[10]={0}; int x,y; int i=0; printf("\n\n请输入座位编号:"); scanf("%s",ch); while(i<10) { if(ch[i]<'0'||ch[i]>'9') { x=ch[i]; ch[i]=0; break; } i++; } y=atoi(ch)-1; if(x>='A'&&x<='D') x-='A'; else if(x>='a'&&x<='d') x-='a'; else x=-1; if(y<0||y>19||x==-1) { printf("\n输入错误!!!按任意键返回"); getch(); return; } if(Set[y][x].n) { printf("\n不符和选择条件!按任意键返回"); getch(); } else { printf("\n请输入姓名:"); scanf("%s",Set[y][x].Name); printf("\n请输身份证号:"); scanf("%s",Set[y][x].Code); Set[y][x].k=1; printf("\n\n登记成功!\n\n%s同学,您的座位是:%2d%c.请准时登机",Set[y][x].Name,y+1,'A'+x); printf("\n\n按任意键返回"); getch(); }}void ShowList(){ int i,j; int count=0; system("cls"); printf("\n整机位置分配状况清单:\n"); for(j=0;j<20;j++) for(i=0;i<4;i++) { printf("\n %2d%c位置: ",j+1,'A'+i); if(Set[j][i].k==0) printf("没人"); else printf("%s %s",Set[j][i].Name,Set[j][i].Code); count++; if(count%11==0) { printf("\n\n按ESC键返回,其他键继续."); if(getch()==27) return; system("cls"); printf("\n整机位置分配状况清单:\n"); } } printf("\n\n信息全部结束,按ESC键返回"); while(getch()!=27);}void Menu(){ system("cls"); printf("\n 飞机票订票系统\n"); printf("\n 1 - 选择座位"); printf("\n 2 - 查看清单"); printf("\n 3 - 退出系统"); printf("\n\n 请选择\n");}