ATM管理系统
编写一个ATM管理系统,语言不限,要求应包括以下主要功能:
(1)开户,销户
(2)查询账户余额
(3)存款
(4)取款
(5)转账(一个账户转到另一个账户)等...
允许网上查询参考,但请注意不要直接抄袭,可以理解看懂别人的代码,再自己编写
一、ATM管理系统源代码:
- 登录界面
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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理技术深度解析与实战指南