阿里云名师课堂java面向对象开发42:第03个代码模型综合案例:数据表与简单java类(多对多)

playerone      2022-06-12     386

关键词:

多对多

要求:定义一个学生选课的操作表:三张数据表

  • 学生表:学生编号、姓名、年龄
  • 课程表:课程编号、课程名称、学分
  • 学生成绩单:学生编号、课程编号、成绩

输出要求:

  • 可以找到一门课程,以及参加此课程的学生、他们的成绩
  • 可以根据一个学生,找到他参加的所有课程,以及每门课的成绩

1、先将所有的基础字段转化为类,暂时不考虑所有的关系

学生成绩单也属于一种关系,暂不考虑,只写基本关系。

class Stu{
	private int sid ;
	private String sname ;
	private int age ;
	
	public Stu(int sid,String sname,int age) {
		this.sid = sid ;
		this.sname = sname ;
		this.age = age ;
	}
	
	public String getInfo() {
		return "【Student】id = " + this.sid + ",name = " + this.sname + 
		",age = " + this.age ;
	}
}

class Lesson{
	private int lid ;
	private String lname ;
	private double cre ;
	
	public Lesson(int lid,String lname,double cre) {
		this.lid = lid ;
		this.lname = lname ;
		this.cre = cre ;
	}
	
	public String getInfo() {  
		return "【Lesson】id = " + this.lid + ",name = " + this.lname + 
		",credit = " + this.cre ;
	}
}

2、进行关系设计,列出数据表中对应的关系

一个学生有多门课,一门课有多个学生,应该互相保存有各自的对象数组。

  • 在Stu类中加入:
	private Lesson [] lesson ;
	
	public void setLesson(Lesson [] lesson){
		this.lesson = lesson ;
	}
	public Lesson [] getLesson(){
		return this.lesson ;
	}
  • 在Lesson类中加入
	private Stu [] stu ;
	
	public void setStu(Stu [] stu){
		this.stu = stu ;
	}
	public Stu [] getStu(){
		return this.stu ;
	}

问题来了,学生与每门课程之间都会有一个成绩。在这个关系表里不光有关系字段(学生、课程),还有一个普通字段(成绩),怎么做?

  • 再创建一个类
  • 一个学生有多门课,就有多个成绩信息
  • 一门课有多个学生选,有多个成绩信息
class Stu{
	private int sid ;
	private String sname ;
	private int age ;
	//private Lesson [] lesson ;  // 添加Score之后,没必要再在lesson中保存stu的对象组
	private Score [] score ;  // stu与lesson的对应关系通过score描述
	
	public Stu(int sid,String sname,int age) {
		this.sid = sid ;
		this.sname = sname ;
		this.age = age ;
	}
	
	public void setScore(Score [] score){
		this.score = score ;
	}
	public Score [] getScore(){
		return this.score ;
	}
	public String getInfo() {
		return "【Student】id = " + this.sid + ",name = " + this.sname + 
		",age = " + this.age ;
	}
}

class Lesson{
	private int lid ;
	private String lname ;
	private double cre ;
	// private Stu [] stu ;  // 添加Score之后,没必要再在lesson中保存stu的对象组
	private Score [] score ;  // stu与lesson的对应关系通过score描述
	
	public Lesson(int lid,String lname,double cre) {
		this.lid = lid ;
		this.lname = lname ;
		this.cre = cre ;
	}
	
	public void setScore(Score [] score){
		this.score = score ;
	}
	public Score [] getScore(){
		return this.score ;
	}
	public String getInfo() {
		return "【Lesson】id = " + this.lid + ",name = " + this.lname + 
		",credit = " + this.cre ;
	}
}

class Score{
	private Stu stu ;
	private Lesson lesson ;
	private double score ;
	
	public Score(Stu stu,Lesson lesson,double score){
		this.stu = stu ;
		this.lesson = lesson ;
		this.score = score ;
	}
	
	public Stu getStu(){
		return this.stu ;
	}
	public Lesson getLesson(){
		return this.lesson ;
	}
	public double getScore(){
		return this.score ;
	}
	public String getInfo(){
		return "【Score】stu = " + this.stu + ",lesson = " + this.lesson + 
		",score = " + this.score ;
	}
}

3、根据开发需求设计

  • 可以找到一门课程,以及参加此课程的学生、他们的成绩
  • 可以根据一个学生,找到他参加的所有课程,以及每门课的成绩
class Stu{
	private int sid ;
	private String sname ;
	private int age ;
	//private Lesson [] lesson ;  // 添加Score之后,没必要再在lesson中保存stu的对象组
	private Score [] score ;  // stu与lesson的对应关系通过score描述
	
	public Stu(int sid,String sname,int age) {
		this.sid = sid ;
		this.sname = sname ;
		this.age = age ;
	}
	
