|
Alome,
很不好意思,我是个不称职的版主,之所以说不称职就是因为对这里关心的太少了,不过这个局面也不会有太大的改动,因为自己也有自己的事情要做,所以无暇照顾大家。看到你的短消息后,看了一下你的帖子。发现你的程序中用到了很多没有定义的函数,此外,你的程序是C 语言风格的程序,当然C++ 是包容 C 的,所以我在局部地方帮你做了一些改动。那些没有定义的函数,我帮你加上去了,但是具体的代码并没有帮你写,也就是说你得自己写。
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- using namespace std;
- struct StuType
- {
- char No[10];
- char Xm[10];
- float Cj_En;
- };
- 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;
- }
- void Disp_File(char * filepath)
- {
- //add your code
- }
- void Data_XmCx(char * DataFile)
- {
- //add your code
- }
- void Data_NoCx(char * DataFile)
- {
- //add your code
- }
- void Data_TjCx(char * DataFile)
- {
- //add your code
- }
- int 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:
- break;
- }
- return 0;
- }
复制代码 |
|