用C++编写程序。
题目:对现实中的学生实体进行抽象并定义学生类。该类应包含学生个人的基本信息,如姓名、年龄、性别、学号、专业、班级等。还应包含学生的三门考试成绩信息。为该类设计函数成员,通过成员函数来对数据成员进行操纵,例如设置数据成员的值、将数据成员的值进行输出,求三门成绩的平均分等。在主函数中定义该类的对象,并使用该对象,例如求某学生的考试平均分并输出。
题目:对现实中的学生实体进行抽象并定义学生类。该类应包含学生个人的基本信息,如姓名、年龄、性别、学号、专业、班级等。还应包含学生的三门考试成绩信息。为该类设计函数成员,通过成员函数来对数据成员进行操纵,例如设置数据成员的值、将数据成员的值进行输出,求三门成绩的平均分等。在主函数中定义该类的对象,并使用该对象,例如求某学生的考试平均分并输出。
答案:#include <iostream>
#include <cstring>
using namespace std;
class Student
{
// 封装一个对象属性
struct Attribute
{
string name; // 姓名
string age; // 年龄
string 易做图; // 性别
string s_id; // 学号
string prof; // 专业
string klass; // 班级
};
public:
// 默认构造函数
Student() :obj(Attribute()),math(0),chinese(0),english(0) {} // 初始化各成员
// 赋值构造函数 本想把属性外置而减少参数传递
//但看你题目需要通过成员赋值 所以就这么做了
Student(const string & name,const string &age,const string & 易做图,
const string & s_id,const string & prof,const string & klass,
double mt = 0,double chs = 0,double eng = 0)
{// 属性项为必填 3主课分数可以使用默认 可以通过以下成员函数修改
obj.name = name;
obj.age = age;
obj.易做图 = 易做图;
obj.s_id = s_id;
obj.prof = prof;
obj.klass = klass;
math = mt;
chinese = chs;
english = eng;
}
// 修改主课分数
void ModMark(double mt,double chs,double eng)
{
math = mt;
chinese = chs;
english = eng;
}
// 修改属性项
void ModAttribute(const string & name,const string &age,const string & 易做图,
const string & s_id,const string & prof,const string & klass)
{
obj.name = name;
obj.age = age;
obj.易做图 = 易做图;
obj.s_id = s_id;
obj.prof = prof;
obj.klass = klass;
}
void Print()
{
cout << "Name: " << obj.name.c_str();
cout << " Age: " << obj.age.c_str();
cout << " Sex: " << obj.易做图.c_str();
cout << " ID: " << obj.s_id.c_str();
cout <<" Professional: " << obj.prof.c_str();
cout << " Class: " << obj.klass.c_str()<< "\n";
cout << "Chinese: " << chinese<< "\nMath: " << math << "\nEnglish: " << english << endl;
}
// 平均分数
void AvgMark()
{
cout << "Average mark: " << (math + chinese + english) / 3 << endl;
}
private:
Attribute obj;
// 3个主课分数
double math;
double chinese;
double english;
};int main(int argc, char* argv[])
{
// 两种不同赋值
Student st("小强","1","不明","888","编程","强强",99,88.5,77.5);
Student sd,sc;
sd = Student("小明","2","不明","999","编程","明明");
sc = sd;
sd.ModMark(99.5,88,88.5);
st.Print();
st.AvgMark();
sd.Print();
sd.AvgMark();
sc.ModAttribute("张辽","28","男","++","长枪","步弓手");
sc.ModMark(99,99,99);
sc.Print();
sc.AvgMark();
return 0;
}呵呵,有点困了。所以写的不是很规范,稍作修改即可::
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
Student(string na,int a,char s,int n,string mj,string bj,float c1,float c2,float c3):name(na),age(a),易做图(s),num(n),major(mj),banji(bj),cj1(c1),cj2(c2),cj3(c3){}
int display();
float average();
private:
string name;
int age;
char 易做图;
int num;
string major;
string banji;
float cj1;
float cj2;
float cj3;
};
int Student::display()
{
cout<<name<<" "<<age<<" "<<易做图<<" "<<num<<" "<<major<<" "<<banji<<cj1<<" "<<cj2<<" "<<cj3<<endl;
return 0;
}
float Student::average()
{
return((cj1+cj2+cj3)/3);
}
int main()
{
Student a[2]={
Student("XXX",20,'n',11,"23","34",30,30,60),
Student("XXX",21,'n',12,"34","45",50,50,50)
};
cout<<a[0].display()<<a[0].average()<<endl;
cout<<a[1].display()<<a[1].average()<<endl;
return 0;
}
class studentClass
{
public:
studentClass(char *name,char *StuNo,char *major = NULL,UCHAR age =0,bool sxe = TRUE,UINT grade =3);
void setObject(float o1 = 60,float o2 = 60,float o3 =60 );//设置科目分数
float getAvg();//获取平均值
private:
char m_cStuName[32]; //姓名
char m_cStuNo[32]; //学号
char m_cStuMajor[32];//专业
UCHAR m_UStuAge; //年龄
bool m_bStuSex; //性别
UINT m_iStuGrade; //年级
float m_fObject1; //科目1
float m_fObject2;
float m_fObject1;};