项目:用链表实现飞机订票系统

本文介绍了一个项目,通过链表数据结构实现了一个飞机订票系统。详细阐述了如何利用链表的特性来管理航班、座位和预订信息,实现高效的查找、预订和取消操作。通过该项目,读者可以深入理解链表在实际问题中的应用。
摘要由CSDN通过智能技术生成
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <string.h>
#include<time.h>
#define HEAD1 "******************************************************************\n"
#define HEAD2 "|航班号|出发地|目的地|    起飞时间   |     到达时间     |  价格   |    折扣     |  剩余票数   |\n"
#define HEAD3 "|------|------|------|---------------|------------------|---------|-------------|--------------|\n"


#define FORMAT  "%4s%-14s%-14s%-14s%-19s%-16f%-8s%6d\n"
#define DATA pst->stData.acFlight,pst->stData.acOrigin,pst->stData.acDest,pst->stData.acTakeOffTime,pst->stData.acReverveTime,pst->stData.fPrice,pst->stData.acDiscount,pst->stData.iNum
struct AirPlane
{
	char acFlight[10];//航班号
	char acOrigin[10];//出发地
	char acDest[10];//目的地
	char acTakeOffTime[10];//起飞时间
	char acReverveTime[10];//降落时间
	float fPrice;//票价
	char acDiscount[4];//折扣
	int iNum;//剩余票数
};
struct Man
{
	char acName[20];//姓名
	char acID[20];//身份证号
	char acSex[10];//性别
	int iBookNum;//购票数量
	char acBookFlight[10];//订购航班号
};

//定义机票信息节点的结构体
struct PlaneNode
{
	struct AirPlane stData;//数据域
	struct PlaneNode* pstNext;//指针域
};
struct ManNode
{
	struct Man stData;//数据域
	struct ManNode* pstNext;//指针域
};
int iSave = 0;//作为数据是否改动的标志
int Init(struct PlaneNode* pstPlaneNodeHead, struct ManNode* pstManNodeHead)//整个系统只读取一次
{
	//第一步:先加载飞机机票信息
	FILE* pfPlane;//定义飞机机票信息文件指针
	struct PlaneNode* pstPlaneNodeTemp, * pstPlaneNodeCur;
	pstPlaneNodeCur = pstPlaneNodeHead;
	pstPlaneNodeTemp = NULL;

	pfPlane = fopen("plane.txt", "ab+");//打开以进行读取和追加,如果文件不存在则创建
	if (pfPlane == NULL)
	{
		printf("cant'topen plane.txt!\n");
		return -1;
	}
	else
	{
		//把文件数据读入链表中
		while (!feof(pfPlane))//只要没有到文件末尾  就一直读取
		{
			pstPlaneNodeTemp = (struct PlaneNode*)malloc(sizeof(struct PlaneNode));
			if (fread(pstPlaneNodeTemp, sizeof(struct PlaneNode), 1, pfPlane) == 1)//将文件数据读取到链表中
			{
				pstPlaneNodeTemp->pstNext = NULL;//尾巴置为空
				pstPlaneNodeCur->pstNext = pstPlaneNodeTemp;//链起来
				pstPlaneNodeCur = pstPlaneNodeTemp;//pstPlaneNodeCur向后走一步
			}
		}
		free(pstPlaneNodeTemp);
		fclose(pfPlane);
	}
	//第二步:加载订购人的信息
	FILE* pfMan;
	struct ManNode* pstManNodeTemp, * pstManNodeCur;
	pstManNodeCur = pstManNodeHead;
	pstManNodeTemp = NULL;
	pfMan = fopen("man.txt", "ab+");//打开以进行读取和追加,如果文件不存在则创建
	if (pfMan == NULL)
	{
		printf("cant'topen man.txt!\n");
		return -1;
	}
	else
	{
		//将文件读取到链表中
		while (!feof(pfMan))//只要没有到文件末尾  就一直读取
		{
			pstManNodeTemp = (struct ManNode*)malloc(sizeof(struct ManNode));
			if (fread(pstManNodeTemp, sizeof(struct ManNode), 1, pfMan) == 1)//将文件数据读取到链表中
			{
				pstManNodeTemp->pstNext = NULL;//尾巴置为空
				pstManNodeCur->pstNext = pstManNodeTemp;//链起来
				pstManNodeCur = pstManNodeTemp;//pstManNodeCur向后走一步
			}
		}
		free(pstManNodeTemp);
		fclose(pfMan);
	}
	return 0;
}
void Menu()
{
	puts("*******************************************************");
	puts("*                欢迎进入机票信息系统                 *");
	puts("---------------------------------------------------  --");
	puts("*                  选择以下操作(0-9)                *");
	puts("* 1.添加机票                       2.查询机票         *");
	puts("* 3.预定机票                       4.修改机票         *");
	puts("* 5.显示机票                       6.推荐机票         *");
	puts("* 7.退订机票 
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值