本实验将设计一个表示学生的类,该类具有表示姓名的属性name和表示年龄的属性age,同时还具有表示说话行为的方法speak(),用于输出学生的姓名和年龄。 1) 使用class关键字定义一个表示学生类型的类,类名为Student。 2)在Student类中定义两个成员变量name和age,分别用来表示姓名和年龄。其中,name的数据类型为String,变量age的数据类型为int。 3)在Student类中定义一个表示说话行为的speak()方法,用于输出学生的姓名和年龄。
时间: 2024-01-21 17:18:55 浏览: 85
好的,下面是实现代码:
```
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void speak() {
System.out.println("My name is " + name + ", and I am " + age + " years old.");
}
}
```
上述代码中,我们定义了一个Student类,包含了姓名和年龄两个成员变量,以及一个speak()方法用于输出学生的姓名和年龄。在构造方法中,我们通过传入的参数对姓名和年龄进行初始化。最后,我们将输出语句写在speak()方法中,以便在需要输出时进行调用。
相关问题
实验任务: 编写一个程序,模拟学生管理系 统。可以实现对学生信息的添加、 删除、修改和查询功能,要求使用 List 集合存储自定义的对象集合, 并熟练使用 List 集合的中常用方 法实现相关的操作。 预期效果: 1.定义学生类,自定义对象属性。 2.学生管理系统的主界面的代码 编写,创建集合对象,用于存储学 生数据,打印学生管理系统主界面 的相关功能,创建键盘输入功能, 用 switch 语句实现选择的功能。 最后实现多次操作并且手动退出 系统。 3.学生管理系统查询所有学生信 息的代码编写,首先判断集合中是 否有数据,如果没有数据就给出提 示,并让该方法不在继续往下执 行。如果有数据。遍历集合输出打 印数据。 4.学生管理系统添加学生信息的 代码编写,首先输入学生学号,判 断学号有没有被人占用,如果被占 用重新输入学号,没有被占用继续 录入学生姓名、年龄。家庭住址等 信息。创建学生对象,将录入的数 据存入对象。最后将学生对象添加 入集合,添加学生信息成功。 5.学生管理系统删除学生信息的 代码编写,键盘录入一个学号,到 集合中去查找,看是否有学生使用 该学号,如果有就删除该学生信 息。如果没有学生使用该学号,返 回主界面。 6.学生管理系统修改学生信息的 代码编写。键盘录入一个学号,到 集合中去查找,看是否有学生使用 该学号,如果过有就修改学生信 息。反之返回主界面
以下是基本的代码实现,可能还需要根据具体需求进行修改和完善。
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class StudentManagementSystem {
private List<Student> students;
public StudentManagementSystem() {
students = new ArrayList<>();
}
public static void main(String[] args) {
StudentManagementSystem system = new StudentManagementSystem();
system.showMainMenu();
}
public void showMainMenu() {
System.out.println("欢迎使用学生管理系统,请选择操作:");
System.out.println("1. 查询所有学生信息");
System.out.println("2. 添加学生信息");
System.out.println("3. 删除学生信息");
System.out.println("4. 修改学生信息");
System.out.println("0. 退出系统");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
switch (choice) {
case 1:
showAllStudents();
break;
case 2:
addStudent();
break;
case 3:
deleteStudent();
break;
case 4:
updateStudent();
break;
case 0:
System.out.println("谢谢使用!");
return;
default:
System.out.println("无效选择,请重新输入:");
showMainMenu();
}
}
public void showAllStudents() {
if (students.isEmpty()) {
System.out.println("暂无学生信息。");
} else {
System.out.println("学号\t姓名\t年龄\t家庭住址");
for (Student student : students) {
System.out.println(student.toString());
}
}
showMainMenu();
}
public void addStudent() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生学号:");
String id = scanner.nextLine();
for (Student student : students) {
if (student.getId().equals(id)) {
System.out.println("该学号已存在,请重新输入:");
addStudent();
return;
}
}
System.out.println("请输入学生姓名:");
String name = scanner.nextLine();
System.out.println("请输入学生年龄:");
int age = scanner.nextInt();
scanner.nextLine();
System.out.println("请输入学生家庭住址:");
String address = scanner.nextLine();
Student student = new Student(id, name, age, address);
students.add(student);
System.out.println("添加学生信息成功。");
showMainMenu();
}
public void deleteStudent() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要删除的学生学号:");
String id = scanner.nextLine();
boolean removed = false;
for (Student student : students) {
if (student.getId().equals(id)) {
students.remove(student);
System.out.println("删除学生信息成功。");
removed = true;
break;
}
}
if (!removed) {
System.out.println("未找到该学生信息。");
}
showMainMenu();
}
public void updateStudent() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要修改的学生学号:");
String id = scanner.nextLine();
boolean updated = false;
for (Student student : students) {
if (student.getId().equals(id)) {
System.out.println("请输入新的学生姓名:");
String name = scanner.nextLine();
System.out.println("请输入新的学生年龄:");
int age = scanner.nextInt();
scanner.nextLine();
System.out.println("请输入新的学生家庭住址:");
String address = scanner.nextLine();
student.setName(name);
student.setAge(age);
student.setAddress(address);
System.out.println("修改学生信息成功。");
updated = true;
break;
}
}
if (!updated) {
System.out.println("未找到该学生信息。");
}
showMainMenu();
}
class Student {
private String id;
private String name;
private int age;
private String address;
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return id + "\t" + name + "\t" + age + "\t" + address;
}
}
}
```
从实验6中的 people(人员)类派生出 student(学生)类, 添加属性:班号char classNO[7]; 从 people类派生出 teacher(教师)类, 添加属性:职务 char principalshi[11]部门 char department[21]。 从 student 类中派生出 graduate(研究生)类, 添加属性专业 char subject[21]、导师 teacher adviser; 从 graduate 类和 teacher 类派生出 TA(助生)类,注意虚基类的使用。 重载相应的成员函数,测试这些类。类之间的关系如图H所示。
好的,基于你的要求,我会给出一个实现该类层次结构的例子。
首先,我们定义一个基础类——人员类(People),它应该包括人员的基本属性,例如姓名、性别、年龄等等。我们可以定义如下的类:
```c++
class People {
public:
People(string name = "", char gender = ' ', int age = 0)
: m_name(name), m_gender(gender), m_age(age) {}
void setName(string name) { m_name = name; }
void setGender(char gender) { m_gender = gender; }
void setAge(int age) { m_age = age; }
string getName() const { return m_name; }
char getGender() const { return m_gender; }
int getAge() const { return m_age; }
private:
string m_name;
char m_gender;
int m_age;
};
```
接下来,我们可以从人员类派生出学生类(Student)。学生类应该包括人员类的所有属性,同时还应该包括学生特有的属性,例如学号、班级等等。我们可以定义如下的类:
```c++
class Student : public People {
public:
Student(string name = "", char gender = ' ', int age = 0, string classNO = "")
: People(name, gender, age), m_classNO(classNO) {}
void setClassNO(string classNO) { m_classNO = classNO; }
string getClassNO() const { return m_classNO; }
private:
string m_classNO;
};
```
在学生类中,我们使用了关键字 `public`,这意味着学生类继承了人员类的所有公有成员。因此,在学生类的构造函数中,我们可以通过调用人员类的构造函数来初始化人员类的数据成员。
在学生类中,我们还定义了学生特有的数据成员 `m_classNO`。我们还定义了一些成员函数,用于设置和获取这些数据成员。
接着,我们可以从人员类派生出教师类(Teacher)。教师类应该包括人员类的所有属性,同时还应该包括教师特有的属性,例如职务、部门等等。我们可以定义如下的类:
```c++
class Teacher : public People {
public:
Teacher(string name = "", char gender = ' ', int age = 0,
string principalshi = "", string department = "")
: People(name, gender, age), m_principalshi(principalshi), m_department(department) {}
void setPrincipalshi(string principalshi) { m_principalshi = principalshi; }
void setDepartment(string department) { m_department = department; }
string getPrincipalshi() const { return m_principalshi; }
string getDepartment() const { return m_department; }
private:
string m_principalshi;
string m_department;
};
```
在教师类中,我们同样使用了关键字 `public`,这意味着教师类继承了人员类的所有公有成员。在教师类的构造函数中,我们同样可以通过调用人员类的构造函数来初始化人员类的数据成员。
在教师类中,我们还定义了教师特有的数据成员 `m_principalshi` 和 `m_department`。同样,我们还定义了一些成员函数,用于设置和获取这些数据成员。
接下来,我们可以从学生类派生出研究生类(Graduate)。研究生类应该包括学生类的所有属性,同时还应该包括研究生特有的属性,例如专业、导师等等。我们可以定义如下的类:
```c++
class Graduate : public Student {
public:
Graduate(string name = "", char gender = ' ', int age = 0, string classNO = "",
string subject = "", Teacher adviser = Teacher(""))
: Student(name, gender, age, classNO), m_subject(subject), m_adviser(adviser) {}
void setSubject(string subject) { m_subject = subject; }
void setAdviser(Teacher adviser) { m_adviser = adviser; }
string getSubject() const { return m_subject; }
Teacher getAdviser() const { return m_adviser; }
private:
string m_subject;
Teacher m_adviser;
};
```
在研究生类中,我们同样使用了关键字 `public`,这意味着研究生类继承了学生类的所有公有成员,同时也继承了人员类的所有公有成员。在研究生类的构造函数中,我们同样可以通过调用学生类的构造函数来初始化学生类的数据成员,同时也初始化了人员类的数据成员。
在研究生类中,我们还定义了研究生特有的数据成员 `m_subject` 和 `m_adviser`。注意到 `m_adviser` 的类型是 `Teacher`,这表示研究生的导师也是一名教师。我们还定义了一些成员函数,用于设置和获取这些数据成员。
最后,我们可以从研究生类和教师类中派生出助教类(TA)。助教类应该包括研究生类和教师类的所有属性,同时还应该注意到虚基类的使用。我们可以定义如下的类:
```c++
class TA : public virtual Graduate, public virtual Teacher {
public:
TA(string name = "", char gender = ' ', int age = 0, string classNO = "",
string subject = "", Teacher adviser = Teacher(""),
string principalshi = "", string department = "")
: People(name, gender, age), Graduate(name, gender, age, classNO, subject, adviser),
Teacher(name, gender, age, principalshi, department) {}
void setInfo(string name, char gender, int age, string classNO,
string subject, Teacher adviser, string principalshi, string department) {
setName(name);
setGender(gender);
setAge(age);
setClassNO(classNO);
setSubject(subject);
setAdviser(adviser);
setPrincipalshi(principalshi);
setDepartment(department);
}
void printInfo() const {
cout << "Name: " << getName() << endl;
cout << "Gender: " << getGender() << endl;
cout << "Age: " << getAge() << endl;
cout << "ClassNO: " << getClassNO() << endl;
cout << "Subject: " << getSubject() << endl;
cout << "Adviser: " << getAdviser().getName() << endl;
cout << "Principalshi: " << getPrincipalshi() << endl;
cout << "Department: " << getDepartment() << endl;
}
};
```
在助教类中,我们使用了关键字 `virtual`,这意味着助教类继承了研究生类和教师类的所有公有成员,同时还避免了虚基类的问题。在助教类的构造函数中,我们使用了人员类、研究生类和教师类的构造函数来初始化这些类的数据成员。
在助教类中,我们还定义了一些成员函数,用于设置和获取数据成员,以及打印助教的信息。
使用上述代码,我们可以创建人员对象、学生对象、教师对象、研究生对象和助教对象,并使用它们的成员函数来设置和获取它们的属性。例如:
```c++
People p("Tom", 'M', 20);
Student s("Alice", 'F', 18, "Class 1");
Teacher t("Bob", 'M', 30, "Professor", "Department of Computer Science");
Graduate g("Cindy", 'F', 25, "Class 2", "Computer Science", t);
TA ta("David", 'M', 24, "Class 3", "Software Engineering", t, "Teaching Assistant", "Department of Computer Science");
ta.printInfo();
```
输出结果为:
```
Name: David
Gender: M
Age: 24
ClassNO: Class 3
Subject: Software Engineering
Adviser: Bob
Principalshi: Teaching Assistant
Department: Department of Computer Science
```
希望这个例子对你理解从人员类派生出学生类、教师类、研究生类和助教类的层次结构有所帮助。
阅读全文