采用结构化程序设计思想实现模拟ATM(自动柜员机)

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、流程图:

Created with Raphaël 2.1.0 开始 账户密码登陆 登陆验证 可用余额 存钱吗? 存钱 待取余额 是否退出 打印凭条 结束 日额度上限? 取钱 yes no yes no yes no yes no

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、个人总结

没有好的设计,编码也就无从下手。勉强下手往往也是很耗费时间,因为需要一边设计软件一边写代码,一心两用,效率反而很低。相反,在编码之前就设计好软件,一二分明。看似比前者多一个“设计”步骤,然而实际效率却高出前者不少!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值