c++ 实现学生类设计

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

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

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

注意:  
1、构造函数分为带参数和不带参数两种,注意声明与定义
2、从键盘输入基本信息,调用带参数的构造函数生成学生对象
3、当输入的数据不合理时,要有相应的处理和提示
代码:
#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;
}
运行结果截屏:

在这里插入图片描述

参考资料:

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

  • 30
    点赞
  • 245
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用 C 语言编写的学生和教师类的示例代码: ```c #include <stdio.h> #include <string.h> // 学生类 typedef struct { char name[20]; // 姓名 int age; // 年龄 char gender[10]; // 性别 int grade; // 年级 } Student; // 教师类 typedef struct { char name[20]; // 姓名 int age; // 年龄 char gender[10]; // 性别 char subject[20]; // 所教科目 } Teacher; // 学生类的方法:打印学生信息 void print_student_info(Student *s) { printf("姓名:%s\n", s->name); printf("年龄:%d\n", s->age); printf("性别:%s\n", s->gender); printf("年级:%d\n", s->grade); } // 教师类的方法:打印教师信息 void print_teacher_info(Teacher *t) { printf("姓名:%s\n", t->name); printf("年龄:%d\n", t->age); printf("性别:%s\n", t->gender); printf("所教科目:%s\n", t->subject); } // 测试代码 int main() { // 创建一个学生对象 Student s; strcpy(s.name, "张三"); s.age = 18; strcpy(s.gender, "男"); s.grade = 3; // 创建一个教师对象 Teacher t; strcpy(t.name, "李老师"); t.age = 35; strcpy(t.gender, "女"); strcpy(t.subject, "数学"); // 调用学生类的方法打印学生信息 print_student_info(&s); // 调用教师类的方法打印教师信息 print_teacher_info(&t); return 0; } ``` 以上代码定义了两个结构体类型:`Student` 和 `Teacher`,分别代表学生和教师类。每个结构体中包含了一些成员变量,分别表示该类的属性。同时,也定义了两个方法:`print_student_info` 和 `print_teacher_info`,分别用于打印学生和教师的信息。在 `main` 函数中,创建了一个学生对象和一个教师对象,并分别调用了它们的方法打印信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值