刚开始学JAVA,从笔记做起!
program 2 数据表与简单Java映射
目的
这实际上是我自己写的第一个Java程序,实现了比较简单的一个想法,还是特别开心的。
《第一行代码 JAVA》的 3.12 数据表与简单Java映射 提到了:“... 数据表与简单Java类的转换操作是开发中的一个基本设计思想 ...”。受此启发,我尝试做出了一个学校(小学)中年级、社团、教师、领导之间的映射关系及相关操作,具有这样的映射关系:
- 一个学校有多个年级、多个社团、多个老师;
- 每个年级、每个部门都有一个负责人;
- 每个老师属于一个领导(年级负责人 / 级长);
- 一个老师可以参加多个社团;
1. 年级类
/**
* 年级情况:年级、级长、年段
* @author Yuan_hang
*
*/
public class Grand {
//属性
private int grand;
private Teacher manager;
private String range;
public int numOfTeacher;
public double averSalary;
//构造方法
public Grand(){}
public Grand(int grand){
this();
this.grand = grand;
if(grand<3){this.range = "低年段";}
else if(grand>4){this.range = "高年段";}
else if(grand==3 || grand==4){this.range = "中年段";}
else{this.range = "!!错误";}
}
public Grand(int grand, Teacher manager){
this(grand);
this.manager = manager;
}
public Grand(int grand, Teacher manager,int numOfTeacher,double averSalary){
this(grand, manager);
this.numOfTeacher = numOfTeacher;
this.averSalary = averSalary;
}
//方法
public void setGrand(int grand){this.grand = grand;}
public int getGrand(){return this.grand;}
public void setManager(Teacher manager){this.manager = manager;}
public Teacher getManager(){return this.manager;}
public void setRange(String range){this.range = range;}
public String getRange(){return this.range;}
public void setNumOfTeacher(int numOfTeacher){this.numOfTeacher = numOfTeacher;}
public int getNumOfTeacher(){return this.numOfTeacher;}
public void setAverSalary(double averSalary){this.averSalary = averSalary;}
public double getAverSalary(){return this.averSalary / this.numOfTeacher;}
public void getInfo(){
System.out.print(this.grand + "年级(" + this.range + ")");
System.out.print(", 级长是" + this.manager.getName());
System.out.print(", 共" + this.numOfTeacher + "位老师");
System.out.println(", 平均工资" + String.format("%.2f",this.averSalary / this.numOfTeacher) + "元。");
}
}
2. 社团类
/**
* 社团情况:编号、名称、简介、办公室、负责人
* @author Yuan_hang
*
*/
public class Club {
//属性
private int num;
private String name;
private String introdc;
private int room;
private Teacher manage;
public int numOfTeacher;
//构造方法
public Club(){}
public Club(int num,String name,String introdc,int room){
this();
this.num = num;
this.name = name;
this.room = room;
this.introdc = introdc;
}
public Club(int num,String name,String introdc,int room,Teacher manage,int numOfTeacher){
this(num,name,introdc,room);
this.manage = manage;
this.numOfTeacher = numOfTeacher;
}
//方法
public void setNum(int num){this.num = num;}
public int getNum(){return this.num;}
public void setName(String name){this.name = name;}
public String getName(){return this.name;}
public void setIntrodc(String introdc){this.introdc = introdc;}
public String getIntrodc(){return this.introdc;}
public void setRoom(int room){this.room = room;}
public int getRoom(){return this.room;}
public void setManage(Teacher manage){this.manage = manage;}
public Teacher getManage(){return this.manage;}
public void setNumOfTeacher(int numOfTeacher){this.numOfTeacher = numOfTeacher;}
public int getNumOfTeacher(){return this.numOfTeacher;}
public void getInfo(){
System.out.print("(" + this.num + ")" + this.name );
System.out.print(", 主要活动是" + this.introdc);
System.out.print(", 办公室在" + this.room);
System.out.print(", 负责人是" + this.manage.getName());
System.out.println(", 参加人数有" + this.numOfTeacher + "人。");
}
}
3. 老师类
/**
* each teacher belongs to 一个年级/级长、多个社团
* each teacher with 工号、姓名、年龄、性别、科目、工资、是否入编、所属社团
* @author Yuan_hang
*
*/
public class Teacher {
// 属性定义
private int num; //工号
private String name; //姓名
private Grand grand; //年级
private String sex; //性别
private String course; //科目
private double salary; //工资
private boolean isStaff; //在编
private Club[] clubs; //社团
// 构造方法
public Teacher(){}
public Teacher(int num,String name,Grand grand,String sex,String course,double salary,boolean isStaff,Club[] clubs){
this();
this.num = num; this.name = name; this.grand = grand;
this.sex = sex; this.course = course; this.salary = salary;
this.isStaff = isStaff; this.clubs = clubs;
this.grand.numOfTeacher ++;
this.grand.averSalary += this.salary;
for(int x=0; x<this.clubs.length; x++){
this.clubs[x].numOfTeacher ++;
}
}
// 方法
public void setNum(int num){this.num = num;}
public int getNum(){return this.num;}
public void setName(String name){this.name = name;}
public String getName(){return this.name;}
public void setGrand(Grand grand){this.grand = grand;}
public Grand getGrand(){return this.grand;}
public void setSex(String sex){this.sex = sex;}
public String getSex(){return this.sex;}
public void setCourse(String course){this.course = course;}
public String getCourse(){return this.course;}
public void setSalary(double salary){this.salary = salary;}
public double getSalary(){return this.salary;}
public void setIsStaff(boolean isStaff){this.isStaff = isStaff;}
public boolean getIsStaff(){return this.isStaff;}
public void setClubs(Club[] clubs){this.clubs = clubs;}
public Club[] getClubs(){return this.clubs;}
public void getInfo(){
System.out.print("工号:" + this.num + ", ");
System.out.print("姓名:" + this.name + ", ");
System.out.print("年级:" + this.grand.getGrand() + "年级, ");
System.out.print("性别:" + this.sex + ", ");
System.out.print("科目:" + this.course + ", ");
System.out.print("工资:" + String.format("%.2f",this.salary) + ", ");
String isTrue = this.isStaff == true? "是":"否";
System.out.print("在编:" + isTrue + ", ");
String clubsNames = "";
for(int x=0; x<clubs.length; x++){
String temp = this.clubs[x].getName() + "、";
clubsNames += temp;
}
System.out.println("社团:" + clubsNames.substring(0, clubsNames.length()-2) + "。");
}
}
4. 学校类以及信息查询、设置
/**
* a school with teachers/ grands/ clubs
* @author Yuan_hang
*
*/
public class School {
public static void main(String[] args){
/**
* 年级设置
*/
Grand g1 = new Grand(1); Grand g2 = new Grand(2);
Grand g3 = new Grand(3); Grand g4 = new Grand(4);
Grand g5 = new Grand(5); Grand g6 = new Grand(6);
/**
* 社团设置
*/
Club c1 = new Club(1,"羽毛球社","打羽毛球",101);
Club c2 = new Club(2,"合唱社","合唱、高音练习",233);
Club c3 = new Club(3,"育儿社","交流育儿经验",345);
Club c4 = new Club(4,"工会","收工会费、发福利",666);
/**
* 员工信息
*/
Teacher xiaoHong = new Teacher(1234,"小红",g1,"女","语文",5000.0,false,new Club[]{c1,c2});
Teacher chengLong = new Teacher(4562,"成龙",g4,"男","数学",10000.0,true,new Club[]{c2,c4});
Teacher chenDaoming = new Teacher(7821,"陈道明",g6,"男","体育",8000.0,true,new Club[]{c2,c3});
Teacher daMangguo = new Teacher(4532,"大芒果",g4,"女","体育",6000.0,false,new Club[]{c1,c2,c4});
Teacher xieNa = new Teacher(8135,"谢娜",g5,"女","英语",2500.0,true,new Club[]{c3,c2,c4});
Teacher wangYuan = new Teacher(7742,"王源",g4,"男","语文",9000.0,false,new Club[]{c1,c4});
Teacher haoJian = new Teacher(9635,"郝建",g3,"男","数学",7700.0,true,new Club[]{c1,c2,c3,c4});
Teacher aYa = new Teacher(9314,"阿雅",g2,"女","语文",5600.0,true,new Club[]{c1,c3,c4});
/**
* 领导层
*/
g1.setManager(xiaoHong); g2.setManager(aYa);
g3.setManager(haoJian); g4.setManager(daMangguo);
g5.setManager(xieNa); g6.setManager(chenDaoming);
c1.setManage(xieNa); c2.setManage(chengLong);
c3.setManage(daMangguo); c4.setManage(wangYuan);
/**
* 查看
*/
xiaoHong.getInfo();
System.out.print("\n");
g4.getInfo();
System.out.print("\n");
c4.getInfo();
System.out.print("\n");
}
}
5. 输出结果
工号:1234, 姓名:小红, 年级:1年级, 性别:女, 科目:语文, 工资:5000.00, 在编:否, 社团:羽毛球社、合唱。
4年级(中年段), 级长是大芒果, 共3位老师, 平均工资8333.33元。
(4)工会, 主要活动是收工会费、发福利, 办公室在666, 负责人是王源, 参加人数有6人。