求助:前辈帮忙用C语言写个程序吧!

青尘 2011-06-19 11:33:05
飞机订票系统设计
本飞机共有80个坐位,分20排,每排4个位子。编号为A,B,C,D。如10D表示10排D座。A和D靠窗,19到20排为吸烟区。本系统可让乘客自己选座号和区域,直到乘客满意为止,无法满足的话,只能改乘另一个航班。定上票的乘客需给出姓名和身份证号,最后要打印出乘客清单。
各位帮帮忙好吗?
...全文
195 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vonvnie 2011-06-19
  • 打赏
  • 举报
回复
作业贴?
gz_qmc 2011-06-19
  • 打赏
  • 举报
回复
上面程序吸烟的只是最后一排
要变动时修改

Con2=((smoken==1)&&(j>=19))||(smoken==0);

j>=18就是最后两排
j>=17就是最后三排
gz_qmc 2011-06-19
  • 打赏
  • 举报
回复
经过本人调试,这个才是完整的正确的
调试环境: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");
}
gz_qmc 2011-06-19
  • 打赏
  • 举报
回复
这个简单
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");
}
bdmh 2011-06-19
  • 打赏
  • 举报
回复
就这么几个数,自己搞个随即取数,用户满意,就ok,不满意继续录入新的数字
zoopang 2011-06-19
  • 打赏
  • 举报
回复
作业还是要自己写好的……

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