文件写入+返回上一层

ANGCHUANZHOU 2010-12-02 01:52:41
这是一个机票查询系统,有两个问题。1.想要将机票信息写入文件,但是打开文件后发现里面没有任何信息,即没有成功写入文件;2,我想知道怎么实现返回上一层,比如,在查看了所有机票信息后可以返回到上一层的选择行,进而执行别的操作;谢谢!


#include<stdlib.h>
#include<string.h>
#include<stdio.h>
//#include<istream.h>

struct flight//定义航班结构体
{char num[20];//航班号
char startpoint[10];//起点
char endpoint[10];//终点
char startime[10];//起飞时间
char endtime[10];//达到时间
int price;//价格
double discount;//折扣
int discountprice; //折扣价
int remain; //剩余张数
}air[100];
int SIZE=50;
void save()
{
FILE *fp;
int i;
if((fp=fopen("C:\\Users\\ws\\Desktop\\新建文件夹\\机票信息.dat","wb"))==NULL)
{printf("cannot open file\n");
return;
}
printf("%s **\n ",air[0].num);//*****************
for(i=0;i<SIZE;i++)
{
if(fwrite(&air[i],sizeof(struct flight),1,fp)!=1)
printf("file write error;\n");
}

fclose(fp);
}


int main()
{ FILE *fp;
int i;

int sr;//专用来记录使用者输入的变量
char srr[10];
//这样的初始化方式,必须在定义数组的同时赋值,不能上一行定义,下一行赋值。
flight air[100]={{"BJ123","北京","上海","14:30","17:30",500,9,450,12},
{"BJ124","北京","西安","07:00","09:30",430,9,388,11},
{"BJ125","北京","乌鲁木齐","08:00","12:10",960,9,866,3},
{"BJ234","北京","厦门","07:15","10:25",1030,8,824,9},
{"BJ43","北京","银川","07:25","09:30",550,9,495,9},
{"SH524","上海","西安","07:25","09:55",500,10,500,12},
{"SH452","上海","西安","08:30","11:10",1000,8,800,4},
{"SH778","上海","西安","09:44","14:30",600,9,540,8},
{"SH52","上海","北京","07:45","10:15",1000,9.6,960,5},
{"CQ12","重庆","天津","07:20","09:40",700,10,700,5},
{"TJ34","天津","西安","08:10","09:55",770,10,770,9},
//四个直辖市完毕

{"SH857","上海 ","北京","08:55","11:15",800,10,800,4 },
{"WL123","乌鲁木齐","北京","09:10","12:35",2410,10,2410,5},
{"GX15","南宁","北京","08:30","11:40",1130,10,1130,6},
{"XZ15","西安","北京","15:25","21:25",2430,10,2430,9},
{"NM15","呼和浩特","北京","00:05","01:10",500,10,500,2},
//五个自治区完毕
{"XG159","香港","北京","08:15","12:55",1000,9,900,6},
{"XG73","香港","西安","6:15","12:15",1000,9,900,9},
{"AM15","澳门","北京","08:15","12:55",1000,9,900,6},
{"AM95","澳门","西安","6:15","12:15",1000,9,900,9},
//两个特别行政区 完毕

{"SY98","沈阳","北京","14:00","15:30",700,8,560,9},
{"CC321","长春","北京","07:50","09:40",100,9.6,960,5},
{"AS55","哈尔滨","北京","07:50","09:40",100,9.6,960,5},
{"FG74","南京","北京","07:50","09:40",100,9.6,960,5},
{"D44","杭州","北京","07:50","09:40",100,9.6,960,5},
{"G55","合肥","北京","07:50","09:40",100,9.6,960,5},
{"GF44","福州","北京","07:50","09:40",100,9.6,960,5},
{"GF22","南昌","北京","07:50","09:40",100,9.6,960,5},
{"JH85","济南","北京","07:50","09:40",100,9.6,960,5},
{"HJ554","郑州","北京","07:50","09:40",100,9.6,960,5},
{"FG","武汉","北京","07:50","09:40",100,9.6,960,5},
{"F55","武汉","北京","07:50","09:40",100,9.6,960,5},
{"GH55","长沙","北京","07:50","09:40",100,9.6,960,5},
{"HF44","广州","北京","07:50","09:40",100,9.6,960,5},
{"TY25","海口","北京","07:50","09:40",100,9.6,960,5},
{"TY587","成都","北京","07:50","09:40",100,9.6,960,5},
{"FG78","贵阳","北京","07:50","09:40",100,9.6,960,5},
{"FG25","昆明","北京","07:50","09:40",100,9.6,960,5},
{"HD78","西安","北京","07:50","09:40",100,9.6,960,5},
{"WD85","兰州","北京","07:50","09:40",100,9.6,960,5},
{"SD745","西宁","北京","07:50","09:40",100,9.6,960,5},
{"SX75","西安","北京","07:50","09:40",100,9.6,960,5},
{"SX87","西安","北京","07:50","09:40",100,9.6,960,5},
{"SX88","西安","北京","07:50","09:40",100,9.6,960,5},
{"SX78","西安","北京","07:50","09:40",100,9.6,960,5},
{"SX55","西安","北京","07:50","09:40",100,9.6,960,5},
{"SX554","西安","北京","07:50","09:40",100,9.6,960,5},
{"SX524","西安","北京","07:50","09:40",100,9.6,960,5},
{"SX452","西安","北京","07:50","09:40",100,9.6,960,5},
{"SX482","西安","北京","07:50","09:40",100,9.6,960,5}
};//23个省会城市

save();//将航班信息存入文件

printf(" ************************************ \n");
printf(" *********************************************** \n");
printf(" ******************************************************************** \n");
printf(" 欢迎使用世行机票查询订购系统 \n");
printf(" ******************************************************************** \n");
printf(" *********************************************** \n");
printf(" ************************************ \n");
printf("\n");
printf("查看所有机票信息请输入 1 ,其他操作请输入 2 \n");
scanf("%d",&sr);
//printf("%d");


if(sr==1)
{
printf("全部机票信息为:\n");
printf("序号 航班号 起点 终点 起飞时间 到达时间 价格 折扣 折扣价格 剩余\n");
FILE *fp;
if((fp=fopen("C:\\Users\\ws\\Desktop\\新建文件夹\\机票信息.dat","wb"))==NULL)
{
printf("cannot open file\n");
return 0;
}

for(i=0;i<SIZE;i++)
{
fread(&air[i],sizeof(struct flight),1,fp);
printf("%2d %-7s %10s %10s %7s %7s %7d %6.1f %7d %7d",i,air[i].num,air[i].startpoint,air[i].endpoint,
air[i].startime,air[i]. endtime,air[i].price,air[i].discount,air[i].discountprice,air[i].remain);
printf("\n");
}

fclose(fp);
printf("\n");


}//查看所有机票信息
if(sr==2)
{
printf("增加航班信息请输入 1 ,删除航班信息请输入 2 ,修改航班信息请输入 3 \n");
scanf("%d",&sr);
//printf("%d",sr);
if(sr==1)//增加航班信息
{
SIZE++;
printf("请按照以下格式输入要增加的机票信息\n");
printf("航班号 起点 终点 起飞时间 到达时间 价格 折扣 折扣价 剩余\n");
scanf("%s %s %s %s %s %d %f %d %d",&air[SIZE-1].num,&air[SIZE-1].startpoint,&air[SIZE-1].endpoint,&air[SIZE-1].startime,
&air[SIZE-1].endtime,&air[SIZE-1].price,&air[SIZE-1].discount,&air[SIZE-1].discountprice,&air[SIZE-1].remain);
fp=fopen("C:\\Users\\ws\\Desktop\\新建文件夹\\机票信息.dat","wb");
fwrite(&air[SIZE-1],sizeof(struct flight),1,fp);
printf("您已成功存入信息,您存入放入机票信息为:\n");
printf("%-7s %10s %10s %7s %7s %7d %6.1f %7d %7d\n",air[SIZE-1].num,air[SIZE-1].startpoint,air[SIZE-1].endpoint,
air[SIZE-1].startime,air[SIZE-1]. endtime,air[SIZE-1].price,air[SIZE-1].discount,air[SIZE-1].discountprice,air[SIZE-1].remain);
fclose(fp);
printf("**********************************************************\n");

}

}

system("pause");


}




