当前位置:   article > 正文

c++ 实现学生类设计_c++设计一个学生类,包括学号,姓名,性别

c++设计一个学生类,包括学号,姓名,性别
功能:设计一个Student(学生)类
  • 基本信息:学号、姓名、性别、出生日期、年级、班级、院系、专业
    其中:基本信息为private属性,成员函数为public属性

  • Student类有多个构造函数:缺省的构造函数、带参数的构造函数、带默认参数的构造函数

  • 基本功能:
    (1)使用对象数组保存学生对象
    (2)可以从键盘输入学生的基本信息
    (3)SetInfo(形参表)函数可以修改学生的基本信息
    (4)Show()函数显示学生信息

注意:  
1、构造函数分为带参数和不带参数两种,注意声明与定义
2、从键盘输入基本信息,调用带参数的构造函数生成学生对象
3、当输入的数据不合理时,要有相应的处理和提示
  • 1
  • 2
  • 3
  • 4
代码:
#include<iostream>
#include<string.h> 
using namespace std;

//Student类
class Student
{
	public:
		//这是一个缺省的构造函数,与带默认参数的构造函数只能存在一个 
		Student();
		
		//这是一个带参数的构造函数 
		Student(string ID, string name, char sex, string birthday, int grade, string stu_class, string institute, string major);
		
        //这是一个带默认参数的构造函数
	//	Student( int grade=2018, string institue="com", string major="ddd"); 
		
		//这是一个复制构造函数,注意深拷贝和浅拷贝的区别(成员数据是否有指针变量) 
		Student(const Student& obj);
		
		//析构函数 
		~Student(void);
		
		void SetInfo(string ID, string name, char sex, string birthday, int grade, string stu_class, string institute, string major);
		void Show();
		int Check_input();
	
	private:
		string ID;
		string name;
		char sex;
		string birthday;
		int grade;
		string stu_class;
		string institute;
		string major;
};

Student::Student(void)
{
	cout<<"object is being created by constructor without parameters!"<<endl;
}

//采用初始化列表来初始化字段 
Student::Student(string ID, string name, char sex, string birthday, int grade, string stu_class, string institute, string major):ID(ID),name(name),sex(sex),birthday(birthday),grade(grade),stu_class(stu_class),institute(institute),major(major)
{
	cout<<"object is being created by constructor with paramters!"<<endl;
}

//Student::Student(int garde, string institue, string major)
//{
//	grade=grade;
//	institute=institue;
//	major=major;
//}

Student::Student(const Student& obj)
{
	ID=obj.ID;
	name=obj.name;
	sex=obj.sex;
	birthday=obj.birthday;
	grade=obj.grade;
	stu_class=obj.stu_class;
	institute=obj.institute;
	major=obj.major; 
}

Student::~Student()
{
	cout<<"Student object is being deleted\n"<<endl;
}

void Student::SetInfo(string ID, string name, char sex, string birthday, int grade, string stu_class, string institute, string major)
{
	this->ID=ID;
	this->name=name;
	this->sex=sex;
	this->birthday=birthday;
	this->grade=grade;
	this->stu_class=stu_class;
	this->institute=institute;
	this->major=major;
}

void Student::Show()
{
	cout<<"学生"<<name<<"的基本信息如下:"<<endl;
	cout<<"\t学号:"<<ID<<endl;
	cout<<"\t性别:"<<sex<<endl;
	cout<<"\t出生日期:"<<birthday<<endl;
	cout<<"\t年级:"<<grade<<endl;
	cout<<"\t班级:"<<stu_class<<endl;
	cout<<"\t院系:"<<institute<<endl;
	cout<<"\t专业:"<<major<<"\n"; 
} 

int Student::Check_input()
{
	int length;
	length=ID.length();
	if(length!=7){
		cout<<"输入错误:学号格式不正确!"<<endl;
		if( !(sex=='F'||sex=='M'||sex=='f'||sex=='m') ){
		cout<<"输入错误:性别格式不正确!"<<endl; 
	    }
		return -1; 
	} 
	return 1;
} 

//程序的主函数 
int main()
{
	string ID;
	string name;
	char sex;
	string birthday;
	string stu_class;
	string institute;
	string major;
	int grade;
	int n;
	char flag; //标识学生信息是否进行修改 
	cout<<"请输入要输入信息的学生个数:";
	cin>>n;
	Student *stu[n];  //关于c++对象数组知识的总结参见  https://blog.csdn.net/u012397189/article/details/78784928
	for(int i=0;i<n;i++){
		cout<<endl<<"请输入学生"<<i+1<<"的信息:"<<endl;
		cout<<"学号:";
		cin>>ID;
		cout<<flush<<"姓名:";
		cin>>name;
		cout<<flush<<"性别(F/M):";
		cin>>sex; 
		cout<<flush<<"出生日期 Year-month:";
		cin>>birthday;
		cout<<flush<<"年级:";
		cin>>grade;
		cout<<flush<<"班级:";
		cin>>stu_class;
		cout<<flush<<"院系:";
		cin>>institute;
		cout<<flush<<"专业:";
		cin>>major;
		stu[i]=new Student(ID,name,sex,birthday,grade,stu_class,institute,major); 
		if(stu[i]->Check_input()<0){ 
			cout<<endl<<"是否需要对学生"<<name<<"的信息进行修改?Y/N"<<endl;
            cin>>flag;
	        if(flag=='Y'||flag=='y'){
			    cout<<"请输入修改后学生的信息:"<<endl;
				cout<<"学号:";
				cin>>ID;
				cout<<"姓名:";
				cin>>name;
				cout<<"性别(F/M):";
				cin>>sex; 
				cout<<"出生日期 Year-month:";
				cin>>birthday;
				cout<<"年级:";
				cin>>grade;
				cout<<"班级:";
				cin>>stu_class;
				cout<<"院系:";
				cin>>institute;
				cout<<"专业:";
				cin>>major;
		        stu[i]->SetInfo(ID,name,sex,birthday,grade,stu_class,institute,major);
			}
		} 
	}
	cout<<endl<<"以下是所有学生的基本信息:\n"<<endl; 
	for(int i=0;i<n;i++){
		stu[i]->Show();
		delete stu[i];   //new出来的空间需要手动释放,,delete[] 用于释放无参构造函数new出来的数组,对于有参数的需要一个一个手动释放 
	} 
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
运行结果截屏:

在这里插入图片描述

参考资料:

c++构造函数的默认参数
c++动态对象数组的知识总结
c++对象数组中delete 和 delete[] 的区别
c++对象数组调用构造/析构函数的方法

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/244473
推荐阅读
相关标签
  

闽ICP备14008679号