面向对象程序设计与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)//zs为2
{
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(自动生成)
比较Tom与Jane的成绩,明显Jane高于Tom ,输出Tom 比Jane差,输出正确。
自己程序运行结果截屏及说明
检查他人程序发现问题和学习心得
同学程序靓点:
他上交作业很早,说明他对于代码的了解很好。我从他的代码中学到的很多。例如他的main函数中的操作就有很多亮点,如对于人数的控制是由用户来控制的,他使用的是new的用法,是使人数可变,还有对于比较的时对于指针的操作。
你所发现的同学程序问题:
使用的名称很随意,如果能不适用中文拼音就更好了。
作业完成及检查学习心得
-
知道了引用的写法,知道引用如何使用,能正确的写出使用引用的程序。
-
通过在网上查找,知道了cout、cin的一些用法(本程序中为体现)。
-
知道了static用法,明白了在 类中如何声明和在类以外定义的用法。
-
知道了友元的使用方法,知道友元并不是类的成员,只是写在类中而已。