JAVA程序设计课程期末设计

目录

《JAVA程序设计》期末课程设计

project代码文件夹可从Github获取
Java大作业github链接

目录

利用循环与跳转语句显示1-100中所有能被5且能被7整除的数。

概要设计

设计内容

输出100以内能被5和7整除的数

思路

遍历100以内的整数,并用条件语句判断是否能被5和7整除,并输出这些数。

流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yqpu4ysX-1641815276180)(media/0cad143ca369ba4818a553f3b562a862.png)]

详细设计、调试与分析

程序一:for循环遍历1-100的整数

设计test1类,在主方法中for循环遍历100以内的整数,并用条件语句判断是否能被5和7整除,并输出这些数。

UML类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TLU9UgcU-1641815276181)(media/b5dd023a20ea7c981200bd1381682ca6.png)]

程序代码

public class test1 {

public static void main(String[] args) {

for(int i=1;i<=100;i++){

if(i%5+i%7!=0 ) //It is divisible by 5 and 7 at the same time, which means the
remainder with 7 and 5 sums to 0

continue;//The jump statement

else System.out.println(i);//Print the i divisible by 5 and 7.

}

}

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uoTOUczO-1641815276182)(media/5bccb10056bbdabf9901edca3e3dbcc1.png)]

程序二:while循环遍历1-100的整数

设计test1_1类,在主方法中while循环遍历100以内的整数,并用条件语句判断是否能被5和7整除,并输出这些数。

UML类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YID4eUMs-1641815276182)(media/b5dd023a20ea7c981200bd1381682ca6.png)]

程序代码:
public class test1_1 {

public static void main(String[] args) {

int i=1;//The initial value is 1

while (true){//Infinite loop

if(i%5+i%7==0)//It is divisible by 5 and 7 at the same time, which means the
remainder with 7 and 5 sums to 0

System.out.println(i);//Print the i divisible by 5 and 7.

if(++i\>100) break;//Determine whether i is greater than 100 and add 1 and jump
out of the loop when i is greater than 100.

}

}

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9tMFgZnS-1641815276182)(media/5bccb10056bbdabf9901edca3e3dbcc1.png)]

程序三:do while循环遍历1-100的整数

设计test1_2类,在主方法中do
while循环遍历100以内的整数,并用条件语句判断是否能被5和7整除,并输出这些数

UML类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxmpnQIh-1641815276183)(media/71da4e717769d8d9cb053c75f3bac858.png)]

程序代码:
public class test1_2 {

public static void main(String[] args) {

int i=1;//The initial value is 1

do{//infinite loop

if(i%5+i%7==0)//It is divisible by 5 and 7 at the same time, which means the
remainder with 7 and 5 sums to 0

System.out.println(i);//Print the i divisible by 5 and 7.

}while (++i\<=100);//Terminate the loop when i is greater than 100

}

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7G42TncG-1641815276183)(media/df856c373c7c7f235a1cab89aaf0d484.png)]

程序四:do while循环遍历1-100的整数,用switch语句选择

设计test1_3类,在主方法中do
while循环遍历100以内的整数,并用switch条件语句判断是否能被5和7整除,并输出这些数。

UML类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S372nrqp-1641815276183)(media/76c7ecb02274223bb99dd892015c529a.png)]

程序代码:
public class test1_3 {

public static void main(String[] args) {

int i = 1;//初始值为1

int remainder_sum;//Define the sum of the remainder.

do{

remainder_sum=i % 5 + i % 7;

switch (remainder_sum){

case 0:

System.out.println(i);//When the sum of remainder is 0 print the number.

default:

continue;//When the sum of remainder is more than 0 the loop continues.

}

}while (++i \<= 100);//If i is less than 100, an auto-increment operation is
performed.

}

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1D0IHSd6-1641815276184)(media/df856c373c7c7f235a1cab89aaf0d484.png)]

分析讨论:

用不同的循环语句效果等价,如果把100以内的数推广到小于n的数,其时间复杂度都是,但是其逻辑不一定完全相同。

