栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言课设——车票管理系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言课设——车票管理系统

这几天没学什么能拿得出手的东西,都是一些基础,就不在博客上发表了,不过这几天把C语言的课程设计弄了一下,一下是源代码。

#include
#include
#include
#include
#include
#include 

#define n 5

int len=0;

//乘客信息
struct passenge                     
{
    char name[10];                 //姓名
    int  num;                      //所需票量
}lg[n];                           //结构体变量名 

//车票信息
typedef struct train                      
{
    char start_stat[20];          //起始站
    char end_stat[20];            //终点站
    char go_time[16];             //出发时间 
    char go_data[16];             //出发日期
    char train_num[15];           //车次信息
    char all_time[16];            //旅途时间
    int  ticket_lea;               //余票数量
}Train;              //把结构体struct train 叫做 Train 

typedef Train Item;    //又把Train 叫做 Item,目的让链表更通用    链表里只有2 个东西 项目和指针  

struct node
{                        //node是一个节点   节点包括项目和指针 
	Item item;
	struct node *next;
};


//将信息保存到文件 
void save_inf(struct node *pHead)             //将链表中的信息保存到制定文件中
{                                         //头指针不能移动 
    struct node *pTemp;   //因为要一个节点移动 所以定义为pTemp移动 
    
	FILE *fp;
    fp=fopen("information.txt","at");    //打开文件 
    
	if(fp==NULL)
    {
        printf("打开文件失败,文件可能不存在!n");
        exit(1);
    }
                                                           //遍历输入 
    for(pTemp=pHead ; pTemp != NULL;pTemp=pTemp->next)      //节点先指向项目,项目里面再找成员 
        
		fprintf(fp,"%s %s %s %s %s %s %dn",pTemp->item.start_stat,pTemp->item.end_stat,
			pTemp->item.go_time,pTemp->item.go_data,pTemp->item.train_num,pTemp->item.all_time,pTemp->item.ticket_lea);
   
    fclose(fp);
}

//增加 
struct node *add(struct node *pHead)
{
	   struct node *pNew;
	   struct node *current; 
	  
	    pNew=(struct node *)malloc(sizeof(struct node));      //再次分配结点的内存空间
        
        pNew->next=pHead;    //新结点指向原来的首节点 
        pHead=pNew;          //头指针指向新结点
        
        
        //尾插法;
		
        
        printf("n请输入起始站:");
        scanf("%s",pNew->item.start_stat);
        printf("请输入终点站:");
        scanf("%s",pNew->item.end_stat);
        printf("请输入出发时间:");
        scanf("%s",pNew->item.go_time);
        printf("请输入出发日期:");
        scanf("%s",pNew->item.go_data);
        printf("请输入车次信息:");
        scanf("%s",pNew->item.train_num);
        printf("请输入旅途时间:");
        scanf( "%s",pNew->item.all_time);
        printf("请输入余票数量:");
        scanf("%d",&pNew->item.ticket_lea);
		
		current=pHead;
	
		while(current!=NULL){
			printf("%-10s",current->item.start_stat);
        	printf("%-10s",current->item.end_stat);
        	printf("%-12s",current->item.go_time);
        	printf("%-14s",current->item.go_data);
			printf("%-12s",current->item.train_num);
        	printf("%-13s",current->item.all_time);
        	printf("%-d",current->item.ticket_lea);
        	printf("n");
        	current=current->next;
		}
		 
        return pHead;       //返回头指针 
        
 } 
 

//输出显示模块
void output(struct node *pHead)
{
    struct node *pTemp;                 //循环所用的临时指针

	pTemp=pHead;                         //指针的到首结点的指针

    printf("t******车票信息如下******n");
    printf("起始站    终点站    出发时间    出发日期     车次信息     旅途时间    余票量n");

    while((pTemp!=NULL))
    {
        printf("%-10s",pTemp->item.start_stat);
        printf("%-10s",pTemp->item.end_stat);
        printf("%-12s",pTemp->item.go_time);
        printf("%-14s",pTemp->item.go_data);
		printf("%-12s",pTemp->item.train_num);
        printf("%-13s",pTemp->item.all_time);
        printf("%-d",pTemp->item.ticket_lea);
        printf("n");
        pTemp=pTemp->next;              //移动临时指针到下一个结点
    }

}

