电影票订票
#include #include #include #include #define seat 10 //影片结构 typedef struct nodeMovie { int number; char name[20]; int totalSeat; int freeSeat; struct nodeMovie *next; }ListNodeMovie,*LinkListMovie; //观众结构 typedef struct nodeViewer { char name[10]; int number; int setSeat; struct nodeViewer *next; }ListNodeViewer,*LinkListViewer; void main() { char a[20]; int n=4,select,selectError,s0Temp,flag=0,flag1=0; //初始化影片链表 LinkListMovie L; ListNodeMovie *p; L=(ListNodeMovie *)malloc(sizeof(ListNodeMovie)); p=L; //初始化观众链表 LinkListViewer L1; ListNodeViewer *p1,*p2; L1=(ListNodeViewer *)malloc(sizeof(ListNodeViewer)); p1=L1; ListNodeMovie *s1=(ListNodeMovie *)malloc(sizeof(ListNodeMovie)); ListNodeMovie *s2=(ListNodeMovie *)malloc(sizeof(ListNodeMovie)); ListNodeMovie *s3=(ListNodeMovie *)malloc(sizeof(ListNodeMovie)); ListNodeMovie *s=(ListNodeMovie *)malloc(sizeof(ListNodeMovie)); //初始化三部影片链表 s1->number=1; s1->freeSeat=seat; strcpy(s1->name,\"蝙蝠侠\"); s1->next=NULL; p->next=s1; p=p->next; s2->number=2; s2->freeSeat=seat; strcpy(s2->name,\"超人\"); s2->freeSeat=seat; s2->next=NULL; p->next=s2; p=p->next; s3->number=3; s3->freeSeat=seat; strcpy(s3->name,\"指环王\"); s3->freeSeat=seat; s3->next=NULL; p->next=s3; p=p->next; p->next=NULL; //输出初始影片链表 printf(\"目前已有影片:\\n\"); printf(\"放映厅 影片名 空座位数\\n\"); p=L; while(p->next!=NULL) { p=p->next; printf(\"%3d %13s %7d\\n\ } //输入新增影片,加至影片链表p printf(\"输入新增影片,以#结束:\\n\"); scanf(\"%s\ while(strcmp(a,\"#\")!=0) { ListNodeMovie *s=(ListNodeMovie *)malloc(sizeof(ListNodeMovie)); s->number=n; n++; s->freeSeat=seat; strcpy(s->name,a); s->next=NULL; p->next=s; p=p->next; scanf(\"%s\ } //输出初始影片链表 START: printf(\"目前已有影片:\\n\"); printf(\"放映厅 影片名 空座位数\\n\"); p=L; while(p->next!=NULL) { p=p->next; printf(\"%3d %13s %7d\\n\ } //程序主界面 printf(\"\\n\\n\"); printf(\" 电影院订票系统\\n\"); printf(\"------------------------------------\\n\"); printf(\" 订票---------1\\n\"); printf(\" 取消---------2\\n\"); printf(\" 查找---------3\\n\"); printf(\" 退出---------4\\n\"); printf(\"------------------------------------\\n\"); //输入选择选项 scanf(\"%d\ //订票功能(选项1) if(select==1) { ListNodeViewer *s0=(ListNodeViewer *)malloc(sizeof(ListNodeViewer)); printf(\"\\n请输入您所选电影的放映厅编号:\\n\"); scanf(\"%d\请输入您订购电影票的张数:\\n\"); scanf(\"%d\ //检查订购票数是否大于5 if(s0->setSeat>5) { printf(\"对不起,每人限购5张以下票\\n\"); printf(\"重输票数---------1\\n\"); printf(\"返回系统---------2\\n\"); scanf(\"%d\ if(selectError==1) goto REINPUT; else if(selectError==2) goto START; } //检查订购票数是否超出放映厅空座位数(3部初始影片) else if(s0->number==1) { //如果不超出则对应空座位数=空座位数-订购票数 s1->freeSeat=s1->freeSeat - s0->setSeat; if(s1->freeSeat<0) { //如果超出则把刚才减的再加上 s1->freeSeat=s1->freeSeat + s0->setSeat; printf(\"对不起,票数不够\\n\"); printf(\"重输票数---------1\\n\"); printf(\"返回系统---------2\\n\"); scanf(\"%d\ if(selectError==1) goto REINPUT; else if(selectError==2) goto START; } } else if(s0->number==2) { s2->freeSeat=s2->freeSeat - s0->setSeat; if(s2->freeSeat<0) { s2->freeSeat=s2->freeSeat + s0->setSeat; printf(\"对不起,票数不够\\n\"); printf(\"重输票数---------1\\n\"); printf(\"返回系统---------2\\n\"); scanf(\"%d\ if(selectError==1) goto REINPUT; else if(selectError==2) goto START; } } else if(s0->number==3) { s3->freeSeat=s3->freeSeat - s0->setSeat; if(s3->freeSeat<0) { s3->freeSeat=s3->freeSeat + s0->setSeat; printf(\"对不起,票数不够\\n\"); printf(\"重输票数---------1\\n\"); printf(\"返回系统---------2\\n\"); scanf(\"%d\ if(selectError==1) goto REINPUT; else if(selectError==2) goto START; } } else { //通过输入的观众链表中的放映厅编号定位影片链表(新增影片) p=L; s0Temp=s0->number; while(s0Temp>0) { p=p->next; s0Temp--; } p->freeSeat=p->freeSeat - s0->setSeat; if(p->freeSeat<0) { p->freeSeat=p->freeSeat + s0->setSeat; printf(\"对不起,票数不够\\n\"); printf(\"重输票数---------1\\n\"); printf(\"返回系统---------2\\n\"); scanf(\"%d\ if(selectError==1) goto REINPUT; else if(selectError==2) goto START; } } //没有错误,订票成功 printf(\"请输入您的名字:\\n\"); scanf(\"%s\ //创建观众链表p1 s0->next=NULL; p1->next=s0; p1=p1->next; printf(\"恭喜您,%s,您成功的在第%d放映厅订购了%d张票 \\n\ goto START; } //取消功能(选项2) else if(select==2) { printf(\"请输入您的姓名:\\n\"); scanf(\"%s\ p1=L1; //如果姓名在观众链表中查找不到且链表未结束,则移至下一结点 while(strcmp(a,p1->name)!=0&&p1->next!=NULL) { p2=p1; p1=p1->next; } //查找到姓名 if(strcmp(a,p1->name)==0) { //如果查找的姓名是头结点,则头结点链至下一结点 if(p1==L1) L1=p1->next; //不是头结点 else p2->next=p1->next; //退票成功,标记flag flag=1; printf(\"恭喜您%s,成功的在第%d放映厅退票%d张 \\n\ //定位影片链表并将退票数加到对应放映厅空座位数 p=L; s0Temp=p1->number; while(s0Temp>0) { p=p->next; s0Temp--; } p->freeSeat=p->freeSeat + p1->setSeat; } //根据标记flag判断是否退票成功 if(flag!=1) printf(\"查无此人~\\n\"); goto START; } //查找功能(选项3) else if(select==3) { printf(\"请输入您要查找的影片名称:\\n\"); scanf(\"%s\ p=L; //根据输入影片名输出对应影片信息 while(p!=NULL) { if(strcmp(a,p->name)==0) { printf(\"影片%s在第%d放映厅,有%d个空座位 \\n\ flag1=1; } p=p->next; } //根据标记flag判断是否退票成功 if(flag1!=1) printf(\"没有这部电影~\\n\"); goto START; } //退出功能(选项4) else { printf(\"欢迎下次再来~\\n\"); exit(0); } } 因篇幅问题不能全部显示,请点此查看更多更全内容