素数是只能被1和其本身整除的数,比如2、3、5、7等,设计一个程序,求出100以内素数的和,要求尽可能减少程序的运算次数。

概要设计

内容

遍历100以内所有整数,用条件语句查找并输出所有素数。

思路

遍历100以内所有整数,用条件语句判断是否能被所有比它的平方根小的数整除,并输出所有素数。

详细设计、调试与分析:

程序一:在main方法中,遍历100以内所有整数,用条件语句判断是否能被所有比它的平方根小的数整除,并输出所有素数。

流程图

参考资料与文献

[1]明日科技. Java从入门到精通(第6版)[M]. 清华大学出版社, 2020.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQ0KUP2h-1641815276184)(media/1056ca77fe891b97dbcf9cd14ef4f548.png)]

UML类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDM4ZbwU-1641815276185)(media/10c54a9f9808a1ba3f20049f47345819.png)]

程序代码
public class test2 {

public static void main(String[] args) {

long startTime=System.nanoTime(); //Obtain the starting time

boolean is_prime;

int sum=2;//set initial value

System.out.print(2+ " ");//Considering the particularity of 2, loop from 3

for (int i = 3; i \< 100; i+=2) {

is_prime = true;//Suppose i is a prime number

for (int j = 3; j \<= Math.sqrt(i); j++) {//The number divisible by i must be
less than its square root

if (i % j == 0) {

is_prime = false;//If it is divisible, i isn't a prime number, the loop is
jumped out and is_prime=false.

break;

}

}

if (is_prime) {

System.out.print(i + " ");//If none are not divisible, output i

sum += i;

}

}

System.out.println("\\nThe sum of the prime less than 100 is "+sum);

long endTime=System.nanoTime(); //Obtain the ending time.

System.out.println("Running time: "+(endTime-startTime)+" ns");//Print runnint
time.

}

}

Out:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7pha0ikV-1641815276185)(media/b7dfd722c07d42b44e3c1f4d71da72fd.png)]

程序评价

由于每次都需要遍历小于自身平方根的所有整数,时间复杂度比较大。

改进思路

用一个list储存已经找到的素数,并在列表中做求和运算。

程序二:用一个list储存已经找到的素数,并在列表中做求和运算

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7pJ9wxF-1641815276186)(media/7da11ef8ddecdcfe9090f51777c7ae4f.png)]

UML类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jrmgBSIU-1641815276186)(media/26f5e052c50de7750af047e759bbc4e9.png)]

程序代码:
import java.util.ArrayList;

import java.util.List;

public class test2_3 {

public static void main(String[] args) {

long StartTime =System.nanoTime(); //Obtain the starting time

List\<Integer\> PrimeList = new ArrayList\<\>();//The list storages the primes.

boolean IsPrime;int Prime;

PrimeList.add(2);//add 2 to the list

System.out.print(2+ " ");//Considering the particularity of 2, loop from 3

for (int i = 3; i \< 100; i+=2) {

IsPrime = true;//Suppose i is a prime number

for (Integer j : PrimeList ) {//Traverse the list PrimeList

if (i % j == 0) {

IsPrime = false;//If it is divisible, i isn't a prime number, the loop is jumped
out and IsPrime=false.

break;

}

}

if (IsPrime) {

PrimeList.add(i);//The prime is added in the list.

}

}

System.out.println("\\nThe sum of the prime less than 100 is "

\+PrimeList.stream().reduce(Integer::sum).orElse(0));//Print the sum of prime
numbers.

System.out.println(PrimeList.toString());//Print the list of prime.

long EndTime=System.nanoTime(); //Obtain the ending time.

System.out.println("Running time: "+(EndTime- StartTime)+" ns");//Print runnint
time.

}

}
Out:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUaZjNeP-1641815276186)(media/c8bc82976d0e0b65eba2f462acfbe877.png)]

程序评价

运行时间减少为5618770ns,运行时间大大减少。但是这个程序还是遍历了一些不需要遍历的数。

