注册 登录
编程论坛 C++教室

刚刚接触C++,有有一道题目做不出来,求帮助

红尘梦123456 发布于 2010-12-09 12:40, 669 次点击
设计一个学生类CStudent,其结构如下:
    私有数据成员Name(学生姓名)、Degree(成绩)、Level[7](成绩等级);
    构造函数对数据成员初始化;
    设计一个CStudents的友元类CProcess,其结构包含两个成员函数:
    void Transform(CStudent& s);实现对s的数据成员Level的判断其成绩的等级,:>=90为优秀;80~89为良好;70~79为中等;60~69为及格;< 60为不及格;
    void Display(CStudent& s)输出s成绩的等级;
    输出结果如下:
姓名    成绩    等级
Mary    78    中等
Jack    93    优秀
Mike    54    不及格
John    88    良好

4 回复
#2
laoyang1032010-12-09 13:55
程序代码:
#include <iostream.h>
#include <string.h>
class Student
{
    friend class CProcess;
private:
    char *name;
    int  socre;
    int  lev[5];
public:
    Student(char *name,int socre);
    ~Student();
};
Student::Student(char *name,int socre)
{
    this->name=new char[strlen(name)+1];
    strcpy(this->name,name);
    this->socre=socre;
    for(int i=0;i<5;i++)
    {
        this->lev[i]=0;//等于1的位置代表等级  例如 lev[0]=1  代表不及格
    }
}
Student::~Student()
{
    ;
}
class CProcess
{
public:
    CProcess()
    {;}
    ~CProcess()
    {;}
    void Transform(Student& s);
    void Display(Student& s);
};
void CProcess::Transform(Student& s)
{
    if(s.socre>=90)/////开始判定
        s.lev[4]=1;
    if(s.socre>=80&&s.socre<=89)
        s.lev[3]=1;
    if(s.socre>=70&&s.socre<=79)
        s.lev[2]=1;
    if(s.socre>=60&&s.socre<=69)
        s.lev[1]=1;
    if(s.socre<=60)
        s.lev[0]=1;
}
void CProcess::Display(Student& s)
{
    cout<<"姓名:"<<s.name;
    cout<<"成绩 :"<<s.socre;
    for(int i=0;i<5;i++)
    {
        if(s.lev[i]==1)
           cout<<"等级 :"<<i;
    }
}
int main()
{
    Student s("yang",92);
    CProcess p;
    p.Transform(s);
    p.Display(s);
    return 0;
}
好了  你可以去测试了  主函数自己写一个   如果是作业 对不起你们老师了  呵呵
#3
红尘梦1234562010-12-09 16:12
嘿嘿,谢谢了,我仔细研究研究
#4
zhangnanok12010-12-10 16:35
调试出错啊   syntax error : identifier 's'

void CProcess::Transform(CStudent& s)
{
    if s.degree>=90
        s.Level[4]=1;
    if (s.degree>=80 && s.degree<90)
        s.Level[3]=1;
    if    (s.degree>=70 && s.degree<80)
        s.Level[2]=1;
    if (s.degree>=60 && s.degree<70)
        s.Level[1]=1;
    if s.degree<60
        s.Level[0]=1;
};
#5
Mack22010-12-10 21:01
#include<iostream.h>
#include<string.h>
class CProcess;
class CStudent
{
    public:
    CStudent();
    friend class CProcess;
    private:
        char Name[10];
        float Degree;
        char*Level;
};
class CProcess
{
public:
 void Transform(CStudent& s);
 void Display(CStudent& s);
};
CStudent::CStudent()
{
    char na[10];
    float de;
    cout<<"输入姓名:"<<endl;
    cin>>na;
    cout<<"输入成绩:"<<endl;
    cin>>de;
    strcpy(Name,na);
    Degree=de;
}
void CProcess::Transform(CStudent& s)
{
    if(s.Degree>=90)
        s.Level="优秀";
    else if(s.Degree>=80)
        s.Level="良好";
    else if(s.Degree>=70)
        s.Level="中等";
    else if(s.Degree>=60)
        s.Level="及格";
    else
        s.Level="不及格";
        
}
void CProcess::Display(CStudent& s)
{
   
    cout<<s.Name<<"    "<<s.Degree<<"     "<<s.Level<<endl;
}
int main()
{
CStudent stu1,stu2,stu3,stu4;
CProcess po;
po.Transform(stu1);
po.Transform(stu2);
po.Transform(stu3);po.Transform(stu4);
cout<<"姓名"<<"    "<<" 成绩 "<<"    "<<"等级"<<endl;
po.Display(stu1);
po.Display(stu2);
po.Display(stu3);po.Display(stu4);
return 0;
}
此程序是很简单的,核心是明白友元类特点,但是在平时要慎重的应用友元。
1