各位帮我看一下为什么输出的结果总是“文件打开失败”
#include<stdio.h>#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#define NUM 10
typedef struct
{
char driver[10];
int car;
char police[10];
int num;
int year;
int month;
int date;
} Traffic;
int menu_select();
int Input(Traffic trafList[],int n);
void Display(Traffic trafList[],int n);
int Delete_a_record(Traffic trafList[],int n);
void Sort_by_Name(Traffic trafList[],int n);
int Insert_a_record(Traffic trafList[],int n);
int AddfromText(Traffic trafList[],int n,char *filename);
void WritetoText(Traffic trafList[],int n,char *filename);
void Query_a_record(Traffic trafList[],int n);
void main()
{
Traffic trafList[NUM];
int n=0;
FILE*fp;
int i;
fp=fopen("records.txt","r");
if(fp==NULL)
{ printf("文件打开失败!\n");
exit(1);
}
fprintf(fp,"%d",n);
printf("%d",n);
for(i=0;i<1;i++)
{
fprintf(fp,"%s\t\t",trafList[i].driver);
fprintf(fp,"%d\t",trafList[i].car);
fprintf(fp,"%s",trafList[i].police);
fprintf(fp,"%d\t",trafList[i].num);
fprintf(fp,"%d\n",trafList[i].year);
fprintf(fp,"%d\t",trafList[i].month);
fprintf(fp,"%d\t",trafList[i].date);
}
for(;;)
{
switch(menu_select())
{
case 1:
n=Input(trafList,n);
system("pause");
break;
case 2:
Display(trafList,n);
system("pause");
break;
case 3:
n=Delete_a_record(trafList,n);
system("pause");
break;
case 4:
Sort_by_Name(trafList,n);
system("pause");
break;
case 5:
n=Insert_a_record(trafList,n);
system("pause");
break;
case 6:
Query_a_record(trafList,n);
system("pause");
break;
case 7:
n=AddfromText(trafList,n,"data.txt");
system("pause");
break;
case 8:
WritetoText(trafList,n,"records.txt");
system("pause");
break;
case 0:
printf("退出\n");
system("pause");
exit(0);
}
}
}
int menu_select()
{
char c;
do {
system("cls");
printf("1.Input records\n");
printf("2.Display all records\n");
printf("3.Delete a record\n");
printf("4.Sort\n");
printf("5.Insert a record\n");
printf("6.Query\n");
printf("7.Add records form a Text File\n");
printf("8.Write to a next Text File\n");
printf("0.Quit\n");
printf("Give your choice(0-8)");
c=getchar();
}while(c<'0'||c>'8');
return c-'0';
}
int Input(Traffic trafList[],int n)
{
char ch;
printf("继续吗?Y or N?\n");
getchar();
ch=getchar();
while(ch=='Y')
{
printf("请输入司机姓名");
scanf("%s",trafList[n].driver);
printf("请输入车牌号");
scanf("%d",&trafList[n].car);
printf("请输入开罚单交警姓名");
scanf("%s",trafList[n].police);
printf("请输入罚单编号");
scanf("%d",&trafList[n].num);
printf("请输入开罚单的年");
scanf("%d",&trafList[n].year);
printf("请输入开罚单的月");
scanf("%d",&trafList[n].month);
printf("请输入开罚单的日期");
scanf("%d",&trafList[n].date);
printf("继续吗?Y or N\n");
getchar();
ch=getchar();
n++;
}
return n;
}
void Display(Traffic trafList[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("司机姓名:%s\t车牌号:%d\t交警姓名:%s\t罚单编号:%d\t开罚单的年:%d\t开罚单的月:%d\t开罚单的日期:%d\n",trafList[i].driver,trafList[i].car,trafList[i].police,trafList[i].num,trafList[i].year,trafList[i].month,trafList[i].date);
// if(i%10==0) system("pause");
}
}
int Delete(Traffic trafList[],int n,char *name)
{
int i,j;
for(i=0;i<n;i++)
{
if(strcmp(trafList[i].driver,name)==0)
{ for(j=i;j<n;j++)
trafList[j]=trafList[j+1];
}
}
n--;
return n;
}
int Delete_a_record(Traffic trafList[],int n)
{
char s[10];
char zq;
printf("请输入待删者姓名:\n");
scanf("%s",&s);
printf("您真要删除姓名为%s的记录吗?Y or N\n",s);
scanf("%s",&zq);
// zq=getchar();
if(zq=='Y')
{
n=Delete(trafList,n,s);
printf("您已经成功删除记!\n");
}
return n;
}
void Sort_by_Name(Traffic trafList[],int n)
{
int i,j,p;
Traffic zq;
//printf("N=%d\n",n);
for(i=0;i<n;i++)
{
p=i;
for(j=i+1;j<n;j++)
if(strcmp(trafList[j].driver,trafList[p].driver)<0) p=j;
if(p=!i)
{
zq=trafList[p];trafList[p]=trafList[i];trafList[i]=zq;
}
}
}
int Insert(Traffic trafList[],int n,Traffic *s)
{
int i,j;
for(i=0;i<n;i++)
{
//printf("%d",n);
if(strcmp(s[i].driver,trafList[i].driver)<0)
{
for(j=n;j>0;j--)
trafList[j]=trafList[j-1];
trafList[i]=*s;
break;
}
}
if(i==n) trafList[n]=*s;
n++;
return n;
}
int Insert_a_record(Traffic trafList[],int n)
{
Traffic zq;
printf("请输入带插入司机姓名:\n");
scanf("%s",zq.driver);
printf("请输入驾驶的车牌号:\n");
scanf("%d",&zq.car);
printf("请输入开罚单的交警姓名:\n");
scanf("%s",zq.police);
printf("请输入罚单编号:\n");
scanf("%d",&zq.num);
printf("请输入开罚单年份:\n");
scanf("%d",&zq.year);
printf("请输入开罚单月份:\n");
scanf("%d",&zq.month);
printf("请输入开罚单日期:\n");
scanf("%d",&zq.date);
n=Insert(trafList,n,&zq);
printf("该记录已经输入成功\n");
return n;
}
int Query(Traffic trafList[],int n,char *name)
{
int i;
for(i=0;i<n;i++)
{
if(strcmp(trafList[i].driver,name)==0)
return i;
}
if(i==n) return -1;
}
void Query_a_record(Traffic trafList[],int n)
{
int a;
char zq[10];
printf("请输入待查找者的姓名:\n");
scanf("%s",zq);
a=Query(trafList,n,zq);
if(a=!-1)
{
printf("查找成功!该司机的罚单信息如下:\n");
printf("司机姓名:%s\n车牌号:%d\n交警姓名:%s\n罚单编号%d\n年份:%d\n月份:%d\n日期:%d\n",trafList[a].driver,trafList[a].car,trafList[a].police,trafList[a].num,trafList[a].year,trafList[a].month,trafList[a].date);
}
else printf("查找失败!\n");
}
int AddfromText(Traffic trafList[],int n,char *filename)
{
FILE *fp;Traffic zq[NUM];
int z,i;
if((fp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
exit(1);
}
fscanf(fp,"%d",&z);
//printf("z=%d\n",z);
for(i=0;i<z;i++)
{
fscanf(fp,"%s",zq[i].driver);
fscanf(fp,"%d",&zq[i].car);
fscanf(fp,"%s",zq[i].police);
fscanf(fp,"%d",&zq[i].num);
fscanf(fp,"%d",&zq[i].year);
fscanf(fp,"%d",&zq[i].month);
fscanf(fp,"%d",&zq[i].date);
}
for(i=0;i<z;i++,n++)
//trafList[n]=zq[i];
Insert(trafList,n,zq);
return n;
}
void WritetoText(Traffic trafList[],int n,char *filename)
{
FILE *fp;
int i;
fp=fopen("records.txt","W");
if(fp==NULL)
{
printf("文件打开失败!\n");
exit(1);
}
fprintf(fp,"%d\n",n);
for(i=0;i<n;i++)
{
fprintf(fp,"%s",trafList[i].driver);
fprintf(fp,"%d\t",trafList[i].car);
fprintf(fp,"%s",trafList[i].police);
fprintf(fp,"%d\t",trafList[i].num);
fprintf(fp,"%d\t",trafList[i].year);
fprintf(fp,"%d\t",trafList[i].month);
fprintf(fp,"%d\n",trafList[i].date);
}
fclose(fp);
}