改进思路

由于合数都可以分解为若干个素数的和,且最大的质因数一定小于它的算术平方根。注意到,不妨只遍历小于10的素数2,3,5,7,这样可以进一步减小空间复杂度。

程序三:把遍历列表改为[2,3,5,7]

流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tCgomSOw-1641815276187)(media/0a09ddb599538192720bc9f760b44d6d.png)]

UML类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y1DSE1VL-1641815276188)(media/a0eccfdbba2624f7d129fbcecd72d9f8.png)]

程序代码:
import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.stream.Collectors;

public class test2_4 {

public static void main(String[] args) {

long StartTime =System.nanoTime(); //Obtain the starting time

List\<Integer\> PrimeList = new ArrayList\<\>();//Initial the list storages the
primes.

List\<Integer\> PrimeLessThan10= new ArrayList\<\>();//Initial the list for
primes less than 10.

PrimeLessThan10.add (2);PrimeLessThan10.add (3);PrimeLessThan10.add
(5);PrimeLessThan10.add (7);//Add elems

boolean IsPrime;int Prime;

PrimeList.add(2);//add 2 to the list

System.out.print(2+ " ");//Considering the particularity of 2, loop from 3

for (int i = 3; i \< 100; i+=2) {

IsPrime = true;//Suppose i is a prime number

for (Integer j : PrimeLessThan10 ) {//Traverse the list PrimeList

if (i % j == 0) {

IsPrime = false;//If it is divisible, i isn't a prime number, the loop is jumped
out and IsPrime=false.

break;

}

}

if (IsPrime) {

PrimeList.add(i);//The prime is added in the list.

}

}

System.out.println("\\nThe sum of the prime less than 100 is "

\+PrimeList.stream().reduce(Integer::sum).orElse(0));//Print the sum of prime
numbers.

System.out.println(PrimeList);//Print the list of prime.

long EndTime=System.nanoTime(); //Obtain the ending time.

System.out.println("Running time: "+(EndTime- StartTime)+" ns");//Print runnint
time.

}

}
Out:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AiYQJujh-1641815276188)(media/a7acd962d6380346cf22b7603f1e54af.png)]

程序评价

减少遍历次数,运行时间进一步缩短。

电费计收的具体方案是,月用电量低于50千瓦时部分,电价仍为0.538元/千瓦时;51~200千瓦时部分,单价为0.568元/千瓦时;超过200千瓦时部分,电价为0.638元/千瓦时。编写程序完成电费的计算,要求任意输入一个电量数字能够算出电费。

概要设计

设计内容

设计一个程序,并用IDEA Swing
Designer设计一个GUI,实现电费的阶梯计价模式下的计算。

思路

用if语句或switch语句选择区间,用不同公式计算。

流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-33iJTj6R-1641815276188)(media/f1050eab62ae25de524c070a292fea5e.png)]

详细设计、调试与分析:

程序一:用if语句,在test3的main方法中实现功能。

程序代码:
import java.util.Scanner;  

public class test3 {  
public static void main(String[] args) {  
double volume,fee;  
Scanner input=new Scanner(System.in);  
System.out.println("Please input the volume:");  
volume=input.nextDouble();//Input the power usage  
if(volume\<=50)fee=volume\*0.538; //When the power volume is less than 50  
else if(volume\<=200)//When the power volume is less than 200  
fee=50\*0.538+(volume-50)\*0.568;  
else fee=50\*0.538+150\*0.568+(volume-200)\*0.638;//When the power volume is
more than 200  
System.out.printf("The fee for %f is %f",volume,fee);//Print the fee and the
volume  
}  
}
Out:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f6XDpCPQ-1641815276188)(media/054357632bdf42f7676acf19100bd24a.png)]

程序二:用if语句,在test3_1的main方法中调用函数实现功能。

程序代码:
import java.util.Scanner;

