• 全部
  • 问答

数据结构 关于链表与文件的问题

zhou00069 2008-04-03 08:36:06
我想用C语言写个航空管理函数,其中航线信息包括:终点站名、航班号、飞行周日(星期几)、乘员定额、剩余票量、已订客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。

其中已订客户名单用单链表存储、等候替补客户名单用链队列存储、航线信息用单链表存储。我想建一个文件,将航线信息放在文件中,编写C语言函数在将文件中的数据取出来用在航线链表中。


请知道的大哥大姐们麻烦告诉下,小弟急着将次程序编写出来,谢谢了:-)
...全文
136 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lzy340623339 2008-04-05
不用谢!
就是结帐,然后给分就可以了
回复
zhou00069 2008-04-05
怎么跟你给分啊,
很是谢谢你了,我打印出来好好看看!
最后还是谢谢了,将这些东西写出来都花了你不少时间吧,麻烦了!
回复
lzy340623339 2008-04-04
这个有点工作量
回复
lzy340623339 2008-04-04
我帮你做了个基本的出来了,其实就基本是文件操作而已,剩下的自己再慢慢完善吧
#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;
}
回复
CathySun118 2008-04-04
怎么不要关系数据库存储啊
回复
ryfdizuo 2008-04-03
...
回复
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-03 08:36
社区公告
暂无公告