高手进、、 求 C语言 文件读取问题 ..
请帮忙修改下这个程序:加上
每次登录时读取上次保存在磁盘文件中的订票记录。
这个功能.
在线等
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
typedef struct XXX
{
char k; /* 0表示无人,1表示有人 */
char n; /* 0表示可选,1表示不复合条件 */
char Name[30];
char Code[20];
}SB;
SB Set[20][4];
void Select(); /*选座位*/
void ShowList(); /*显示位置详细清单*/
void Menu(); /*菜单*/
int YNSelect(char *info,int cls); /*yes-No选择*/
void ShowNull(int window,int smoken); /*显示满足条件的位置索引*/
void InputInfo(); /*输入乘客资料*/
void baocun(int x,int y);
void main()
{
char key=0;
int Run=1;
memset(Set,0,80*sizeof(SB));
while(Run)
{
Menu();
key=getch();
switch(key)
{
case '1':Select();break;
case '2':ShowList();break;
case '3':Run=0;break;
}
}
}
int YNSelect(char *info,int cls)
{
char key;
if(cls) system("cls");
else printf("\n");
printf("\n%s Y/y - 要 N/n - 不要",info);
while(1)
{
key=getch();
if(key=='Y'||key=='y') return 1;
if(key=='N'||key=='n') return 0;
}
}
void ShowNull(int window,int smoken)
{
int i,j;
int Con1,Con2,Con3;
int count=0;
system("cls");
printf("符合你条件的座位有:\n\n");
for(j=0;j<20;j++)
for(i=0;i<4;i++)
{
Con1=((window==1)&&(i==0||i==3))||(window==0);
Con2=((smoken==1)&&(j>=19))||(smoken==0);
Con3=(Set[j][i].k==0);
if(Con1&&Con2&&Con3)
{
Set[j][i].n=0;
printf(" %2d%c ",j+1,'A'+i);
}
else
{
Set[j][i].n=1;
printf(" --- ");
}
count++;
if(count%4==0) printf("\n");
}
}
void Select()
{
char isWin=0;
char isSmk=0;
char isOK=0;
int LOOP=1;
while(LOOP)
{
isWin=YNSelect("要靠窗口边吗?",1);
isSmk=YNSelect("要吸烟吗?",1);
ShowNull(isWin,isSmk);
isOK=YNSelect("要选择位置吗?",0);
if(isOK==0)
LOOP=YNSelect("还要继续选吗?",0);
else
{
InputInfo();
LOOP=0;
}
}
}
void InputInfo()
{
char ch[10]={0};
int x,y;
int i=0;
printf("\n\n请输入座位编号:");
scanf("%s",ch);
while(i<10)
{
if(ch[i]<'0'||ch[i]>'9')
{
x=ch[i];
ch[i]=0;
break;
}
i++;
}
y=atoi(ch)-1;
if(x>='A'&&x<='D') x-='A';
else if(x>='a'&&x<='d') x-='a';
else x=-1;
if(y<0||y>19||x==-1)
{
printf("\n输入错误!!!按任意键返回");
getch();
return;
}
if(Set[y][x].n)
{
printf("\n不符和选择条件!按任意键返回");
getch();
}
else
{
printf("\n请输入姓名:");
scanf("%s",Set[y][x].Name);
printf("\n请输身份证号:");
scanf("%s",Set[y][x].Code);
Set[y][x].k=1;
printf("\n\n登记成功!\n\n%s同学,您的座位是:%2d%c.请准时登机",Set[y][x].Name,y+1,'A'+x);
baocun(x,y);
printf("\n\n按任意键返回");
getch();
}
}
void ShowList()
{
int i,j;
int count=0;
system("cls");
printf("\n整机位置分配状况清单:\n");
for(j=0;j<20;j++)
for(i=0;i<4;i++)
{
printf("\n %2d%c位置: ",j+1,'A'+i);
if(Set[j][i].k==0) printf("没人");
else printf("%s %s",Set[j][i].Name,Set[j][i].Code);
count++;
if(count%11==0)
{
printf("\n\n按ESC键返回,其他键继续.");
if(getch()==27) return;
system("cls");
printf("\n整机位置分配状况清单:\n");
}
}
printf("\n\n信息全部结束,按ESC键返回");
while(getch()!=27);
}
void baocun(int x,int y)
{
FILE *fp;
if((fp=fopen("乘客信息.txt","a+"))==NULL)
{
printf("文件不能打开!\n");
exit(0);
}
fprintf(fp,"%-20s%-20s%2d%c\n",Set[y][x].Name,Set[y][x].Code,y+1,'A'+x);
fclose(fp);
}
void Menu()
{
system("cls");
printf("\n 飞机票订票系统\n");
printf("\n 1 - 选择座位");
printf("\n 2 - 查看清单");
printf("\n 3 - 退出系统");
printf("\n\n 请选择\n");
}