class Emp{
private int empno;//职工编号
private String ename;//姓名
private String job;//职位
private double sal;//基本工资
private double comm;
private Emp mgr;//所属领导
private Dept dept;//所在部门 public Emp(){}//无参构造 public Emp(int empno,String ename,String job,double sal,double comm){//有参构造
this.empno = empno;
this.ename = ename;
this.job = job;
this.sal = sal;
this.comm = comm;
} public void setMgr(Emp mgr) {//传递领导信息
this.mgr = mgr;
}
public Emp getMgr(){//获取领导信息
return this.mgr;
} public void setDept(Dept dept) {//设置部门信息
this.dept = dept;
} public Dept getDept() {//读取部门信息
return dept;
} public String getInfo(){
return "职工编号:"+this.empno +",职工姓名:" + this.ename + ",职工职位:" + this.job + ",基本工资:" + this.sal
+",提成:" + this.comm;
}
}
class Dept{
private int deptno;
private String dname;//部门名称
private String loc;//部门地址
private Emp[] emps;//所有员工
public Dept(){ }
public Dept(int deptno,String dname,String loc){
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
} public void setEmps(Emp[] emps) {
this.emps = emps;
} public Emp[] getEmps() {
return emps;
} public String getInfo(){
return "部门编号:" + this.deptno +",部门名称:" + this.dname +",所在地址:" + this.loc;
}
}
public class Main {
public static void main(String[] args) {
// 创建各自的实例化对象
Dept dept = new Dept(10,"ACCOUNTING","NEW YORK");
Emp ea = new Emp(7369,"SMITH","CLERK",800.0,0.0);
Emp eb = new Emp(7466,"ALLEN","MANAGER",2450.0,0.0);
Emp ec = new Emp(7839,"KING","PRESIDENT",5000.0,0.0);
//设置领导关系
ea.setMgr(eb);
eb.setMgr(ec);//ec对象没有领导,因为他是头
//设置员工和部门关系
ea.setDept(dept);
eb.setDept(dept);
ec.setDept(dept);
//设置部门和员工的关系
dept.setEmps(new Emp[]{ea,eb,ec}); //读取数据
System.out.println(dept.getInfo());//输出部门信息
for(int x=0;x<dept.getEmps().length;x++){
System.out.println("\t"+dept.getEmps()[x].getInfo());
if(dept.getEmps()[x].getMgr()!=null){ //若有领导
System.out.println("\t"+dept.getEmps()[x].getMgr().getInfo());
}
}
System.out.println("************************");
//根据员工找到对应的领导信息和部门信息
System.out.println(eb.getInfo());
if(eb.getMgr()!=null)
System.out.println("\t"+eb.getMgr().getInfo());
if(eb.getDept()!=null)
System.out.println("\t"+eb.getDept().getInfo());
}
}

上面代码是实现一对多的数据表,基于公司人事管理的例子(根据员工可以输出其基本信息及所在部门信息和所属领导信息,根据部门可以输出所有员工及领导),在Java一对多的数据关系中,需要遵循以下设计原则:

简单Java类设计原则:Java类与数据表的关系

  1、Java的名称 = 实体表的名称

  2、Java类的属性 = 实体表的字段

  3、Java类的一个对象 = 表的一行记录

  4、对象数组 = 表的多行记录

  5、外键关系 = 引用配置

多对多的数据表(学生成绩管理):根据学生可以输出所修课程信息及成绩,根据课程可以输出学习该课程的学生信息及成绩

class Student{//学生表
private int stuid;
private String sname;
private int age;
private StudentCourse studentCourse[];//学生成绩信息
public Student(){}
public Student(int stuid,String sname,int age){
this.stuid = stuid;
this.sname = sname;
this.age = age;
}
public void setStudentCourse(StudentCourse[] studentCourse) {
this.studentCourse = studentCourse;
} public StudentCourse[] getStudentCourse() {
return studentCourse;
} public String getInfo(){
return "学号:" + this.stuid + ",学生姓名:" + this.sname + ",年龄:" + this.age;
}
}
class Course{//课程表
private String name;
private int cid;
private int credit;
private StudentCourse studentCourse[];
public Course(){}
public Course(String name,int cid,int credit){
this.cid = cid;
this.name = name;
this.credit = credit;
} public StudentCourse[] getStudentCourse() {
return studentCourse;
} public void setStudentCourse(StudentCourse[] studentCourse) {
this.studentCourse = studentCourse;
} public String getInfo(){
return "课号:" + this.credit + ",名称:" + this.name + ",学分:" + this.credit;
}
}
class StudentCourse{//学生选课表
private Student student;
private Course course;
private double score;//成绩
public StudentCourse(){
}
public StudentCourse(Student student,Course course,double score){
this.course = course;
this.score = score;
this.student = student;
} public Course getCourse() {
return course;
} public Student getStudent() {
return student;
} public double getScore() {
return score;
}
}
public class Main { public static void main(String[] args) {
//创建各自的独立对象
Student stu1 = new Student(1,"张三",18);
Student stu2 = new Student(1,"李四",20);
Student stu3 = new Student(1,"王五",19);
Course ca = new Course("高等数学",1001,5);
Course cb = new Course("线性代数",1002,4);
//设置各自的关系
//设置学生和课程的关系
stu1.setStudentCourse(new StudentCourse[]{
new StudentCourse(stu1,ca,92.5),
new StudentCourse(stu1,cb,94.0)
});
stu2.setStudentCourse(new StudentCourse[]{
new StudentCourse(stu2,ca,89.0)
});
stu3.setStudentCourse(new StudentCourse[]{
new StudentCourse(stu3,cb,95.0),
new StudentCourse(stu3,ca,90.5)
});
//设置课程和学生的关系
ca.setStudentCourse(new StudentCourse[]{
new StudentCourse(stu1,ca,92.5),
new StudentCourse(stu2,ca,89.0)
new StudentCourse(stu3,ca,90.5)
});
cb.setStudentCourse(new StudentCourse[]{
new StudentCourse(stu1,cb,94.0),
new StudentCourse(stu3,cb,95.0)
});
//找到一门课程,并且输出学习此课程的所有学生的信息及成绩
System.out.println(ca.getInfo());
for(int x = 0;x < ca.getStudentCourse().length;x++){
System.out.println("\t"+ca.getStudentCourse()[x].getStudent().getInfo()
+",成绩:"+ca.getStudentCourse()[x].getScore());
};
System.out.println("***********");
//根据学生输出其信息及选修的课程信息和所得成绩
System.out.println(stu1.getInfo());
for(int x = 0;x < stu1.getStudentCourse().length;x++){
System.out.println("\t选修课程:" + stu1.getStudentCourse()[x].getCourse().getInfo()
+ ",所得成绩:" + stu1.getStudentCourse()[x].getScore());
} }
}