public class test3_1 {

public static void main(String[] args) {

Scanner input=new Scanner(System.in);

System.out.println("Please input the volume:");

System.out.println(Fee(input.nextDouble()));//Input the volume and print the fee

}

public static double Fee(double volume){

double fee;//Initial the variable fee.

if(volume\<=50)fee=volume\*0.538; //When the power volume is less than 50

else if(volume\<=200)//When the power volume is less than 200

fee=50\*0.538+(volume-50)\*0.568;

else fee=50\*0.538+150\*0.568+(volume-200)\*0.638;//When the power volume is
more than 200

return fee;

}

}
Out:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ExDZWMNf-1641815276188)(media/716509ac388a7c176ae4dff46e4c6361.png)]

程序三:用IDEA Swing Designer设计一个GUI实现输入用电量并输出电费。在Power类中实现电费的计算,在test3_GUI2类中actionPerformed(ActionEvent e)函数进行输出。

程序代码:
import javax.swing.\*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class test3_GUI2 {

private JTextArea PowerTextField;

private JButton OK;

private JLabel FeeLabel;

private JPanel testJPanel;

private JTextPane pleaseUnputTheVolumeTextPane;

public static void main(String[] args) {

JFrame frame = new JFrame("Power Fee Calculator");//Title for the frame

frame.setContentPane(new test3_GUI2().testJPanel);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setVisible(true);

}

public test3_GUI2() {

OK.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

//Parse volume of power as a double and calculate by the function.

double power = Double.parseDouble(PowerTextField.getText());

FeeLabel.setText("The fee is "+Power.Fee(power) + " dollars");

}

});

}

}

class Power{//Class for calculating the fee of power

public static double Fee(double volume){

double fee;//Initial the variable fee.

if(volume\<=50)fee=volume\*0.538; //When the power volume is less than 50

else if(volume\<=200)//When the power volume is less than 200

fee=50\*0.538+(volume-50)\*0.568;

else fee=50\*0.538+150\*0.568+(volume-200)\*0.638;//When the power volume is
more than 200

return fee;

}

}
GUI运行实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yOxTrd1C-1641815276190)(media/7c12cc29950c7fda731948d6d56ae4ae.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pM4nDLpI-1641815276190)(media/a6a2efa68e3b4d6a67821b5340713df5.png)]

一张卡片上面写着一个五位数的数字,但是小王不小心把墨水弄到卡片上去了,导致百位和千位上的数字看不清楚,只能看到2**10,小王的爸爸告诉小王这个数能被35和37整除。请设计一个程序帮助小王快速判断这个数具体是多少。

概要设计:

设计内容:

查找能被35和37整除的五位数2**10。

思路

遍历20010-19910间的所有整数,判断是否能被35和37整除,输出可以被整除的数。

流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LdzAJLyM-1641815276190)(media/00b475c4f53f4e7630b2eb7719f6a61e.png)]

详细设计、调试与分析:

程序一:在test4类中,实现对目标五位数的查找。

遍历20010-19910间的所有整数,判断是否能被35和37整除,输出可以被整除的数。

程序代码
public class test4 {

public static void main(String[] args) {

int number = 0;

for(int i=0;i\<100;i++) {//Traverse all integers between 20010 and 29910

number = 20_000 + i\*100 + 10;//Contract the number.

if (number % 35 + number % 37 == 0) {//If the number can be divided by 35 and 37

System.out.println("The number is " + number);//Print the number.

break;//End up the loop.

}

}

}

}
Out:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IQecr7Dh-1641815276191)(media/ea116d0f45fb90f8a5af36fd5de99534.png)]

程序评价

循环次数为33次,循环次数可以进一步缩短。

改进思路

只遍历35*37的倍数,并选择符合条件的五位数进行输出。

程序二:test4_1类中,遍历35*37的倍数,并选择符合条件的五位数进行输出。

程序代码:
public class test4_1 {

public static void main(String[] args) {

int number = 0;

for(;number\<=29910;number+=35\*37) {

//Traverse all integers which can be divided by 37 and 25 between 0 and 29910

if (20010 \<= number && number%100==10) {

//If the number can be divided by 35 and 37

System.out.println("The number is " + number);//Print the number.

break;//End up the loop.

}

}

}

}
程序评价