	public void setScore(Score [] score){
		this.score = score ;
	}
	public Score [] getScore(){
		return this.score ;
	}
	public String getInfo() {
		return "【Student】id = " + this.sid + ",name = " + this.sname + 
		",age = " + this.age ;
	}
}

class Lesson{
	private int lid ;
	private String lname ;
	private double cre ;
	// private Stu [] stu ;  // 添加Score之后,没必要再在lesson中保存stu的对象组
	private Score [] score ;  // stu与lesson的对应关系通过score描述
	
	public Lesson(int lid,String lname,double cre) {
		this.lid = lid ;
		this.lname = lname ;
		this.cre = cre ;
	}
	
	public void setScore(Score [] score){
		this.score = score ;
	}
	public Score [] getScore(){
		return this.score ;
	}
	public String getInfo() {
		return "【Lesson】id = " + this.lid + ",name = " + this.lname + 
		",credit = " + this.cre ;
	}
}

class Score{
	private Stu stu ;
	private Lesson lesson ;
	private double score ;
	
	public Score(Stu stu,Lesson lesson,double score){
		this.stu = stu ;
		this.lesson = lesson ;
		this.score = score ;
	}
	
	public Stu getStu(){
		return this.stu ;
	}
	public Lesson getLesson(){
		return this.lesson ;
	}
	public double getScore(){
		return this.score ;
	}
	public String getInfo(){
		return "【Score】stu = " + this.stu + ",lesson = " + this.lesson + 
		",score = " + this.score ;
	}
}

public class TestDemo {  // 设置开发需求
	public static void main(String args[]) {
		// 第一步:设置类对象间的关系
		
		// 1、分别创建各类的实例化对象
		Stu stua = new Stu(1313,"Dexter",17) ;
		Stu stub = new Stu(1728,"Tsukishima Kei",18) ;
		Stu stuc = new Stu(1230,"Toono Takaki",19) ;
		Lesson lesa = new Lesson(101,"Linux",3.0) ;
		Lesson lesb = new Lesson(104,"MySql",2.5) ;
		
		// 2、设置对象间的引用关系
		// 2.1 设置学生与课程的关系,并且需要带上成绩
		stua.setScore(new Score [] { new Score(stua,lesa,95.0),new Score(stua,lesb,89.5) }) ;  // stua学了lesa、lesb,分别95.0、89.5分
		stub.setScore(new Score [] { new Score(stub,lesa,87.0) }) ;  // stub学了lesa,87.0分
		stuc.setScore(new Score [] { new Score(stuc,lesb,85.5) }) ;  // stuc学了lesb,85.5分
		// 2.2 设置课程与学生的关系
		lesa.setScore(new Score [] { new Score(stua,lesa,95.0),new Score(stub,lesa,87.0) }) ;  // lesa有stua和stub学,分别95.0、87.0分
		lesb.setScore(new Score [] { new Score(stua,lesb,89.5),new Score(stuc,lesb,85.5) }) ;  // lesb有stua和stuc学,分别89.5、85.5分
		
		// 第二步:根据关系取出数据
		
		// 3、找到一门课程,参加此课程的所有的学生信息,还有每人的成绩
		System.out.println(lesa.getInfo()) ;  // 输出课程的信息
		for(int x= 0 ; x < lesa.getScore().length ; x++){  // 输出课程对应所有学生的信息、成绩
			System.out.println("	##" + lesa.getScore()[x].getStu().getInfo() + 
			",score = " + lesa.getScore()[x].getScore()) ;
		}
		System.out.println("==========================================================================") ;
		
		// 4、可以根据一个学生找到学生对应的课程信息、以及每门课的成绩
		System.out.println(stua.getInfo()) ;  // 输出学生的信息
		for(int x= 0 ; x < stua.getScore().length ; x++){  // 输出学生对应所有课程的信息、成绩
			System.out.println("	##" + stua.getScore()[x].getLesson().getInfo() + 
			",score = " + stua.getScore()[x].getScore()) ;
		}
	}
}

技术图片

名师课堂java面向对象开发

课程介绍面向对象是Java语言之中最为重要的特征,本课程主要讲解面向对象的核心知识,并且利用大量的代码、数据结构课程深入分析Java面向对象特征。课程目标 掌握Java面向对象开发技术适合人群 Java学习者课时列表... 查看详情

java面向对象之继承!

 /**作者:呆萌老师*☑csdn认证讲师*☑51cto高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里给大家分享技术、知识和生活*各种干货,记得关注哦!*/1、抽象&... 查看详情

java的面向对象编程--------课堂笔记

  JAVA的面向对象编程--------课堂笔记面向对象主要针对面向过程。面向过程的基本单元是函数。 什么是对象:EVERYTHINGISOBJECT(万物皆对象) 所有的事物都有两个方面:有什么(属性):用来描述对象。能够做什么... 查看详情