Java中数据表的建立的更多相关文章

  1. 使用DB查询分析器实现异构数据源中数据表的相互访问

    1  引言   硕士程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员)推出的个人作品----万能数据库查询分析器,中文版本DB 查询分析器.英文版本<DB Query A ...

  2. Java中数据类型转换&基本类型变量和对象型变量

    1.Java的数据类型分为三大类 布尔型,字符型和数值型 其中数值型又分为整型和浮点型 2.Java的变量类型 布尔型 boolean 字符型 char 整型    byte,short,int,lo ...

  3. Dapper中数据表的字段(列)与实体属性不一致时,如何手动配置它们之间的映射?

    NET[C#]Dapper中数据表的字段(列)与实体属性不一致时,如何手动配置它们之间的映射? 问题描述 比如有如下的数据表结构:Person: person_id int first_name va ...

  4. MySQL创建数据表并建立主外键关系

    为mysql数据表建立主外键需要注意以下几点: 需要建立主外键关系的两个表的存储引擎必须是InnoDB. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型. 外键列和参照列必须创建索引, ...

  5. MySQL中数据表的基本操纵

    本文基于对国家863中部软件孵化器编著的<MySQL从入门到精通>一书的操作实践.  一.创建数据表 数据表属于数据库,在创建数据表之前,应该使用语句 USE 数据库名  指定操作是在那个 ...

  6. Java中数据存储分配

    (1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...

  7. 菜鸡的Java笔记 数据表与简单java类映射

    利用实际的数据表实现表与类的操作转换        简单java类是整个项目开发中的灵魂所在,它有自己严格的开发标准,而最为重要的是它需要于数据表是完全对应的        不过考虑到现在没有接触到过 ...

  8. MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建

    前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...

  9. 查看MYSQL中数据表占用的空间

    由于数据太大了.所以MYSQL需要瘦身,那前提就是需要知道每个表占用的空间大小. 首先打开指定的数据库: use information_schema; 如果想看指定数据库中的数据表,可以用如下语句: ...

随机推荐

  1. 访问限制:由于对必需的库 C:/Program Files/Java/jre6/lib/rt.jar 具有一定限制,因此无法访问类型。。

    在项目上单击右键选择 属性 Java编译器 错误或警告 选择启用特定于项目的设置 建议不要使用和限制使用的API将 禁止的引用(访问规则) 设置为 警告 然后应用即可解决

  2. Oracle的常用的命令

    --导出数据库 exp test2/test2@trp84 file=e:\test2.dmp owner=test2 --导入数据库 imp test2/test2@orcl file='e:\te ...

  3. 数据库ACID,SQL和NoSQL

    数据库中的事务(transaction)有ACID4个基本特性,可以类比交易: 1,A(Atomicity)原子性 事务里的事情要么全部做完,要么执行过程中失败,此时回滚. 2,C(Consisten ...

  4. supervisor进程管理工具的使用

    supervisor是一款进程管理工具,当想让应用随着开机启动,或者在应用崩溃之后自启动的时候,supervisor就派上了用场. 广泛应用于服务器中,用于引导控制程序的启动 安装好superviso ...

  5. 【分布式系列之dubbo】dubbo管理工具dubbo-admin安装使用

    一.安装完成后界面显示 二.安装 1.下载dubbo-admin安装包 2.修改WEB-INF下的dubbo.properties文件内容 dubbo.registry.address=zookeep ...

  6. Beta 第五天

    今天遇到的困难: 前端大部分代码由我们放逐的组员完成,这影响到了我们解决"Fragment碎片刷新时总产生的固定位置"的进程,很难找到源码对应 新加入的成员对界面代码不熟悉. 我们 ...

  7. 学号:201621123032 《Java程序设计》第5周学习总结

    1:本周学习总结 1.1: 写出你认为本周学习中比较重要的知识点关键词 接口interface,comparator接口和comparable接口. 1.2:尝试使用思维导图将这些关键词组织起来. 2 ...

  8. TCP/IP协议复习

  9. 不看就亏了:DELL EqualLogic PS6100详解及数据恢办法

    DELL EqualLogic PS6100采用虚拟ISCSI SAN阵列,为远程或分支办公室.部门和中小企业存储部署带来企业级功能.智能化.自动化和可靠性,支持VMware.Solaris.Linu ...

  10. jupyter notebook下python2和python3共存(Ubuntu)

    提示NOTICE 时间:2018/04/06 主题:Ubuntu 下CAFFE框架 主角:Jupyter Notebook 简介: Jupyter Notebook(此前被称为 IPython not ...