#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
typedef int status;
#define null 0;
typedef struct ticket
{
char trainnumber[10]; //车次
char startstation[10]; //始发站
char destination[10]; //终点站
int price; //票价
char startime[10]; //发站时间
char endtime[10]; //到站时间
}elemtype;
typedef struct lnode //定义结点及管理类型
{
elemtype data;
struct lnode *next;
}lnode,* linklist;
void init(linklist&L)//初始化链表
{
L=(linklist)malloc(sizeof(lnode));
L->next=null;
}
status createlist_L(linklist&L) //将车票的数据读入链表中
{
linklist p;
p=(linklist)malloc(sizeof(lnode));
printf("\n请输入该车票的车次:");
scanf("%s",p->data.trainnumber);
printf("\n请输入该车票的始发站:");
scanf("%s",p->data.startstation);
printf("\n请输入该车票的终点站:");
scanf("%s",p->data.destination);
printf("\n请输入该车票的票价:");
scanf("%d",&p->data.price);
printf("\n请输入该车票的发车时间:");
scanf("%s",&p->data.startime);
printf("\n请输入该车票的到站时间:");
scanf("%s",&p->data.endtime);
p->next=L->next;
L->next=p;
return 1;
}
status listdelete_L(linklist&L,int i) //删除票务信息
{
linklist p,q;
int j=0;
p=L;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
q=p->next;
p->next=q->next;
free(q);
return 1;
}
status listModify(linklist&L,int i) //修改票务信息
{
linklist p;
int j=0;
p=L;
while(p->next&&j<i)
{
p=p->next;
++j;
}
printf("请输入车次:");
scanf("%s",p->data.trainnumber);
printf("请输入始发站:");
scanf("%s",&p->data.startstation);
printf("请输入终点站:");
scanf("%s",&p->data.destination);
printf("请输入票价:");
scanf("%d",&p->data.price);
printf("请输入发车时间:");
scanf("%s",&p->data.startime);
printf("请输入到达时间:");
scanf("%s",&p->data.endtime);
return 1;
}
void listsearch_L(linklist&L,char *key) //按终点站查找
{
linklist p;
int j=0,i=1;
p=L->next;
printf("\n\t序号\t车次\t始发站\t终点站\t票价\t发站时间\t到站时间\n");
while(p)
{
if(!strcmp(p->data.destination,key))
printf("\n\t%ld\t%s\t%s\t%s\t%d\t%s\t\t%s\n",i,p->data.trainnumber,p->data.startstation,p->data.destination,p->data.price,p->data.startime,p->data.endtime);
++j;
i++;
p=p->next;
}
if(j==0) printf("抱歉,没有找到相关信息!");
}
void listsearch_L(linklist&L,int key1,int key2) //按票价查找
{
linklist p;
int j=0,i=1;
p=L->next;
printf("\n\t序号\t车次\t始发站\t终点站\t票价\t发站时间\t到站时间\n");
while(p)
{
if(p->data.price>=key1&&p->data.price<=key2)
printf("\n\t%ld\t%s\t%s\t%s\t%d\t%s\t\t%s\n",i,p->data.trainnumber,p->data.startstation,p->data.destination,p->data.price,p->data.startime,p->data.endtime);
++j;
i++;
p=p->next;
}
if(j==0)
printf("抱歉,没有找到相关信息!");
}
void listsearch1_L(linklist&L,char *key) //按车次查找
{
linklist p;
int j=0,i=1;
p=L->next;
printf("\n\t序号\t车次\t始发站\t终点站\t票价\t发站时间\t到站时间\n");
while(p)
{
if(!strcmp(p->data.trainnumber,key))
printf("\n\t%ld\t%s\t%s\t%s\t%d\t%s\t\t%s\n",i,p->data.trainnumber,p->data.startstation,p->data.destination,p->data.price,p->data.startime,p->data.endtime);
++j;
i++;
p=p->next;
}
if(j==0) printf("抱歉,没有找到相关信息!");
}
status dataout_L(linklist&L) //将现有的车票打印出来
{
linklist p;
int i=1;
p=L->next;
printf("\n\t序号\t车次\t始发站\t终点站\t票价\t发站时间\t到站时间\n");
while(p)
{
printf("\n\t%ld\t%s\t%s\t%s\t%d\t%s\t\t%s\n",i,p->data.trainnumber,p->data.startstation,p->data.destination,p->data.price,p->data.startime,p->data.endtime);
p=p->next;
i++;
}
return 1;
}
status listcountnum_l(linklist &L) //票数功能
{
linklist p;
int count=0;
p=L->next;
while(p)
{
count++;
p=p->next;
}
return count;
}
status listticketprice_l(linklist &L,int count) //按票价排序
{
int i,j;
i=count;
linklist p,t,h,s;
for(;i>=1;i--)
{
p=L->next;
t=L;
h=L;
if(i==1) continue;
if(p->data.price<p->next->data.price&&i==2) continue;
if(p->data.price>p->next->data.price&&i==2)
{
s=p->next;
L->next=s;
p->next=s->next;
s->next=p;
continue;
}
p=L->next;
if(p->data.price>p->next->data.price)
s=p;
else s=p->next;
p=p->next;
j=i-1;
while(p&&j>=1)
{
if(s->data.price<p->data.price)
s=p;
t=p;
p=p->next;
j--;
}
if(s==t) continue;
while(h->next)
{
if(h->next==s)
{
h->next=s->next;
s->next=t->next;
t->next=s;
break;
}
else h=h->next;
}
}
return 1;
}
void showMenu() //主菜单界面
{
printf("\n\n-------------===================主界面====================--------------");
printf("\n\n");
printf(" 火车票务管理系统 \n");
printf("\n");
printf(" 1 列车信息录入 \n");
printf("\n");
printf(" 2 列车信息删除 \n");
printf("\n");
printf(" 3 列车信息修改 \n");
printf("\n");
printf(" 4 列车信息输出 \n");
printf("\n");
printf(" 5 列车信息查询 \n");
printf("\n");
printf(" 6 列车票价排序 \n");
printf("-------------------------------------------------------------------------\n");
printf("\n请输入你的选择:");
}
void main()
{
linklist ticket;
char y,x[10],z[10];
int e1,e2,count,i;
init(ticket);
while(1){
a: showMenu();
scanf("%d",&y);
switch(y)
{
case 1:createlist_L(ticket);
break;
case 2:
dataout_L(ticket);
printf("\n请输入要删除的信息序号:");
scanf("%d",&i);
listdelete_L(ticket,i);
printf("\n已经成功删除!按回车键回到主菜单!");
fflush(stdin);
getchar();
break;
case 3:dataout_L(ticket);
printf("\n请输入要修改的信息序号:");
scanf("%d",&i);
listModify(ticket,i);
printf("\n已经修改删除!按回车键回到主菜单!");
fflush(stdin);
getchar();
break;
case 4:dataout_L(ticket);
fflush(stdin);
getchar();
break;
case 5:
printf("\n -------------查询子界面--------------\n");
printf(" 1按终点站查询\n");
printf(" 2按票价查询\n");
printf(" 3按车次查询\n");
printf(" 4返回主界面\n");
printf("\n请输入序号:");
scanf("%d",&y);
switch(y)
{
case 1:printf("请输入您要去的目的地:");
scanf("%s",&x);
listsearch_L(ticket,x);
break;
case 2:printf("\n请输入您的票价范围(如33 180)):");
scanf("%d %d",&e1,&e2);
listsearch_L(ticket,e1,e2);
break;
case 3:printf("\n请输入您要查询的车次:");
scanf("%s",&z);
listsearch1_L(ticket,z);
break;
case 4:printf("\n");
goto a;
break;
}
case 6:count=listcountnum_l(ticket);
listticketprice_l(ticket,count);
dataout_L(ticket);
fflush(stdin);
getchar();
break;
}
}
}
- 1
- 2
前往页