《疯狂Java讲义》第5章 面向对象(上)——课后练习

学生类设计与应用
本文设计了一个学生类,包括姓名、年龄等属性及其增删改查方法,并实现了吃、喝等行为方法。同时,利用该类创建了学生数组作为通讯录,支持按姓名、邮箱、地址查询。

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

答案:

import java.util.*;

public class Student
{
	//定义六个成员变量,并隐藏起来
	private String name;
	private int age;
	private String gender;
	private String phone;
	private String address;
	private String email;

	//提供操作name成员变量的方法
	public void setName(String name)
	{
		//执行合理性校验,要求学生姓名必须在2-8位之间
		if (name.length()>8 || name.length()<2) 
		{
			System.out.println("输入的学生姓名不符合要求!");
			return;
		}
		else
		{
			this.name=name;
		}
	}
	public String getName()
	{
		return this.name;
	}

	//提供操作age成员变量的方法
	public void setAge(int age)
	{
		//执行合理性校验,要求学生年龄必须在6-30之间
		if (age>30 || age<6) 
		{
			System.out.println("输入的学生年龄不符合要求!");
			return;
		}
		else
		{
			this.age=age;
		}
	}
	public int getAge()
	{
		return this.age;
	}

	//提供操作gender成员变量的方法
	public void setGender(String gender)
	{
		if (gender != "男" || gender != "女") 
		{
			System.out.println("输入的学生的性别不符合要求!");
			return;
		}
		else
		{
			this.gender=gender;
		}
	}
	public String getGender()
	{
		return this.gender;
	}
	//提供操作phone成员变量的方法
	public void setPhone(String phone)
	{
		if (phone.length()<15) //最好用正则表达式,本书第七章有介绍。
		{
			System.out.println("输入的学生电话号码位数不正确!");
			return;
		}
		else
		{
			this.phone=phone;
		}
	}
	public String getPhone()
	{
		return this.phone;
	}
	//提供操作address成员变量的方法
	public void setAddress(String address)
	{
		this.address=address;
	}
	public String getAddress()
	{
		return this.address;
	}
	//提供操作email成员变量的方法
	public void setEmail(String email)
	{
		this.email=email;
	}
	public String getEmail()
	{
		return this.email;
	}
	//学生类默认的构造器
	public Student()
	{
		this.name="刘备";
		this.age=28;
		this.gender="男";
		this.phone="134567890";
		this.address="大汉涿郡楼桑村";
		this.email="dahanhuangshu@126.com";
	}
	//学生类带成员变量的构造器
	public Student(String name,int age,String gender,String 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 eat()
	{
		System.out.println("吃:"+"日啖荔枝三百颗,不妨长作岭南人。");
	}
	//提供“喝”的行为方法
	public void drink()
	{
		System.out.println("喝:"+"葡萄美酒夜光杯,欲饮琵琶马上催。");
	}
	//提供“玩”的行为方法
	public void play()
	{
		System.out.println("玩:"+"牧童骑黄牛,歌声振林樾。意欲捕鸣蝉,忽然闭口立。");
	}
	//提供“睡”的行为方法
	public void sleep()
	{
		System.out.println("睡:"+"大梦谁先觉?平生我自知。草堂春睡足,窗外日迟迟。");
	}
	//主方法入口
	public static void main(String[] args) 
	{
		Student st1=new Student();
		Student st2=new Student("刘备",28,"男","123456789","大汉涿郡楼桑村","dahanhuangshu@126.com");
		Student [] stu = {st1, st2};
		Scanner in = new Scanner(System.in);
        System.out.println("请输入名字或邮箱或地址中的一个:");
        String input = in.next();
        for (Student stus : stu) 
        {
            // 用“==”运算符,该运算符表示指向字符串的引用是否相同
            // 用.equals()方法,该方法比较的是字符串的内容是否相同
            if (input.equals(stus.getName()) || input.equals(stus.getAddress()) || input.equals(stus.getEmail()))
            {
                System.out.println("存在该学生...");
                System.out.println("===============================");
                System.out.println(stus.name+"|"+stus.age+"|"+stus.gender+"|"+stus.phone+"|"+stus.address+"|"+stus.email);
                System.out.println("===============================");
                st1.eat();
                st1.drink();
                st1.play();
                st1.sleep();
                break;
            }
            else
            {
            	System.out.println("不存在该学生...");
            	break;
            }
        }
	}
}

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

答案:见上一题源代码。

3、定义普通人、老师、男主任、学生、学校这些类,提供适当的成员变量、方法用于描述其内部数据和行为特征,并提供主类使之运行。要求有良好的封装性,将不同类放在不同哦包小面,增加文档注释,生成API文档。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值