希望能给你带来灵感
1.编一个学生类(Student),其中包含以下内容:
属性:学号studentNo,姓名studentName,性别studentGender,年龄studentAge。
方法:构造方法,显示学号方法showNo(),显示姓名方法showName(),显示性别方法showSex(),显示年龄方法showAge(),修改年龄方法modifyAge()。
主类(S3_1)包含:主方法main(),在其中创建两个学生对象s1和s2并初始化,两个对象的属性自行确定,然后分别显示这两个学生的学号、姓名、性别、年龄,然后修改s1的年龄并显示修改后的结果。
public class S3_1 { //测试
public static void main(String[] args) {
Student s1= new Student(2125060277,"周金亮","女",19);
Student s2= new Student(2025060277,"亮仔","男",20);
s1.print();
s2.print();
s1.modifyAge(18);
System.out.println("s1修改后的年龄为:");
s1.showAge();
}
}
class Student {
//属性
private int studentNo;//学号
private String studentName;//姓名
private String studentGender;//性别
private int studentAge;//年龄
//构造方法
public Student(int studentNo, String studentName, String studentGender, int studentAge) {
this.studentNo=studentNo;
this.studentName=studentName;
this.studentGender=studentGender;
this.studentAge=studentAge;
}
public void showNo() {//显示学号
System.out.println("学号:"+ studentNo);
}
public void showName() {//显示姓名
System.out.println("姓名:"+ studentName);
}
public void showSex() {//显示性别
System.out.println("性别:"+ studentGender);
}
public void showAge() {//显示年龄
System.out.println("年龄:"+ studentAge);
}
public void modifyAge(int sAge) {//修改年龄
this.studentAge = sAge;
}
public void print(){
System.out.println("学号:"+ studentNo);
System.out.println("姓名:"+ studentName);
System.out.println("性别:"+ studentGender);
System.out.println("年龄:"+ studentAge);
System.out.println();
}
}
2.2、编写一个简单计算器类
拥有加减乘除等方法,每个方法都有2个操作数,同为double类型或同为整型,方法设计为重载,在测试类里通过键盘输入操作数,显示计算结果。
import java.util.Scanner;
public class S3_2{
public static void main(String[] args) {
Calculator c = new Calculator();
c.calc();
}
}
class Calculator {
//和
public void add(double num1,double num2) {
System.out.println(num1 + num2);
}
//差
public void subtraction(double num1,double num2) {
System.out.println(num1 - num2);
}
//积
public void multiply(double num1,double num2) {
System.out.println(num1 * num2);
}
//商
public void divide(double num1,double num2) {
if(num2==0) {
System.out.println("除数不能为0!");
}else {
System.out.println(num1 / num2);
}
}
public void calc() {
boolean n=true;//退出循环的标志
Scanner sc = new Scanner(System.in);
while(n){
System.out.println("请输入需要计算的第一个数:");
int num1 = sc.nextInt();
System.out.println("请输入需要计算的第二个数:");
int num2 = sc.nextInt();
System.out.println("请选择运算【+,-,*,/】");
char op = sc.next().charAt(0);
switch (op) {
case '+':
add(num1, num2);
break;
case '-':
subtraction(num1, num2);
break;
case '*':
multiply(num1, num2);
break;
case '/':
divide(num1, num2);
break;
default:
System.out.println("您输入的运算符本程序不支持!");
break;
}
System.out.println("是否继续运算(退出输入0,继续输入1):");
int m = sc.nextInt();
if(m==1){
n=true;
}
else{
n=false;
}
}
}
}
结果截图
3.设计一个日期类
定义类的构造方法对日期进行初始化,在toString()中将其输出格式定为“月/日/年”。最后,编写一个测试程序来测试所定义的日期类能否实现预定的功能。
import java.util.Scanner;
public class S3_3 {
public static void main(String[] args) {
Date date = new Date();
int day;
int month;
int year;
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
year = sc.nextInt();
System.out.println("请输入月份:");
month = sc.nextInt();
if(month<1 || month>12){
System.out.println("输入非法,请重新输入:");
month = sc.nextInt();
}
System.out.println("请输入日期:");
day = sc.nextInt();
if(month==2){
if(year%400==0||(year%100!=0&&year%4==0)){
if(day<1 || day>29){
System.out.println("输入非法,请重新输入:");
day = sc.nextInt();
}
}
else{
if(day<1 || day>28){
System.out.println("输入非法,请重新输入:");
day = sc.nextInt();
}
}
}
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
if(day<1 || day>31){
System.out.println("输入非法,请重新输入:");
day = sc.nextInt();
}
}
else {
if(day<1 || day>30){
System.out.println("输入非法,请重新输入:");
day = sc.nextInt();
}
}
date.toString(day,month,year);
}
}
class Date{
public Date(){
}
public void toString(int day,int month,int year) {
System.out.println(month+"月"+day+"日"+year+"年");
}
}
结果截图
4.设计一个分数类
分数的分子和分母用两个整型数表示,类所拥有的方法包括对分数进行加、减、乘、除等运算,以及输出分数的方法,输出分数的格式应该是:分子/分母。
在测试类中定义分数类对象,运算并输出运算结果。
import java.util.Scanner;
public class FractionsTest {
public static void main(String[] args) {
Fractions fractions = new Fractions();
@SuppressWarnings("resource") //具体作用不清楚,但是不加有警告
Scanner inTo = new Scanner(System.in);
int fson1 = 0;
int fson2 = 0;
int fmom1 = 0;
int fmom2 = 0;
System.out.println("请输入第一个分数的分子:");
fson1 = inTo.nextInt();
System.out.println("请输入第一个分数的分母:");
fmom1 = inTo.nextInt();
System.out.println("请输入第二个分数的分子:");
fson2 = inTo.nextInt();
System.out.println("请输入第二个分数的分母:");
fmom2 = inTo.nextInt();
System.out.println("运算");
System.out.print("\n");
fractions.fAdd(fson1, fmom1, fson2, fmom2);
System.out.print("\n");
fractions.fSub(fson1, fmom1, fson2, fmom2);
System.out.print("\n");
fractions.fMul(fson1, fmom1, fson2, fmom2);
System.out.print("\n");
fractions.fDiv(fson1, fmom1, fson2, fmom2);
}
}
class Fractions {
int fson;
int fmom;
//求分子分母的最大公约数
public int gcd(int a,int b) {
if(a < b) {//先比较分子分母的大小,方便后面取余
int c = a;
a = b;
b = c;
}
int r = a % b;
while(r != 0) {
a = b;
b = r;
r = a % b;
}
return b;
}
//分数加法
public void fAdd(int fson1,int fmom1,int fson2,int fmom2) {
int fm = fmom1*fmom2;
fson1 = fson1*fmom2;
fson2 = fson2*fmom1;
int fs = fson1+fson2;
int g = gcd(fs, fm);
System.out.println("最大公约数:"+g);
fs = fs / g;
fm = fm / g;
System.out.println("加法运算后结果中分子为:"+fs);
System.out.println("加法运算后结果中分母为:"+fm);
System.out.println("即分数为:"+fs+"/"+fm);
}
//分数减法
public void fSub(int fson1,int fmom1,int fson2,int fmom2) {
int fm = fmom1*fmom2;
fson1 = fson1*fmom2;
fson2 = fson2*fmom1;
int fs = fson1-fson2;
int g = gcd(fs, fm);
fs = fs / g;
fm = fm / g;
System.out.println("减法运算后结果中分子为:"+fs);
System.out.println("减法运算后结果中分母为:"+fm);
System.out.println("即分数为:"+fs+"/"+fm);
}
//分数相乘
public void fMul(int fson1,int fmom1,int fson2,int fmom2) {
int fm = fmom1*fmom2;
int fs = fson1*fson2;
int g = gcd(fs, fm);
fs = fs / g;
fm = fm / g;
System.out.println("乘法运算后结果中分子为:"+fs);
System.out.println("乘法运算后结果中分母为:"+fm);
System.out.println("即分数为:"+fs+"/"+fm);
}
//分数相除
public void fDiv(int fson1,int fmom1,int fson2,int fmom2) {
int fm = fmom1*fson2;
int fs = fson1*fmom2;
int g = gcd(fs, fm);
fs = fs / g;
fm = fm / g;
System.out.println("除法运算后结果中分子为:"+fs);
System.out.println("除法运算后结果中分母为:"+fm);
System.out.println("即分数为:"+fs+"/"+fm);
}
}
结果截图
5.公司出勤
(1)设计一个雇员类,属性包括:编号、姓名、年龄、职务、部门,要求合理选定属性类型;该雇员类还拥有统计出勤人数的功能,可以考虑为雇员类设计一个静态属性;方法包括:构造方法、输出信息的方法、签到方法;
(2)创建雇员类对象,统计雇员的出勤人数。
注意考虑属性和方法的访问权限,方法的功能,及main方法中如何实现要求统计的信息。
import java.util.Scanner;
public class S3_5 {
public static void main(String[] args) {
Staff staff = new Staff();
System.out.println("开始签到");
staff.SignIn();
System.out.println("签到结束,开始输出签到数据");
staff.output();
}
}
class Staff { //员工类 因为是个签到程序,一个对象要存储多个数据,所以使用数组存储一组数据
Scanner input = new Scanner(System.in);
public String[] num = new String[666];
public String[] name = new String[666];
public String[] age = new String[666];
public String[] job = new String[666];
public String[] department = new String[666];
public int attendNum = 0; //统计签到人数
public Staff() { //构造函数 不需提前数据,为空
}
//签到函数
public void SignIn () {
boolean run=true;
int i=0;
int p; //判断是否结束签到
while (run) {
System.out.print("请输入你的编号:");
this.num[i] = input.nextLine();
System.out.print("请输入你的姓名:");
this.name[i] = input.nextLine();
System.out.print("请输入你的年龄:");
this.age[i] = input.nextLine();
System.out.print("请输入你的职务:");
this.job[i] = input.nextLine();
System.out.print("请输入你的部门:");
this.department[i] = input.nextLine();
this.attendNum++;
System.out.print("如果你是最后一个签到的请输入1,反之输入0:");
p=input.nextInt();
System.out.println();
i++;
if (p==1) {
run=false;
}
}
}
public void output() { //信息输出函数
System.out.println("出勤人数合计为"+this.attendNum);
for(int i = 0;i<this.attendNum;i++) {
System.out.println("编号:"+num[i]);
System.out.println("姓名:"+name[i]);
System.out.println("年龄:"+age[i]);
System.out.println("职务:"+job[i]);
System.out.println("部门:"+department[i]);
System.out.println("\n");
}
}
}
结果截图
6.设计一个电视机类
属性包括商品编号、开关状态、音量、频道等,同时设计一些方法对电视机的状态进行控制。例如,方法应包括开/关电视机、更换频道、提高/减小音量等。要求商品编号自动生成(可以考虑为电视机类设置一个管理商品编号的静态成员变量,或者专门设置一个编号管理类)。
注意:有些成员变量需要定义为静态的(static),控制和操纵静态成员变量的方法应是静态的(static)。
import java.util.Calendar;
import java.util.Scanner;
public class S3_6 {
public static void main(String[] args) {
TV tv=new TV();
tv.menu();
tv.tvprint();
int n;
do{
Scanner sc =new Scanner(System.in);
n=sc.nextInt();
switch (n){
case 1:tv.open(); break;
case 2:tv.channel();break;
case 3:tv.voice();break;
case 4:tv.close();break;
case 5:break;
}
}while(n!=5);
}
}
class TV{
boolean s;//开关状态
TV(){
s = false; //关闭状态
}
void setTvno(){
Calendar cal=Calendar.getInstance();
System.out.print(cal.get(Calendar.YEAR));
System.out.print(cal.get(Calendar.MONTH));
System.out.print(cal.get(Calendar.DATE));
System.out.print(cal.get(Calendar.HOUR_OF_DAY));
}
void tvprint(){ //Tv状态描述
System.out.print("编号:");
setTvno();
System.out.println();
if(s==false){
System.out.println("状态:关");
}else{
System.out.println("状态:开");
}
}
void open(){ //打开电视
s=true;
System.out.println("打开电视");
}
void close(){
s=false;
System.out.println("关闭电视");
System.out.println("按5退出");
}
void voice(){
System.out.println("请调节音量!");
Scanner v =new Scanner(System.in);
int voice =v.nextInt();
if(voice<0){
for(int i=voice;i<0;i++){
System.out.println("voice-1");
}
}else{
for(int i=0;i<voice;i++){
System.out.println("voice+1");
}
}
System.out.println();
}
void channel(){
System.out.println("请调节频道!");
Scanner c =new Scanner(System.in);
int channel =c.nextInt();
System.out.println("更换至"+channel+"频道");
System.out.println();
}
void menu(){
System.out.println("1----打开电视");
System.out.println("2----更换频道(输入数字1~100)");
System.out.println("3----调高音量(输入1~15)调低音量(输入-1~-15)");
System.out.println("4----关闭电视(输入0关闭)");
System.out.println("5----退出");
}
}
结果截图
7.模仿ATM取款过程。
首先编写一个账户类,成员变量包含账号、储户姓名和存款余额以及密码,再编写一个ATM机类,属性包括账户列表,方法有登录,存款和取款。编写一个测试类来测试所定义的账户类能否实现预定的功能。
import java.text.SimpleDateFormat;//时间包
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class S3_8 {
public static void main(String[] args) {
//1、准备系统需要的容器对象,用于存储账户对象
ArrayList<Account> accounts = new ArrayList<>();
//2、准备系统的首页:登录
TAMSystem.showMain(accounts);
}
}
class Account {
private final String id; //账号
private final String name; //姓名
private double deposit; //存款余额
private String password;//密码
private final String date; //日期
private double quotaMoney =200;//当次提现额度
public Account(String id,String name,double deposit,String password){
this.id = id;
this.name = name;
this.deposit =deposit;
this.password =password;
//获取系统当前时间并将时间格式化位指定格式
this.date = new SimpleDateFormat("yyyy年MM月dd日,HH时mm分ss秒").format(new java.util.Date());
}
public String getName() {
return name;
}
public String getDate() {
return date;
}
public String getPassword(){
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getId() {
return id;
}
public double getDeposit() {
return deposit;
}
public void setDeposit(double deposit) {
this.deposit = deposit;
}
public double getQuotaDeposit(){
return quotaMoney;
}
}
class TAMSystem {
public static void showMain(ArrayList<Account> accounts) {
System.out.println("=============欢迎进入首页=============");
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入您想做的操作:");
System.out.println("1、登录");
System.out.println("2、开户");
System.out.println("您可以输入命令了:");
int command = sc.nextInt();
switch (command) {
case 1:
//登录
login(accounts, sc);
break;
case 2:
//开户
register(accounts, sc);
break;
default:
System.out.println("您输入的指令错误!");
}
}
}
/*
* 完成用户登录
* */
private static void login(ArrayList<Account> accounts, Scanner sc) {
//必须系统中存在账户才可以登录
if (accounts.size() == 0) {
//没有任何账户
System.out.println("当前系统中无任何账户,您需要先注册!");
return;
}
//2、让用户输入卡号
while (true) {
System.out.println("请您输入登录卡号:");
String cardId = sc.next();
//根据卡号查询对象
Account acc = getAccountById(cardId, accounts);
//3、判断账户是否存在,存在说明卡号没问题
if (acc != null) {
while (true) {
//4、让用户继续输入密码
System.out.println("请您输入登录密码:");
String password = sc.next();
//5、判断密码是否正确
if (acc.getPassword().equals(password)) {
//密码正确,登录成功
//展示系统登录后的操作界面
System.out.println("恭喜您," + acc.getName() + "先生/女士成功进入系统,您的卡号是:" + acc.getId());
//展示操作页面
showUserCommand(sc, acc, accounts);
return;//结束登录方法
} else {
System.out.println("您输入的密码有误,请确认!");
}
}
} else {
System.out.println("对不起,您的卡号不存在!");
}
}
}
/*
* 展示操作页面
* */
public static void showUserCommand(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("=============用户操作界面============");
System.out.println("1、查询账户");
System.out.println("2、存款");
System.out.println("3、取款");
System.out.println("4、转账");
System.out.println("5、修改密码");
System.out.println("6、退出");
System.out.println("7、注销账户");
System.out.println("请您输入操作命令:");
while (true) {
int command = sc.nextInt();
switch (command) {
case 1:
//查询账户
showAccount(acc);
break;
case 2:
//存款
depositMoney(acc, sc);
break;
case 3:
//取款
drawMoney(acc, sc);
break;
case 4:
//转账
transferMoney(accounts, acc, sc);
break;
case 5:
//修改密码
updataPassWord(acc, sc);
return;
case 6:
//退出
System.out.println("欢迎下次光临");
return;
case 7:
//注销账户
accounts.remove(acc);
System.out.println("销户成功!");
return;
default:
System.out.println("您输入的命令有误~");
}
}
}
/*
* 修改密码
* */
private static void updataPassWord(Account acc, Scanner sc) {
System.out.println("===============修改密码==============");
System.out.println("请输入正确的密码:");
String okPassWord = sc.next();
//判断密码是否正确
if (acc.getPassword().equals(okPassWord)) {
//可以输入新密码
while (true) {
System.out.println("请您输入新密码:");
String newPassWord = sc.next();
System.out.println("请您再次确认密码:");
String oknewPassWord = sc.next();
if (newPassWord.equals(oknewPassWord)) {
//修改账户密码为新密码
acc.setPassword(newPassWord);
return;//结束
} else {
System.out.println("您两次输入密码不一致~");
}
}
} else {
System.out.println("当前输入的密码不一致~~~");
}
}
/*
* 转账功能
* */
private static void transferMoney(ArrayList<Account> accounts, Account acc, Scanner sc) {
//1、判断系统中是否有2个账户及以上
if (accounts.size() < 2) {
System.out.println("对不起,系统中无其他账户,您不可以转账!");
return;
}
//2、判断自己的账户中是否有钱
if (acc.getDeposit() == 0) {
System.out.println("对不起,自己都没钱呢,就别转了~~~");
return;
}
//3、开始转账逻辑
while (true) {
System.out.println("请您输入对方的卡号:");
String cardId = sc.next();
Account account = getAccountById(cardId, accounts);
//判断这个账户对象是否存在,存在说明对方卡号输入正确
if (account != null) {
//判断这个账户对象是否是当前登录的账户自己
if (account.getId().equals(acc.getId())) {
System.out.println("您不能给自己转账!");
} else {
//进入到姓氏确认
String name = "*" + account.getName().substring(1);
System.out.println("请您确认【" + name + "】的姓氏:");
String preName = sc.next();
if (account.getName().startsWith(preName)) {
//真正开始转账了
System.out.println("请您输入转账的金额:");
double money = sc.nextDouble();
//判断这个金额是否超过了自己的余额
if (money > acc.getDeposit()) {
System.out.println("对不起,您要转账的金额太多,您最多可以转账:" + acc.getDeposit());
} else {
//可以转账了
acc.setDeposit(acc.getDeposit() - money);
account.setDeposit(account.getDeposit() + money);
System.out.println("恭喜您,转账成功了,已经为" + account.getName() + "转账多少:" + money);
showAccount(acc);
return;
}
} else {
System.out.println("对不起,您认证的信息有误~~~");
}
}
} else {
System.out.println("对不起,您输入的卡号有问题!");
}
}
}
/*
* 取款方法
* */
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("=============取款=================");
//1、判断他的账户是否大于100元
if (acc.getDeposit() >= 100) {
while (true) {
System.out.println("请您输入取款金额:");
double money = sc.nextDouble();
//2、判断这个金额有没有超过当前限额
if (money > acc.getQuotaDeposit()) {
System.out.println("您当次取款金额超过每次数量,不要取那么多,每次最多可取:" + acc.getQuotaDeposit());
} else {
//3、判断当前余额是否满足取钱
if (acc.getDeposit() >= money) {
//够钱,可以取钱了
acc.setDeposit(acc.getDeposit() - money);
System.out.println("恭喜您,取钱" + money + "成功啦!当前账户还剩余:" + acc.getDeposit());
return;//取钱后干掉方法
} else {
System.out.println("余额不足啊!");
}
}
}
} else {
System.out.println("您自己的金额没有超过100元,就别取了~~");
}
}
/*
* 存钱方法
* */
private static void depositMoney(Account acc, Scanner sc) {
System.out.println("=============存钱=================");
System.out.println("请您输入存款金额:");
Double money = sc.nextDouble();
//直接把金额修改到账户对象的money属性中去
acc.setDeposit((acc.getDeposit() + money));
System.out.println("存款完成!!");
showAccount(acc);
}
/*
* 显示用户信息
* */
private static void showAccount(Account acc) {
System.out.println("============当前用户详情===========");
System.out.println("卡号" + acc.getId());
System.out.println("姓名" + acc.getName());
System.out.println("余额" + acc.getDeposit());
System.out.println("当次限额" + acc.getQuotaDeposit());
}
/**
* 用户开户功能
*/
public static void register(ArrayList<Account> accounts, Scanner sc) {
System.out.println("=============用户开户功能=============");
//2、键盘录入 姓名 密码 确认密码
System.out.println("请您输入开户名称:");
String name = sc.next();
String password = "";
while (true) {
System.out.println("请您输入开户密码:");
password = sc.next();
System.out.println("请您输入确认密码:");
String okPassword = sc.next();
//判断两次输入密码是否一致
if (okPassword.equals(password)) {
break;
} else {
System.out.println("两次密码不一致,请重新输入!");
}
}
System.out.println("请您输入存钱数额:");
Double quotaMoney = sc.nextDouble();
//3、生成账户的卡号,卡号是8位,不能有重复
String cardId = creatCardId(accounts);
//4、创建一个账户对象封装账户信息
Account account = new Account(cardId, name, quotaMoney,password);
//5、把账户对象添加到集合里面去
accounts.add(account);
System.out.println("恭喜您,开户成功,您的卡号是:" + account.getId() + ",请您妥善保管");
}
/*
* 生成随机8位卡号方法
* */
public static String creatCardId(ArrayList<Account> accounts) {
while (true) {
//生成8位随机数字代表卡号
String cardId = "";
Random r = new Random();
for (int i = 0; i < 8; i++) {
cardId += r.nextInt(10);
}
//判断卡号是否重复了
Account acc = getAccountById(cardId, accounts);
if (acc == null) {
//说明卡号没有重复
return cardId;
}
}
}
/*
* 判断卡号是否重复方法
* */
public static Account getAccountById(String cardId, ArrayList<Account> accounts) {
//根据卡号查询账户对象
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if (acc.getId().equals(cardId)) {
return acc;
}
}
return null;
}
}
结果截图
家人们,关注点赞收藏呀!