...全文
205 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ANGCHUANZHOU 2010-12-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jialejiahi 的回复:]

谢谢你啦!
jialejiahi 2010-12-03
  • 打赏
  • 举报
回复
具体比如
scanf("%d",&sr);这句改成while((scanf("%d",&sr)) > 0) {... }
循环体里加一句else { printf("thank you bye!\n"); break; }
提示改成printf("查看所有机票信息请输入 1 ,其他操作请输入 2 ,其他键退出!\n");
ANGCHUANZHOU 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jialejiahi 的回复:]

1 :首先为什么你文件里是空的,因为前面定义结构体的时候你定义了全局变量air[100],后面给局部变量air[100]赋值,全局变量并没没有被赋值。
2 :想弄成你那种一直有菜单选择的格式很简单,比如,把后面的查询和操作放到循环里,输入某个值的时候break退出。
[/Quote]谢谢你 说的很好!
但是能不能把第二个问题在详细说下 我貌似没有懂你的意思?
xspace_time 2010-12-03
  • 打赏
  • 举报
回复
返回上一层,不就是return;一下,就回到调用该函数的位置了吗
jialejiahi 2010-12-02
  • 打赏
  • 举报
回复
1 :首先为什么你文件里是空的,因为前面定义结构体的时候你定义了全局变量air[100],后面给局部变量air[100]赋值,全局变量并没没有被赋值。
2 :想弄成你那种一直有菜单选择的格式很简单,比如,把后面的查询和操作放到循环里,输入某个值的时候break退出。
就想叫yoko 2010-12-02
  • 打赏
  • 举报
回复
写个while(1)循环嘛,一按某个键就continue又跑到上面去打印主菜单了

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