学生cpp成绩统计 【基类派生类练习】
2015-06-13 23:24
363 查看
完成“学生cpp成绩计算”之后,修改Person和Student类,各自增加两个无参构造函数。
仍以Person类为基础,建立一个派生类Teacher,增加以下成员数据:
int ID;//教师工号
Student stu [ 100 ];//学生数组
int count;//学生数目,最多不超过100
float cpp_average;//班级cpp平均分
增加以下成员函数:
Teacher类的参数化构造函数
void Add (Student & stu1)//在学生数组中增加一个学生记录
void average();//计算当前班级cpp平均成绩cpp_average
void print()//输出当前班级学生的信息
//其中学生记录中cpp_score和cpp_grade输出保留一位小数
//当前班级cpp_average输出保留一位小数;
//输出格式如下:
//第一行:教师工号 教师姓名 班级学生数 cpp_average
//第二行至第count+1行每一行输出一个学生的信息,每一行格式
// 学生学号 学生姓名 cpp_grade
//cpp_grade保留一位小数
生成上述类并编写主函数,根据输入的教师基本信息,建立一个教师对象,根据输入的每一条学生基本信息,建立一个学生对象,计算学生cpp总评成绩并且加入学生数组中,由教师对象计算班级cpp平均成绩,并输出班级学生的全部信息。
输入格式: 测试输入包含一个测试用例,该测试用例的第一行输入教师的基本信息(教师姓名 教师工号 年龄),第二行开始输入班级内学生信息,每个学生基本信息占一行(学生姓名 学号 年龄 cpp成绩 cpp考勤),最多不超过100行,当读入0时输入结束。
输入样例:
Mike 901 30
Bob 10001 18 75.9 4
Anna 10003 19 87.0 5
0
输出样例:
901 Mike 2 82.3
10001 Bob 76.3
10003 Anna 88.3
***************************************************************************************************************************************************************************************
#include<iostream>
#include<iomanip>
using namespace std;
class Person
{
protected:
string name;
int age;
public:
Person()
{
;
}
Person(string p_name)
{
age=0;
name=p_name;
}
Person (string p_name, int p_age)
{
name=p_name;
age=p_age;
}
};
class Student:protected Person
{
int ID;
float cpp_count;
public:
float cpp_score;
float cpp_grade;
Student(string p_name,int id,int p_age,float score,float count):Person(p_name)
{
ID=id;
cpp_score=score;
cpp_count=count;
cpp_grade=cpp_score * 0.9 + cpp_count * 2;
}
Student():Person()
{
ID=0;
cpp_score=0;
cpp_count=0;
cpp_grade=cpp_score * 0.9 + cpp_count * 2;
}
void output()
{
cout<<ID<<" "<<name<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<cpp_grade<<endl;
}
};
class Teacher:protected Person
{
int ID;
Student s[100];
int count;
float average;
float sum;
public:
Teacher(string p_name,int id,int p_age):Person(p_name,p_age)
{
ID=id;
count=0;
name=p_name;
sum=0;
}
void add(Student s1)
{
s[count]=s1;
count++;
sum+=s1.cpp_grade;
}
void calculate()
{
average=sum/count;
}
void output()
{
int i;
cout<<ID<<" "<<name<<" "<<count<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<average<<endl;
for(i=0;i<count;i++)
{
s[i].output();
}
}
};
int main()
{
string name;
int age,id;
float score,count;
cin>>name>>id>>age;
Teacher teacher(name,id,age);
cin>>name;
for(;name[0]!='0';)
{
cin>>id>>age>>score>>count;
Student student(name,id,age,score,count);
teacher.add(student);
cin>>name;
}
teacher.calculate();
teacher.output();
return 0;
}
仍以Person类为基础,建立一个派生类Teacher,增加以下成员数据:
int ID;//教师工号
Student stu [ 100 ];//学生数组
int count;//学生数目,最多不超过100
float cpp_average;//班级cpp平均分
增加以下成员函数:
Teacher类的参数化构造函数
void Add (Student & stu1)//在学生数组中增加一个学生记录
void average();//计算当前班级cpp平均成绩cpp_average
void print()//输出当前班级学生的信息
//其中学生记录中cpp_score和cpp_grade输出保留一位小数
//当前班级cpp_average输出保留一位小数;
//输出格式如下:
//第一行:教师工号 教师姓名 班级学生数 cpp_average
//第二行至第count+1行每一行输出一个学生的信息,每一行格式
// 学生学号 学生姓名 cpp_grade
//cpp_grade保留一位小数
生成上述类并编写主函数,根据输入的教师基本信息,建立一个教师对象,根据输入的每一条学生基本信息,建立一个学生对象,计算学生cpp总评成绩并且加入学生数组中,由教师对象计算班级cpp平均成绩,并输出班级学生的全部信息。
输入格式: 测试输入包含一个测试用例,该测试用例的第一行输入教师的基本信息(教师姓名 教师工号 年龄),第二行开始输入班级内学生信息,每个学生基本信息占一行(学生姓名 学号 年龄 cpp成绩 cpp考勤),最多不超过100行,当读入0时输入结束。
输入样例:
Mike 901 30
Bob 10001 18 75.9 4
Anna 10003 19 87.0 5
0
输出样例:
901 Mike 2 82.3
10001 Bob 76.3
10003 Anna 88.3
***************************************************************************************************************************************************************************************
#include<iostream>
#include<iomanip>
using namespace std;
class Person
{
protected:
string name;
int age;
public:
Person()
{
;
}
Person(string p_name)
{
age=0;
name=p_name;
}
Person (string p_name, int p_age)
{
name=p_name;
age=p_age;
}
};
class Student:protected Person
{
int ID;
float cpp_count;
public:
float cpp_score;
float cpp_grade;
Student(string p_name,int id,int p_age,float score,float count):Person(p_name)
{
ID=id;
cpp_score=score;
cpp_count=count;
cpp_grade=cpp_score * 0.9 + cpp_count * 2;
}
Student():Person()
{
ID=0;
cpp_score=0;
cpp_count=0;
cpp_grade=cpp_score * 0.9 + cpp_count * 2;
}
void output()
{
cout<<ID<<" "<<name<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<cpp_grade<<endl;
}
};
class Teacher:protected Person
{
int ID;
Student s[100];
int count;
float average;
float sum;
public:
Teacher(string p_name,int id,int p_age):Person(p_name,p_age)
{
ID=id;
count=0;
name=p_name;
sum=0;
}
void add(Student s1)
{
s[count]=s1;
count++;
sum+=s1.cpp_grade;
}
void calculate()
{
average=sum/count;
}
void output()
{
int i;
cout<<ID<<" "<<name<<" "<<count<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<average<<endl;
for(i=0;i<count;i++)
{
s[i].output();
}
}
};
int main()
{
string name;
int age,id;
float score,count;
cin>>name>>id>>age;
Teacher teacher(name,id,age);
cin>>name;
for(;name[0]!='0';)
{
cin>>id>>age>>score>>count;
Student student(name,id,age,score,count);
teacher.add(student);
cin>>name;
}
teacher.calculate();
teacher.output();
return 0;
}
相关文章推荐
- 一个简单的asp数据库操作类
- C#实现用于操作wav声音文件的类实例
- 在线管理数据库 类
- Lua面向对象之类和继承浅析
- Lua中类的实现原理探讨(Lua中实现类的方法)
- Lua中的类编程代码实例
- C#常用目录文件操作类实例
- c# 类和成员的修饰详细介绍
- C#中实现判断某个类是否实现了某个接口
- C#类的创建与初始化实例解析
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- C#中类与结构的区别实例分析
- C#实现读写ini文件类实例
- C#自定义的字符串操作增强类实例
- C#自定读取配置文件类实例
- C++实现不能被继承的类实例分析
- C#生成不重复随机字符串类
- Ruby基础知识之类
- C#自定义导出数据到Excel的类实例