项目简介
设置账单条目Account类,定义属性:支出金额expend,收入金额income,时间datestr,账单条目备注remark,账单条目类型type,账单条目流水编号id。
设置用户User类,定义用户信息:帐号昵称UserName,账号密码UserPassword,预算budget,支出金额expendmoney,收入金额incomemoney。设置类属性账单条目计数器count。
在操作台根据菜单选项进行操作,先设置预算,再对账单进行增加、删除、修改、查询等操作。
项目功能
功能 1 :设置本月预算
功能 2 :添加条目
功能 3:查询条目
功能 4 :修改条目
功能 5 :删除条目
功能 6 :查询支出总额
功能 7:查询收入总额
项目代码
index.java 项目主函数
import java.util.Scanner;
public class Index {
public static void main(String[] args) throws InterruptedException {
//主题:个人记账管理系统
User user = new User();
boolean flag = true;
while (flag) {
Thread.sleep(1000);
System.out.println("*************menu*************");
System.out.println("1.设置本月预算\n2.添加条目\n3.查询条目\n4.修改条目\n5.删除条目\n6.查询支出总额\n7.查询收入总额\n8.退出系统");
System.out.println("*****************************");
System.out.print("请输入想要进行的功能:");
Scanner scann = new Scanner(System.in);
int choice1 = scann.nextInt();
switch (choice1) {
case 1:
//设置本月预算
user.setBudget();
break;
case 2:
//添加条目
user.increase();
break;
case 3:
//查询条目
user.query();
break;
case 4:
//修改条目
user.rewrite();
break;
case 5:
//删除条目
user.delete();
break;
case 6:
//查询支出总额
user.expendall();
break;
case 7:
//查询收入总额
user.incomeall();
break;
case 8:
//退出系统
flag = false;
System.out.println("正在退出...");
break;
}
}
}
}
用户User类
import java.util.ArrayList;
import java.util.Scanner;
public class User {
//用户信息
//账号昵称
public String UserName;
//账号密码
public String UserPassword;
//预算
public int budget = 0;
//支出金额
public int expendmoney = 0;
//收入金额
public int incomemoney = 0;
public Scanner scan;
//账单条目计数器
int count = 0;
boolean flag2;
boolean flag3;
boolean flag4;
//创建对象集合
ArrayList<Account> list = new ArrayList<>();
//用户方法
//设置用户信息
public User(){
scan = new Scanner(System.in);
System.out.println("———————————个人记账管理系统———————————");
System.out.print("请输入账号昵称:");
this.UserName = this.scan.next();
System.out.print("请输入账号密码:");
this.UserPassword = scan.next();
System.out.println("注册成功!");
System.out.println("注册账号昵称为:"+this.UserName+" 账号密码为:"+this.UserPassword);
System.out.println("正在进入...");
}
//设置每月预算
public void setBudget(){
System.out.print("请输入本月预算:");
this.budget = scan.nextInt();
System.out.println("设置的预算为:"+this.budget);
}
//添加信息
public Account add(int count){
Account account = new Account();
System.out.print("请选择添加类型\t1.收入\t2.支出 :");
while(true) {
//增加条目
int i = scan.nextInt();
//添加金额
if (i == 1) {
account.setIncome();
break;
} else if (i == 2) {
account.setExpend();
break;
} else {
System.out.print("输入错误,请重新输入:");
}
}
//添加时间
account.datestr = account.getTime();
//添加备注
account.setRemark();
//添加流水编码
account.id = count;
System.out.println("添加成功!");
this.print(account);
return account;
}
//输出
public void print(Account account) {
System.out.println("流水编码:"+account.getId()+"\t类型:"+account.getType()+ "\t金额为:" +
(account.getExpend()+account.getIncome())+"\t时间:"
+account.getDatestr()+"\t备注:"+account.getRemark());
}
//总添加
public void increase(){
flag2 = true;
while(flag2) {
count++;
Account account = this.add(count);
//添加到对象数组中
list.add(account);
System.out.print("是否继续添加?(y/n):");
flag3 = true;
while (flag3) {
String choice2 = scan.next();
if (choice2.equals("n")) {
flag2 = false;
flag3 = false;
//输出总账单
System.out.println("总账单:");
for (Account a : list) {
this.print(a);
}
}else if(choice2.equals("y")){
flag3 = false;
}else {
System.out.print("输入错误,请重新输入:");
}
}
}
}
//查询
public void query(){
flag2 = true;
int num = 0;
while(flag2) {
System.out.print("请输入要查询的流水编码:");
flag4 = true;
flag3 = true;
//获取流水编码
while(flag4){
num = scan.nextInt();
for (Account value:list){
if(value.getId() == num){
flag3 = false;
flag4 = false;
break;
}
}
if(flag3){
System.out.print("输入错误,请重新输入:");
}
}
//获取查询对象
Account account = new Account();
for (Account value : list) {
account = value;
if (account.getId() == num) {
this.print(account);
break;
}
}
System.out.print("是否继续查询?(y/n):");
flag3 = true;
while (flag3) {
String choice2 = scan.next();
if (choice2.equals("n")) {
flag2 = false;
flag3 = false;
}else if(choice2.equals("y")){
flag3 = false;
}else {
System.out.print("输入错误,请重新输入:");
}
}
}
}
//修改
public void rewrite(){
flag2 = true;
int num = 0;
while(flag2) {
System.out.print("请输入要修改的流水编码:");
flag4 = true;
flag3 = true;
//获取流水编码
while(flag4){
num = scan.nextInt();
for (Account value:list){
if(value.getId() == num){
flag3 = false;
flag4 = false;
break;
}
}
if(flag3){
System.out.print("输入错误,请重新输入:");
}
}
//获取修改对象
Account account = new Account();
for (Account value : list) {
account = value;
if (account.getId() == num) {
this.print(account);
break;
}
}
//输入修改内容
System.out.print("请输入想要修改的选项(1.类型\t2.金额\t3.备注):");
int num1 = scan.nextInt();
flag3 = true;
while (flag3){
if(num1 == 1){
account.setType();
flag3 = false;
}else if (num1 == 2){
flag3 = false;
if(account.type.equals("income")){
account.setIncome();
}else {
account.setExpend();
}
}else if (num1 == 3){
flag3 = false;
account.setRemark();
}else {
System.out.print("输入错误,请重新输入:");
}
}
//输出修改后的条目
System.out.print("修改后的条目为:");
this.print(account);
System.out.print("是否继续修改?(y/n):");
flag3 = true;
while (flag3) {
String choice2 = scan.next();
if (choice2.equals("n")) {
flag2 = false;
flag3 = false;
}
else if(choice2.equals("y")){
flag3 = false;
}else {
System.out.print("输入错误,请重新输入:");
}
}
}
//输出总账单
System.out.println("总账单:");
for (Account a : list) {
this.print(a);
}
}
//删除
public void delete(){
flag2 = true;
int num = 0;
while(flag2) {
System.out.print("请输入要删除的流水编码:");
flag4 = true;
flag3 = true;
//获取流水编码
while(flag4){
num = scan.nextInt();
for (Account value:list){
if(value.getId() == num){
flag3 = false;
flag4 = false;
break;
}
}
if(flag3){
System.out.print("输入错误,请重新输入:");
}
}
//获取删除对象
Account account = new Account();
for (Account value : list) {
account = value;
if (account.getId() == num) {
this.print(account);
break;
}
}
System.out.print("是否要删除此条记录(y/n):");
String choice3 = scan.next();
if(choice3.equals("y")){
System.out.println("删除成功!");
list.remove(account);
}
//输出删除后的总账单
System.out.println("总账单:");
for (Account a : list) {
this.print(a);
}
System.out.print("是否继续删除?(y/n):");
String choice2 = scan.next();
if (choice2.equals("n")) {
flag2 = false;
}
}
}
//查询支出总额
public void expendall(){
expendmoney = 0;
for (Account a : list) {
if (a.type.equals("expend")){
expendmoney += a.getExpend();
}
}
String str1;
if (expendmoney>budget){
str1 = ",超预算"+(expendmoney-budget)+"。";
}else {
str1 = ",预算还剩"+(budget-expendmoney)+"。";
}
System.out.println("共支出:"+expendmoney+str1);
}
//查询收入总额
public void incomeall(){
incomemoney = 0;
for (Account a : list) {
incomemoney += a.getIncome();
}
System.out.println("共收入:"+incomemoney);
}
}
账单条目Account类
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Account {
//支出
public int expend = 0;
//收入
public int income = 0;
//时间
public String datestr;
//备注
public String remark;
//类型:收入/支出
public String type;
//流水编号
public int id = 0;
Scanner scanner = new Scanner(System.in);
//获取时间
public String getTime() {
//分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
Date date = new Date();
//对日期进行模式化处理
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
datestr = sdf.format(date);
return datestr;
}
//添加支出
public void setExpend(){
System.out.print("请输入支出金额:");
expend = scanner.nextInt();
this.type = "expend";
}
//添加收入
public void setIncome(){
System.out.print("请输入收入金额:");
income = scanner.nextInt();
this.type = "income";
}
//输出id
public int getId(){
return id;
}
//输出类型
public String getType(){
return type;
}
//输出支出金额
public int getExpend(){
return expend;
}
//输出收入金额
public int getIncome(){
return income;
}
//输出时间
public String getDatestr(){
return datestr;
}
//输出备注
public String getRemark(){
return remark;
}
//输入类型
public String setType(){
System.out.print("请选择修改后的类型:1.收入 2.支出 :");
while(true) {
//增加条目
int i = scanner.nextInt();
//添加金额
if (i == 1) {
this.type = "income";
break;
} else if (i == 2) {
this.type = "expend";
break;
} else {
System.out.print("输入错误,请重新输入:");
}
}
return this.type;
}
//输入备注
public String setRemark(){
System.out.print("请输入备注:");
this.remark = scanner.next();
return this.remark;
}
}
代码实现效果
项目改进点
- 如果多次输入违规数据,应在操作台返回询问:是否继续进行该操作?若是,则提醒用户输入规范数据;若不是,则直接返回上级菜单。
- 设置的用户昵称和密码没有在后续操作中用到,可以在修改添加、查询、修改、删除条目时,加上用户登陆验证。
- 当未添加条目时,进行查询、修改、删除条目操作会陷入死循环。应该在没有账单条目时,仅能进行设置预算、添加条目、查询支出收入总额、退出系统操作。
- 做的系统比较简略,之后有时间再改进。