课程设计报告
设计名称: 《可视化程序设计实验》课程设计
选题名称: ATM自动取款机模拟系统
姓 名: **** 学 号: 12000***
专业班级: 计算机科学与技术专业软件2班
系 (院): 计算机系
设计时间: 20##.11.2 ~20##.11.9
设计地点: 3机房
1.课程设计目的
1.加深对面向对象理论和基本知识的理解,掌握使用Java语言进行面向对象程序设计的基本方法,提高运用面向对象知识解决实际问题的能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。
2.课程设计说明书
一.需求分析
随着社会的进步,在人们的日常生活中,资金流动非常频繁。为了减轻银行工作人员的压力及负担,所以设计了ATM自动取款机,能通过机器进行一些简单的资金交易,既方便又快捷,在许多地方都按防了自动取款机器。
取款机里包涵了取款、存款、转账、查询、修改密码等功能,系统模块如图所示。
二.概要设计
根据对ATM取款机的分析,可以分为选择操作、取款、查询、存款、转账。
1.取款模块
取款模块,进入此模块,必须取100的整数倍且小于余额总数。
2.查询模块
查询模块,进入此模块,就可以知道自己的相关信息。
3.修改密码模块
修改密码模块,进入此模块,可以把初始密码改了,增强保密性。
4.存款模块
存款模块,进入此模块,必须输入100的整数倍。
5.转账模块
转账模块,进入此模块,就可以进行转账,先输入对方账号必须是8位数,在输入转出金额,转出金额必须小于余额总数。
三、源代码清单(部分)
package Yan;
import java.util.Scanner;
public class Atm {
String zqy_name; // 账户名
int zqy_number; // 帐号
int zqy_qitahao; // 转账用的帐号
int zqy_pass; // 用户密码
double zqy_yue; // 用户余额
double zqy_qu; // 用户要取出的金额
double zqy_cun; // 用户要存入的金额
double zqy_all = 0; // 用户取出的总额
int zqy_a; // 键盘输入要选择的操作
int zqy_i; // 控制输入密码次数的变量
Scanner input = new Scanner(System.in);
Atm(String a, int b, int c, double d) { // 初始化持卡人信息
zqy_name = a;
zqy_number = b;
zqy_pass = c;
zqy_yue = d;
}
public void zqy_inputpass() throws Exception { // 输入密码
for (zqy_i = 1; zqy_i <= 3; zqy_i++) {
System.out.println("注意:请输入数字,否则可能会引起乱码!");
System.out.println("请输入密码:");
int mima = input.nextInt();
if (mima >= 100000 && mima <= 999999) {
if (mima == zqy_pass) {
if (mima == 123456) {
System.out.println("密码为初始密码,建议修改密码。");
}
zqy_welcome();
} else {
System.out.println("您输入的密码有误,请重新输入:");
continue;
}
} else {
System.out.println("密码的长度为6位,请重新输入:");
continue;
}
}
System.out.println("对不起,您已超过输入次数,请带身份证到柜台办理相关手续!");
}
public void zqy_welcome() { // 欢迎界面
System.out
.println("请选择您要进行的操作:\n1、取款 \n2、查询 \n3、修改密码 \n4、存款\n5、转账\n6、退出");
zqy_a = input.nextInt();
switch (zqy_a) {
case 1:
zqy_get();
break;
case 2:
zqy_refer();
break;
case 3:
zqy_change();
break;
case 4:
zqy_cun();
break;
case 5:
zqy_zhuan();
break;
case 6:
zqy_exit();
break;
}
}
public void zqy_choose() { // 选择是否继续
System.out.println("您是否继续进行其他操作?1(继续)/2(退出)");
zqy_a = input.nextInt();
if (zqy_a == 1) {
zqy_welcome();
} else if (zqy_a == 2) {
zqy_exit();
}
}
public void zqy_get() { // 取款
System.out.println("请输入您要取的金额:");
zqy_qu = input.nextDouble();
if (zqy_qu < zqy_yue) {
if (zqy_qu % 100 == 0) {
if (zqy_qu <= 2500) {
zqy_all = zqy_all + zqy_qu;
if (zqy_all <= 5000) {
zqy_yue = zqy_yue - zqy_qu;
System.out.println("交易完成您的余额为" + zqy_yue);
zqy_choose();
} else {
System.out.println("您今日交易的数额超过5000,无法再次交易!");
zqy_choose();
}
} else {
System.out.println("本次交易超过最大限额2500!");
zqy_choose();
}
} else {
System.out.println("请输入100的整数!");
zqy_get();
}
} else {
System.out.println("您卡上的余额不足!");
zqy_choose();
}
}
public void zqy_refer() { // 查询
System.out.println("您的帐号:" + zqy_number);
System.out.println("您的帐户名:" + zqy_name);
System.out.println("您的余额:" + zqy_yue);
zqy_choose();
}
public void zqy_change() { // 修改密码
System.out.println("请输入您的原密码:");
int zqy_mi = input.nextInt();
if (zqy_mi == zqy_pass) {
System.out.println("请输入您的新密码:");
int zqy_xin = input.nextInt();
if (zqy_xin >= 100000 && zqy_xin <= 999999) {
System.out.println("请再次输入您的新密码:");
int zqy_chong = input.nextInt();
if (zqy_xin == zqy_chong) {
zqy_pass = zqy_xin;
System.out.println(" 修改成功!");
zqy_choose();
} else {
System.out.println("两次输入的密码不一致!");
zqy_change();
}
} else {
System.out.println("请输入6位的密码");
zqy_change();
}
} else {
System.out.println("请输入正确的密码");
zqy_change();
}
}
public void zqy_cun() { // 存款
System.out.println("请输入您要存入的金额:");
zqy_cun = input.nextInt();
if (zqy_cun % 100 == 0) {
zqy_yue = zqy_yue + zqy_cun;
System.out.println(" 存款成功!");
System.out.println("您的余额为:" + zqy_yue);
zqy_choose();
} else {
System.out.println("请输入100的整数!");
zqy_cun();
}
}
public void zqy_zhuan() { // 转账
System.out.println("请输入转入帐号:");
zqy_qitahao = input.nextInt();
if (zqy_qitahao >= 10000000 && zqy_qitahao <= 99999999) {
System.out.println("请输入转入金额:");
zqy_cun = input.nextInt();
if (zqy_cun < zqy_yue) {
zqy_yue = zqy_yue - zqy_cun;
System.out.println(" 交易成功!");
System.out.println("您的余额为:" + zqy_yue);
zqy_choose();
} else {
System.out.println("您的余额不足,请重新选择!");
zqy_choose();
}
} else {
System.out.println("帐号长度为8位!");
zqy_zhuan();
}
}
public void zqy_exit() { // 退出界面
System.out.println(" 谢谢使用!");
System.exit(1);
}
}
4.课程设计成果
1)输入密码
2)进入主界面进行选择
3)取款
4)查询余额
5)修改密码
6)存款
7)转账
8)退出
5.课程设计心得
在本次的课程设计中,起初以为会很简单,但是后来慢慢发现需要注意很多细节,最终经过反复调试和修改,ATM虚拟取款机有了基本的模型。
根据课程设计的要求,实现用户的取款、查询、修改密码、存款、转账等方法。首先需要编写一个主界面的程序,再其中选择用户想要进行的操作,分别进入所需模块,进行交易。
在调试过程中,出现了很多问题,例如:要存款和取款的时候必须进行100的整数倍的交易;一次取款不得超过2500也不能超余额总数;一天取款总数不得超过5000;修改密码的时候输入的新密码的长度不得超过6位数且两次输入的新密码必须相同;转账时对方的账号必须是8位数,转出金额不得超过余额总数等等。另外截图的时候也会忽略这些细节。
通过这次课程设计让我深刻体会到想完成一个完整程序是一件非常困难的事。
参考文献:
《Java语言与面向对象程序设计》-----------王行言编著
《Java2实用教程》------------------------耿祥义,张跃平编著
《Java实用程序设计100例》---------------袁海燕,王文涛编著