一个简单的火车票售票管理系统Word格式.docx
《一个简单的火车票售票管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《一个简单的火车票售票管理系统Word格式.docx(10页珍藏版)》请在冰点文库上搜索。
//按购票日期搜索(限定某车次)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;
printf(\n);
printf(\t
1.车次信息管理\n);
2.售票记录管理\n);
3/18
3.售票记录查询\n);
4.售票记录一览\n);
printf(\t5.退出系统\n);
N;
printf(\n请选择您所需要的功能:
);
fflush(stdin);
scanf(%d,&
func);
switch(func){case1:
printf(\n\n车次信息管理>
>
\n);
printf(\n\t1.增加新的车次);
printf(\n\t2.取消车次);
printf(\n\t
3.返回上级菜单\n);
4/18
create();
printf(\n售票信息更新成功!
\n\n);
break;
case2:
del();
break;
case3:
main();
default:
printf(\n[错误]功能号输入有误!
请重新输入!
);
}break;
case2:
printf(\n\n售票记录管理>
1.增加新的售票记录);
printf(\n\t2.退票);
5/18
t=search();
if(t!
=NULL)t->
head=insert_c_more(t->
head);
printf(需要退票的票号:
scanf(%d,&
no);
t->
head=del_c(t->
head,search_c(t->
head,no));
case3:
6/18
printf(\n[错误]功能号输入有误!
printf(\n\n售票记录查询>
printf(\n\t1.按票号搜索);
2.按购票者证件号搜索);
3.按购票日期搜索);
4.返回上级菜单\n);
if(t!
=NULL){
7/18
printf(\n请输入您所要查询的票号:
c=search_c(t->
head,no);
if(c==NULL)printf([错误]没有该票号的纪录!
该票还未售出或为废票!
自动返回上级菜单\n...);
}
printf(\n请输入您所要查询的购票者证件号:
search_c_id_all(root,no);
printf(搜索完毕!
do{
printf(\n请输入您所要查询的日期(格式:
yy-mm-dd):
scanf(%d-%d-%d,&
d.x,&
d.y,&
d.z);
if(d.y<
13&
&
d.y>
0){
8/18
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&
else
31&
}elseok=0;
if(!
ok)printf(\n[错误]日期输入有误!
}while(!
ok);
printf(\n指定车次吗?
(1->
是,0->
否):
if(ok)search_date(search()->
head,d);
elsesearch_date_all(root,d);
case4:
printf(\n\n售票记录一览>
printf(\n\t1.仅浏览车次);
9/18
2.指定车次已售票记录);
3.所有车次已售票记录);
printf(\n\t4.测试:
先序遍历车次);
5.返回上级菜单\n);
printf(\n+++仅浏览车次\n);
if(root==NULL)printf([错误]无车次纪录!
else{inorder(root);
printf(\n);
}break;
printf(\n+++指定车次已售票记录\n);
10/18
=NULL){print_c_all(t->
printf(\n+++所有车次已售票记录\n);
if(root==NULL)printf([错误]无车次纪录!
else{inorder_all(root);
case4:
printf(\n+++测试:
先序遍历车次\n);
else{preorder(root);
case5:
exit(0);
}main();
}void
11/18
inorder_all(TNODE*ptr){if(ptr!
=NULL){inorder_all(ptr->
lchild);
printf(%d:
\n,ptr->
data);
print_c_all(ptr->
inorder_all(ptr->
rchild);
}}
voidinorder(TNODE*ptr){if(ptr!
=NULL){inorder(ptr->
printf(%d\t,ptr->
inorder(ptr->
voidpreorder(TNODE*ptr){if(ptr!
=NULL){printf(%d\t,ptr->
preorder(ptr->
}}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记录为空!
return;
}for(i=0;
printf(\nNO\t票号\t购票者证件号\t购票日期(年-月-日)\n);
i++)printf(-);
for(j=0;
head!
=NULL;
j++){
12/18
printf(\n%d,j);
print_c(head);
head=head->
next;
}printf(\n);
printf(\n总计%d条记录\n,j);
}voidcreate(){intn,i;
intk[MAX];
printf(\n您所希望增加车次的数量:
n);
n;
i++){
printf(新增第%d列车次:
i+1);
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;
head=NULL;
}else{p1=root;
while(m!
=p1->
data){if((m<
p1->
data)&
(p1->
lchild!
=NULL))p1=p1->
lchild;
elseif((m>
rchild!
rchild;
13/18
elseif((m<
lchild==NULL)){p2=(TNODE*)malloc(sizeof(TNODE));
p2->
p2->
lchild=p2->
p1->
lchild=p2;
}elseif((m>
rchild==NULL)){p2=(TNODE*)malloc(sizeof(TNODE));
rchild=p2;
return;
printf(\n[错误]未能成功增加车次%d,车次号%d已存在!
m,m);
}}TNODE*search(){
intkey;
TNODE*p;
p=root;
printf(\n输入您所要查找的车次编号:
key);
while(p!
=NULL&
p->
data!
=key){
14/18
if(key<
data){p=p->
elseif(key>
}}if(p==NULL)printf(\n该车次不存在!
return(p);
}voiddel(){
TNODE*p1,*p2,*p3,*temp;
p1=p2=root;
p3=temp=NULL;
printf(\n请输入您想要取消的车次编号:
while(p2!
=key){if(key<
data){p1=p2;
p2=p2->
p2=p1->
}}if(p2==NULL){printf(\n[错误]该车次不存在!
返回上级菜单\n...);
elseif(p2->
lchild==NULL&
rchild==NULL){if(p1->
lchild==p2)p1->
lchild=NULL;
if(p1->
rchild==p2)p1->
temp=p2;
if(root==p2){temp=root;
root=NULL;
}}else{if(p2->
rchild==NULL){temp=p2->
data=temp->
data;
15/18
lchild=temp->
rchild=temp->
}elseif(p2->
lchild==NULL){temp=p2->
}else{p3=p2;
temp=p2->
while(temp->
=NULL){p3=temp;
temp=temp->
}p2->
if(p3==p2)p3->
elsep3->
}}free(temp);
printf(车次%d已取消!
\n\n,key);
}CNODE*insert_c(CNODE*head){CNODE*k,*p;
k=(CNODE*)malloc(sizeof(CNODE));
printf(\n车票编号:
k->
p=search_c(head,k->
if(p!
=NULL)printf(\n[错误]该票已被购买!
请重新选择!
16/18
}while(p!
=NULL);
printf(购票者证件号:
id);
printf(购票日期(格式:
date.x,&
date.y,&
k->
next=head;
head=k;
return(head);
}CNODE*insert_c_more(CNODE*head){intn,i;
printf(\n请输入批量新增售票记录数:
i++)head=insert_c(head);
printf(\n售票记录更新成功!
}CNODE*search_c(CNODE*head,intid){CNODE*temp,*s;
s=temp=head;
17/18
while(temp!
temp->
id!
=id){s=temp;
}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(无该证件号纪录!
while(head!
=NULL){if(head->
id==id){
s=(CNODE*)malloc(sizeof(CNODE));
s->
no=head->
no;
id=head->
id;
date=head->
date;
next=head_s;
head_s=s;
}head=head->
}print_c_all(head_s);
}voidsearch_c_id_all(TNODE*ptr,intid){
if(ptr!
search_c_id_all(ptr->
lchild,id);
printf(\n车次:
%d\n,ptr->
search_c_id(ptr->
head,id);
search_c_id_all(ptr->
rchild,id);
}}voidsearch_date(CNODE*head,TIMEt){CNODE*s,*head_s;
18/18
=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->
}voidsearch_date_all(TNODE*ptr,TIMEt){
search_date_all(ptr->
lchild,t);
search_date(ptr->
head,t);
search_date_all(ptr->
rchild,t);
CNODE*del_c(CNODE*head,CNODE*p){CNODE*temp;
if(p==NULL)printf([错误]该票未售出或为废票!
elseif(p==head){head=NULL;
free(p);
else{
temp=p->
p->
next=temp->
free(temp);
}return(head);