一个简单的火车票售票管理系统.docx
- 文档编号:24181003
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:16
- 大小:16.92KB
一个简单的火车票售票管理系统.docx
《一个简单的火车票售票管理系统.docx》由会员分享,可在线阅读,更多相关《一个简单的火车票售票管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
一个简单的火车票售票管理系统
()
#include
#include
#defineMAX100
#defineN50
typedefstructtime//时间类型{intx,y,z;//分别对应年,月,日
}TIME;
intid;//购票人证件号
TIMEdate;//购票日期
}CNODE;
typedefstructtnode//车次信息类型{chardata;//车次编号
structtnode*lchild,*rchild;
CNODE*head;
}TNODE;
voidcreate();//按车次建立二叉排序树
voidinsert(int);//增加新的车次(二叉排序树的插入)
voiddel();//取消车次(二叉排序树节点删除)
voidinorder(TNODE*);//中序遍历车次二叉排序树(仅显示车次信息)voidinorder_all(TNODE*);//中序遍历车次二叉排序树(显示车次及售票信息)voidpreorder(TNODE*);//先序遍历车次二叉排序树(仅显示车次信息)TNODE*search();//按车次编号搜索
CNODE*insert_c(CNODE*);//插入新的售票信息(单张)
CNODE*insert_c_more(CNODE*);//插入新的售票信息(批量)CNODE*del_c(CNODE*,CNODE*);//退票处理(删除售票信息)CNODE*search_c(CNODE*,int);//按票号查询
voidsearch_c_id(CNODE*,int);//按购票人证件号搜索(限定某车次)voidsearch_c_id_all(TNODE*,int);//按购票人证件号搜索(所有车次)voidsearch_date(CNODE*,TIME);//按购票日期搜索(限定某车次)voidsearch_date_all(TNODE*,TIME);//按购票日期搜索(所有车次)voidprint_c(CNODE*);//输出售票纪录(单张)
voidprint_c_all(CNODE*);//输出售票纪录(批量)
TNODE*root=NULL;
voidmain(){inti,func,no,ok;
TNODE*t;
CNODE*c;
TIMEd;
printf("\n\n\n");
for(i=0;i<15;i++)printf("=");
printf("列车售票信息管理系统");
for(i=0;i<15;i++)printf("=");
printf("\n");
printf("\t
1.车次信息管理\n");
printf("\t
2.售票记录管理\n");
printf("\t
3.售票记录查询\n");
printf("\t
4.售票记录一览\n");
printf("\t
5.退出系统\n");
for(i=0;i printf("\n请选择您所需要的功能: "); fflush(stdin); scanf("%d",&func); switch(func){ case1: printf("\n\n车次信息管理>>>>\n"); for(i=0;i printf("\n\t 1.增加新的车次"); printf("\n\t 2.取消车次"); printf("\n\t 3.返回上级菜单\n"); for(i=0;i printf("\n请选择您所需要的功能: "); fflush(stdin); scanf("%d",&func); switch(func){ case1: create(); printf("\n售票信息更新成功! \n\n"); break; case2: del();break; case3: main();break; default: printf("\n[错误]功能号输入有误! 请重新输入! ");}break; case2: printf("\n\n售票记录管理>>>>\n"); for(i=0;i printf("\n\t 1.增加新的售票记录"); printf("\n\t 2.退票"); printf("\n\t 3.返回上级菜单\n"); for(i=0;i printf("\n请选择您所需要的功能: "); fflush(stdin); scanf("%d",&func); switch(func){ case1: t=search(); if(t! =NULL)t->head=insert_c_more(t->head); break; case2: t=search(); printf("需要退票的票号: "); scanf("%d",&no); t->head=del_c(t->head,search_c(t->head,no)); break; case3: main();break; default: printf("\n[错误]功能号输入有误! 请重新输入! ");}break; case3: printf("\n\n售票记录查询>>>>\n"); for(i=0;i printf("\n\t 1.按票号搜索"); printf("\n\t 2.按购票者证件号搜索"); printf("\n\t 3.按购票日期搜索"); printf("\n\t 4.返回上级菜单\n"); for(i=0;i printf("\n请选择您所需要的功能: "); fflush(stdin); scanf("%d",&func); switch(func){ case1: t=search(); if(t! =NULL){ printf("\n请输入您所要查询的票号: "); scanf("%d",&no); c=search_c(t->head,no); if(c==NULL)printf("[错误]没有该票号的纪录! 该票还未售出或为废票! 自动返回上级菜单\n...");} break; case2: printf("\n请输入您所要查询的购票者证件号: "); scanf("%d",&no); search_c_id_all(root,no); printf("搜索完毕! 自动返回上级菜单\n..."); break; case3: do{ printf("\n请输入您所要查询的日期(格式: yy-mm-dd): "); scanf("%d-%d-%d",&d.x,&d.y,&d.z); if(d.y<13&&d.y>0){ if(d.y==1||d.y==3||d.y==5||d.y==7||d.y==8||d.y==10||d.y==12)if(d.z<32&&d.z>0)ok=1; elseif(d.z==2) if(d.z<30&&d.z>0)ok=1; else if(d.z<31&&d.z>0)ok=1;}elseok=0; if(! ok)printf("\n[错误]日期输入有误! 请重新输入! "); }while(! ok); printf("\n指定车次吗? (1->是,0->否): "); scanf("%d",&ok); if(ok)search_date(search()->head,d); elsesearch_date_all(root,d); break; case4: main();break; default: printf("\n[错误]功能号输入有误! 自动返回上级菜单\n...");}break;case4: printf("\n\n售票记录一览>>>>\n"); for(i=0;i printf("\n\t 1.仅浏览车次"); printf("\n\t 2.指定车次已售票记录"); printf("\n\t 3.所有车次已售票记录"); printf("\n\t 4.测试: 先序遍历车次"); printf("\n\t 5.返回上级菜单\n"); for(i=0;i printf("\n请选择您所需要的功能: "); fflush(stdin); scanf("%d",&func); switch(func){ case1: printf("\n+++仅浏览车次\n"); if(root==NULL)printf("[错误]无车次纪录! "); else{inorder(root);printf("\n");} break; case2: printf("\n+++指定车次已售票记录\n"); t=search(); if(t! =NULL){ print_c_all(t->head); printf("\n");}break; case3: printf("\n+++所有车次已售票记录\n"); if(root==NULL)printf("[错误]无车次纪录! "); else{inorder_all(root);printf("\n");} break; case4: printf("\n+++测试: 先序遍历车次\n"); if(root==NULL)printf("[错误]无车次纪录! "); else{preorder(root);printf("\n");} break; case5: main();break; default: printf("\n[错误]功能号输入有误! 自动返回上级菜单\n...");}break;case5: exit (0); default: printf("\n[错误]功能号输入有误! 请重新输入! ");}main();}void inorder_all(TNODE*ptr){if(ptr! =NULL){inorder_all(ptr->lchild); printf("%d: \n",ptr->data); print_c_all(ptr->head); printf("\n"); inorder_all(ptr->rchild);}} voidinorder(TNODE*ptr){if(ptr! =NULL){inorder(ptr->lchild); printf("%d\t",ptr->data); inorder(ptr->rchild);}} voidpreorder(TNODE*ptr){if(ptr! =NULL){printf("%d\t",ptr->data);preorder(ptr->lchild); preorder(ptr->rchild);}} voidprint_c(CNODE*tkt){ if(tkt! =NULL) printf("\t%d\t%d\t%d-%d-%d\n",tkt->no,tkt->id,tkt->date.x,tkt->date.y,tkt->date.z);}voidprint_c_all(CNODE*head){ inti=0,j=0; if(head==NULL){printf("\n记录为空! \n");return;} for(i=0;i printf("\nNO\t票号\t购票者证件号\t购票日期(年-月-日)\n"); for(i=0;i for(j=0;head! =NULL;j++){ printf("\n%d",j); print_c(head); head=head->next;}printf("\n"); for(i=0;i printf("\n总计%d条记录\n",j); for(i=0;i printf("\n");}voidcreate(){intn,i; intk[MAX]; printf("\n您所希望增加车次的数量: "); scanf("%d",&n); for(i=0;i printf("新增第%d列车次: ",i+1); scanf("%d",&k[i]);}for(i=0;i insert(k[i]);}voidinsert(intm){TNODE*p1,*p2; if(root==NULL){root=(TNODE*)malloc(sizeof(TNODE)); root->data=m; root->lchild=root->rchild=NULL; root->head=NULL;}else{p1=root; while(m! =p1->data){if((m =NULL))p1=p1->lchild;elseif((m>p1->data)&&(p1->rchild! =NULL))p1=p1->rchild; elseif((m *)malloc(sizeof(TNODE)); p2->data=m; p2->lchild=p2->rchild=NULL; p2->head=NULL; p1->lchild=p2; return;}elseif((m>p1->data)&&(p1->rchild==NULL)){p2=(TNODE *)malloc(sizeof(TNODE)); p2->data=m; p2->lchild=p2->rchild=NULL; p2->head=NULL; p1->rchild=p2; return;}} printf("\n[错误]未能成功增加车次%d,车次号%d已存在! ",m,m);}}TNODE*search(){ intkey; TNODE*p; p=root; printf("\n输入您所要查找的车次编号: "); scanf("%d",&key); while(p! =NULL&&p->data! =key){ if(key elseif(key>p->data){p=p->rchild;}}if(p==NULL)printf("\n该车次不存在! ");return(p);}voiddel(){ intkey; TNODE*p1,*p2,*p3,*temp; p1=p2=root; p3=temp=NULL; printf("\n请输入您想要取消的车次编号: "); scanf("%d",&key); while(p2! =NULL&&p2->data! =key){ if(key elseif(key>p2->data){p1=p2;p2=p1->rchild;}}if(p2==NULL){printf("\n[错误]该车次不存在! 返回上级菜单\n...");return;} elseif(p2->lchild==NULL&&p2->rchild==NULL){if(p1->lchild==p2) p1->lchild=NULL; if(p1->rchild==p2)p1->rchild=NULL; temp=p2; if(root==p2){temp=root;root=NULL;}}else{ if(p2->rchild==NULL){ temp=p2->lchild; p2->data=temp->data; p2->lchild=temp->lchild; p2->rchild=temp->rchild;}elseif(p2->lchild==NULL){ temp=p2->rchild; p2->data=temp->data; p2->lchild=temp->lchild; p2->rchild=temp->rchild;}else{ p3=p2; temp=p2->lchild; while(temp->rchild! =NULL){p3=temp;temp=temp->rchild;} p2->data=temp->data; if(p3==p2)p3->lchild=temp->lchild; elsep3->rchild=temp->lchild;}} free(temp); printf("车次%d已取消! \n\n",key);}CNODE*insert_c(CNODE*head){CNODE*k,*p; k=(CNODE*)malloc(sizeof(CNODE)); do{ printf("\n车票编号: "); scanf("%d",&k->no); p=search_c(head,k->no); if(p! =NULL)printf("\n[错误]该票已被购买! 请重新选择! \n"); }while(p! =NULL); printf("购票者证件号: "); scanf("%d",&k->id); printf("购票日期(格式: yy-mm-dd): "); scanf("%d-%d-%d",&k->date.x,&k->date.y,&k->date.z); k->next=head; head=k; return(head);}CNODE*insert_c_more(CNODE*head){ intn,i; printf("\n请输入批量新增售票记录数: "); fflush(stdin); scanf("%d",&n); for(i=0;i printf("\n售票记录更新成功! \n"); return(head);}CNODE*search_c(CNODE*head,intid){ CNODE*temp,*s; s=temp=head; while(temp! =NULL&&temp->id! =id){s=temp;temp=temp->next;} print_c(temp); if(temp! =NULL)return(s); elsereturnNULL;}voidsearch_c_id(CNODE*head,intid){ CNODE*s,*head_s; s=head_s=NULL; if(head==NULL)printf("无该证件号纪录! \n"); while(head! =NULL){ if(head->id==id){ s=(CNODE*)malloc(sizeof(CNODE)); s->no=head->no;s->id=head->id;s->date=head->date; s->next=head_s;head_s=s;}head=head->next;}print_c_all(head_s);printf("\n");}voidsearch_c_id_all(TNODE*ptr,intid){ if(ptr! =NULL){ search_c_id_all(ptr->lchild,id); printf("\n车次: %d\n",ptr->data); search_c_id(ptr->head,id); search_c_id_all(ptr->rchild,id);}} voidsearch_date(CNODE*head,TIMEt){ CNODE*s,*head_s; s=head_s=NULL; while(head! =NULL){ if(t.x==head->date.x) if(t.y==head->date.y) if(t.z==head->date.z){s=(CNODE*)malloc(sizeof(CNODE)); s->no=head->no;s->id=head->id;s->date=head->date; s->next=head_s;head_s=s;}head=head->next;}print_c_all(head_s);printf("\n");}voidsearch_date_all(TNODE*ptr,TIMEt){ if(ptr! =NULL){ search_date_all(ptr->lchild,t); printf("\n车次: %d\n",ptr->data); search_date(ptr->head,t); search_date_all(ptr->rchild,t);}} CNODE*del_c(CNODE*head,CNODE*p){ CNODE*temp; if(p==NULL)printf("[错误]该票未售出或为废票! 返回上级菜单\n...");elseif(p==head){head=NULL;free(p);} else{ temp=p->next; p->next=temp->next; free(temp);}return(head);}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一个 简单 火车票 售票 管理 系统