//查询车票信息
int inquire(struct node *pHead)
{
	int flag = 0;
    struct node *pTemp; 
    
    char inquire_start[20],inquire_end[20];       //查询选择的起始站和终点站
  
    printf("请输入要查询车票的起始站和终点站:");
    scanf("%s %s",inquire_start,inquire_end);
    
	pTemp=pHead;
    
    while(pTemp!=NULL)
    {
        if((strcmp(pTemp->item.start_stat,inquire_start)==0) && (strcmp(pTemp->item.end_stat,inquire_end)==0))
        {
        	flag = 1;
            printf("n车票信息结果如下:n");
            printf("起始站    终点站    出发时间    出发日期    车次    旅途时间    余票量n");
            printf("%-10s",pTemp->item.start_stat);
        	printf("%-10s",pTemp->item.end_stat);
        	printf("%-12s",pTemp->item.go_time);
        	printf("%-14s",pTemp->item.go_data);
			printf("%-12s",pTemp->item.train_num);
        	printf("%-13s",pTemp->item.all_time);
        	printf("%-d",pTemp->item.ticket_lea);       
		}
           pTemp=pTemp->next;
           continue;
	}
	
	if(flag == 0)
    {
    	printf("输入错误!n");
		inquire(pHead);
	}
	return 0;
	} 
	
//订票	
	int buy(struct node *pHead)
{
    struct node *pTemp; 
    char   choice_start[20],choice_end[20];       
    int    numbers;                                
    char   buy_name[10];                          
    char   wy;
    
    pTemp=pHead; 
    printf("请输入所购买车票的起始站、终点站和票数:");
    scanf("%s %s %d",choice_start,choice_end,&numbers);
  
    while(pTemp!=NULL)
    {
        if((strcmp(pTemp->item.start_stat,choice_start)==0)&&(strcmp(pTemp->item.end_stat,choice_end)==0))      
        {
            if(numbers<=pTemp->item.ticket_lea)       
            {
                printf("找到符合信息的车次:n");
                printf("起始站    终点站    出发时间    出发日期    车次    旅途时间    余票量n");
                printf("%-10s",pTemp->item.start_stat);
                printf("%-10s",pTemp->item.end_stat);
                printf("%-11s",pTemp->item.go_time);
                printf("%-12s",pTemp->item.go_data);
                printf("%-10s",pTemp->item.train_num);
                printf("%-13s",pTemp->item.all_time);
                printf("%-d",pTemp->item.ticket_lea);
				printf("n");
                printf("请您输入姓名:");
                scanf("%s",buy_name);
                
				printf("正在办理订票......n");
                printf("恭喜您办理成功!n");
                
				pTemp->item.ticket_lea=pTemp->item.ticket_lea - numbers;       
                
				strcpy(lg[len].name,buy_name);
                
				lg[len].num=numbers;
				len++;
				return 0;    
            }
            else 
            {
                printf("您所需要的票数超过余票数,请问是否继续办理(Y/y || N/n)?n");
                getchar();
                scanf("%c",&wy);
                
				if(wy == 'Y' || wy == 'y')
                    buy(pHead);
                else if(wy == 'N' || wy=='n' )
				{
					 printf("谢谢使用,按任意键返回!n");
					 getch();
					 return 0;
				}
            }
        }
		else
			pTemp=pTemp->next;
	}
	printf("n很遗憾,未找到您需要的车次,请重新订票!n");

	buy(pHead);
	return 0;
}

//退票
int back(struct node *pHead)
{
	 struct node *pTemp;
   	 int i;
	 char wy;                //判断yes or no 
     
	 char back_name[10];     //退票人姓名
     int back_num;           //退票数
	 char back_start[20];    //退票起始站
	 char back_end[20];      //退票终点站
     
	 printf("请输入要退票人姓名和退票数:");
     scanf("%s%d",back_name,&back_num);
	 printf("请输入退票的起始站和终点站:");
	 scanf("%s%s",back_start,back_end);
     pTemp=pHead;
	
	 while(pTemp!=NULL)
	 {
		 if((strcmp(pTemp->item.start_stat,back_start)==0)&&(strcmp(pTemp->item.end_stat,back_end)==0))      
		 {
			 for(i=0;iitem.ticket_lea=pTemp->item.ticket_lea + back_num;       //办理成功,该车次票数增加
					 return 0;
				 }
                 else
				 {
					 printf("未找到您定的票,请问您是否重输信息继续进行退票(Y/y || N/n):");
					 getchar();
						scanf("%c",&wy);
                     if(wy=='Y' || wy =='y')
						back(pHead);
					else if(wy=='N' || wy == 'n')
					{
						 printf("谢谢使用,按任意键返回!n");
						 getch();
						 return 0;
					}
				 }
			 }
		 }
		else
			pTemp=pTemp->next;
	 }
	printf("n很遗憾,未找到您要退票的车次,请重新退票!n");
	back(pHead);
	return 0;
}

//从文件中读取信息
struct node *read_inf() //从磁盘文件中读取信息并存入单链表 
{
	struct node *head, *r, *train;   //定义结构体指针变量  struct node是类型 
	                                 //head为头结点(头结点中有信息),r为尾节点, train为当前节点 
	FILE *fp;

	if((fp=fopen("information.txt","rt"))==NULL)
	{
		printf("读文件出错,按任意键退出");
		getch();
		exit(1); 
	}
	
