java练习——情景模拟,模拟学校里的某几个情景

时间:2023-02-13 20:59:13

题目:

定义普通人、老师、班主任、学生、学校这些类,提供适当的成员变量、方法用于描述其内部数据和行为特征,并提供主类运行。要求尽量抽象,封装好各个对象的职责。 

场景1:学生在学校上课 
场景2:老师给学生布置作业 

场景3:班主任要求学生参加学校的文体比赛

对于这道题,我定义了普通人,学生,老师,班主任,学校,作业,课程,活动这几个类

作业类:

<span style="font-size:14px;">public class Homework {
/*科目,要求,截止日期*/
private String subject;
private String requirement;
private String deadline;
public Homework(String tsubject,String trequirement,String tdeadline){
subject=tsubject;
requirement=trequirement;
deadline=tdeadline;
}
//输出作业信息
public void displayInfo(){
System.out.println("科目:"+subject+",内容:"+requirement+",截止日期:"+deadline);
}
}</span>

课程类:

<span style="font-size:14px;">public class Lesson {
//课程名称
private String lessonname;
//课程时间
private String time;
//上客的场所
private String place ;
//任教教室
private String teacher;
public Lesson(String tlessonname,String ttime,String tplace,String tteacher){
lessonname=tlessonname;
time=ttime;
place=tplace;
teacher=tteacher;
}

public void resetLesson(String tlessonname,String ttime,String tplace,String tteacher){
//System.out.println("更改课程信息");
lessonname=tlessonname.equals("no change")?lessonname:tlessonname;
teacher=tteacher.equals("no change")?teacher:tteacher;
time=ttime.equals("no change")?time:ttime;
place=tplace.equals("no change")?place:tplace;
}
//输出课程内容
public void displayInfo(){
System.out.println("课程:"+lessonname+",任教教师:"+teacher+",时间:"+time+",地点:"+place);
}
}</span>

课程类里包含课程的信息,以及显示,修改课程信息的方法。

活动类:

<span style="font-size:14px;">public class Activity {
//活动名称,活动时间,活动地点,活动内容
private String name;
private String time;
private String place;
private String content;
public Activity(String tname,String ttime,String tplace,String tcontents){
// TODO Auto-generated constructor stub
name=tname;
time=ttime;
place=tplace;
content=tcontents;
}
public String getName(){
return this.name;
}
//输出活动信息
public void displayInfo(){
System.out.println("活动名称:"+name+",活动时间:"+time+",活动地点:"+place+"\n活动内容:"+content);
}
}</span>

普通人类:

