航空管理系统.docx
- 文档编号:9262402
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:22
- 大小:20.83KB
航空管理系统.docx
《航空管理系统.docx》由会员分享,可在线阅读,更多相关《航空管理系统.docx(22页珍藏版)》请在冰点文库上搜索。
航空管理系统
*说明:
本程序在编译与调试过程中,都是在visualc++6.0的编译环境下进行的,
在其它编译环境下如devc++下可能会出现内存错误,因此在运行本程序时,
最好在visualc++6.0的编译环境下进行*/
实验要求:
1.操作界面实用美观,提供简易菜单或图形菜单
2.学生基本信息包括:
学号(不重复),姓名,性别,年龄,累计次数,学分
3.能够进行学生基本信息的录入(前4项)、删除、修改、保存、查询(按学号及按姓名)、浏览
4.能够进行跑步签到并根据签到次数计算所得学分(累计20次可得到0.5学分)
5.能够统计学生累计跑步次数及学分总和等
6.能够按累计次数升序排序或降序排序
7.能够将学生基本信息存放在文件中,也可以从文件中读出职工基本信息
8.若用户输入信息不正确,给出相应的“错误”信息显示,然后重复刚才的操作
#include
#include
#include
#include
#include
#definelength15//length为当前数组的容量
intMAXSIZE=8;//max为当前数组的长度
charcode[15]={"luoqun"};//管理员登陆的初始密码
typedefstructacustomer//已订票客户信息链表
{charaname[10];//姓名
intanum;//订票量
structacustomer*next;
}qnode,*qptr;
typedefstructwqueue//候补队列
{qptrfront;//等候替补客户名单域的头指针
qptrrear;//等候替补客户名单域的属指针
}linkqueue;
typedefstructbcustomer//预订票客户信息
{charbname[10];//预订票客户姓名
intbnum;//预订票量
structbcustomer*next;
}linklist;
structairline//航线信息
{chararrival[15];//终点站名
intID;//航班号
intnum;//乘员定额
intrest;//余票量
linklist*order;//已预订票乘员名单域,指向乘员名单链表的头指针
linkqueuewait;//等候替补的客户名单域,分别指向排队等候名单队头队尾的指针
}lineinfo,air[length];
structairline*start;
/*主要功能函数声明*/
voidorder();
voidback();
voidwrong();
voidsearch();
voiddisplay(structairline);
voidprint();
voidaddline();
voiddelline();
voidsave();
voidread();
voidchangecode();
voidmima(charshurumima[15]);
voidmaindesk();
voidcustomer();
voidadminister();
structairline*find();
linklist*insertlink(linklist,int,charname[]);
/*各种操作界面选择函数,包括desktop()、cusdesk()、admdesk()、maindesk()、customer()、administer()*/
voiddesktop(){//显示桌面
getchar();getchar();system("cls");
printf("\n※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\n欢迎进入航空管理系统!
请选择要进行的操作\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("★E.退出系统★\n");
printf("★A.用户登录★\n");
printf("★B.管理员登录★\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
}//desktop
voidcusdesk(){//用户操作界面
getchar();getchar();system("cls");
printf("\n※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\n尊敬的客户您好!
欢迎在本公司办理业务!
\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("★0.退出本系统★\n");
printf("★1.办理订票业务★\n");
printf("★2.办理退票业务★\n");
printf("★3.查询航线信息★\n");
printf("★4.浏览航线信息★\n");
printf("★5.返回上级菜单★\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
}
voidadmdesk(){//管理员操作界面
getchar();getchar();system("cls");
printf("\n※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\n您好!
您现在以管理员登录,请谨慎操作!
\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("★0.退出本系统★\n");
printf("★1.增加航线★\n");
printf("★2.删除航线★\n");
printf("★3.写入文件★\n");
printf("★4.修改登陆密码★\n");
printf("★5.返回上级菜单★\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
}
voidmaindesk(){
charse;
intflag=0;
do{desktop();
se=getch();
printf("您的选择是%c",se);
getchar();getchar();
if(se=='A'||se=='a')customer();
elseif(se=='B'||se=='b')administer();
elseif(se=='E'||se=='e')exit
(1);
else{printf("选择错误,请重新选择!
");flag=1;}
}while(flag);
return;}
voidcustomer(){//客户操作选择
charch;
cusdesk();
printf("请在0-5中选择以回车键结束:
\n");
while(ch=getchar())
{switch(ch){
case'0':
exit
(1);
case'1':
order();
break;
case'2':
back();
break;
case'3':
search();
break;
case'4':
print();
break;
case'5':
maindesk();break;
default:
printf("选择错误!
重新选择!
");
}//switch
printf("按回车返回用户菜单!
");
cusdesk();
}//while
}//customer
voidadminister()//输入模块程序
{
charf[10];//密码
chara[10];//继续与否?
intfl=0;
while(!
fl)
{printf("请输入密码并以回车键结束:
");
mima(f);
if(strcmp(f,code)==0)//判断密码是否正确
{charch;
admdesk();
printf("请在0-5中选择以回车键结束:
");
while(ch=getchar())
{switch(ch){
case'0':
exit
(1);
case'1':
addline();
break;
case'2':
delline();
break;
case'3':
save();
break;
case'4':
changecode();
break;
case'5':
maindesk();
default:
printf("选择错误!
重新选择!
");
}//switch
printf("按回车返回管理员菜单!
");
admdesk();
}//while
}//验证密码的if
else
{
printf("输入密码错误!
请检查您的密码是否正确!
\n\n"
"是否继续输入密码?
输入yes继续,输入no结束\n\n");
scanf("%s",a);
if(strcmp(a,"no")==0)
{
fl=1;
break;
}//是否继续输入密码的if
}//验证密码的else
}//最外面的while
return;
}//administer
/*数据结构基本操作模块,包括find()、insertlink()、add()*/
structairline*find()//根据系统提出的航班号查询并以指针形式返回
{structairline*info;
intnumber;
inti=0;
info=start;
printf("请输入航班号:
");
scanf("%d",&number);
while(i { if(number==info->ID)returninfo; info++; i++; } printf("对不起,该航线末找到! \n"); returnNULL; } linklist*insertlink(linklist*head,intamount,charname[])//增加订票乘员名单域的客户信息 {linklist*p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist)); if(! new1){printf("\n内存溢出! ! \n");returnNULL;} strcpy(new1->bname,name); new1->bnum=amount; new1->next=NULL; if(head==NULL)//若原无订票客户信息 {head=new1;new1->next=NULL;} else head=new1; new1->next=p1; returnhead; } linkqueueadd(linkqueueq,charname[],intamount)//增加排队等候的客户名单域 {qptrnew1; new1=(qptr)malloc(sizeof(qnode)); strcpy(new1->aname,name); new1->anum=amount; new1->next=NULL; if(q.front==NULL)//若原排队等候客户名单域为空 q.front=new1; else q.rear->next=new1; q.rear=new1; returnq; } /*用户操作模块*/ voiddisplay(structairline*info)//打印每条航线的基本信息 { printf("%15s%15d%15d%15d\n",info->arrival,info->ID,info->num,info->rest); } voidprint()//打印全部航线信息 {structairline*info; inti=0; info=start; printf("\t终点站名\t航班号\t乘员定额\t余票量\n"); while(i { display(info); info++; i++; }//while }//print voidsearch()//查询航线,根据客户提出的终点站名输出航线信息 {structairline*info,*find(); charname[10]; inti=0; info=start; printf("请输入终点站名: "); scanf("%s",name); while(i { if(strcmp(name,info->arrival)==0)break; info++; i++; } if(i>=MAXSIZE) printf("对不起,该航线未找到! \n"); else { printf("\t终点站名\t航班号\t乘员定额\t余票量\n"); display(info); } } voidorder()//办理订票业务 {structairline*info; intf=0,len,amount=0,i; charname[10]; charsum[2]; info=start; if(! (info=find()))return;//根据客户提供的航班号进行查询,如为空,退出该模块 do{printf("请输入你订票所需要的数量: "); scanf("%s",sum); len=strlen(sum); for(i=0;i if(! (sum[i]>='0'&&sum[i]<='9')) {printf("输入格式错误,请重新输入! \n");f=1;} else{i=0; while(i amount=10*amount+sum[i++]-'0'; f=0;break;} }while(f); if(amount>info->num)//若客户订票额超过乘员定票总额,退出 {printf("\n对不起,已超过成员定额! "); return; } if(amount<=info->rest)//若客户订票额末超过余票量,订票成功并等记信息 { inti; printf("请输入您的姓名(订票客户): "); scanf("%s",name); info->order=insertlink(info->order,amount,name);//在订票乘员名单域中添加客户信息 for(i=1;i<=amount;i++)//依次输出该订票客户的座位号 printf("%s的座位号是: %d",name,info->num-info->rest+i); info->rest-=amount;//该航线的余票量应减掉该客户的订票量 printf("\n祝您乘坐愉快! "); } else//若满员或余票额少于订票额,询问客户是否需要进行排队等候 { charr; printf("已经没有更多的票,您需要排队等候吗? (Y/N)"); r=getch(); printf("%c",r); if(r=='Y'||r=='y') {printf("\n请输入您的姓名(排队订票客户): "); scanf("%s",name); info->wait=add(info->wait,name,amount);//在排队等候乘员名单域中添加客户信息 printf("注册成功! "); } elseprintf("\n欢迎您下次再次订购! "); } } voidback()//办理退票业务 {structairline*info; qnode*t,*back,*f,*r; linklist*p1,*p2,*head; charcusname[10]; if(! (info=find()))return;//调用查询函数,根据客户提供的航线进行搜索 head=info->order; p1=head; printf("请输入你的姓名(退票客户): "); scanf("%s",cusname); while(p1! =NULL)//根据客户的姓名查询 { if(strcmp(cusname,p1->bname)==0)break; p2=p1;p1=p1->next; }//while if(p1==NULL) {printf("对不起,你没有订过票! \n"); return; }//if else {//若信息查询成功,删除订票客户名单域中的信息 if(p1==head)head=p1->next; elsep2->next=p1->next; info->rest+=p1->bnum; printf("%s成功退票! \n",p1->bname); free(p1); }//else info->order=head;//重新将航线名单域指向订票单链表的头指针 f=(info->wait).front;//f指向排队等候名单队列的头结点 r=(info->wait).rear;//r指向排队等候名单队列的尾结点 t=f;//t为当前满点条件的排队候补名单域 while(t)//若有人排队候补,则为第一个人订票 { if(info->rest=info->wait.front->anum) {//若满足条件者为头结点 inti; info->wait.front=t->next; printf("%s订票成功! ",t->aname); for(i=0;i printf("\n%s的座位号是: %d\n",t->aname,(info->ID)-i); info->rest-=t->anum; info->order=insertlink(info->order,t->anum,t->aname);//插入到订票客户名单链表中 free(t); break; } back=t;t=t->next; if((info->rest)>=(t->anum)&&t! =NULL)//若满足条件者不为头结点 {inti; back->next=t->next; printf("%s订票成功! \n",t->aname); for(i=0;i printf("<%s>的座位号是: %d\n",t->aname,(info->rest)-i); info->rest-=t->anum; info->order=insertlink(info->order,t->anum,t->aname);//插入到订票客户名单链表中 free(t);break; } if(f==r)break; }//while } /*管理员操作模块*/ voidaddline(){//增加航线 intflag=0,i; chara[5]; printf("请依次输入要增加的航班信息: \n\n");//打印提示信息 printf("^^^^^^^^^^^^^^^^^^^^^^^^\n"); do {MAXSIZE++; printf("请输入航班号: \n"); scanf("%d",&air[MAXSIZE-1].ID);//读取航班号 for(i=0;i if(air[MAXSIZE-1].ID==air[i].ID) { printf("增加航线不成功,航班号重复! "); air[MAXSIZE-1]=air[length-1]; MAXSIZE--; gotoloop;} printf("请输入终点站: \n"); scanf("%s",air[MAXSIZE-1].arrival);//读取终点站 printf("请输入乘员定额: \n"); scanf("%d",&air[MAXSIZE-1].num);//读取机票数 air[MAXSIZE-1].rest=air[MAXSIZE-1].num; loop: printf("输入yes继续增加航线,输入no结束此操作: "); scanf("%s",a); if(strcmp(a,"no")==0||strcmp(a,"NO")==0) { print();//输出更新后的航班信息 flag=0; break; } elseif(strcmp(a,"yes")==0||strcmp(a,"YES")==0) flag=1; }while(flag); }//addline voiddelline(){//删除航线 intflag=0,i,idp; chara[5]; do{ printf("请输入要删除的航线的航班号: "); scanf("%d",&idp); for(i=0;i if(air[i].ID==idp) {air[i]=air[MAXSIZE-1]; MAXSIZE--; printf("航班号为%d的航线删除成功! ",idp); gotoloop;} elsecontinue; printf("您输入的航班号不存在,请重新选择操作! \n"); loop: printf("输入yes继续删除航线,输入no结束此操作: "); scanf("%s",a); if(strcmp(a,"no")==0||strcmp(a,"NO")==0) { print();//输出更新后的航班信息 f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航空 管理 系统