一、
- (账户类 Account)设计一个名为 Account 的类,它包括:
—个名为id的 int 类型私有数据域(默认值为 0)。
—个名为balance 的 double 类型私有数据域(默认值为 0)。
—个名为 annualInterestRate 的 double 类型私有数据域存储当前利率(默认值为 0)。假设所有的账户都有相同的利率。
— 个名为 dateCreated的 Date 类型的私有数据域,存储账户的开户日期。
— 个用于创建默认账户的无参构造方法。
一个用于创建带特定id和初始余额的账户的构造方法。
id、balance 和 annuallnterstRate 的访问器和修改器。
dateCreated的访问器。
一个名为getMonthlyInterest()的方法,返回月利息。
—个名为withDraw 的方法,从账户提取特定数额。
—个名为deposit的方法向账户存储特定数额。
实现这个类。
提示:月利率计算balance * (annualInterestRate / 1200)
用import java.util.Date引入相应Date类
注意:annualInterestRate是一个百分教,比如 4.5%。你需要将其除以100。
编写一个测试程序,创建一个账户ID 为 1122、余额为 20000美元、年利率为 4.5%的
Account 对象(ID和余额通过键盘输入),使用 withdraw 方法取款 2500美元,使用 deposit 方法存款 3000美元,然后打印余额、月利息以及这个账户的开户日期。
import java.util.Date;
import java.io.*;
public class Account {
private int id = 0;
private double balance = 0;
private double annualInterestRate = 0;
private Date dateCreated; // 定义及初始化
public Account() {
dateCreated = new Date(); // 创建空的新账户
}
public Account(int id, double balance) { // 创建有账户和余额的账户
this.id = id;
this.balance = balance;
dateCreated = new Date();
}
public int Getid() { // id的访问器
return id;
}
public double Getbalance() { //balance的访问器
return balance;
}
public double GetannualInterestRate() { // annualInterestRate的返回器
return annualInterestRate;
}
public Date DateCreated() { // dateCreated的返回器
return dateCreated;
}
public void SetId(int id) { // id的修改器
this.id = id;
}
public void Setbalance(double balance) { // balance的修改器
this.balance = balance;
}
public void SetannualInterestRate(double annualInterestRate) { // annualInterestRate的修改器
this.annualInterestRate = annualInterestRate;
}
public double GetMonthlyInterest() { // 计算利息
return balance * (annualInterestRate / 1200);
}
public void Withdraw(double withdraw) { // 计算余额——支出
balance = balance - withdraw;
}
public void Deposit(double deposit) { // 计算余额——支入
balance = balance + deposit;
}
public static void main(String[] args) throws IOException {
BufferedReader br_1 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入ID");
String str_1 = br_1.readLine(); // 获取键盘输入
int str_1_0 = Integer.parseInt(str_1); // 转整形
BufferedReader br_2 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入余额");
String str_2 = br_2.readLine();
double str_2_0 = Double.parseDouble(str_2); // 转双精度浮点数
Account account = new Account(str_1_0, str_2_0); // 新建账户
account.SetannualInterestRate(4.5);
account.Withdraw(2500); // 取款
account.Deposit(3000); // 存款
System.out.println("Balance is " + account.Getbalance());
System.out.println("Interest rate is " + account.GetannualInterestRate());
System.out.println("Account Create date is " + account.DateCreated()); // 打印各项目
}
}
二、
假设需要处理课程信息,每门课程都有一个名字以及选课的学生,要能够从这个课程添加 / 删除一个学生。可以使用一个类来对课程建模,
-courseName: String 课程名
-students: String[] 存储选某课程的学生的数组
-numberOfStudents: int 学生的人数(默认值:0 >
-Course(courseName: String) 创建一个带特定名称的课程
-getCourseNane(): String 返回课程名
-addStudent(student: String): void 给这门课程添加一个新同学
-dropStudent(student: String): void 从这门课程中删除一个学生
-getStudents():String[] 返回选某门课程的所有学生
-getNumberOfStudents(): int 返回这门课程的学生人数
-clear()方法: void 删掉选某门课程的所有学生
编写一个测试程序,创建一门课程,添加三个学生,删除一个学生,然后显示选这门课程的所有学生和选课人数,再清空选这门课程的所有学生,显示目前选课人数。
public class Course {
String courseName; // 定义String类型的课程名
int numberOfStudents = 0; // 定义int类型的选课学生人数, 并初始化为0
String students[] = new String[60]; // 定义存储学生信息的数组并初始化
public Course(String courseName) {
this.courseName = courseName; // course的构造方法
}
public String getCourseName() { // 获取课程名
return courseName;
}
public void AddStudent(String student) { // 添加学生
students[numberOfStudents] = student; // 向数组中写入学生名
numberOfStudents = numberOfStudents + 1; // 学生人数加一
}
public void DropStudent(String student) { // 删除学生
for (int i = 0; i <= numberOfStudents - 1; i++) { // 循环查找
if (students[i] == student) { // 若某项为该生
for (int j = i; j < numberOfStudents - 1; j++) {
students[j] = students[j + 1]; // 循环将该生后面的元素依次前移, 顺便抹除要删除的那个学生
}
numberOfStudents = numberOfStudents - 1; // 学生数减一
} else { // 如果某项非该生
if (i != numberOfStudents - 1) { // 检查是否循环到了数组最后一个, 发现没到
continue;
} else { // 发现到了
System.out.println(student + "未选此课程"); // 没这个人
}
}
}
}
public String[] getStudents() { // 获取学生列表
return students;
}
public int getNumberOfStudents() { // 获取学生数
return numberOfStudents;
}
public void Clear() { // 清空数组
numberOfStudents = 0; // 数量清零
students = null; // 数组重置为null
}
public static void main(String[] args) {
Course course = new Course("Java语言程序设计"); // 设置课程
course.AddStudent("张三");
course.AddStudent("李四");
course.AddStudent("王五"); // 插入三个人
System.out.println("插入后有" + course.getNumberOfStudents() + "人选" + course.getCourseName()); // 打印选课人数
System.out.println("分别是:"); // 打印选课学生姓名
for (int i = 0; i <= course.numberOfStudents - 1; i++) {
if (i < course.numberOfStudents - 1) { // 循环打印,不到最后一个就顺便打印个顿号
System.out.print(course.students[i] + "、");
} else {
System.out.println(course.students[i]); // 到了最后一个就直接打印学生姓名,不再打印顿号,顺便换行
}
}
course.DropStudent("王五");
course.DropStudent("李四"); // 删除学生
// 以下同理
System.out.println("删除后有" + course.getNumberOfStudents() + "人选" + course.getCourseName());
System.out.println("分别是:");
for (int i = 0; i < course.numberOfStudents; i++) {
if (i < course.numberOfStudents - 1) {
System.out.print(course.students[i] + "、");
} else {
System.out.print(course.students[i]);
}
}
System.out.print("\n");
course.Clear(); // 清空选课信息
// 以下同理
System.out.println("清空后有" + course.getNumberOfStudents() + "人选" + course.getCourseName());
for (int i = 0; i < course.numberOfStudents; i++) {
if (i < course.numberOfStudents - 1) {
System.out.print(course.students[i] + "、");
} else {
System.out.print(course.students[i]);
}
}
}
}
三、
- 实现一个宠物商店的模型,一个宠物商店可以保存多个宠物的信息(名字,年龄),可以实现上架,下架,查询等功能。
编写一个测试程序实现宠物商店的宠物上架,下架,查询功能。实现效果如下图所示
提示:宠物商店跟具体猫狗没直接联系,我们要定义一个标准(包含获得宠物的名字、年龄信息的方法),可用接口实现,宠物商店跟标准有关,只要是一个符合宠物标准的就可以到宠物商店去卖,商店可以实现宠物上架,下架,查询等功能,宠物标准可以定义多个实现这个标准的子类(如猫类,狗类)。
(这个程序我自己复现的时候是没有做到完全实现的,对此我深表歉意)
import java.util.LinkedList;
import java.io.*;
class Link {
public LinkedList<String[]> datas = new LinkedList<String[]>(); // 新建链表
public void Insert(Pet pet ) { // 上架宠物
String[] data = new String[2];
if ( pet.GetName().equals("") | pet.GetAge().equals("")) { // 检查是否为空, 存在空值就直接提醒
System.out.println("信息不能为空。");
} else {
data[0] = pet.GetName(); // 赋值入数组
data[1] = pet.GetAge();
datas.add(data); // 数组入链表
System.out.println("上架成功。");
}
}
public void Delete(Pet pet) { // 下架宠物
int i = 0; // 计数器
int len = datas.size(); // 列表数据量
for(String[] data : datas) { // 循环检查
if (data[0].equals(pet.GetName()) && data[1].equals(pet.GetAge())) { // 检查是否存在该内容
datas.remove(i); // 从链表中删除
System.out.println("下架成功。");
break;
} else { // 如果不存在
if (i == len) { //如果是最后一项还不存在
System.out.println("没有此宠物。");
}
}
i++; // 计数器自加
}
}
public void Select(Pet pet) { // 查找宠物
int i = 0;
int len = datas.size();
for(String[] data : datas) {
if (data[0].equals(pet.GetName())) { // 只验证对应姓名,其他跟删除的查询部分一样
System.out.println("此宠物的姓名是:" + data[0] + ",年龄是:" + data[1]); //
} else {
if (i == len) {
System.out.println("没有此宠物。");
} else {
continue;
}
}
i++;
}
}
public void SelectAll() { // 全部查找输出
int i = 0; // 计数器
for(String[] data : datas) {
System.out.println("宠物的姓名是:" + data[0] + ",年龄是:" + data[1]);
i++;
}
System.out.println("此宠物商店目前有" + i + "个宠物"); // 打印技术结果
}
}
interface Pet { // 接口
public String GetName() ;
public String GetAge() ;
}
class Dogs implements Pet {
private String name; // 定义
private String age;
public Dogs(String name, String age) { // 创建构造方法
this.name = name;
this.age = age;
}
public String GetName() { // name的访问器
return this.name;
}
public String GetAge() { // age的访问器
return this.age;
}
public String toString(){
return "狗的名字:" + this.name + ",年龄:" + this.age;
}
}
class Cats implements Pet { // 完全同Dogs
private String name;
private String age;
public Cats(String name, String age) {
this.name = name;
this.age = age;
}
public String GetName() {
return this.name;
}
public String GetAge() {
return this.age;
}
public String toString(){
return "猫的名字:" + this.name + ",年龄:" + this.age;
}
}
public class PetStore { // 主类
public static void main(String[] args) throws IOException { // 主方法
Link petstore = new Link(); // 新创建链表
while (true) { // 循环启动
BufferedReader br01 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物类型(dog cat)或键入“stop”以退出");
String str01 = br01.readLine();
BufferedReader br0 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入操作(select insert delete)");
String str0 = br0.readLine();
if (str01.equals("dog")) { // 一些简单的判断和运行, 外层是宠物类型选择, 内层是操作选择
if (str0.equals("select")) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物名");
String str = br.readLine();
petstore.Select(new Dogs(str, str));
} else if (str0.equals("insert")) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物名");
String str = br.readLine();
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物年龄");
String str1 = br1.readLine();
petstore.Insert(new Dogs(str,str1));
} else if (str0.equals("delete")) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物名");
String str = br.readLine();
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物年龄");
String str1 = br1.readLine();
petstore.Delete(new Dogs(str,str1));
} else {
System.out.println("指令无效。");
}
} else if (str01.equals("cat")){
if (str0.equals("select")) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物名");
String str = br.readLine();
petstore.Select(new Cats(str, str));
} else if (str0.equals("insert")) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物名");
String str = br.readLine();
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物年龄");
String str1 = br1.readLine();
petstore.Insert(new Cats(str,str1));
} else if (str0.equals("delete")) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物名");
String str = br.readLine();
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宠物年龄");
String str1 = br1.readLine();
petstore.Delete(new Cats(str,str1));
} else {
System.out.println("指令无效。");
}
} else if (str01.equals("stop")) {
break;
} else {
System.out.println("指令无效。");
}
petstore.SelectAll(); // 每次运行完都要输出目前链表中仍有的数据
}
}
}
四、
定义一个形状抽象类Shape,继承出圆形子类和矩形子类,同时提供构造方法和Print()方法输出结果,并在PUBLIC类的MAIN方法中创建相应的对象,计算两种图形的面积和周长并输出。
import java.io.*;
abstract class Shape { // 抽象形状类
abstract double perimeter(); // 抽象方法
abstract double area();
}
class Circle extends Shape {
private double r;
public void setR(double r) { // r的修改器
this.r = r;
}
public double getR() { // r的访问器
return r;
}
double area() {
return Math.PI * Math.pow(r, 2.0); // 重写圆的面积计算方法
}
double perimeter() {
return 2 * Math.PI * r; // 重写圆的周长计算方法
}
public Circle(double r) { //构造含参的方法
this.setR(r);
return;
}
}
class Rectangle extends Shape { // 几同上理
private double l;
private double w;
public void setLW(double l, double w) { // l和w的修改器
this.l = l;
this.w = w;
}
public double getL() {
return l;
}
public double getW() {
return w;
}
double area() {
return l * w;
}
double perimeter() {
return 2 * (l + w);
}
public Rectangle(double l, double w) {
this.setLW(l, w);
return;
}
}
public class Calculate {
public static void main(String[] args) throws IOException {
while (true) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请选择图形(圆形,矩形)或键入“退出”");
String str_choice = br.readLine();
if (str_choice.equals("圆形")) {
BufferedReader br_r = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入半径");
String str_r = br_r.readLine();
double r = Double.parseDouble(str_r);
Circle circle = new Circle(r);
System.out.println("圆的面积为" + circle.area() + "圆的周长为" + circle.perimeter());
} else if (str_choice.equals("矩形")) {
BufferedReader br_l = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入长");
String str_l = br_l.readLine();
double l = Double.parseDouble(str_l);
BufferedReader br_w = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入宽");
String str_w = br_w.readLine();
double w = Double.parseDouble(str_w);
Rectangle rectangle = new Rectangle(l, w);
System.out.println("矩形的面积为" + rectangle.area() + "矩形的周长为" + rectangle.perimeter());
} else if (str_choice.equals("退出")) {
break; // 退出循环,结束运行
} else {
System.out.println("指令无效");
}
}
}
}