上机实验3-2 Java面向对象编程(二)

实验1 家中的电视

一、实验目的

成员变量也可能是引用类型,通过实验让学生掌握对象的组合以及参数传递

二、实验内容

编写一个Java应用程序,模拟家中买了一台电视机,家庭将电视机作为自己的一个成员。具体要求如下:

1、有三个源文件:

             TV.java 负责创建电视类TV类

             Family.java 负责创建家庭类Famliy类

             MainClass.java 测试的主类

2、在主类的main()方法中首先使用TV类创建一个对象haierTV,然后使用Family类创建对象ZhangSanFamily,并将先前的TV类的对象实例haierTV的引用传递给ZhangSanFamily对象的成员变量homeTV.

三、程序代码

TV.java

public class TV {
	int channel;   //电视频道
    void setChannel(int m) {
       if(m>=1){
          channel=m;
       }
}
    int getChannel(){
        return channel;
     }
     void showProgram(){
        switch(channel) {
           case 1 : System.out.println("综合频道");
                    break;
           case 2 : System.out.println("经济频道");
                    break;
           case 3 : System.out.println("文艺频道");
                    break;
           case 4 : System.out.println("国际频道");
                    break; 
           case 5 : System.out.println("体育频道");
                    break;
           default : System.out.println("不能收看"+channel+"频道");
        } 
     }
 }

Family.java

public class Family {
	TV homeTV;
    void buyTV(TV tv) {
    homeTV=tv;//【代码1】            //将参数tv赋值给homeTV
    }
    void remoteControl(int m) {
       homeTV.setChannel(m);  
    }
    void seeTV() {
       homeTV.showProgram();  //homeTV调用showProgram()方法
    }
}

MainClass.java

public class MainClass {
	public static void main(String args[]) {
	       TV haierTV = new TV(); 
	       Family lisiFamily=new Family();
	       haierTV.setChannel(5);
	       System.out.println("haierTV的频道是"+haierTV.getChannel());
	       lisiFamily.buyTV(haierTV);
	       System.out.println("lisiFamily开始看电视节目");
	       lisiFamily.seeTV();
	       haierTV.setChannel(5);//【代码2】 //haierTV调用setChannel(int m),并向参数m传递5
	       System.out.println("haierTV的频道是"+haierTV.getChannel());
	       Family zhangSanFamily = new Family();
	       zhangSanFamily.buyTV(haierTV);//【代码3】//zhangSanFamily调用void buyTV(TV tv)方法,并将haierTV传递给参数TV
	       System.out.println("zhangSanFamily开始看电视节目");
	       zhangSanFamily.seeTV();
	       int m=2; 
	       System.out.println("hangSanFamily将电视更换到"+m+"频道");
	       zhangSanFamily.remoteControl(m);
	       System.out.println("haierTV的频道是"+haierTV.getChannel());
	       System.out.println("hangSanFamily再看电视节目");
	       zhangSanFamily.seeTV(); 
	}
}

实验2 课后实训

求解一元二次方程或二元一次方程

1.设计一个用于求解任意一元二次方程的QuadraticEquation类

public class QuadraticEquation {
private int a,b,c;//私有字段
public QuadraticEquation(int a,int b,int c) {
	this.a=a;
	this.b=b;
	this.c=c;
}
public int getDiscriminant() {//计算判别式值的方法
	return b*b-4*a*c;
}
public double getRoot1() {//计算正实根的方法
	return(-b+Math.sqrt(b*b-4*a*c))/(2*a);
}
public double getRoot2() {//计算负实根的方法
	return(-b-Math.sqrt(b*b-4*a*c))/(2*a);
}
}

2.设计一个用于求解任意二元一次方程的LinearEquation类

public class LinearEquation {
private int a,b,c,d,e,f;//定义6个私有字段
LinearEquation(int a,int b,int c,int d,int e,int f){
	//创建类的构造方法
	this.a=a;this.b=b;this.c=c;this.d=d;this.e=e;this.f=f;
}//用于读取6个字段值的get()方法,无set()方法表示6个字段为只读字段
public int getA() {
	return a;
}
public int getB() {
	return b;
}
public int getC() {
	return c;
}
public int getD() {
	return d;
}
public int getE() {
	return e;
}
public int getF() {
	return f;
}
public boolean isSolvable() {//判别式方法,测试方程组是否有解
	return a*d-b*c!=0;
}
public double getX() {//计算方程组的解(x)
	return(double)(c*e-b*f)/(double)(a*e-b*d);
}
public double getY() {//计算方程组的解(y)
	return(double)(a*f-c*d)/(double)(a*e-b*d);
}
}