	head=(struct node *)malloc(sizeof(struct node));   //初始化 
	head->next=NULL;
	
	fscanf(fp,"%s %s %s %s %s %s %d",head->item.start_stat,head->item.end_stat,
			head->item.go_time,head->item.go_data,head->item.train_num,head->item.all_time,&head->item.ticket_lea);
	
	r=head;  //r是尾节点 
	while(!feof(fp))     //文件末结束 
	{                        
		train=(struct node *)malloc(sizeof(struct node));        //建立链表 
		fscanf(fp,"%s %s %s %s %s %s %d",train->item.start_stat,train->item.end_stat,
			train->item.go_time,train->item.go_data,train->item.train_num,train->item.all_time,&train->item.ticket_lea);
		r->next=train;   //链表节点 
		r=train;
	}
	r->next=NULL;
	
	fclose(fp);
	printf("n文件中信息以正确读出,按任意键返回!");
	getch();   //清除缓冲区 
	system("cls");
	return head; 
}

//主界面
void meau()
{
    printf("n");
    printf("t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n");
    printf("t☆==============欢迎使用车票管理系统==============☆n");
    printf("t☆~~~~~~~~~~~~~~~1.存入车票信息~~~~~~~~~~~~~~~~~~~☆n");
    printf("t☆~~~~~~~~~~~~~~~2.显示车票信息~~~~~~~~~~~~~~~~~~~☆n");
    printf("t☆~~~~~~~~~~~~~~~3.查询车票信息~~~~~~~~~~~~~~~~~~~☆n");
    printf("t☆~~~~~~~~~~~~~~~4.增加车票信息~~~~~~~~~~~~~~~~~~~☆n");
    printf("t☆~~~~~~~~~~~~~~~5.统计 与 排序~~~~~~~~~~~~~~~~~~~☆n");
    printf("t☆~~~~~~~~~~~~~~~6. 订     票~~~~~~~~~~~~~~~~~~~~~☆n");
    printf("t☆~~~~~~~~~~~~~~~7. 退     票~~~~~~~~~~~~~~~~~~~~~☆n");
    printf("t☆~~~~~~~~~~~~~~~8.退出管理系统~~~~~~~~~~~~~~~~~~~☆n");
    printf("t☆================================================☆n");
    printf("t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n");
    printf("请选择编号(1-8)选择功能进行相应的操作:");
}

//链表长度,为了更好的排序 
int listlength(struct node *pHead)   //判断链表的长度 进而知道循环次数 
{
	struct node *current;
	int len=0;
	
	current=pHead;
	while(current!=NULL)
	{
		len++;                   //遍历一篇 len自增 表示最后链表的长度 
		current=current->next;
	} 
	return len;
}

//排统计序 
void Sort(struct node *pHead)
{
	int len;
	
	struct node *current;
	
	current=pHead;
	len=listlength(pHead);         //上面一个函数的功能判断链表的长度 
	printf("共有%d个信息n", len);
	while(len>1)
	{                       //冒泡排序 
		while(current->next != NULL)
		{
			if(strcmp(current->item.all_time, current->next->item.all_time)>0)   //比较时间 
			{	
				Item temp;  //定义一个交换变量 
				
				temp=current->item;
				current->item=current->next->item;
				current->next->item=temp;
				
			}
			current=current->next;
		}
		len--;
		current=pHead;   //每次从头开始遍历 
	}
	output(pHead);  //进去输出函数 
	return;
} 

//主函数
int main()
{
    system("color 4");
    printf("欢");sleep(0);
	printf("迎");sleep(1); 
	system("color 3");
	printf("使");sleep(0);
	printf("用");sleep(1);
	system("color 2");
	printf("车");sleep(0);
	printf("票");sleep(1);
	system("color 1");
	printf("管");sleep(0);
	printf("理");sleep(1); 
	system("color 6");
	printf("系");sleep(0);
	printf("统n");sleep(2);
	printf("tt");
	printf("n");	
	
	system("color 8"); 
	printf("ttt即将进入登陆注册页面请稍候.....");
	sleep(3);
	system("cls");
	
    system("color 3");
	
    int choice=8;
	struct node *pHead;                  //定义头结点
	
    //选择编号  
    while(choice != 10)
    {  
		meau();
		
		scanf("%d",&choice);

		switch(choice)
        {  
        case 1:system("cls"); pHead=read_inf();  break;         
        case 2:system("cls"); output(pHead);     break;                       
        case 3:system("cls"); inquire(pHead);    break;
        case 4:system("cls"); add(pHead);   save_inf(pHead);        break;
        case 5:system("cls"); Sort(pHead);       break;
        case 6:system("cls"); buy(pHead);        break;
        case 7:system("cls"); back(pHead);       break;
        case 8:exit(1);
        default:printf("请输入正确的编号!n");  break;
        }	
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968150.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号