ATM管理系统

软件工程 点击打开班级地址
作业要求 点击打开作业要求
作业目标 设计ATM管理系统
学号 3190704121
题目要求

编写一个ATM管理系统,语言不限,要求应包括以下主要功能:

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)等...

允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写

一、ATM管理系统源代码:

  1. 登录界面
package zwp.testatm;

import java.io.FileReader;
import java.util.Properties;
import javax.swing.JOptionPane;
/**
 * 登陆
 */
public class Login {
	//创建资源管理对象
	static Properties pro = new Properties();
	String str = "user.txt";
	//Login类的构造方法
	public Login(){
		try{
			//加载文件
			pro.load(new FileReader(str));
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, "文件不存在!");
		}
	}
	//登陆方法
	public static boolean load(){
		int i = 0;
		do{
			String name = JOptionPane.showInputDialog("请输入用户名:");
			String pwd = JOptionPane.showInputDialog("请输入密码:");
			try{
				if(name.matches("[a-zA-Z]{1,6}") && pwd.matches("[0-9]{1,8}")){
					if(name.equals(pro.getProperty("name")) && pwd.equals(pro.getProperty("pwd"))){
						JOptionPane.showMessageDialog(null, "登陆成功!");
						return true;
					}
					else{
						JOptionPane.showMessageDialog(null, "用户名或密码错误!");
						i++;
					}
				}
				else{
					JOptionPane.showMessageDialog(null, "输入非法!");
					i++;
				}
			}catch(NullPointerException nullPoint){
				JOptionPane.showMessageDialog(null, "谢谢使用。\n    再见!");
				System.exit(0);
			}
		}while(i<3);
		return false;
	}
}

2.功能区

package zwp.testatm;

import java.io.FileReader;
import java.io.FileWriter;
import java.util.Properties;
import javax.swing.JOptionPane;
/**
 * 功能区
 */
public class ATM {
	//创建资源管理对象
	Properties pro = new Properties();
	Properties prop = new Properties();
	//ATM的构造方法
	public ATM(){
		try{
			//加载文件
			pro.load(new FileReader("bank.txt"));
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, "文件未找到!");
		}
	}
	
	/**
	 * 查询
	 */
	public void find(){
		JOptionPane.showMessageDialog(null, "你的余额为:" + pro.getProperty("money"));
	}
	
	/**
	 * 取款
	 */
	public void getMoney(){
		String tempTake = JOptionPane.showInputDialog("请输入取款金额:");
		int take = Integer.parseInt(tempTake);
		int money = Integer.parseInt(pro.getProperty("money"));
		if(take > money){
			JOptionPane.showMessageDialog(null, "取款金额大于现有金额!");
		}
		else if(tempTake.matches("1[0-9]00|[1-9]00|2000")){
			//int take = Integer.parseInt(tempTake);
			//int money = Integer.parseInt(pro.getProperty("money"));
			money -= take;
			JOptionPane.showMessageDialog(null, "你的余额为:"+money+"");
			new SetCalendar();
			String temp = String.valueOf(money);
			pro.setProperty("money", temp);
			try{
				pro.store(new FileWriter("bank.txt"), null);
			}catch(Exception e){
				JOptionPane.showMessageDialog(null, "文件不存在!");
			}
		}
		else if(tempTake.matches("[-][0-9]{0,}")){
			JOptionPane.showMessageDialog(null, "取款金额必须大于0!");
		}
		else if(tempTake.matches("[0-9]{0,}")){
			JOptionPane.showMessageDialog(null, "请输入100的整数倍!");
		}
		else{
			JOptionPane.showMessageDialog(null, "xxxxxxxx!");
		}
	}
	
	/**
	 * 存款
	 */
	public void saveMoney(){
		String tempSave = JOptionPane.showInputDialog("请输入取款金额:");
		if(tempSave.matches("(1[0-9]{0,}00|[1-9]00)")){
			int save = Integer.parseInt(tempSave);
			int money = Integer.parseInt(pro.getProperty("money"));
			money += save;
			JOptionPane.showMessageDialog(null, "你的余额为:"+money+"");
			new SetCalendar();
			String temp = String.valueOf(money);
			pro.setProperty("money", temp);
			try{
				pro.store(new FileWriter("bank.txt"), null);
			}catch(Exception e){
				JOptionPane.showMessageDialog(null, "文件不存在!");
			}
		}
		else if(tempSave.matches("[-][0-9]{0,}")){
			JOptionPane.showMessageDialog(null, "请输入正数!");
		}
		else if(tempSave.matches("[0-9]{0,}")){
			JOptionPane.showMessageDialog(null, "请输入100的整数倍!");
		}
		else{
			JOptionPane.showMessageDialog(null, "xxxxxxxx!");
		}
	}
	
	/**
	 * 改密码
	 */
	public void alterPwd(){
		try{
			prop.load(new FileReader("user.txt"));
		}catch(Exception e){
			JOptionPane.showMessageDialog(null, "文件未找到!");
		}
		String tempPwd = JOptionPane.showInputDialog("请输入新密码:");
		if(tempPwd.matches("[0-9]{1,8}")){
			prop.setProperty("pwd", tempPwd);
			new SetCalendar();
			try{
				prop.store(new FileWriter("user.txt"), null);
			}catch(Exception e){
				JOptionPane.showMessageDialog(null, "文件不存在!");
			}
		}
	}
}

