【归纳练习1】atm模拟系统练习spring注入、事务、控制反转

归纳练习

一、atm模拟系统练习spring注入、事务、控制反转



atm机项目

​ 1,输入账号

​ 2,输入密码

​ 3,【再次输入密码并验证】查询余额

​ 4,转账

​ 5,输入转账者卡号

1,建表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for bank
-- ----------------------------
DROP TABLE IF EXISTS `bank`;
CREATE TABLE `bank`  (
  `id` int(0) NOT NULL,
  `name` varchar(5) CHARACTER SET utf8 COLLATE utf8_croatian_ci NOT NULL,
  `pass` int(0) NOT NULL,
  `account` varchar(20) CHARACTER SET utf8 COLLATE utf8_croatian_ci NOT NULL,
  `money` double(13, 2) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_croatian_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of bank
-- ----------------------------
INSERT INTO `bank` VALUES (1, '张三', 123456, '11111111111', 1000.00);

SET FOREIGN_KEY_CHECKS = 1;

2,建项目

建立一个普通maven项目
在这里插入图片描述

3,导包
<!--        spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
<!--        mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
<!--        连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
<!--        aop-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.13</version>
        </dependency>
<!--        事务-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>
4,实体类
public class Bank {
    private Integer id;//id
    private String name;
    private Integer pass;
    private String account;
    private Double money;

    public Bank() {
    }

    public Bank(Integer id, String name, Integer pass, String account, Double money) {
        this.id = id;
        this.name = name;
        this.pass = pass;
        this.account = account;
        this.money = money;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getPass() {
        return pass;
    }

    public void setPass(Integer pass) {
        this.pass = pass;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Bank{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pass=" + pass +
                ", account='" + account + '\'' +
                ", money=" + money +
                '}';
    }
}
5,写jdbc文件
  1. 指定数据源
  2. 事务管理器
  3. 用dao框架
  4. 开启spring
  5. 开启事务注解
driverClassName=com.mysql.cj.jdbc.Driver    <!-- 数据库驱动-->
url=jdbc:mysql://127.0.0.1:3306/bank
name=root  <!-- 数据库的用户名,切忌使用username,系统会混淆-->
pass=root    <!-- 数据库的密码-->
6,编写配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 1   读取jdbc文件-->
        <context:property-placeholder location="jdbc.properties"></context:property-placeholder>


    <!-- 2   创建数据源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="${driverClassName}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${name}"></property>
        <property name="password" value="${pass}"></property>
    </bean>


<!--    3 事务管理器-->
    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

<!--    4  jdbc框架-->
    <bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

<!--    5 开启spring-->
    <context:component-scan base-package="com.buka"></context:component-scan>

<!--    6  开启事务注解-->
    <tx:annotation-driven></tx:annotation-driven>
</beans>
java代码
dao层
import com.buka.po.Bank;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class UserDao {
    @Autowired
    JdbcTemplate jdbcTemplate;
    public Bank selUser(String account, Integer pass) {
        Bank bank=null;
    //  Integer i=  jdbcTemplate.queryForObject("select count(*) from bank1 where account="+account+" and pass="+pass,Integer.class);

          bank=  jdbcTemplate.queryForObject("select * from bank1 where account="+account+" and pass="+pass,
                  new BeanPropertyRowMapper<Bank>(Bank.class));
      return bank;
    }

    public int sel(String account) {
      Integer integer=jdbcTemplate.queryForObject("select count(*) from bank1 where account=?",Integer.class,account);
      return  integer;
    }

    public void subtract(String account, Double money) {
        jdbcTemplate.update("update bank1 set money=money-? where account=?",money,account);
    }

    public void add(String account, Double money) {
        jdbcTemplate.update("update bank1 set money=money+? where account=?",money,account);
    }

    public Double selRemains(Integer id) {
        Double query = jdbcTemplate.queryForObject("select money from bank1 where id=?", Double.class, id);
        return  query;
    }
}
po层
public class Bank {
        private  Integer id;
        private  String name;
        private  Integer pass;
        private  String account;
        private  Double money;

    public Bank() {
    }

    public Bank(Integer id, String name, Integer pass, String account, Double money) {
        this.id = id;
        this.name = name;
        this.pass = pass;
        this.account = account;
        this.money = money;
    }
    public Bank( String name, Integer pass, String account, Double money) {

        this.name = name;
        this.pass = pass;
        this.account = account;
        this.money = money;
    }

    @Override
    public String toString() {
        return "Bank{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pass=" + pass +
                ", account='" + account + '\'' +
                ", money=" + money +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getPass() {
        return pass;
    }

    public void setPass(Integer pass) {
        this.pass = pass;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }
}
service层
import com.buka.dao.UserDao;
import com.buka.po.Bank;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {
@Autowired
private UserDao userDao;
    public Bank selUser(String account, Integer pass) {
        System.out.println("-----------------");
    Bank bank= userDao.selUser(account,pass);
    return  bank;

    }
@Transactional
    public String Transfer(Bank bank,String  account, Double money) {
        //查询卡号在不在  1:存在 0:不存在
        int i=userDao.sel(account);
        //转账
        if(i==1){
            //存在,判断卡里的钱够不够
            if(bank.getMoney()>=money){
                //钱够=>得先减,后加
                userDao.subtract(bank.getAccount(),money);
                userDao.add(account,money);
                return  "ok";
            }else{
                //钱不够
                return  "Not enough money!!";
            }
        }else {
            return  "no";
        }
    }

    public Double queryRemains(Bank bank, Integer pass) {
      if(bank.getPass().equals(pass)){  //判断密码是否相同
          Double remains=userDao.selRemains(bank.getId());
          return  remains;
      }else{
          return  0.0;
      }
    }
}
web层
import com.buka.po.Bank;
import com.buka.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.management.Query;
import java.util.Scanner;

public class UserWeb {
   public  static  UserService userService;
    static {
        //1.创建spring容器
        ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
         userService=(UserService) app.getBean("userService");
    }
    public static Scanner scanner=new Scanner(System.in);
    public  static  Bank bank;
    public static void main(String[] args) {
        System.out.println("----------------Welcome to the ATM System!--------------------");
        System.out.println("----------Please input the account -------------");
        String account=scanner.next();
        System.out.println("----------Please input the password -------------");
        Integer pass=scanner.nextInt();

        //2.调用service方法
        Bank result= userService.selUser(account,pass);
        //3.
        if(result!=null){
            System.out.println("login in successfully");
            bank=result;
            index();
        }else{
            System.out.println("Fail to login!");
        }
    }

    private static void index() {
        System.out.println("-----------Welcome  you to the"+bank.getName()+"----------");
        System.out.println("-------------Please choose the function---------------");
        System.out.println("-----1.Query the remains--------------");
        System.out.println("-----2.transfer------------");
        int i=scanner.nextInt();
        switch (i){
            case 1:
                //查余额
                QueryRemains();
                break;
            case 2:
                //转账
                Transfer();
                break;
            default:
                System.out.println("Input incorrectly!");
                break;
        }
    }

    private static void QueryRemains() {
        System.out.println("-----------QueryRemains Function------------");
        System.out.println("Please input the password:");
       Integer pass=scanner.nextInt();
       Double remains= userService.queryRemains(bank,pass);
       if(remains==0.0){
           System.out.println("Wrong password!");
       }else{
           System.out.println("Your remains is "+remains);
       }

    }

    private static void Transfer() {
        System.out.println("-----------Transfer Function------------");

        System.out.println("-----------Target account------------");
        String account =scanner.next();
        System.out.println("-----------Target money------------");
        Double money =scanner.nextDouble();
       String result= userService.Transfer(bank,account,money);
       if("ok".equals(result)){
           System.out.println("Transfer successfully!");
       }else{
           System.out.println(result);
       }
    }
}


总结

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python ATM模拟系统是一个通过Python语言编写的模拟自动柜员机(ATM)的系统。该系统可以模拟ATM机的基本操作和功能,包括取款、存款、查询余额、转账和更改密码等。下面是系统的一些主要功能: 1. 用户登录:用户在系统中注册并输入正确的账号和密码后,可以登录到自己的账户。系统会进行验证,并显示登录成功或失败的信息。 2. 查询余额:登录后,用户可以选择查询余额,系统会读取用户账户的余额信息,并显示在屏幕上。 3. 取款:用户可以输入取款金额,系统会验证账户余额是否足够,并根据用户选择进行取款操作。如果成功,系统会更新账户余额,并显示取款成功的信息。 4. 存款:用户可以输入存款金额,系统会根据用户选择进行存款操作。成功后,系统会更新账户余额,并显示存款成功的信息。 5. 转账:用户可以输入受益人账号和转账金额,系统会验证受益人账号的存在,并检查账户余额是否足够进行转账操作。成功后,系统会更新相关账户的余额,并显示转账成功的信息。 6. 更改密码:用户可以输入原密码和新密码,系统会验证原密码的正确性,并更新用户账户的密码信息。 通过模拟以上功能,Python ATM模拟系统可以帮助用户了解和练习使用ATM机的基本操作。它不仅可以提高用户的操作技能,还可以帮助用户更好地管理个人财务。该系统的设计和实现,可以通过使用Python的条件、循环语句和函数等基本知识,结合数据处理和存储技术,来完成不同功能的实现和交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值