循环次数减少为18次,循环次数明显减少。

Out:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UXC9cdMU-1641815276193)(media/655fc5d8dd19886327577f4a0f5c067d.png)]

编写日期类Date,要求成员变量:year,month,day。方法:Date(int y,int m, int d),构造方法,y、m、d分别表示年月日。void showDate()以“****年**月**日”形式显示日期。另编写一个类useDate,在其中调用Date类,创建一个Date对象,并输出日期。

概要设计

内容

编写useDate类,在其中调用Date类,实例化Date对象输出日期。

思路

构建Date类,并用一个构造函数Date(int y, int m, int
d),形参列表为三个int型变量,和一个无参的函数void
showDate(),在main方法中输入日期并调用Date类中的函数。

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fSfy9fVy-1641815276195)(media/b7db6c608d82f29722bf466077b5c0e0.png)]

UML类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Hb3BeGh-1641815276196)(media/2b55e46ff8ca2c6cdce1a2d50630aa39.png)]

详细设计、调试与分析

程序一:useDate和Date类

UML类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n2c1pVJ2-1641815276196)(media/700e1f4b5e7c3f6fa83593ff33b33d14.png)]

程序代码:
import java.util.Scanner;

public class useDate {

public static void main(String[] args) {

Scanner input=new Scanner(System.in);

System.out.println("Please in put the year");

int year=input.nextInt();

System.out.println("Please in put the month");

int month=input.nextInt();

System.out.println("Please in put the day");

int day=input.nextInt();

Date date=new Date(year,month,day);

date.showDate();//调用showDate方法显示日期

}

}

class Date{

int y, m, d;

public Date(int y,int m, int d){

this.y=y;

this.m=m;

this.d=d;

}

void showDate(){

System.out.print(y+"年"+m+"月"+d+"日");

}

}

程序二:设计GUI,实现日期的输入与输出

UML类图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AzIv9kgR-1641815276196)(media/2b55e46ff8ca2c6cdce1a2d50630aa39.png)]

程序代码:
import javax.swing.\*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class useDateGUI {

private JTextArea textYear;

private JTextArea textMonth;

private JTextArea textDay;

private JPanel Date;

private JPanel useDateJPanel;

private JButton dateButton;

private JLabel DateLabel;

public static void main(String[] args) {

JFrame frame = new JFrame("useDateGUI");

frame.setContentPane(new useDateGUI().useDateJPanel);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setVisible(true);

}

public useDateGUI() {

dateButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

int year=Integer.parseInt(textYear.getText());//Get the string in the text area
and convert into integer.

int month=Integer.parseInt(textMonth.getText());

int day=Integer.parseInt(textDay.getText());

DateLabel.setText(year+"年"+month+"月"+day+"日");//Output the date in label.

}

});

}

}

class Date\_ {

int y, m, d;

public Date_(int y, int m, int d){

this.y=y;

this.m=m;

this.d=d;

}

void showDate(){

System.out.print(y+"年"+m+"月"+d+"日");

}

String show_Date(){

return y+"年"+m+"月"+d+"日";

}

}
分析与讨论

用IDEA Swing
Designer可以提高GUI设计的效率,可以直接进行可视化设计,设计内容不需要编程实现。

编写学生类Student,要求有成员变量:name 代表姓名,String型;sn 代表学号,int型。方法:Student(Sting s1, int n),构造方法,参数s1表示姓名,n表示学号。void showStu()方法用来显示姓名及学号。另编写一个类useStu,在其中创建一个Student对象,输出其成员变量。

概要设计

内容

编写学生类Student和useStu类,在其中创建一个Student对象,输出其成员变量。

思路

在Student类的构造方法Student(String s1, int
n)中,设置成员变量并用showStu()输出成员变量。在useStu中调用这个类中的方法。

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UboDnUfB-1641815276197)(media/5d263c1cea30190abb5f170ca5ab6e1c.png)]

