设计一个学生类Student:
1.数据成员包括:学号,姓名,性别,出生日期,院系、专业;其中,“出生日期”要声明为一个内嵌对象;2.成员函数基本功能有:
(a)可以从键盘输入学生的基本信息;
(b)定义一个函数setImfo(形参表),可以修改学生的基本信息;
(c)成员函数void showO显示学生信息;
3.Student类要包含:构造函数、内联成员函数、带默认参
数的构造函数、复制构造函数;
【以下回答由 GPT 生成】
#include <stdio.h>
#include <string.h>
// 定义日期结构体
typedef struct {
int year;
int month;
int day;
} Date;
// 学生类定义
typedef struct {
char id[20];
char name[20];
char sex[10];
Date birth;
char department[20];
char major[20];
} Student;
// 函数声明
void inputInfo(Student *student);
void setInfo(Student *student, char name[], char sex[], Date birth, char department[], char major[]);
void showInfo(Student student);
inline char* getStudentName(Student student);
Student createStudent();
Student createStudentWithDefaultValue(char name[], char sex[], Date birth, char department[], char major[]);
Student copyStudent(Student student);
// 主函数
int main() {
// 创建学生对象,并从键盘输入学生信息
Student student;
inputInfo(&student);
// 显示学生信息
showInfo(student);
// 修改学生信息
setInfo(&student, "Tom", "Male", student.birth, "Computer Science", "Software Engineering");
// 显示修改后的学生信息
showInfo(student);
// 获取学生姓名
char *name = getStudentName(student);
printf("Student name: %s\n", name);
// 创建新的学生对象,并提供默认值
Student studentWithDefaultValue = createStudentWithDefaultValue("Jerry", "Male", student.birth, "Computer Science", "Software Engineering");
showInfo(studentWithDefaultValue);
// 复制现有学生对象
Student copiedStudent = copyStudent(student);
showInfo(copiedStudent);
return 0;
}
// 从键盘输入学生信息
void inputInfo(Student *student) {
printf("Please enter student information:\n");
printf("ID: ");
scanf("%s", student->id);
printf("Name: ");
scanf("%s", student->name);
printf("Sex: ");
scanf("%s", student->sex);
printf("Birth: (YYYY-MM-DD) ");
scanf("%d-%d-%d", &(student->birth.year), &(student->birth.month), &(student->birth.day));
printf("Department: ");
scanf("%s", student->department);
printf("Major: ");
scanf("%s", student->major);
}
// 修改学生信息
void setInfo(Student *student, char name[], char sex[], Date birth, char department[], char major[]) {
strcpy(student->name, name);
strcpy(student->sex, sex);
student->birth = birth;
strcpy(student->department, department);
strcpy(student->major, major);
}
// 显示学生信息
void showInfo(Student student) {
printf("Student ID: %s\n", student.id);
printf("Student Name: %s\n", student.name);
printf("Student Sex: %s\n", student.sex);
printf("Student Birth: %d-%d-%d\n", student.birth.year, student.birth.month, student.birth.day);
printf("Student Department: %s\n", student.department);
printf("Student Major: %s\n", student.major);
}
// 获取学生姓名,内联成员函数
inline char* getStudentName(Student student) {
return student.name;
}
// 构造函数
Student createStudent() {
Student student;
return student;
}
// 带默认参数的构造函数
Student createStudentWithDefaultValue(char name[], char sex[], Date birth, char department[], char major[]) {
Student student;
strcpy(student.name, name);
strcpy(student.sex, sex);
student.birth = birth;
strcpy(student.department, department);
strcpy(student.major, major);
return student;
}
// 复制构造函数
Student copyStudent(Student student) {
Student newStudent;
strcpy(newStudent.id, student.id);
strcpy(newStudent.name, student.name);
strcpy(newStudent.sex, student.sex);
newStudent.birth = student.birth;
strcpy(newStudent.department, student.department);
strcpy(newStudent.major, student.major);
return newStudent;
}
以上是一个使用C语言实现的设计学生类的程序。详细解释如下:
Date
,包含年、月、日三个成员变量。Student
,包含学号、姓名、性别、出生日期、院系、专业等数据成员。inputInfo
、setInfo
和showInfo
。getStudentName
函数中用inline
关键字定义了一个内联成员函数,用于获取学生的姓名。createStudent
用于创建一个学生对象,不带任何参数。createStudentWithDefaultValue
,可以创建一个学生对象,并可以提供默认值。copyStudent
,用于创建一个与现有学生对象相同的新对象。main
中,示例了如何使用这些函数进行学生对象的创建、信息输入、修改、显示和复制操作。