今天简单写了小项目
import java.math.*;
import java.util.*;
public class Project_array{
// data 拿到外面 封装的方法 共享同一个变量
// static 静态上下文只能直接访问静态的变量
// 一旦加上static 代表当前的变量全局共享一份
static Record[] data = {
new Record("10月04日",new BigDecimal("-20.8"),"早午晚饭"),
new Record("10月07日",new BigDecimal("-500.0"),"居家用品"),
new Record("10月08日",new BigDecimal("10000.0"),"工资输入"),
new Record("10月08日",new BigDecimal("-20.0"),"行车交通"),
new Record("10月10日",new BigDecimal("-66.1"),"食品酒水"),
new Record("10月15日",new BigDecimal("-7.5"),"食品酒水"),
new Record("10月22日",new BigDecimal("-35.9"),"其他杂项"),
new Record("10月31日",new BigDecimal("-2000"),"衣服饰品")
};
static String[] inData={"工资收入","奖金收入","兼职收入","其他收入","请选择收入明细"};
static String[] outData={"食品酒水","物业用品","行车交通","其他杂项","请选择支出明细"};
static Scanner sc = new Scanner(System.in);
public static void main(String[] args){
a:while(true){
print("A 查看流水"+"\n"+"B 添加流水"+"\n"+"C 删除流水"+"\n"+"D 修改流水"+"\n"+"E 退出"+"\n"+"请选择");
// 接收用户选项 调用方法
String choice = sc.next();// A-D
/*if(choice.equals("A")){
chooseA();
}*/
// 参数的类型
// jdk1.0 char byte short int
// jdk5.0 enum 枚举
// jdk7.0 String
switch(choice){
case "A" :print("A:查看流水");chooseA();break;
case "B":chooseB();break;
case "C":chooseC();break;
case "D":chooseD();break;
default:print("输入错误重新输入");break;
}
}
}
// 封装一个方法 完成chooseA的逻辑
public static void chooseA(){
print("编码\t\t花销项目\t\t记录时间\t\t收支金额");
BigDecimal sum=new BigDecimal("0");
for(int i=0;i<data.length;i++){
print(i+"\t\t"+data[i].getType()+"\t\t"+data[i].getTime()+"\t\t"+data[i].getMoney());
sum=sum.add(data[i].getMoney());
}
print("收支余额:\t\t\t\t\t\t\t"+sum);
}
// 封装一个打印的方法
public static void print(String str){
System.out.println(str);
}
public static String TypeInfo(String[] str){
for(int i=0;i<str.length-1;i++){
print(i+":"+str[i]);
}
print(str[str.length-1]);
int choice=sc.nextInt();
return str[choice];
}
public static boolean contains(Record rr){
for(int i=0;i<data.length;i++){
if(data[i].getTime().equals(rr.getTime())&&
data[i].getMoney().equals(rr.getMoney())&&
data[i].getType().equals(rr.getType())){
return true;
}
}
return false;
}
public static void chooseB(){
print("B:添加流水");
print("请录入时间:");
String time=sc.next();
print("请选择收支明细【a:收入 b:支出】");
String choice=sc.next();
String type=TypeInfo(choice.equals("a")?inData:outData);
print("请输入金额");
String qian=sc.next();
BigDecimal money=new BigDecimal(choice.equals("a")?qian:"-"+qian);
Record rr=new Record(time,money,type);
boolean flag=contains(rr);
if(flag){
print("该数据已经存在 添加失败!");
}else{
data=Arrays.copyOf(data,data.length+1);
data[data.length-1]=rr;
print("该数据添加成功!");
}
}
public static void chooseC(){
print("C:删除流水");
chooseA();
print("请输入要删除的流水编码");
int number=sc.nextInt();
if(number<0||number>data.length-1){
print("该编码不存在 删除失败!");
}else{
//66 55 44 88
//66 44 88 88
//66 44 88
System.arraycopy(data,number+1,data,number,data.length-number-1);
data=Arrays.copyOf(data,data.length-1);
print("删除成功!");
}
}
public static void chooseD(){
print("D:修改流水");
chooseA();
print("请输入要修改的流水编号");
int number=sc.nextInt();
if(number>data.length-1||number<0){
print("该流水编号不存在");
return;
}else{
print("请输入时间");
String time=sc.next();
print("请选择收支明细【a:收入 b:支出】");
String choice=sc.next();
String type=TypeInfo(choice.equals("a")?inData:outData);
print("请输入金额");
String qian=sc.next();
BigDecimal money=new BigDecimal(choice.equals("a")?qian:"-"+qian);
Record rr=new Record(time,money,type);
boolean flag=contains(rr);
if(flag){
print("该数据已经存在 添加失败!");
}else{
print("数据更新之前的时间"+data[number].getTime()+" 数据更新之后的时间"+
time+"\n数据更新之前的金额"+data[number].getMoney()+" 数据更新之后的金额"+
money+"\n数据更新之前的类型"+data[number].getType()+" 数据更新之后的类型"+type);
data[number].setTime(time);
data[number].setMoney(money);
data[number].setType(type);
print("该数据修改成功!");
}
}
}
}
// 封装
class Record{//流水账
private String time;//花销时间
private BigDecimal money;//花销金额
private String type;//花销项
//构造方法的参数顺序看main方法里面已经创建好的对象的参数顺序
public Record(String time, BigDecimal money, String type){
this.time = time;
this.money = money;
this.type = type;
}
public void setTime(String time){
this.time = time;
}
public String getTime(){
return time;
}
public void setMoney(BigDecimal money){
this.money = money;
}
public BigDecimal getMoney(){
return money;
}
public void setType(String type){
this.type = type;
}
public String getType(){
return type;
}
}
选择A时打印出所有内容,并统计总和 sum(BigDecimal类型)
选择B时 进行添加内容,关系到数组的扩容Arrays.copyOf(1,2),以及数组的移动System.arraycopy(1,2,3,4,5);,判断数据是否存在,如果存在则返回并打印添加失败,不存在则添加成功
选择C时,进行删除对应编号的内容,并将数组删除缩容一个Arrays.copyOf(),数组移动System.arraycopy(); 很简单
选择D时,进行修改对于的编码,编码存在则修改 编码不存在则返回 打印出修改之前和修改之后的内容
以下是测试
输入A时
选择B时 B中无重复数据时添加成功
B中有重复数据时
选择C时,当编码不存在时
选择C时 编码存在时
选择D时 只测试修改后的数据