3.测试代码检验设计结果是否正确

public class SX1 {
public static void main(String[] args) {
	//调用构造函数创建对象le,通过其构造方法为6个系数字段赋值
	LinearEquation le=new LinearEquation(1,2,3,4,5,6);
	if(le.isSolvable())//调用判别式,判断方程组是否有解
		System.out.println("x="+le.getX()+", y="+le.getY());//显示方程组的解
	else
		System.out.println("方程无解");
}
}

4.设计用户交互界面及程序整合

import java.util.*;
public class SX2 {
public static void main(String[] args) {
	Scanner val=new Scanner(System.in);
	while(true) {//选择3的时候退出
		System.out.println("一元二次方程--1 二元一次方程--2 退出--3 请选择:");
		switch(val.nextInt()) {
		case 1://处理一元二次方程
			System.out.println("请输入一元二次方程的3个系数:");
			QuadraticEquation qe=new QuadraticEquation(val.nextInt(),val.nextInt(),val.nextInt());
			if(qe.getDiscriminant()>=0)
				System.out.println("x1="+qe.getRoot1()+", x2="+qe.getRoot2());
			else
				System.out.println("方程无实根");
			break;
		case 2://处理二元一次方程
			System.out.println("请输入二元一次方程的6个系数:");
			LinearEquation le=new LinearEquation(val.nextInt(),val.nextInt(),val.nextInt(),val.nextInt(),val.nextInt(),val.nextInt());
			if(le.isSolvable())
				System.out.println("x="+le.getX()+", y="+le.getY());
			else
				System.out.println("方程无解");
			break;
		case 3:
			System.out.println("bye!");
			return;
		}
	}
}
}

简单用户管理的实现

1.编写主方法的代码

import java.util.*;
public class SX3_2 {//主类
public static void main(String[] args) {//主方法
	Scanner val = new Scanner(System.in);
	System.out.println("1--登录  2--注册新用户,请选择:");
	switch(val.nextInt()) {
	case 1://登录
		System.out.println("输入用户名和密码:");
		Users user = new Users(val.next(),val.next());//创建User类对象user
		if(user.checkUser()) {//checkUser()方法返回ture
			System.out.println("登录成功");
			System.out.print("1--修改密码  2--退出,请选择:");
			if(val.nextInt()==1) {//用户选择了"修改密码"
				System.out.print("输入新密码");
				System.out.println(user.editUser(val.next()));
			}
			else//用户选择了“退出”
				System.out.println("bye!");
		    }
		else//登录失败
			System.out.println("用户名和密码错误");
			break;
			case 2://用户选择了“注册新用户”
				System.out.print("输入新的用户名和密码:");
				user = new Users(val.next(),val.next());
				System.out.println(user.addUser());
			break;
			default:
				System.out.println("菜单选择错误");
		}
		val.close();
	}
}

2.创建Users类

import sky.mytools.FileTools;
public class Users {//创建Users类
		private String name,userData;//封装私有字段
		private final String fileName="e:\\users.txt";
		//私有的final类型字段,用于储存数据文件名
		private FileTools ft=new FileTools();//声明一个FileTool类对象ft
		public Users(String n,String p){//User类的构造方法
			name=n;
			userData=n+""+p;//将用户名和密码组合成一个用空格分割的字符串
		}
		public boolean checkUser(){//用于检测用户是否合法的方法
			return !ft.query(fileName,userData).equals("keyIsNoFound");
		}
		public String addUser(){//用于实现新用户注册的方法
			if(ft.query(fileName,userData).equals("keyIsNoFound"))
				return ft.appendToFile(fileName,userData);
			else
				return "要修改的数据已存在";
		}
		public String editUser(String newPwd){//用于修改密码的方法
			if(!ft.query(fileName,userData).equals("keyIsNoFound"))
				return ft.editFile(fileName,userData,name+""+ newPwd);
				else
					return "要修改的数据已存在";
		}
}

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meteor.792

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值