关于学生信息管理系统向文件输入跟输出数据问题
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define N 100
struct Date//出生年月日
{
int year;//年
char x;//分割线
int month;//月
char y;//分割线
int day;//日
};
struct Student
{
int num;//学号
char name[20];//姓名
char sex;//性别
char clas;//班级
struct Date bron;//出生年月日
char addr[20];//地址
int phone;//电话
}stud[50];
void input(struct Student stud[]);//信息输入
void retur();//返回菜单
void read();//从文件中读入学生信息
void find_num();//按学号查询学生信息
void find_class();//按班级查询学生信息
void add();//增加学生信息
void dele();//删除学生信息
void save(int);//存储学生信息
void retur()
{
int a;
printf("返回上层菜单请按1 结束程序请按任意键");
scanf("%d",&a);
if(a==1)
{
system("cls");
main();
}
else
exit(0);
}
void save(int m)//存储学生信息
{
FILE *fp;
int i;
if((fp=fopen("D:stud.txt","wb"))==NULL) //新建文件stud.txt
{
printf("cannot open this file\n");
exit(0);
}
for(i=0;i<m;i++)
if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
printf("数据存储错误\n");
fclose(fp);
retur();
}
void input(struct Student stud[])//写入学生信息
{
int i,m;
printf("请输入学生人数:");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("学号:");
scanf("%d",&stud[i].num);
printf("姓名:");
scanf("%s",&stud[i].name);
printf("班级:");
scanf("%s",&stud[i].clas);
printf("出生年月日:");
scanf("%d%s%d%s%d",&stud[i].bron.year,&stud[i].bron.x,&stud[i].bron.month,&stud[i].bron.y,&stud[i].bron.day);
printf("地址:");
scanf("%s",&stud[i].addr);
printf("电话:");
scanf("%d",&stud[i].phone);
printf("\n");
}
save(m);
}
void read()//从文件中导出学生信息
{
int i;
FILE*fp;
if((fp=fopen("D:stud.txt","rb"))==NULL) //打开文件stud.dat
{
printf("无法找到此文件\n");
exit(0);
}
for(i=0;i<N;i++)
{
fread(&stud[i],sizeof(struct Student),1,fp);
printf("学号:%d",stud[i].num);
printf("姓名:%s",stud[i].name);
printf("班级:%s",stud[i].clas);
printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
printf("地址:%s",stud[i].addr);
printf("电话:%d",stud[i].phone);
printf("\n");
}
fclose(fp);
}
void find_num()//按学号查询学生信息
{
int i,a;
printf("请输入所查学生学号:\n");
scanf("%d",&a);
for(i=0;i<N;i++)
{
if(a==stud[i].num)//判断学号是否存在
{
printf("学号:%d",stud[i].num);
printf("姓名:%s",stud[i].name);
printf("班级:%s",stud[i].clas);
printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
printf("地址:%s",stud[i].addr);
printf("电话:%d",stud[i].phone);
printf("\n");
}
}
retur();
}
void find_class()//按班级查询学生信息
{
char c,*p1,*p2;
int i;
printf("请输入班级");
scanf("%s",&c);
p2=&c;
for(i=0;i<N;i++)
{
p1=&stud[i].clas;
if(strcmp(*p1,*p2)==0)
{
printf("学号:%d",stud[i].num);
printf("姓名:%s",stud[i].name);
printf("班级:%s",stud[i].clas);
printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
printf("地址:%s",stud[i].addr);
printf("电话:%d",stud[i].phone);
printf("\n");
}
}
retur();
}
void add()//增加学生信息
{
}
void dele()//删除学生信息
{
}
int main()
{
int choice;
struct Student *p=stud;
printf("************学生信息管理系统*********\n");
printf("* 1-信息输入 *\n");
printf("* 2-读入学生信息 *\n");
printf("* 3-按学号查询学生信息 *\n");
printf("* 4-按班级查询学生信息 *\n");
printf("* 5-增加学生信息 *\n");
printf("* 6-删除学生信息 *\n");
printf("* 0-退出程序 *\n");
printf("*************************************\n");
printf("(请选择0-5)\n");
scanf("%d",&choice);
switch(choice)
{
case 1:input(p);break;
case 2:read();break;
case 3:find_num();break;
case 4:find_class();break;
case 5:add();break;
case 6:dele();break;
case 0:exit(0);break;
default:printf("输入错误请重新选择");break;
}
return 0;
}
主要是学生信息输入后再读入学生信息是总是出现应用程序错误查了好久还是没发现错误 求各位大大帮忙看看