3.主函数

package zwp.testatm;

import javax.swing.JOptionPane;

import zwp.testatm.ATM;
import zwp.testatm.Login;
import zwp.testatm.MainView;

public class MainView {

	/**
	主方法
	 */
	public MainView(){
		//创建一个ATM的对象,用于调用ATM类中的方法
		ATM atm = new ATM();
		//创建一个Login的对象,用于调用Login类中的方法
		Login login = new Login();
		boolean log = login.load();

		if(log == false){
			JOptionPane.showMessageDialog(null, "非法用户!");
			System.exit(0);
		}
		
		do{
			try{
				String str = JOptionPane.showInputDialog(
						"1、取款\n2、存款\n3、查询\n4、改密码\n5、取卡\n请选择:");
				if(str.matches("[1-5]")){
					int choose = Integer.parseInt(str);
					switch(choose){
					case 1:
						atm.getMoney();//调用ATM类中的getMoney方法
						break;
					case 2:
						atm.saveMoney();//调用ATM类中的saveMoney方法
						break;
					case 3:
						atm.find();//调用ATM类中的find方法
						break;
					case 4:
						atm.alterPwd();
						break;
					case 5:
						JOptionPane.showMessageDialog(null, "欢迎使用,再见!");
						System.exit(0);
						break;
					}
				}
				else{
					JOptionPane.showMessageDialog(null, "输入错误!");
				}
			}catch(NullPointerException nullPoint){
				JOptionPane.showMessageDialog(null, "系统繁忙!请稍后再试...");
			}catch(Exception e){
				JOptionPane.showMessageDialog(null, e.getMessage());
			}
		}while(true);
	}

	public static void main(String[] args) {
		MainView atm = new MainView();
	}

}

4.记录操作时间

package zwp.testatm;

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JOptionPane;

public class SetCalendar {
	public SetCalendar(){
		Date now = new Date();
		SimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-HH mm分ss秒");
		String date = simp.format(now);
		JOptionPane.showMessageDialog(null, date);
	}
}

5.存储数据文件:
user.txt

#Mon Nov 16 19:45:58 CST 2020
name=zwp
pwd=123456

bank.txt

#Mon Nov 16 19:51:11 CST 2020
money=4999500

二、主要界面截图

1.登录


2.主界面

取款


存款界面与取款相似,这里不做展示

查询

改密码

取卡

三、个人小结
我认为,在这次的作业中中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在作业中,我学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。
这次作业的代码的界面还有很多不完善的地方,很多相关知识都不太会,比如数据库的运用,再今后的学习中会学习更多的知识来完善代码
四、psp

任务内容 计划 完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 10 8
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 10 12
Development 开发 200 300
Analysis 需求分析(包括学习新技术) 20 15
Design Spec 生成设计文档 5 5
Design Review 设计复审 5 5
Coding Standard 代码规范 3 2
Design 具体设计 10 12
Coding 具体编码 100 120
Code Review 代码复审 5 7
Test 测试(自我测试,修改代码,提交修改) 10 15
Reporting 报告 9 6
Test Report 测试报告 3 2
Size Measurement 计算工作量 2 1
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 3 3
posted @   粥粥alg  阅读(171)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示