#include <iostream>
#include <string>
#include <cstdlib>
#define MAX 2
using namespace std;
/*class Worker
{
 private:
 string wk_num; //工号
 string name;  //姓名 (此项可以公开)
 int age;      //年龄
 char sex;     //性别(此项可以公开)
 float pay;
};*/ //创建一个类,很多数据由我们来输入,但是,只能不能输出。做到保密
class Worker_Base
{
 protected:
 string name;
 char sex;
 public:
 void setname(string nam)
 {name=nam;}
 void setsex(char s){sex=s;}
 void show()
    {
    
cout<<“对于所有员工只输出这两项,其他的为保密!”<<endl;
  cout<<“姓名:”<<name<<endl;
  cout<<“性别: “<<sex<<endl;}
};
class Worker_Derive:public Worker_Base
{
 private:
 string wk_num;
 int age;
 float pay;
 
 public:
 void set_wk_num(string num){wk_num=num;}
 void setage(int a){age=a;}
 void set_pay(float p){pay=p;}
 friend void display(Worker_Derive &wkd);
};
void display(Worker_Derive &wkd) 
//这里是全部输出信息,但这是一个非成员函数友元函数。
{
cout<<“姓名:”<<wkd.name<<endl;
cout<<“性别:”<<wkd.sex<<endl;
cout<<“工号:”<<wkd.wk_num<<endl;
cout<<“年龄:”<<wkd.age<<endl;
cout<<“工资:”<<wkd.pay<<endl;}