详细设计、调试与分析:

UML类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dtgtxXeD-1641815276197)(media/24480f0ae56b36ce04affdda5da8355d.png)]

详细设计、调试与分析

程序代码

import java.util.Scanner;

public class useStu {

public static void main(String[] args) {

Scanner input=new Scanner(System.in);

System.out.println("Please in put the name");

String name=input.nextLine();

System.out.println("Please in put the ID");

int ID=input.nextInt();

Student s1=new Student(name,ID);//instantiated object

s1.showStu();//call member method

}

}

class Student{

String student1;//Create the variable of student

int number;

public Student(String s1, int n){

this.student1=s1;

this.number=n;

}

void showStu(){

System.out.println("Name: "+student1+"\\nID: "+number);//print the ID and the
name

}

}

编写一个描述圆形的类,运行时任意输入半径可以求的圆的面积。

概要设计

设计内容

设计一个程序,并在此基础上设计GUI,实现圆的面积的计算。

设计思路

接受键盘输入的半径值,用Math包中的Pi和pow方法计算面积值并输出打印。在此基础上用IDEA
Swing Designer设计一个GUI,在test7_GUI()类中实现圆的面积的计算与输出。

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7H1vLjw-1641815276198)(media/329942188e3bbe0f6d8a220d12e409e7.png)]

详细设计、调试与分析

程序一

程序代码
import java.util.Scanner;

public class test7 {

public static void main(String[] args) {

System.out.println("Please type in the radius of the circle.\\n");

Scanner sc = new Scanner(System.in);//Create Scanner object sc

double r = sc.nextDouble();//Input the radius as double float type.

double Area=Math.PI\*Math.pow(r,2);//S=πr\^2

System.out.println("The area of the circle is: "+Area);

}

}

程序二

程序代码
import javax.swing.\*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class test7_GUI {

private JPanel panel1;

private JTextArea textRadius;

private JButton OKButton;

private JLabel Label1;

private JTextArea textArea;

public static void main(String[] args) {

JFrame frame = new JFrame("test7_GUI");

frame.setContentPane(new test7_GUI().panel1);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setVisible(true);

}

public test7_GUI() {

OKButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

double r=Double.parseDouble(textRadius.getText());

//Get the text and turn into double float.

double Area=Math.PI\*Math.pow(r,2);//S=πr\^2

textArea.setText(String.valueOf(Area));

//Turning double into string and output.

}

});

}

}
GUI布局设计

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fz4fzPyj-1641815276198)(media/1f07fe364f22621c270405b00100e961.png)]

运行实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5qu81MQ7-1641815276200)(media/90c6b233fd1abd7ac05674fc5b474afe.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HPD6vX5c-1641815276200)(media/0eb2dc1e6df9bacf33243e312a0f4121.png)]

创建银行账户类SavingAccount,用类变量存储年利率,用私有实例变量存储存款额。提供计算年利息的方法和计算月利息(年利息/12)的方法。编写一个测试程序测试该类,建立SavingAccount的对象saver,存款额是3000,设置年利率是3%,计算并显示saver的存款额、年利息和月利息。

概要设计

设计内容

编写程序,并设计GUI,计算年利率和月利率。

设计思路

编写SavingAccount类,在该类中实现存款金额的输入与利息计算和输出,并在main方法中调用该类。

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HN2Yv7yL-1641815276200)(media/9687b7f40be3488d65689c7f758fee27.png)]

详细设计、调试与分析

程序一

程序代码
import java.util.Scanner;

public class test8 {

public static void main(String[] args) {

SavingAccount saver=new SavingAccount();

saver.SavingAccount();

}

}

