面向对象学习第四节

1.编写一个学生类,提供name、age、gender、phone、address、email成员变量,且为每个成员变量提供setter、getter方法。为学生提供默认的构造器和带所有成员变量的构造器。为学生提供方法,用于描绘吃、喝、玩、睡等行为。

2.利用第1题定义的Student类,定义一个Student[]数组保存多个Student对象作为通讯录数据。程序可通过name、email、address查询,如果找不到数据,则进行友好的提示。

/*
 * 需求:利用之前定义的Student类,定义一个Student[]数组保存多个student对象作为通讯录数据
 * 程序可通过name、email、address查询,如果找不到数据,则进行友好的提示
 * */
import java.util.Scanner;
class Student{
	private String name;
	private int age;
	private String gender;
	private long phone;
	private String address;
	private String email;
	//创建没有参数的构造器
	public Student(){	
	}
	//创建带有所有成员变量参数的构造器
	public Student(String name,int age,String gender,long phone,String address,String email){
		this.name=name;
		this.age=age;
		this.gender=gender;
		this.phone=phone;
		this.address=address;
		this.email=email;
	}
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return this.name;
	}
	public void setAge(int age){
		this.age=age;
	}
	public int getAge(){
		return this.age;
	}
	public void setGender(String gender){
		this.gender=gender;
	}
	public String getGender(){
		return this.gender;
	}
	public void setPhone(long Phone){
		this.phone=phone;
	}
	public long getPhone(){
		return this.phone;
	}
	public void setAdress(String adress){
		this.address=adress;
	}
	public String getAdress(){
		return this.address;
	}
	public void setEmail(String email){
		this.email=email;
	}
	public String getEmail(){
		return this.email;
	}
	public void Play(){
		System.out.println("学生玩游戏");
	}
	public void Eat(){
		System.out.println("学生吃东西");
	}
	public void Drink(){
		System.out.println("学生喝东西");
	}
}
class Manger{
	private Student[] a;
	/*public Manger(Student[] a){
		this.a=a;
	}*/
	public void SeachName(Student[] stu2){
		String str="张三";
		for(int i=0;i<stu2.length;i++){
			boolean b1=false;
			
			if(stu2[i].getName().equals(str)){
				System.out.println("根据学生姓名查询的信息为:"+stu2[i].getName()+","+stu2[i].getAge());
				b1=true;
			}
			if(i==stu2.length&&b1==false){
				System.out.println("查询结果不存在,请稍后查询");
			}
		}
	}
	public void SeachAge(Student[] stu2){
		for(int i=0;i<stu2.length;i++){
			boolean b1=false;
			if(stu2[i].getAge()==12){
				System.out.println("根据学生年龄查询的信息为:"+stu2[i].getName()+","+stu2[i].getAge());
				b1=true;
			}
			if(i==stu2.length&&b1==false){
				System.out.println("查询结果不存在,请稍后查询");
			}
		}
	}
}
public class Test1 {
	public static void main(String[] args){
		Student stu1=new Student();
		stu1.setName("张三");
		stu1.setAge(12);
		stu1.setGender("fafas");
		stu1.setAdress("fdasfa");
		stu1.setPhone(1233432542);
		stu1.setEmail("[email protected]");
		System.out.println("学生姓名:"+stu1.getName());
		System.out.println("学生年龄:"+stu1.getAge());
		System.out.println("学生的地址:"+stu1.getAdress());
		stu1.Play();
		stu1.Eat();
		stu1.Drink();
		Student[] stu2=new Student[3];
		Scanner in;
		in=new Scanner(System.in);
		for(int i=0;i<stu2.length;i++){
			//临时的stuI一定要在for里面定义,否则StuI赋值给stu2[i]之后
			//因为指向相同,stu2[i]会不断的重写,最后出现所有的stu2值全部一样;
			Student StuI=new Student();
			//给成员变量初始化
			System.out.println("请输入第"+(i+1)+"个学生信息");
			System.out.println("姓名:");
			StuI.setName(in.next());
			StuI.setAge(Integer.valueOf(in.next()));
			StuI.setPhone(Integer.valueOf(in.next()));
			stu2[i]=StuI;
		}
		for(int i=0;i<stu2.length;i++){
			System.out.println(stu2[i].getName());
		}
		/*
		 * 下面的代码因为值为null,所以出现空指针异常
		 * */
		/*stu2[0].setName("李四");
		stu2[0].setAge(12);
		stu2[0].setAdress("asd");
		stu2[0].setPhone(s12432523);
		stu2[0].setEmail("dasdasdsad");
		stu2[1].setName("张三");
		stu2[1].setAge(15);
		stu2[1].setAdress("dasfa");
		stu2[1].setPhone(124432543);
		stu2[1].setEmail("dasfasgsg");
		stu2[2].setName("王五");
		stu2[2].setAge(18);
		stu2[2].setAdress("asfga");
		stu2[2].setPhone(1241232523);
		stu2[2].setEmail("asdfasfasfasf");*/
		Manger m=new Manger();
		m.SeachAge(stu2);
		m.SeachName(stu2);
		//使用带所有参数的构造器
		Student stu3=new Student("王五",15,"fafgas",124125,"dasfaga","124151521");
		System.out.println("学生姓名:"+stu3.getName()+"学生的年龄为:"+stu3.getAge()+"学生的电话号码为:"+stu3.getPhone());
	}
}
3.定义普通人、老师、班主任、学生、学校这些类,提供适当的成员变量、方法用于描述其内部数据和行为特征,并提供主类使之运行。要求有良好的封装性,将不同类放在不同包下面,增加文档注释,生成API文档。

1)首先定义Person类,定义其成员变量,定义方法得到成员变量的值

public class Person {
	private String name;
	public String getName(){
		return this.name;
	}
	public void setName(String name){
		this.name=name;
	}
}
2)定义Student类,继承父类Person,调用得到成员变量name的函数
public class Student extends Person{
    Student(String name){
        //其中this可以省略
        this.setName(name);
    }
    public void study(School s){
        System.out.println("学生"+this.getName()+"在"+s.getSchoolName()+"上课");
    }
}
3)定义Teacher类,继承父类Person,调用获得成员变量name的方法
public class Teacher extends Person {
	Teacher(){
	}
	Teacher(String name){
		setName(name);
	}
	//老师给某同学布置作业
	public void setHomework(Student s){
		System.out.println(this.getName()+"老师给学生"+s.getName()+"布置作业");
	}
}
3)定义班主任类MainTeacher类,继承Teacher类。
public class MainTeacher extends Teacher {
	MainTeacher(String name){
		setName(name);
	}
	public void joinCompetition(Student s,School sc){
		//班主任要求某学生参加某学校的什么比赛
		System.out.println(this.getName()+"班主任要求学生"+s.getName()+"参加"+sc.getSchoolName()+"的"+sc.getCompetition());
	}
}
4)定义学校类School,创建得到学校类中的方法学校的名字schoolName(),获得参加什么比赛,比赛名字的方法getCompetition()
public class School {
	private String schoolName;
	private String competition;
	School(String name){
		setSchoolName(name);
	}
	public String getCompetition(){
		return competition;
	}
	public void setCompetition(String competition){
		this.competition=competition;
	}
	public void setSchoolName(String name){
		this.schoolName=name;
	}
	public String getSchoolName(){
		return schoolName;
	}
}	





猜你喜欢

转载自blog.csdn.net/xiao_chainiao/article/details/75257948