XS_C 学生类的成绩输入比较

面向对象程序设计与C++实验作业报告#7

作业要求

7[XS_C] 设计、编写和调试面向对象 C++程序,支持和实现学生基本信息及其 成绩的录入、输出及比较等管理功能。基本要求同作业题[XS_A],但要求增加一个全局函数来实现任意两个学生对象成绩(函数原型要求无返回值、两个形如 const CStudent & zS1, …的学生类常量引用的参数对象,且该函数定义为学生类 的友元函数)的比较并通过主函数调用和测试其功能实现情况

程序设计说明

复数类设计

类名

Cstudent

备注

成员函数

void setN();//设置学号和姓名

设置学号和姓名

void setScore();//设置成绩

设置成绩

void show();//显示函数

显示输入的内容

Cstudent(const Cstudent &zs)

拷贝构造函数

Cstudent()

构造函数

Friend void compare(const Cstudent &zs1,const Cstudent &zs2)

(友元)比较函数

成员变量

char Num[15];//学号

学生学号

char *Name;//姓名

学生姓名

int Score[5];//成绩

学生5门成绩

关键函数设计说明

       1.voidsetN();//设置学号和姓名 输入学号和姓名,在输入姓名之前为姓名变量用new开空间。

       2.voidsetScore();//设置成绩 利用for循环输入成绩

       3.voidshow();//显示函数 显示我输入的的学生信息 并在其中通过改变静态数n的方法,改变学号

4.friend voidcompare(const Cstudent &zs1,const Cstudent &zs2);//比较函数,将两个类输入,通过将类中成绩求和、比较,输出“**”的成绩比“**”成绩好//不相上下。

源程序

由学生类声明头文件student.h、实现源程序文件student.cpp和运算例程main.cpp组成。

学生类声明头文件student.h代码清单

#ifndef STUDENT_H

#define STUDENT_H

#include <string>

using namespace std;

class Cstudent

{

       charNum[15];//学号

       char *Name;//姓名

       intScore[5];//成绩

       static int n ;

public:

       void setN();//设置姓名

       voidsetScore();//设置成绩

       void show();//显示函数

       friend voidcompare(const Cstudent&zs1,const Cstudent&zs2);

       friend voidSetToReal();

       /*voidcompare2(const Cstudent *ps);

*/   

 

       Cstudent()

       {

              Name= new char[20];

              strcpy_s(Num,"JK08");

       }

       ~Cstudent()

       {

             

                     delete[]Name;

 

       }

       Cstudent(const Cstudent &zs)

       {

              Name=new char[20];

              strcpy(Num,zs.Num);

              strcpy(Name,zs.Name);

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

              {

                     Score[i]=zs.Score[i];

      

              }

       }

};

 

#endif

学生类实现源程序文件student.cpp代码清单

#include "student.h"

#include <iostream>

#include <string>

#include <stdio.h>

#include <iomanip>

using namespace std;

int Cstudent::n=0;

void Cstudent::setN()//设置姓名

{

       cout<<"请输入姓名"<<endl;

       cin>>Name;

}

void Cstudent::setScore()//输入成绩

{

       cout<<"请输入分数(5次)"<<endl;

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

       {

              cin>>Score[i];  

       }    

}

 

 

void Cstudent::show()

{

       cout<<"学生姓名:"<<Name<<endl;

       cout<<"学生学号:"<<Num;

       n++;

    printf("%04d\n",n);

      

       cout<<"学生成绩:"<<endl;

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

       {

              cout<<"科目"<<i+1<<":"<<Score[i]<<endl;

       }

       cout<<endl;

 

}

 

void  compare (const Cstudent &zs1,const Cstudent &zs2)//zs2

{

 

       doublesum1=0,sum2=0;

 

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

       {

              sum1+=zs1.Score[i];

              sum2+=zs2.Score[i];

       }

       if(sum1> sum2)

       {

              cout<<"学生"<<zs1.Name<<"比学生"<<zs2.Name<<"成绩好"<<endl;                         

       }

       if(sum1< sum2)

       {

              cout<<"学生"<<zs1.Name<<"比学生"<<zs2.Name<<"成绩差"<<endl;

       }

       if(sum1 ==sum2)

       {

      

              cout<<"学生"<<zs1.Name<<"与学生"<<zs2.Name<<"成绩不相上下"<<endl;

       }

}

 

 

学生类运算例程main.cpp代码清单

#include "student.h"

#include <string.h>

#include <iostream>

#include <stdio.h>

using namespace std;

 

int main()

{

       Cstudent *a;//设置变量

       int num;

       cout<<"请输入人数:";

       cin>>num;

       a=new Cstudent [num];

 

       int i=0;

       cout<<"请输入学生的信息"<<endl;

       for(i=0;i<num;i++)

       {

              a[i].setN();

              a[i].setScore();

       }

       extern int  n;

       cout<<"输入的信息为";

       for( i=0;i<num;i++)

       {

              a[i].show();

       }

       cout<<"请输入希望比较的学生序号(如“jk080001”则为1\n";

       inttest1,test2;//利用指针的性质来操作数据

       cin>>test1>>test2;

       compare(*(a+test1-1), *(a+test2-1));

 

       system("pause");

       return 0;

}

 

}程序测试报告

测试用例设计

Tom 成绩12 12 12 12 12 学号JK080001(自动生成)

Jane 成绩23 23 23 23 23 学号JK080002(自动生成)

Lucy 成绩34 34 34 34 34 学号JK080003(自动生成)

比较TomJane的成绩,明显Jane高于Tom ,输出Tom Jane差,输出正确。

 

自己程序运行结果截屏及说明

检查他人程序发现问题和学习心得

同学程序靓点:

他上交作业很早,说明他对于代码的了解很好。我从他的代码中学到的很多。例如他的main函数中的操作就有很多亮点,如对于人数的控制是由用户来控制的,他使用的是new的用法,是使人数可变,还有对于比较的时对于指针的操作。

你所发现的同学程序问题:

使用的名称很随意,如果能不适用中文拼音就更好了。

作业完成及检查学习心得

  1. 知道了引用的写法,知道引用如何使用,能正确的写出使用引用的程序。

  2. 通过在网上查找,知道了coutcin的一些用法(本程序中为体现)

  3. 知道了static用法,明白了在 类中如何声明和在类以外定义的用法。

  4. 知道了友元的使用方法,知道友元并不是类的成员,只是写在类中而已。





  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值