第08章面向对象编程(中级部分)

韩顺平_循序渐进学Java零基础_第08章面向对象编程(中级部分)(P264-P361)第08章面向对象编程(中级部分)264.IDEA介绍265.IDEA下载安装266.IDEA使用1267.IDEA使用2268.IDEA使用3269.IDEA快捷键1270.IDEA快捷键2271.IDEA快捷键3272.IDEA... 查看详情

面向对象之多态

 /**作者:呆萌老师*☑csdn认证讲师*☑51cto高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里给大家分享技术、知识和生活*各种干货,记得关注哦!*/1、什么... 查看详情

第10章面向对象编程(高级部分)

韩顺平_循序渐进学Java零基础_第10章面向对象编程(高级部分)(P374-P424)第10章面向对象编程(高级部分)374.类变量引出375.类变量快速入门376.类变量内存剖析377.类变量定义访问378.类变量使用细节379.类方法快速入... 查看详情

网易云课堂_java语言程序设计进阶_第1周类和对象_1分数

 第1周编程题查看帮助返回 温馨提示:1.本次作业属于OnlineJudge题目,提交后由系统即时判分。2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。第1周编程题。我们在题目说明中... 查看详情

第07章面向对象编程(基础部分)

韩顺平_循序渐进学Java零基础_第07章面向对象编程(基础部分)(P192-P263)第07章面向对象编程(基础部分)192.类与对象引出193.类与对象概述194.面向对象快速入门195.对象内存布局196.属性概念197.属性注意细节198.创建... 查看详情

第5篇-java面向对象ⅰ

第5篇-JAVA面向对象Ⅰ每篇一句 :面向对象面向君,不负代码不负卿初学心得:代码虐我千百遍,我待代码如初恋(笔者:JEEP/711)[JAVA笔记|时间:2017-04-03|JAVA面向对象Ⅰ]1.JAVA作为一种面向对象语言,具有以下基本概念:●多态 ... 查看详情

课堂笔记170504面向对象

面向过程:面向过程其实就是以函数(方法)为基础面向对象:基于面向过程,就是以对象为基础完成操作总结:世界万物皆对象 没有对象变量,只有引用到对象的变量,这个变量称之为指针,引用不是对象的容器,相当于... 查看详情

java简介

...活*各种干货,记得关注哦!*/ 1、什么是JavaJava是一门面向对象的高级程序设计语言。其底层实现是由c++来实现的,因此它具有许多与c++相似的特点,与此同时我们Java也抛弃了许多在c++当中较 查看详情

2018面向对象程序设计(java)学习进度条

周次(阅读/编写)代码行数发布博客量/评论他人博客数量课堂/课余学习时间(小时)最满意的编程任务第一周200/301/06/3九九乘法表第二周200/301/04/3实验2,实验3第三周    第四周    第五周   ... 查看详情

2018面向对象程序设计(java)课程学习进度条

《2018面向对象程序设计(java)课程学习进度条》周次(阅读/编写)代码行数发布博客量/博客评论量课堂/课余学习时间(小时)最满意的编程任务第一周40/20 1/0 4/5九九乘法表第二周 100/40 1/1 4/5实验3第三周&nbs... 查看详情

阿里云java开发规范考试总结(代码片段)

JAVA开发手册考试总结编程规范POJO(PlainOrdinaryJavaObject):POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。DO(DataObject):此对象与数据库表结构一一对应,通过DAO层向上传输数据源对象。DTO(DataTransferObject):数据传输对象,Servic... 查看详情

为什么阿里巴巴建议开发者谨慎使用继承?

...?毫无忌讳的使用继承来做代码扩展真的好吗?为什么《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。 本文就来针对这些问题,简 查看详情

2016710101382016-2017java《面向对象程序设计课程学习进度条》

周次(阅读/编写)代码行数发布博客量/博客评论数量课堂/课余学习时间(小时)最满意的编程任务 第1周280/1603/06/5实验二任务三、五 第2周     第3周      第4周     ... 查看详情

《2018面向对象程序设计(java)课程学习进度条》

《2018面向对象程序设计(java)课程学习进度条》 周次(阅读/编写)代码行数发布博客量/博客评论量课堂/课余学习时间(小时)最满意的编程任务第一周100/20 1/0 4/3 九九乘法表第二周 200/50 1/0 6/4 ... 查看详情

《2018面向对象程序设计(java)课程学习进度条》

周次(阅读/编写)代码行数发布博客量/博客品论数量课堂/课余学习时间(小时)最满意的编程任务第一周150/301/15/3九九乘法表第二周200/801/16/3实验题3,实验题7第三周    第四周    第五周  &... 查看详情