各位大神帮帮忙,这段代码中为什么求总分、平均分和排序会出现错误的
#include
#include
#include
#include
using namespace std;
const int MAX_STUDENT_NUM=100;
class Student
{
public:
void inputId(); //输入学号
void inputName(); // 输入姓名
void inputmath(); //输入数学成绩
void inputEnglish(); //输入英语成绩
void inputData(); //输入数据结构成绩
int getId(); // 获得学号
static void heading() //输出成绩标题
{
cout< }
void output(); //输出成绩信息
float CalTatalMark(); //计算总评成绩=数学+英语+数据结构
private:
int id; //学号
char name[20]; //姓名
float math; //数学成绩
float English; //英语成绩
float Data; //数据结构成绩
float sum; //统计总分
float averScore; //计算平均分
};
void Student::inputId()
{
cout cin>>id;
while
{
cout<<“输入学号有误,请重新输入学号: “< cin>>id;

c++成绩记录簿的课程设计,急需大神相助
用c++制作一个成绩记录簿的课程设计,但是许多功能实现不了,磁盘文件不会调用,求大神帮忙
#include
#include
#include
#include
#define N 1000
using namespace std;
class Student//定义一个学生类
{
public:
Student(long n=100000,string na=”无”,string se=”男”,float
c=0):num,name,sex,cpp{};
long num;
string name;
string sex;
float cpp;
};
void display()
{
int i;
Student stud[N];
system(“color 4C”);
fstream iofile(“学生信息.dat”,ios::in|ios::out|ios::binary);
if
{cerr<<“open error!”<<endl;
abort();
}
for(i=0;i<5;i++)
iofile.write&stud[i],sizeof;

int main(int argc, char *argv[])
{
 string name;
 char sex;
 string wk_num;
 float pay;
 int age,i=0;
 Worker_Derive wk[MAX]; //子类
 Worker_Base wkb[MAX];  //父类的引用使用子类来赋值
 for(i=0;i<MAX;i++) 
 {
  cout<<“请输入第”<<i+1<<“位同志的信息”<<endl;
 cout<<“请您输入姓名:”<<endl;
 cin>>name;
 wk[i].setname(name);
 cout<<“请您输入性别:”<<endl;
 cin>>sex;
 wk[i].setsex(sex);
 cout<<“请您输入年龄:”<<endl;
 cin>>age;
 wk[i].setage(age);
 cout<<“请您输入工号:”<<endl;
 cin>>wk_num;
 wk[i].set_wk_num(wk_num);
 cout<<“请您输入工资:”<<endl;
 cin>>pay;
 wk[i].set_pay(pay);
 cout<<endl;
 }
 
 system(“cls”);
 for(i=0;i<MAX;i++)
 {
 wkb[i]=wk[i];
 wkb[i].show();}
 char chChoice;
 cout<<“请问您是否想知道员工的所有信息?(Y/N)”<<endl;
 cin>>chChoice;
 if(chChoice==’Y’||chChoice==’y’)
 {
  string password;
  int count=0;
  M:
  cout<<“请输入密码:”;
  cin>>password;
  count++;
  if(password==”123″)
  {for(int i=0;i<MAX;i++)
  display(wk[i]);}
  else
  {
   if(count<=3)
      {cout<<“密码错误!”<<endl;
      goto M;}
      else
      exit(0);
  }
 }
cin>>””;
}
/*这里是尝试子类对象向父类对象赋值,可以改用指针实现,
即定义一个父类的指针,指针地址使用子类对象的地址赋值*/ 

}

 for(i=0;i<5;i++) {

}
void Student::inputName()
{
cin.ignore;
cout<<“请输入姓名:”;
cin.getline;
}
void Student::inputmath()
{
cout<<“请输入数学:”;
cin>>math;
while
{
cout<<“输入错误,成绩应该在0到100之间!”< cout
cin>>math;

iofile.read&stud[i],sizeof;
cout<<stud[i].num<<” “<<stud[i].name<<”
“<<stud[i].sex<<” “<<stud[i].cpp<<”
“<<endl;
}
iofile.close();
}

}
}
void Student::inputEnglish()
{
cout<<“请输入英语成绩:”;
cin>>English;
while(English100)
{
cout<<“输入错误,成绩应该在0到100之间!”< cout
cin>>English;

void search_by_num()
{system(“color 3D”);
Student stud[5];
int i;
long n;
ifstream infile(“学生信息.dat”,ios::in);
if
{cerr<<“open error!”<exit;
}
coutcin>>n;
cout<<“该学生信息如下:”<for(i=0;i{infile>>stud[i].num>>stud[i].name>>stud[i].sex>>stud[i].cpp;
}
for(i=0;i{
if(stud[i].num==n)
{cout cout cout cout cout cout }
}
infile.close();
}
void search_by_name()
{ system(“color 3E”);
Student stud[5];
int i;
string namel;
ifstream infile(“学生信息.dat”,ios::in);
if
{cerrexit;
}
coutcin>>namel;
cout<<“该学生信息如下:”<for(i=0;i{infile>>stud[i].num>>stud[i].name>>stud[i].sex>>stud[i].cpp;
}
for(i=0;i{if(stud[i].name==namel)
{coutcoutcoutcoutcoutcout}
}
infile.close();
}
void add()
{ system(“color 3B”);
Student studx;
ofstream outfilel(“增加信息.dat”);
if(!outfilel)
{cerrexit;
}
coutcoutcin>>studx.num;
cout<<“姓名:”;
cin>>studx.name;
cout<<“性别:”;
cin>>studx.sex;
cout<<“c++:”;
cin>>studx.cpp;
outfilel<<” “<outfilel.close();
}
void save_to_information()
{system(“color 3A”);
Student studx;
ifstream infile(“增加信息.dat”);
if
{cerrexit;
}
ofstream outfile(“学生信息.dat”,ios::app);
if
{cerrexit;
}
infile>>studx.num>>studx.name>>studx.sex>>studx.cpp;
outfile<<” “<infile.close();
outfile.close();
coutvoid change_by_num()
{system(“color 3D”);
Student stud[5];
int i;
long numl;
long nu;
string se;
float cp;
ifstream infile(“学生信息.dat”,ios::in);
if
{cerrexit;
}
coutcin>>numl;
for(i=0;i{infile>>stud[i].num>>stud[i].name>>stud[i].sex>>stud[i].cpp;
}
infile.close();
ofstream outfile(“学生信息 .dat”,ios::out);
if{cerr<<“open file error!”;exit;
}
cout<<“请输入修改数据:”<coutcin>>nu;
cout<<“性别:”;
cin>>se;
cout<<“C++:”;
cin>>cp;
for(i=0;i{if(stud[i].num=numl&&stud[i].num!=100000)
{stud[i].num=nu;stud[i].sex=se;stud[i].cpp=cp;}
if(stud[i].num!=10000)outfile}
coutoutfile.close();//如果学号不等于100000,才保存文件;
}
void change_by_name()
{Student stud[5];
int i;
string namel;
long nu;
string na;
string se;
float cp;
ifstream infile(“学生信息.dat”,ios::in);
if
{cerrexit;
}
coutcin>>namel;
for(i=0;i{infile>>stud[i].num>>stud[i].name>>stud[i].sex>>stud[i].cpp
;}
infile.close();
ofstream outfile(“学生信息dat”,ios::out);
if{cerr<<“open file error!”;exit;}
cout<<“请输入修改数据:”<coutcin>>nu;
cout<<“性别:”;
cin>>se;
cout<<“C++:”;
cin>>cp;
for(i=0;i{if(stud[i].name==namel&&stud[i].num!=100000){stud[i].num=nu;stud[i].sex=se;stud[i].cpp=cp;}
if(stud[i].num!=100000)outfile}
cout outfile.close();
}
void display_by_select_cpp()
{Student stud[5];
float average=0;
float total=0;
int i;
int j=0;
int k=0;
int m=0;
int n=0;
int p=0;
fstream infile(“学生信息.dat”,ios::in);
if
{
cerr exit;
}
for(i=0;i{
infile>>stud[i].num>>stud[i].name>>stud[i].sex>>stud[i].cpp
;
total=total+stud[i].cpp;}
infile.close();
cout<<“——-90分以上的学生——–“<{coutfor(i=0;i{if(stud[i].cpp=90)
{if(stud[i].num==100000)break;
cout<coutj++;
}
}
coutcoutcoutcoutfor(i=0;i{
if(stud[i].cpp=80)
{if(stud[i].num==100000)break;
cout< cout j++;k++;}}
coutcoutcoutcoutfor(i=0;i{
if(stud[i].cpp=70)
{if(stud[i].num==100000)break;
cout<cout j++;m++;
}
}
coutcoutcoutcoutfor(i=0;i{
if(stud[i].cpp=60)
if(stud[i].num==100000)break;
cout<cout j++;n++;}}
coutcoutcoutcoutfor(i=0;i{if(stud[i].cpp=0)
{if(stud[i].num==100000)break;
cout<<setiosflags(ios::left);
cout<<setw<<stud[i].name<<setw<<stud[i].num<<setw<<stud[i].sex<<setw<<stud[i].cpp<<endl;
j++;p++;}}
average=total/j;
cout<<endl<<endl<<endl;
cout<<“总计:”<<p<<“人,学生总人数”<<j<<“人,班级C++平均分”<<average<<endl<<endl;
cout<<“——————-“<<endl;
}

}
}
void Student::inputData()
{
cout<<“请输入数据结构:”;
cin>>Data;
while
{
cout<<“输入错误,成绩应该在0到100之间!”< cout
cin>>Data;

void Main_desk()
{cout<<endl<<endl<<endl;
cout<<“***********************************”<<endl;
cout<<” * 欢迎使用学生成绩记录簿*”<<endl;
cout<<“* “<<endl;
cout<<“
“<<endl;
cout<<“
“<<endl;
cout<<“
1.显示所有 “<<endl;
cout<<“
2.查询信息 “<<endl;
cout<<“
3.增加记录 “<<endl;
cout<<“
4.修改数据 “<<endl;
cout<<“
5.成绩分段 “<<endl;
cout<<“
6.退出 “<<endl;
cout<<“

********************************”<<endl;
cout<<“* 请输入功能导向码 *”<<endl;
}

}
}
int Student::getId()
{
return id;
}

void Search_desk()
{cout<<“*************************”<coutcoutcoutcout}
void Change_desk()
{coutcoutcoutcoutcout}
void Add_desk()
{coutcoutcoutcout}
void Del_desk()
{
}
void del_by_num()
{
}
void del_by_name()
{
}
int key()
{int n;
cin>>n;
return n;
}
int main()
{system(“color 3B”);
while
{Main_desk();
switch
{
case 1:system;display();break;
case 2:system;while
{Search_desk();
switch
{case 1:search_by_num();break;
case 2:search_by_name();break;
case 3:system;main();break;
}
}
break;
case 3:system;while
{Add_desk();
switch
{case 1:add();save_to_information();break;
case 2:system;main();break;
}
}
break;
case 4:system;while
{Change_desk();
switch
{case 1:change_by_num();break;
case 2:change_by_name();break;
case 3:system;main();break;
}
}
break;
case 5:system;
while
{Del_desk();
switch
{case 1:del_by_num();break;
case 2:del_by_name();break;
case 3:system;main();break;
}
}break;
case 6:exit;break;
}
}
return 0;}

void Student::output()
{
cout<<setw<<id<<setw<<name<<setiosflags(ios::fixed)<<
setprecision<<setw<<math<<setw<<English<<setw<<Data<<endl;
}

float Student::CalTatalMark()
{
return math+English+Data;
}

//录入或插入学生信息
void Input(Student stu[], int &num)
{
// float score;//学生成绩
int i=0; //人数
string str;//用来判断是否继续输入的字符串
if
{
while
{
stu[i].inputId();
for(int j=0;j {
if(stu[i].getId()==stu[j].getId
{
cout stu[i].inputId();
}
}
stu[i].inputName();
stu[i].inputmath();
stu[i].inputEnglish();
stu[i].inputData();
i++;
num=i;
cout cin>>str;
if(i==MAX_STUDENT_NUM)
{
cout<<“人数已达到”< break;
}
if(str==”y” || str==”Y”)
{
continue;
}
else
{
break;
}
}
}
else //插入学生信息
{
if(num==MAX_STUDENT_NUM)
{
cout }
else
{
i=num;//当前数组元素个数
while
{
stu[i].inputId();
for(int j=0;j {
if(stu[i].getId()==stu[j].getId
{
cout stu[i].inputId();
}
}
stu[i].inputName();
stu[i].inputmath();
stu[i].inputEnglish();
stu[i].inputData();
i++;
num=i;
cout cin>>str;
if(i==MAX_STUDENT_NUM)
{
cout<<“人数已达到”<<MAX_STUDENT_NUM<<“人上限,无法再输入!n”;
break;
}
if(str==”y” || str==”Y”)
{
continue;
}
else
{
break;
}
}
}
}
}
//输出显示成绩信息
void Output(Student stu[], int num)
{
if
{
stu[0].heading();//学生信息标题
for(int i=0;i<num;i++)
{
stu[i].output();
}
}
else
{
cout<<“暂无成绩信息,请选择1=录入学生信息”<<endl;
}

}
//根据总评排序
void Order(Student stu[], int num)
{
if
{
int i,j,k;
Student temp;

for(i=0;i<num;i++)
{
for(j=0;j<num-i-1;j++)
{
if(stu[j].CalTatalMark()<stu[j+1].CalTatalMark
{
temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
stu[0].heading();//学生信息标题
for(k=0;k<num;k++)
{
stu[k].output();
}
cout<<endl;
}
else
{
cout<<“暂无成绩信息,请选择1=录入学生信息”<<endl;
}
}

//查找学生信息
void Search(Student stu[], int num)
{
int id;
string str;//用来判断是否继续输入的字符串
while
{
cout<<“请输入您要查找的学号:”;
cin>>id;
int flag=0;
if(id>=1 && id<=40)
{
for(int i=0;i {
if(stu[i].getId
{
flag++;
}
}
if
{
cout }
else
{
stu[0].heading();//学生信息标题
for(int i=0;i {
if(stu[i].getId
{
stu[i].output();
}
}
}
cout cin>>str;
if(str==”y” || str==”Y”)
{
continue;
}
else
{
break;
}
}
else
{
cout<<“输入学号有误,请重新输入学号n “< cout
cin>>str;
if(str==”y” || str==”Y”)
{
continue;
}
else
{
break;
}
}
}
}

int SearchSum(Student stu[], int num){ //查看总分
int id;
string str;
float Math;
float English;

float Data;

float sum=0;

while
{
cout<<“请输入您要查找的学号:”;
cin>>id;
int flag=0;
if(id>=1 && id<=40)
{
for(int i=0;i<num;i++)
{
if(stu[i].getId
{
flag++;
}
}
if
{
cout<<“没有该学号学生信息!”<<endl;
}
else
{

 for(int i=0;i<num;i++) { if(stu[i].getId { cout<<"总分为:"<<sum<<endl; sum=Math+English+Data; sum+=sum; return sum; } } } cout<<"继续查找请按y或Y:"; cin>>str; if(str=="y" || str=="Y") { continue; } else { break; } } else { cout<<"输入学号有误,请重新输入学号n "<<endl; cout<<"继续查找请按y或Y:"; cin>>str; if(str=="y" || str=="Y") { continue; } else { break; } }}

}

float AverScore(Student stu[], int num){ //查看平均分
int id;
string str;

float sum=0;
float averScore=0;
while
{
cout<<“请输入您要查找的学号:”;
cin>>id;
int flag=0;
if(id>=1 && id<=40)
{
for(int i=0;i<num;i++)
{
if(stu[i].getId
{
flag++;
}
}
if
{
cout<<“没有该学号学生信息!”<<endl;
}
else
{

 for(int i=0;i<num;i++) { if(stu[i].getId { cout<<"平均分为:"<<AverScore<<endl; averScore+=sum/3; averScore+=averScore; return averScore; } } } cout<<"继续查找请按y或Y:"; cin>>str; if(str=="y" || str=="Y") { continue; } else { break; } } else { cout<<"输入学号有误,请重新输入学号n "<<endl; cout<<"继续查找请按y或Y:"; cin>>str; if(str=="y" || str=="Y") { continue; } else { break; } }}

}

void Delete(Student stu[], int &num)
{
int id;
string str;//用来判断是否继续输入的字符串
while
{
cout<<“请输入要删除学生的学号:”;
cin>>id;
int flag=0;//用来统计删除后剩余的数组元素个数
Student a[100];
if(id>=1 && id<=40)
{
for(int i=0;i {
if(stu[i].getId
{
a[flag]=stu[i];
flag++;
}
}
if(flag==num)
{
cout }
else
{
num=flag;
for(int k=0;k {
stu[k]=a[k];
}
cout }
cout cin>>str;
if(str==”y” || str==”Y”)
{
continue;
}
else
{
break;
}
}
else
{
cout<<“输入学号有误,请重新输入学号!n”;
cout<<“继续删除其他学生请按y或Y:”;
cin>>str;
if(str==”y” || str==”Y”)
{
continue;
}
else
{
break;
}
}
}
}

//统计人数
void Statis(Student stu[], int num)
{
int i,a[5]={0};
for(i=0;i {
if(stu[i].CalTatalMark()>=90 && stu[i].CalTatalMark()<=100)
{
a[0] +=1;

 } else if(stu[i].CalTatalMark()>=80 && stu[i].CalTatalMark { a[1] +=1; } else if(stu[i].CalTatalMark()>=70 && stu[i].CalTatalMark { a[2] +=1; } else if(stu[i].CalTatalMark()>=60 && stu[i].CalTatalMark { a[3] +=1; } else { a[4] +=1; }}cout<<" 100~90 89~80 79~70 69~60 <60"<<endl;for(i=0;i<5;i++){ cout<<setw<<a[i];}cout<<endl;

}

//主菜单
void Menu1()
{
cout<<” =================================================n”;
cout<<” = 欢迎使用成绩管理系统 =n”;
cout<<” = 1=录入学生 2=显示信息 =n”;
cout<<” = 3=排序总评 4=查找学生 =n”;
cout<<” = 5=插入学生 6=删除学生 =n”;
cout<<” = 7=统计人数 0=退出 =n”;
cout<<” =================================================n”;
cout<<“请选择:”;
}
void Menu()
{
cout<<” =================================================n”;
cout<<” = 欢迎使用成绩管理系统 =n”;
cout<<” = 1=教师 2=学生 =n”;
cout<<” =================================================n”;
cout<<“请选择:”;
}
void Menu2()
{
cout<<” =================================================n”;
cout<<” = 欢迎使用成绩管理系统 =n”;
cout<<” = 1显示信息 2=查看总分 =n”;
cout<<” = 3=查看平均分 0=退出 =n”;
cout<<” =================================================n”;
cout<<“请选择:”;
}

int main()
{
int currentN=0;
int sum=0;
int averScore=0;
float Math;
float English;
float Data;
Student stu[MAX_STUDENT_NUM];
/*从文件读数据 /
ifstream filein(“students.dat”,ios::binary);
if
{
filein.read((char
)&currentN,sizeof);
for(int i=0;i {
filein.read&stu[i],sizeof;
}
}
filein.close();
string a;//用来判断菜单选择,用string
Menu();
while(cin>>a)
{
if{
Menu1();
while(cin>>a){
if
{
cout<<“您选择了1=录入学生”<<endl;
Input(stu, currentN);//输入
Menu1();
}
else if
{
cout<<“您选择了2=显示信息”<<endl;
Output(stu, currentN);//输出成绩信息
Menu1();
}
else if
{
cout<<“您选择了3=排序总评”<<endl;
Order(stu, currentN);
Menu1();
}
else if
{
cout<<“您选择了4=查找学生”<<endl;
Search(stu, currentN);
Menu1();
}
else if
{

cout<<“您选择了5=插入学生”<<endl;
Input(stu, currentN);
Menu1();
}
else if
{
cout<<“您选择了6=删除学生”<<endl;
Delete(stu, currentN);
Menu1();
}
else if
{
cout<<“您选择了7=统计人数”<<endl;
Statis(stu, currentN);
Menu1();
}
else if
{
/*往文件写入数据*/
ofstream fileout(“students.dat”,ios::binary);
if
{
cout<<“文件不能被打开!”<<endl;
return 0;
}
fileout.write&currentN,sizeof);
for(int i=0;i<currentN;i++)
{
fileout.write&stu[i],sizeof;
}
fileout.close();
cout<<“退出成功!”<<endl;
return 0;
}
else
{
cout<<“输入非法,请重新输入!”<<endl;
Menu1();

 } } } else if { Menu2(); while(cin>>a){; if { cout<<"您选择了1=显示信息"<<endl; Output(stu, currentN);//输出成绩信息 Menu2(); } else if { cout<<"您选择了2=查看总分"<<endl; SearchSum(stu, currentN);//输出总分信息 Menu2(); } else if { cout<<"您选择了3=查看平均分"<<endl; AverScore(stu, currentN); Menu2(); } else if{ /*往文件写入数据*/ ofstream fileout("students.dat",ios::binary); if { cout<<"文件不能被打开!"<<endl; return 0; } fileout.write&currentN,sizeof); for(int i=0;i<currentN;i++) { fileout.write&stu[i],sizeof; } fileout.close(); cout<<"退出成功!"<<endl; return 0; } else{ cout<<"输入非法,请重新输入!"<<endl; Menu2(); } } } else{ cout<<"输入非法,请重新输入!"<<endl; Menu(); } } return 0;}