c语言期末作业——火车订票系统
发布时间
阅读量:
阅读量
c语言的期末作业
主要考查对指针链表数据结构的使用
模块化程序设计
上代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct train
{
char num[10];//列车号
char city[10];//目的城市
char takeoffTime[10];//发车时间
char receiveTime[10];//到达时间
int price;
int bookNum;//票数
}train;
typedef struct man
{
char num[10];//ID
char name[10];//姓名
int bookNum;//所需票数
}man;
typedef struct node//火车的节点
{
train data;
struct node *next;
}node,*Link;
typedef struct pnode//创建用户链表的节点
{
man data;
struct pnode *next;
}bookMannode,* bookManLink;
void InsertTrain(Link linkhead)//录入火车信息
{
node *p,*q;
q=linkhead;
while(q->next!=NULL)
{
q = q -> next;
}
p = (node *)malloc(sizeof(node));
if(!p)
{
printf("\t\t\t\t 录入未成功");
return;
}
printf("\t\t\t\t 请输入列车号:");scanf("%s",p->data.num );
printf("\t\t\t\t 请输入目的城市:");scanf("%s",p->data.city );
printf("\t\t\t\t 请输入发车时间:");scanf("%s",p->data.takeoffTime );
printf("\t\t\t\t 请输入到达时间:");scanf("%s",p->data.receiveTime );
printf("\t\t\t\t 请输入票价:");scanf("%d",&p->data.price);
while(p->data.price<0) //判断列车票是否符合常理
{
printf("\t\t\t\t 列车票价钱有误\n");
printf("\t\t\t\t 请重新输入:");
scanf("%d",&p->data.price);
}
printf("\t\t\t\t 请输入票数:");scanf("%d",&p->data.bookNum );
while(p->data.bookNum <=0) //判断列车票是否符合常理
{
printf("\t\t\t\t 列车票票数有误\n");
printf("\t\t\t\t 请重新输入:");
scanf("%d",&p->data.bookNum );
}
p->next=NULL;
q->next =p;
q=p;
printf("\t\t\t\t 录入成功!!\n\n");
}
void QueryTrain(Link linkhead)//查询车票
{
int cho;
printf("\t\t\t\t 请选择查询方式:\n");
printf("\t\t\t\t 1.按车次查询!!\n");
printf("\t\t\t\t 2.按到达的目的地查询!!\n");
printf("\t\t\t\t 请选择:");
scanf("%d",&cho);
if(cho==1)
{
node *p;
char searh[30];
p = linkhead -> next;
int count = 0;
printf("\t\t\t\t 请输入您需要查找的列车信息的车次:") ;
scanf("%s",&searh);
printf("\n\t\t\t\t \t******-----查询结果-----******\n");
printf("\t\t\t\t 列车号 目的地 发车时间 到达时间 票价(元) 票数(张)\n");
while(p)
{
if(strcmp(p->data.num ,searh)==0)
{
printf("\t\t\t\t %s %s %s %s %d %d\n",p->data.num,p->data.city ,p->data.takeoffTime ,p->data.receiveTime ,p->data.price ,p->data.bookNum );
count++;
}
if(p->next==NULL)
break;
else
p = p -> next;
}
if(!p||count==0)
printf("\t\t\t\t 未找到该列车号的信息!\n");
}
else if(cho==2)
{
node *p;
char searh[30];
p = linkhead -> next;
int count = 0;
printf("\t\t\t\t 请输入您需要查找的列车信息的目的地:") ;
scanf("%s",&searh);
printf("\n\t\t\t\t \t******-----查询结果-----******\n");
printf("\t\t\t\t 列车号 目的地 发车时间 到达时间 票价(元) 票数(张)\n");
while(p)
{
if(strcmp(p->data.city ,searh)==0)
{
printf("\t\t\t\t %s %s %s %s %d %d\n",p->data.num,p->data.city ,p->data.takeoffTime ,p->data.receiveTime ,p->data.price ,p->data.bookNum );
count++;
}
if(p->next==NULL)
break;
else
p = p -> next;
}
if(!p||count==0)
printf("\t\t\t\t 未找到该列车号的信息!\n");
}
else
{
printf("\t\t\t\t 请输入正确指令!\n\n");
}
}
void BookbookNum(Link l,bookManLink k)//订票
{
node *p;
bookMannode *r;
bookMannode *q;
int n;
p = l;
char tnum[20];//需要预定的车号
printf("\t\t\t\t 请输入您需要预订的列车号: ");
scanf("%s",tnum);
while(p!=NULL&&strcmp(p->data.num,tnum)!=0)
{
p = p->next;
}
if(p==NULL)
{
printf("\t\t\t\t 暂无相关车票可预订!!n");
}
else
{
if(p->data.bookNum <=0)
{
printf("\t\t\t\t 该列车车票已经售空!!\n");
}
else
{
while(1)
{
q = k;
while(q->next!=NULL)
{
q = q -> next;
}
r = (bookMannode *)malloc(sizeof(bookMannode));
printf("\n\t\t\t\t 请输入你的个人信息\n");
printf("\t\t\t\t 请输入您的姓名:");
scanf("%s",&r->data.name);
printf("\t\t\t\t 请输入您的身份证号码:");
scanf("%s",&r->data.num );
int need;
printf("\t\t\t\t 请输入您的所需票数:");
scanf("%d",&r->data.bookNum );
p->data.bookNum = p->data.bookNum-(r->data.bookNum );
printf("\t\t\t\t 订票成功!!\n");
r->next=NULL;
q->next=r;
q = r;
break;
}
}
}
}
void UpdateInfo(Link linkhead)//车次更新
{
printf("\t\t\t\t 请输入需要更新的车次!!\n");
printf("\t\t\t\t ");
node *p;
char searh[30];
p = linkhead -> next;
int count = 0;
printf("\t\t\t\t 请输入您需要查找的列车信息的列车号:\n") ;
printf("\t\t\t\t ") ;
scanf("%s",&searh);
printf("\n\t\t\t\t \t******-----查询结果-----******\n");
printf("\t\t\t\t 列车号 目的地 发车时间 到达时间 票价(元) 票数(张)\n");
while(p)
{
if(strcmp(p->data.num ,searh)==0)
{
printf("\t\t\t\t %s %s %s %s %d %d\n",p->data.num,p->data.city ,p->data.takeoffTime ,p->data.receiveTime ,p->data.price ,p->data.bookNum );
printf("\t\t\t\t 请更新列车号:");scanf("%s",p->data.num );
printf("\t\t\t\t 请更新城市:");scanf("%s",p->data.city );
printf("\t\t\t\t 请更新发车时间:");scanf("%s",p->data.takeoffTime );
printf("\t\t\t\t 请更新到达时间:");scanf("%s",p->data.receiveTime );
printf("\t\t\t\t 请更新票价:");scanf("%d",&p->data.price);
while(p->data.price<0) //判断列车票是否符合常理
{
printf("\t\t\t\t 列车票价钱有误\n");
printf("\t\t\t\t 请重新输入:");
scanf("%d",&p->data.price);
}
printf("\t\t\t\t 请更新票数:");scanf("%d",&p->data.bookNum );
while(p->data.bookNum <=0) //判断列车票是否符合常理
{
printf("\t\t\t\t 列车票票数有误\n");
printf("\t\t\t\t 请重新输入:");
scanf("%d",&p->data.bookNum );}
count++;
printf("\t\t\t\t 车次已经更新!!\n");
}
if(p->next==NULL)
break;
else
p = p -> next;
}
if(!p||count==0)
printf("\t\t\t\t 未找到该列车号的信息!\n");
}
void AdcvicedTrain(Link linkhead)//系统推荐车次
{
printf("\t\t\t\t 您想到达的目的地是?\n");
node *p;
char searh[30];
p = linkhead -> next;
int count = 0;
printf("\t\t\t\t ");
scanf("%s",&searh);
printf("\n\t\t\t\t \t******-----系统推荐-----******\n");
printf("\t\t\t\t 列车号 目的地 发车时间 到达时间 票价(元) 票数(张)\n");
while(p)
{
if(strcmp(p->data.city ,searh)==0)
{
printf("\t\t\t\t %s %s %s %s %d %d\n",p->data.num,p->data.city ,p->data.takeoffTime ,p->data.receiveTime ,p->data.price ,p->data.bookNum );
count++;
}
if(p->next==NULL)
break;
else
p = p -> next;
}
if(!p||count==0)
printf("\t\t\t\t 系统暂无推荐\n");
}
void SaveTrain(Link l) //保存列车信息
{
node *p;
p=l->next ;
FILE*fp;
fp=fopen("I:\ train.txt","w+");
fprintf(fp,"\t\t\t\t 列车号 目的地 发车时间 到达时间 票价(元) 票数(张)\n");
while(p!=NULL)
{
fprintf(fp,"\t\t\t\t %s %s %s %s %d %d\n",p->data.num,p->data.city ,p->data.takeoffTime ,p->data.receiveTime ,p->data.price ,p->data.bookNum );
p=p->next ;
}
fclose(fp);
}
void SaveMan(bookManLink k)//保存用户信息
{
bookMannode *p;
p=k->next ;
FILE*fp;
fp=fopen("I:\ man.txt","w+");
fprintf(fp,"\t\t\t\t 姓名 身份证号 需求票数 \n");
while(p!=NULL)
{
fprintf(fp,"\t\t\t\t %s %s %d\n",p->data.name ,p->data.num ,p->data.bookNum );
p=p->next ;
}
fclose(fp);
}
void Save(Link l,bookManLink k)
{
SaveTrain(l);
SaveMan(k);
printf("\t\t\t\t 保存成功!!\n\n");
}
void Menu()
{
printf("\n\n\n");
printf("\t\t\t\t****************************************\n");
printf("\t\t\t\t*************火车订票系统***************\n");
printf("\t\t\t\t========================================\n");
printf("\t\t\t\t* 1.添加车次信息 *\n");
printf("\t\t\t\t* 2.车次信息查询 *\n");
printf("\t\t\t\t* 3.订票 *\n");
printf("\t\t\t\t* 4.更新车次信息 *\n");
printf("\t\t\t\t* 5.系统推荐车次 *\n");
printf("\t\t\t\t* 6.保存信息 *\n");
printf("\t\t\t\t* 7.退出系统 *\n");
printf("\t\t\t\t========================================\n");
printf("\t\t\t\t****************************************\n");
printf("\t\t\t\t 请选择(1-7):");
}
int main()
{
Link l;
bookManLink b;
l=(node *)malloc(sizeof(node));
b=(bookMannode *)malloc(sizeof(bookMannode));
l->next =NULL;b->next =NULL;
Menu();
int order;
while(scanf("%d",&order)!=EOF)
{
if(order<1||order>7)
{
printf("\t\t\t\t 请输入(1-7)以内的数!!:");
continue;
}
if(order ==7)
{
printf("\t\t\t\t 成功退出系统!!\n ");
break;
}
switch(order)
{
case 1:InsertTrain(l);break;
case 2:QueryTrain(l);break;
case 3:BookbookNum(l,b);break;
case 4:UpdateInfo(l);break;
case 5:AdcvicedTrain(l);break;
case 6:Save(l,b);break;
}
printf("\t\t\t\t 请选择(1-7):");
}
return 0;
}
代码解释
全部评论 (0)
还没有任何评论哟~
