1、要求:
采用结构化程序设计思想实现模拟ATM(自动柜员机)。
功能包括:
1、模拟ATM(自动柜员机)主界面;
2、模拟ATM(自动柜员机)的查询功能(Quary .);
3、模拟ATM(自动柜员机)存款功能(Credit);
4、模拟ATM(自动柜员机)取款功能(Debit);
5、退出功能模块五(即:返回主界面return)。
提示说明:
1、根据所学的知识实现现实系统的综合开发;
2、注意设计思想和算法的实现,特别是综合应用所学知识与实践的结合;
3、注意界面之间的连接。
基本要求:
1.用字符数组保存用户卡号和密码,用以进行身份验证。
2.注意程序的健壮性(考虑输错密码多次的锁定,每日取款不超过20000元的限定,单笔不超过2000元的限定。)
提高要求:
1.用文件保存用户卡号和密码,用以进行身份验证。
2.完成打印凭条的功能。
3.异常处理(吞卡)。
2、流程图:
3、java实现
- User类
/*
文件名:User.java
描述: Bean实例,保存帐号密码,当前余额,日额度,
*/
package atm;
import java.io.Serializable;
/*
* @author nazi
*/
public class User implements Serializable {
private int mNum;
private int nPass;
//当前余额
private int nowMoney;
//当日取的总钱数
private int dayMoney;
//取的钱数
private int money;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
/*当日取的总钱数
*/
public int getDayMoney() {
return dayMoney;
}
/*帐号
*/
public int getmNum() {
return mNum;
}
/*密码
*/
public int getnPass() {
return nPass;
}
/*余额
*/
public int getNowMoney() {
return nowMoney;
}
/*记录当前用户信息
*/
public void set(int mNum, int nPass) {
this.mNum = mNum;
this.nPass = nPass;
}
/*设置可用余额
*/
public void setNowMoney(int nowMoney) {
this.nowMoney = nowMoney;
}
/*记录当日已取钱数
*/
public void setDayMoney(int dayMoney) {
this.dayMoney = dayMoney;
}
}
- Atm逻辑
/*
* 文件名:AtmCotroller.java
* 描述:登录验证,日额度上限判断,打印凭条
*/
package atm;
/**
*
* @author nazi
*/
public class AtmController {
/*临时存放用户信息
*/
private User mUser;
private static boolean flag = true;
//从终端获取用户
public void userFromAtm(User eUser) {
mUser = eUser;
eUser.setDayMoney(100);
eUser.setNowMoney(10000);
}
/*
* @parm num ,pass
* return bollean
*/
public boolean Login(int num, int pass) {
//使用帐号进行查询
//如果用户不存在,则初始化用户
//如果用户密码正确,则验证成功
if (mUser.getnPass() == 123456) {
System.out.println("登录成功!");
flag = true;
return true;
}
System.out.println("密码错误!");
flag = false;
return false;
}
/*取钱:
*取钱成功时,系统提示。并更新数据库
*/
public void getMyMoney(int count) {
//满足日额度 登录状态
if (flag) {
//用当前余额减去count
mUser.setNowMoney(mUser.getNowMoney() - count);
} else {
System.out.println("您的取钱状态出错");
}
}
/*
* 判断当日余额是否大于两万
* 大于两万返回false 不能取
*/
public boolean dayMoney() {
if (mUser.getDayMoney() > 20000) {
flag = false;
return false;
} else {
flag = true;
return true;
}
}
/*
* 描述:打印凭条
* 包含当前日期,帐号,取钱数目
*/
public void printBill() {
System.out.println("++++++++++++西安科技大学学生银行++++++++++++");
System.out.println("帐号:" + mUser.getmNum());
System.out.println("钱数:" + 200);
System.out.println("++++++++++++++欢迎使用++++++++++++++++++++");
}
}
- ATM终端–无GUI
/*
* 文件名:ATM.java
* 描述: 用户展示界面
*/
package atm;
/**
*
* @author nazi
*/
public class ATM {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//语句结束后产生一个临时User实例
//AtmController atmController = new AtmController(100000, 123456);
//生成临时User
User eUser = new User();
System.out.println("请输入帐号:10000");
int num = 10000;
System.out.println("请输入密码:123456");
int password = 123456;
//用户初始化完成
eUser.set(num, password);
//eUser 传给Atm控制系统进行操作
AtmController atmController = new AtmController();
atmController.userFromAtm(eUser);
System.out.println("============ATM============");
//取钱
System.out.println("请输入输入取钱:200");
atmController.getMyMoney(200);
//余额查询
System.out.println("当前余额:" + eUser.getNowMoney());
//打印凭条:
atmController.printBill();
}
}
4、测试结果(有待完善)
5、软件结构图
6、JDBC操作SqlServer数据库
/*
* 描述:使用JDBC来连接Sql Server
*/
package atm;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* JDBC连接数据库的基本步骤 1.加载驱动 2.获取数据库的连接 3.创建语句对象 4.获得数据集 5.遍历数据集 6.释放资源( 1.释放数据集
* 2.释放语句 3.释放连接对象。 ) 使用JDBC去连接SQLServer2008
*/
public class Jdbc_text {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Connection conn;
Statement stmt;
ResultSet rs;
String url = "jdbc:sqlserver://localhost:1433;databaseName=test";
/*2.SQL Server数据库配置:
用户名为:sa
密码:123456
数据库名为:test
数据表名为:users
导入的架包为:sqljdbc4.jar
*/
String username = "sa";
String password = "123456";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//2.获得数据库连接
conn = DriverManager.getConnection(url, username, password);
//判断数据库连接是否成功
if (conn != null) {
System.out.println("数据库连接成功!");
} else {
System.out.println("数据库连接失败!");
}
//3.创建语句对象
stmt = conn.createStatement();
//sql 语句
String sql = "select * from users";
rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getInt("id") + "," + rs.getString("username") + "," + rs.getString("password"));
}
//操作完成关闭数据流
rs.close();
stmt.close();
conn.close();
}
}
7、个人总结
没有好的设计,编码也就无从下手。勉强下手往往也是很耗费时间,因为需要一边设计软件一边写代码,一心两用,效率反而很低。相反,在编码之前就设计好软件,一二分明。看似比前者多一个“设计”步骤,然而实际效率却高出前者不少!