<span style="font-size:14px;">public class Person {
protected String name="不详";
protected char gender='谜';
protected int age;
/*@param
* 姓名,性别,年龄
*/
public Person(String tname,char tgender,int tage){
name=tname;
gender=tgender;
age=tage;
}
public String getName(){
return this.name ;
}
//输出这个人的信息
public void displayInfo(){
System.out.println("姓名:"+name+",性别:"+gender+",年龄:"+age);
}</span>
普通人作为父类派生出学生类和老师类

学生类:

<span style="font-size:14px;">public class Student extends Person {
//专业和班级
private String major,gradeandclass;
/*@parameter
* 姓名,性别,年龄,专业,班级
*/
public Student(String tname,char tgender,int tage,
String tmajor,String tgradeandclass){
super(tname, tgender, tage);
major=tmajor;
gradeandclass=tgradeandclass;
}
//输出学生的信息
public void displayInfo() {
// TODO Auto-generated method stub
super.displayInfo();
System.out.println("专业:"+major+",班级:"+gradeandclass);
}
public void haveLesson(Lesson lesson){
System.out.print(super.name+"同学正在上课,");
System.out.println("课程信息如下");
lesson.displayInfo();
}
public void doHomework(Homework homework){
System.out.print(super.name+"同学要做作业,");
System.out.println("作业内容如下");
homework.displayInfo();
}
public void toActivity(Activity activity){
System.out.print(this.name+"同学被叫去参加\""+activity.getName()+"\"活动了");
}
}</span>

老师类:

<span style="font-size:14px;">public class Teacher extends Person {
//职称
protected String title;
//任教科目
private String subject;
public Teacher(String tname, char tgender, int tage,String ttitle,String tsubject) {
super(tname, tgender, tage);
// TODO Auto-generated constructor stub
title=ttitle;
subject=tsubject;
}
public Lesson haveLesson(Lesson lesson){
lesson.resetLesson("no change", "no change", "no change", super.name);
System.out.print(super.name+"老师正在上课,");
System.out.println("课程信息如下");
lesson.displayInfo();
return lesson;
}
/*@parameter
* 作业内容,截止日期
*/
public Homework setHomework(String trequirement,String tdeadline){
Homework homework=new Homework(this.subject, trequirement, tdeadline);
System.out.println(super.name+"老师布置了作业,");
System.out.println("作业内容如下");
homework.displayInfo();
return homework;
}
}</span>

班主任类:

<span style="font-size:14px;">public class HeadTeacher extends Teacher {

public HeadTeacher(String tname, char tgender, int tage, String ttitle, String tsubject) {
super(tname, tgender, tage, ttitle, tsubject);
// TODO Auto-generated constructor stub
}
public Activity toActivity(Activity activity,Student student){
System.out.print(super.name+"叫了"+student.getName());
System.out.println("去参加\""+activity.getName()+"\"活动");
return activity;
}
}</span>
班主任类比教师类对一个叫学生去参加文体活动的行为

学校类:

<span style="font-size:14px;">public class School {

public static Lesson launchLesson(String tlessonname,String ttime,String tplace){
Lesson lesson=new Lesson(tlessonname, ttime, tplace, "待定");
System.out.print("学校课设了一门课程,");
System.out.println("课程信息如下:");
lesson.displayInfo();
return lesson;
}
public static Activity carryOutActivity(){
String name,time,place,contents;
Scanner scanner=new Scanner(System.in);
System.out.print("请输入活动名称:");
name=scanner.next();
System.out.print("请输入活动时间:");
time=scanner.next();
System.out.print("请输入活动地点:");
place=scanner.next();
System.out.print("请输入活动内容:");
contents=scanner.next();
scanner.close();
Activity activity=new Activity(name,time,place,contents);
System.out.print("学校开展了一个活动,");
System.out.println("活动内容如下");
activity.displayInfo();
return activity;
}
}</span>
学校类有两个静态方法,分别是开设课程和开展文体活动

最后是一个用于调试的主类:

<span style="font-size:14px;">public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Student stua=new Student("张三", '♂', 18, "信计", "15(3)");
Student stub=new Student("李四", '♂', 18, "信计", "15(3)");
Student stuc=new Student("王五", '♂', 18, "信计", "15(3)");
Student stud=new Student("李四", '♂', 18, "信计", "15(3)");
Teacher tc=new Teacher("赵六", '♂', 37, "教授", "数学分析");
HeadTeacher htc=new HeadTeacher("何七", '♀', 30, "副教授","高等代数");
Lesson lessona=School.launchLesson("数学分析", "10:10~11:45", "教学楼316");
Lesson lessonb=School.launchLesson("高等代数", "8::20~9:50", "教学路615");
lessona=tc.haveLesson(lessona);
stua.haveLesson(lessona);
stub.haveLesson(lessona);
lessonb=htc.haveLesson(lessonb);
stuc.haveLesson(lessonb);
stuc.doHomework(htc.setHomework("P123第1,2题", "6月18日"));
stud.toActivity(htc.toActivity(School.carryOutActivity(), stud));
}
}</span>

运行结果:

<span style="font-size:14px;">学校课设了一门课程,课程信息如下:
课程:数学分析,任教教师:待定,时间:10:10~11:45,地点:教学楼316
学校课设了一门课程,课程信息如下:
课程:高等代数,任教教师:待定,时间:8::20~9:50,地点:教学路615
赵六老师正在上课,课程信息如下
课程:数学分析,任教教师:赵六,时间:10:10~11:45,地点:教学楼316
张三同学正在上课,课程信息如下
课程:数学分析,任教教师:赵六,时间:10:10~11:45,地点:教学楼316
李四同学正在上课,课程信息如下
课程:数学分析,任教教师:赵六,时间:10:10~11:45,地点:教学楼316
何七老师正在上课,课程信息如下
课程:高等代数,任教教师:何七,时间:8::20~9:50,地点:教学路615
王五同学正在上课,课程信息如下
课程:高等代数,任教教师:何七,时间:8::20~9:50,地点:教学路615
何七老师布置了作业,
作业内容如下
科目:高等代数,内容:P123第1,2题,截止日期:6月18日
王五同学要做作业,作业内容如下
科目:高等代数,内容:P123第1,2题,截止日期:6月18日
请输入活动名称:<u>春游</u>
请输入活动时间:<u>6月18日</u>
请输入活动地点:<u>华南植物园</u>
请输入活动内容:<u>到华南植物园里,逛一逛,加深学生间的感情</u>
学校开展了一个活动,活动内容如下
活动名称:春游,活动时间:6月18日,活动地点:华南植物园
活动内容:到华南植物园里,逛一逛,加深学生间的感情
何七叫了李四去参加"春游"活动
李四同学被叫去参加"春游"活动了</span>
注:下划线部分为从控制台里输入的内容。

感想:

我还是第一次写这种要求这么抽象的程序,除了一个描述不太具体的结果就没有其他详细要求了。一开始看到题目要求时,觉得有点难入手,后来想了一想觉得也并没有那么难,但再仔细思考后觉得要把整个情景想通也不是一件容易的事。大概这就是所谓的领导一句话吧,可能现在很多程序员在工作中也总是遇到这种情况吧(我还是学生,这只是我猜的,猜错了别打我)