class SavingAccount {

private double rate=0.03; //Annual interest is 3%

private Double Deposits;//Initial the deposit

public void SavingAccount(){

Scanner input=new Scanner(System.in);

System.out.println("Please input the volume:");

Deposits=input.nextDouble();//Input the deposits.

double interest_year=rate\*Deposits;

double interest_month=rate\*Deposits/12;//calculate the interest

System.out.println("Annual interest is "+interest_year+"\\nMonthly interest is
"+interest_month);

}

}
UML类图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1n0tcM0v-1641815276201)(media/b36bd39ae9eaeeeb0285a189b25e1f64.png)]

用集合的接口存储年利息和月利息,提供key(键)到value(值)的映射

程序二:用IDEA Swing Designer设计一个GUI实现存款金额的输入与利息计算。

程序代码:
import javax.swing.\*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.HashMap;

import java.util.Map;

public class test8_GUI {

private JTextField DepositArea;

private JButton button1;

private JTextArea AnnualArea;

private JLabel AnnualLabel;

private JLabel MonthlyLabel;

private JTextArea MonthlyArea;

private JPanel sad;

public static void main(String[] args) {

JFrame frame = new JFrame("test8_GUI");

frame.setContentPane(new test8_GUI().sad);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setVisible(true);

}

public test8_GUI() {

button1.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

double deposit=Double.parseDouble(DepositArea.getText());

SavingAccount\_ NewCount=new SavingAccount_();//new object

Map\<String, Double\> InterestMap=NewCount.SavingAccount_(deposit);//Call the
method and calculate the interest

AnnualArea.setText(String.valueOf(InterestMap.get("Annual Inerest")));//Out put
the interest

MonthlyArea.setText(String.valueOf(InterestMap.get("Monthly Inerest")));

}

});

}

private void createUIComponents() {

// TODO: place custom component creation code here

}

}

class SavingAccount\_ {

Map\<String, Double\> InterestMap = new HashMap\<String, Double\>();//HashMap
for interest.

private double rate=0.03,deposits; //Annual interest is 3% and initial deposits

public Map\<String, Double\> SavingAccount_(double deposits){

double interest_year=rate\*deposits;

double interest_month=rate\*deposits/12;//calculate the interest

System.out.println("Annual interest is "+interest_year+"\\nMonthly interest is
"+interest_month);

InterestMap.put("Annual Inerest",interest_year);

InterestMap.put("Monthly Inerest",interest_month);

return InterestMap;

}

}
GUI设计布局

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZfrKf9jL-1641815276202)(media/af81a8848a9f78eba1dd0591e2a6095f.png)]

GUI运行实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qi6ySayy-1641815276202)(media/21f37907da76730e075a7d2716dc73b0.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhjuQmN1-1641815276204)(media/3c2128cce890fcc45f07c95ed8004443.png)]
ActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

double deposit=Double.parseDouble(DepositArea.getText());

SavingAccount_ NewCount=new SavingAccount_();//new object

Map<String, Double> InterestMap=NewCount.SavingAccount_(deposit);//Call the
method and calculate the interest

AnnualArea.setText(String.valueOf(InterestMap.get(“Annual Inerest”)));//Out put
the interest

MonthlyArea.setText(String.valueOf(InterestMap.get(“Monthly Inerest”)));

}

});

}

private void createUIComponents() {

// TODO: place custom component creation code here

}

}

class SavingAccount_ {

Map<String, Double> InterestMap = new HashMap<String, Double>();//HashMap
for interest.

private double rate=0.03,deposits; //Annual interest is 3% and initial deposits

public Map<String, Double> SavingAccount_(double deposits){

double interest_year=rate*deposits;

double interest_month=rate*deposits/12;//calculate the interest

System.out.println("Annual interest is “+interest_year+”\nMonthly interest is
"+interest_month);

InterestMap.put(“Annual Inerest”,interest_year);

InterestMap.put(“Monthly Inerest”,interest_month);

return InterestMap;

}

}

GUI设计布局

[外链图片转存中…(img-ZfrKf9jL-1641815276202)]

GUI运行实例

[外链图片转存中…(img-qi6ySayy-1641815276202)]

[外链图片转存中…(img-VhjuQmN1-1641815276204)]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冬_冬_

若觉得文章对您有用,请随意打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值