Advertisement

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)

还没有任何评论哟~