33,027
社区成员




#include "stdio.h"
#include "stdlib.h"
using namespace System;
typedef int status;
/* 在目录下面建立3个文件夹airline.txt和booked.txt以及wait.txt分别是航班信息和已订票名单以及等待订票名单*/
/*由于时间的问题,我就不具体到全部了,就简单地做个大体的框架,剩下的自己研究吧*/
////////////////////////这里的航线信息文件的格式////////////////////////////
/*
4位英文字符+1个空格+1位数字+3个中文的飞行周日(比如:星期三)+1到3位数字+1到3位数字
*/
////////////////////////这里的已订票名单文件的格式////////////////////////////
/*
两位人名(比如:张三)+1到3位数字
*/
////////////////////////这里的等待订票名单文件的格式////////////////////////////
/*
两位人名(比如:张三)+1到3位数字
*/
/////////////////////问题//////////////////////////////////////////////
/*航线信息包括:终点站名、航班号、飞行周日(星期几)、乘员定额、剩余票量、 */
/*已订客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。 */
typedef struct ClientName{
char Name[7];
int Tickets;
ClientName *next;
}ClientName;
typedef struct AirElemType{
char AirNAME[5];
char AirNO;
char day[7];
int Craw;
int TotalTicket;
ClientName *booked;
ClientName *wait;
AirElemType *next;
}AirElemType;
status ReadAirMsg(char *data,int *nBytesRead) /*读文件*/
{
FILE *file=NULL;
int nBytestoRead=44;//读取文件数据的长度
file=fopen("airline.txt","r");//打开文件
if(file==NULL)
{
printf("文件不存在\n");
return 0;
}
//result=ReadFile(file,data,nBytestoRead,(LPDWORD)nBytesRead,NULL);
fread(data,nBytestoRead,1,file);//读取文件信息
*nBytesRead=nBytestoRead;
if(*nBytesRead==0)
{
printf("文件读取失败\n");
return 0;
}
fclose(file);
return 1;
}
status InitAirLine_list(AirElemType *lt) /* 从文件中读取航线信息*/
{
char buffer[10000];
int i=0,j=0;
int nBytesRead=0;
AirElemType *q=lt,*p=NULL;
if(!ReadAirMsg(buffer,&nBytesRead))
return 0;
if(nBytesRead==0)
{
printf("失败\n");
return 0;
}
while(i<nBytesRead)
{
p=(AirElemType*)malloc(sizeof(AirElemType));
p->next=NULL;
p->TotalTicket=0;
p->Craw=0;
while(buffer[i]!=' ' && i<nBytesRead)
{
p->AirNAME[j]=buffer[i];
j++;
i++;
}
i++;
p->AirNAME[4]='\0';
j=0;
while(buffer[i]!=' ' && i<nBytesRead)
{
p->AirNO=buffer[i];
j++;
i++;
}
i++;;
j=0;
while(buffer[i]!=' ' && i<nBytesRead)
{
p->day[j]=buffer[i];
j++;
i++;
}
p->day[6]='\0';
i++;
j=0;
while(buffer[i]!=' ' && i<nBytesRead)
{
j++;
i++;
}
while(j>0)
{
if(j==3)
{
p->Craw=p->Craw+((int)buffer[i-j]-48)*100;
j--;
}
else if(j==2)
{
p->Craw=p->Craw+((int)buffer[i-j]-48)*10;
j--;
}
else
{ p->Craw=p->Craw+((int)buffer[i-j]-48);
j--;
}
}
i++;
j=0;
while(buffer[i]!=' ' && i<nBytesRead)
{
j++;
i++;
}
while(j>0)
{
if(j==3)
{
p->TotalTicket=p->TotalTicket+((int)buffer[i-j]-48)*100;
j--;
}
else if(j==2)
{
p->TotalTicket=p->TotalTicket+((int)buffer[i-j]-48)*10;
j--;
}
else
{ p->TotalTicket=p->TotalTicket+((int)buffer[i-j]-48);
j--;
}
}
i+=2; //跳过回车和换行符
j=0;
p->booked=NULL;
p->wait=NULL;
q->next=p;
q=q->next;
}
return 1;
}
status Booked(AirElemType *lt) /*记录已订票人单,并建立链表*/
{
FILE *f=NULL;
char booked[10000];
ClientName *ct=NULL;
int result=-2,nBytesReaded=8/*这个是数据的长度,用8因为我这里只测试一行*/,i=0,j=0;
AirElemType *p=lt->next;
f=fopen("book.txt","r"); /*在不同的文件中存储已订票人名单*/
if(f==NULL)
{
printf("文件不存在\n");
return 0;
}
fread(booked,8,1,f); /*读取数据*/
while(i<nBytesReaded)
{
if(p==NULL)
{
printf("没有已订票信息\n");
return 0;
}
ct=(ClientName *)malloc(sizeof(ClientName));
ct->next=NULL;
ct->Tickets=0;
if(ct==NULL)
return 0;
while(booked[i]!=' ' && i<nBytesReaded) /*读取已订票名单字段*/
{
ct->Name[j]=booked[i];
i++;
j++;
}
i++;
ct->Name[j]='\0';
j=0;
while(booked[i]!=' ' && i<nBytesReaded) /*读取订票数量*/
{
j++;
i++;
}
while(j>0)
{
if(j==3)
{
ct->Tickets=ct->Tickets+((int)booked[i-j]-48)*100;
j--;
}
else if(j==2)
{
ct->Tickets=ct->Tickets+((int)booked[i-j]-48)*10;
j--;
}
else
{ ct->Tickets=ct->Tickets+((int)booked[i-j]-48);
j--;
}
}
i=i+2;
j=0;
ct->next=NULL;
p->booked=ct;
p=p->next;
}
fclose(f);
}
status WaitTicket(AirElemType *lt) //建立等待队列
{
FILE *f=NULL;
char wait[10000];
ClientName *ct=NULL;
int result=-2,nBytesReaded=8,i=0,j=0;
AirElemType *p=lt->next;
f=fopen("wait.txt","r"); /*在不同的文件中存储已订票人名单*/
if(f==NULL)
{
printf("文件不存在\n");
return 0;
}
fread(wait,8,1,f);
while(i<nBytesReaded)
{
if(p==NULL)
{
printf("没有等待信息\n");
return 0;
}
ct=(ClientName *)malloc(sizeof(ClientName));
ct->next=NULL;
ct->Tickets=0;
if(ct==NULL)
return 0;
while(wait[i]!=' ' && i<nBytesReaded) /*读取等待订票名单*/
{
ct->Name[j]=wait[i];
i++;
j++;
}
i++;
ct->Name[j]='\0';
j=0;
while(wait[i]!=' ' && i<nBytesReaded) /*读取等待订票数量*/
{
j++;
i++;
}
while(j>0)
{
if(j==3)
{
ct->Tickets=ct->Tickets+((int)wait[i-j]-48)*100;
j--;
}
else if(j==2)
{
ct->Tickets=ct->Tickets+((int)wait[i-j]-48)*10;
j--;
}
else
{ ct->Tickets=ct->Tickets+((int)wait[i-j]-48);
j--;
}
}
i+=2;
j=0;
ct->next=NULL;
p->wait=ct;
p=p->next;
}
fclose(f);
}
void display_list(AirElemType *lt)
{
if(lt->next==NULL)
{
printf("空列表\n");
return;
}
AirElemType *p=lt->next;
ClientName *q=p->booked,*t=p->wait;
printf("终点站名+++航班号+++飞行周日+++乘员定额+++机票数+++已订票名单+++票数+++等候名单+++票数\n");
while(p)
{
printf(" %s %c %s %d %d ",p->AirNAME,p->AirNO,p->day,p->Craw,p->TotalTicket);
while(q && t)
{
printf(" %s %d %s %d\n",q->Name,q->Tickets,t->Name,t->Tickets);
q=q->next;
t=t->next;
}
p=p->next;
}
}
int main()
{
AirElemType lt;
lt.next=NULL;
lt.booked=NULL;
lt.wait=NULL;
InitAirLine_list(<);
if(lt.next!=NULL)
{
Booked(<);
WaitTicket(<);
}
else
printf("操作失败\n");
display_list(<);
printf("\n");
return 1;
}