1.实验目的
(1)通过实验掌握Java中面向对象思维;
(2)通过实验理解掌握Java中的构造函数、继承、封装、接口等。
2.实验内容
【学校请假审批系统】需求如下:
3.实验过程
1.构建思路:
2.代码实现:
步骤一:创建一个抽象类,定义一个人无论是谁,都有名字、年龄、编号的属性。
package cn.ypc;
public abstract class People {
String name;
int age;
String id;
People(String name,int age,String id){
this.name = name;
this.age = age;
this.id = id;
}
}
步骤二:创建一个接口,编写请假这个功能抽象方法。
package cn.ypc;
import java.util.ArrayList;
public interface Qingjia {
public abstract void qingjia(ArrayList<Qingjiadan> qi,String start
,String end,String why,int day);
}
步骤三:创建抽象类的子类,即学生类、老师类、领导类,并给学生类和老师类连接请假接口。
package cn.ypc;
import java.util.ArrayList;
public class Student extends People implements Qingjia{
Student(String name, int age, String id) {
super(name, age, id);
}
@Override
public void qingjia(ArrayList<Qingjiadan> qi, String start, String end, String why, int day) {
qi.add(new Qingjiadan(name,start,end,why,day,0,0));
System.out.println("学生 " + name + "在" + start + " 至 " + end + "因为 "
+ why +" 原因 需要请假,申请已提交!");
}
}
package cn.ypc;
import java.util.ArrayList;
public class Teacher extends People implements Qingjia{
Teacher(String name, int age, String id) {
super(name, age, id);
}
@Override
public void qingjia(ArrayList<Qingjiadan> qi, String start, String end, String why, int day) {
qi.add(new Qingjiadan(name,start,end,why,day,0,1));
System.out.println("教师 " + name + "在" + start + " 至 " + end + "因为 "
+ why +" 原因 需要请假,申请已提交!");
}
}
package cn.ypc;
public class Leader extends People {
Leader(String name, int age, String id) {
super(name, age, id);
}
}
步骤四:创建请假单类,包括请假者的名字、起止时间、原因、天数,用一个ss变量分辨是老师还是学生。
package cn.ypc;
public class Qingjiadan {
String name;//请假者名字
String start;//请假开始时间
String end;//请假结束时间
String why;//请假原因
int day;//请假天数
int zt;//订单状态
int ss;//控制是老师还是学生请假
Qingjiadan(String name,String start,String end,String why ,int day,int zt,int ss)
{
this.name = name;
this.start = start;
this.end = end;
this.why = why;
this.day = day;
this.zt = zt;
this.ss = ss;
}
}
步骤五:
编写主函数,创建学生数组、老师数组、领导数组、请假单数组。先添加数据,然后学生和老师请假,然后批准,最后打印请假单即可。
package cn.ypc;
import java.util.ArrayList;
public class Main {
public static void paint(ArrayList<Qingjiadan> qi ){
for(int i = 0 ;i < qi.size(); i++){
System.out.println();
System.out.println("----------------绍兴文理学院元培学院 请假单-------------");
System.out.println();
System.out.println("| 学生 " + qi.get(i).name + " 在 " + qi.get(i).start +
" 至 " + qi.get(i).end + " 因为 "
+ qi.get(i).why +" 原因 需要请假 |");
System.out.println();
System.out.println("-------------------------------------------------");
}
}
public static void main(String[] args) {
ArrayList<Student> st = new ArrayList<Student>();
ArrayList<Teacher> te = new ArrayList<Teacher>();
ArrayList<Leader> le = new ArrayList<Leader>();
ArrayList<Qingjiadan> qi = new ArrayList<Qingjiadan>();
st.add(new Student("刘备",38,"0413170301"));
st.add(new Student("关羽",40,"0413170302"));
st.add(new Student("张飞",35,"0413170303"));
te.add(new Teacher("赵云",32,"0413170304"));
te.add(new Teacher("曹操",45,"0413170305"));
le.add(new Leader("刘封",20,"0413170306"));
st.get(0).qingjia(qi,"20190429","20190430","病假",1);
st.get(1).qingjia(qi,"20190428","20190430","事假",2);
te.get(0).qingjia(qi,"20190425","20190429", "公假",4);
for(int i = 0;i<qi.size(); ++i){
if(qi.get(i).ss == 0){
qi.get(i).zt = 1;
System.out.println(qi.get(i).name + " 同学的请假申请已批准!");
}
}
for(int i = 0;i<qi.size(); ++i){
if(qi.get(i).ss == 1){
qi.get(i).zt = 1;
System.out.println(qi.get(i).name + " 老师的请假申请已批准!");
}
}
paint(qi);
}
}
输出结果:
4.实验总结
本次实验很有意义,应用了接口和抽象类的理论知识,据了解,java中封装、接口实现、抽象类和集合相关的类是Android开发的重头戏,在下半学期的学习中,要经常重温这些知识,为以后开发程序打好基础。