大家好我是新来的,是名C++的超级菜鸟。
以下是一段程序,帮帮小弟看哪里出错了。
谢谢!
-----------------------------------------------------------我是分割线-----------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <iostream.h>
struct StuType
{
char No[10];
char Xm[10];
float Cj_En;
};
extern char *DataFile="d:\\学生成绩.dat" ;
bool Jy_No(char *Stu_NO,FILE *FP);
bool Jy_Cj(float Stu_Cj);
bool Jy_Xm(char *Stu_Xm);
void Data_Disp(char *DataFileName,int n);
void Data_Stu(StuType Stu);
//******************************
// 产生数据文件与增加数据记录
//******************************
void CreatFile()
{
FILE *fp;
int REC=0; // 追加的记录数
StuType Stu,Stu0={"","",0};
fp=fopen(DataFile,"ab+"); //按追加可读写方式打开文件
if(!fp)
{
cout<<"信息错误,操作失败!"<<endl;
return;
}
while(1) //输入记录
{
Stu=Stu0;
do {printf("\n请输入学号:");
scanf("%10s",&Stu.No); //输入学号,并检查
}while(!Jy_No(Stu.No,fp));
do {printf("\n请输入姓名:"); //输入姓名,并检查
scanf("%s",&Stu.Xm);
}while(!Jy_Xm(Stu.Xm));
do {printf("\n英语成绩:"); //输入成绩,并检查
scanf("%f",&Stu.Cj_En);
}while(!Jy_Cj(Stu.Cj_En));
fwrite(&Stu,sizeof(struct StuType),1,fp); // 将刚输入的记录写入文件
REC++;
}
fclose(fp);//关闭文件
printf("\n 所追加的数据清单如下: \n");
Data_Disp(DataFile,REC); //显示所追加的数据清单。
}
//**************************************************
// 学号正确性校验,不准重复,字符串长度为No_Len
//**************************************************
bool Jy_No(char *Stu_No,FILE *FP)
{
const int No_Len=9;
StuType Stu;
if(!strcmp(Stu_No,"#")) return true;
if(!strlen(Stu.No)==No_Len)
{
cout<<"学号的编码长度应该是"<<No_Len<<"!!!"<<endl;
return false;
}
else
{
rewind(FP);
while(!feof(FP))
{
fread(&Stu,sizeof(struct StuType),1,FP);
if(!strcmp(Stu_No,Stu.No))
{
cout<<"学号编码重复!该生的成绩如下: "<<endl;
Data_Stu(Stu);
return false;
}
}
return true;
}
}
//**************************************
// 显示学生的数据
//**************************************
void Data_Stu(StuType Stu)
{
printf(" 序号 学号 姓名 英语成绩\n");
printf("=========================================================================\n");
printf("%10s %10s %10.1f \n",&Stu.No,&Stu.Xm,Stu.Cj_En);
}
//***********************************************
// 姓名正确性校验,不准空白,不检查重复。
//***********************************************
bool Jy_Xm(char *Stu_Xm)
{
int Stu_XmPD=(int) *Stu_Xm;
if(Stu_XmPD>0)
{
cout<<"姓名只能用汉字开头!!!"<<endl;
return false;
}
return true;
}
//********************************************
//成绩正确性校验,必须是0-100之间的符点数
//********************************************
bool Jy_Cj(float Stu_Cj)
{
if(Stu_Cj<0||Stu_Cj>100)
{
cout<<"成绩必须在0-100之间!!!"<<endl;
return false;
}
return true;
}
main()
{
int choice;
printf(" 欢迎使用成绩查询系统\n
");
printf(" 请选择系统功能\n
");
printf(" 1 输入数据\n");
printf(" 2 显示数据\n");
printf(" 3 按姓名查找数据\n");
printf(" 4 按学号查找数据\n");
printf(" 5 统计数据\n");
printf(" 6 退出系统\n");
scanf("%d",&choice);
switch(choice)
{
case 1: CreatFile();break;
case 2: Disp_File(DataFile);break;
case 3: Data_XmCx(DataFile);break;
case 4: Data_NoCx(DataFile);break;
case 5: Data_TjCx(DataFile);break;
case 6: return;
}
}