C++ 实验四 类和对象(二)

一、目的要求
1.理解面向对象的程序设计的特点;
2.学会构造函数的使用和函数重载;
3.学会对象指针的使用、对象的动态建立和释放;
4.理解类的封装性和信息隐藏、析构函数的作用。
二、实验内容:
1.定义学生类,包括学号、姓名、性别、成绩,学生分为两类,课程门数不同,并将课程成绩全部初始化为0;假设有n个学生,由键盘输入学生信息;
2.定义类成员函数,完成修改学生的信息,统计所有学生课程的平均成绩、最高分和最低分;
3.同时输出所有学生信息;
4.通过输入学生学号或姓名查询某学生的信息。
三、实验要求:
1.利用头文件和多个源文件分别实现类的声明、类成员函数的定义和主函数;
2.从键盘输入学生数,为对象动态分配内存空间,并保证对象使用完毕时释放内存空间;
3.定义构造函数完成类成员变量的初始化;
4.利用静态成员变量与静态成员函数统计所有学生课程的平均成绩、最高分和最低分;
5.利用函数的重载实现通过输入学生学号或姓名查询某学生的信息。
兼顾程序的逻辑性、人性化设计,并减少冗余代码,(比如输入时提示输入内容、输出格式一目了然等。
附代码
!!!编译环境 DevC++ 5.11 TDM-GCC 4.9.2 64-Bit Release
头文件 iquery.h

#ifndef  _IQUERY_H
#define _IQUERY_H 1
    using namespace std;
	#define MAXN 100 
	#define MAXY 5

	class student{
		private:
			int old;
			string sex;            
			string name;
			int number; 
			double chinese;
			double math;
			double english;
			double science;   
			double art;       
			double ave_grade;        //个人主科综合成绩 
			
			static double sum_1[MAXY];
			static int count_1;
			static double max_allgrade_1[MAXY];
			static double min_allgrade_1[MAXY]; 
			
			static double sum_2[MAXY];
			static int count_2;
			//第一类 存储平均值和最大最小值的数组 
			static double ave_allgrade_1[MAXY];
			static double max_1[MAXY];
			static double min_1[MAXY];
			//第二类 
			static double ave_allgrade_2[MAXY];
			static double max_2[MAXY];
			static double min_2[MAXY];
	public:	
		void data_input(int idx); 
		bool data_grade_judge();    //judge 每个学生成绩是否及格 
		void data_output(int idx);
		//查找函数 
		bool data_search(string pname)const;//重载实现姓名或学号查找 	int data_search(int *pnumber);
		bool data_search(int pnumber)const;
		//析构 
		~student();
		//计算平均数 
		static double data_ave_allgrade(int idx);
		
		//输出静态变量,实现静态成员封装 
		static double output_ave_allgrade(int idx);
		static double output_max_allgrade(int idx);
		static double output_min_allgrade(int idx);
		
		//total函数
		void total(int idx);
		
		//找最大最小 
		void judge_max(int idx);
		void judge_min(int idx);
		void init_judge_min(int idx);             //min数组第一次调用时初始化
		//修改
		void data_change(); 
	};

#endif
//	类成员函数中const的使用
//	一般放在函数体后,形如:void   fun()   const;     
//    任何不会修改数据成员的函数都因该声明为const类型。

头文件实现文件 iquery,cpp

#include <iostream>
#include "string"
#include "iquery.h"
#include "iomanip"
using namespace std; 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void student :: data_input(int idx){
	if(idx==1){
		cout<<"    姓名:" ;cin>>name;
		cout<<"    年龄:" ;cin>>old; 
		cout<<"    性别:" ;cin>>sex;
		cout<<"    学号:" ;cin>>number;
		cout<<"接下来依次输入语文,数学,英语,科学成绩"<<endl;
		cin>>chinese>>math>>english>>science;
		ave_grade=(math+chinese+english)/3;
	}
	else if(idx==2){
		cout<<"    姓名:" ;cin>>name;
		cout<<"    年龄:" ;cin>>old; 
		cout<<"    性别:" ;cin>>sex;
		cout<<"    学号:" ;cin>>number;
		cout<<"接下来依次输入语文,数学,英语,科学,艺术成绩"<<endl;
		cin>>chinese>>math>>english>>science>>art;
		ave_grade=(math+chinese+english)/3;
	}else{
		cout<<"error in student choice, only 1 or 2"<<endl;
	}
}
bool student :: data_grade_judge(){
	while(chinese<90||math<9
  • 19
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值