专栏首页python3Python写的ATM小程序

Python写的ATM小程序

很久没写博客了,近两年的时间一直在搞Openstack相关的东西,有时间我也会把我认为值得写得一些技术和经验分享出来。

以后准备好好学学Python了,要不快没饭吃了

,这两个礼拜看了一些视频教程和书籍,遂拿这个ATM小程序练练手。

文件结构:

程序共有6个py文件和3个文本文件

cashin.py  -- 还款模块 goods_list  -- 商品列表 login.py -- 主文件 menu.py -- 菜单模块 printlist.py  -- 记录打印模块 record_tran.txt  -- 用户操作记录 shopping.py -- 购买模块 user_list -- 用户列表 withdraw.py -- 提现模块

源代码:

login.py

#!/usr/bin/python

import sys
from menu import menu_show

while True:
    user = str(raw_input("\033[1;32;40mPlease input your name:\033[0m"))
    f = open('user_list','r+')
    for line in f.readlines():
        n = str(line.split()[0])
        p = str(line.split()[1])
        if user == n:
            while True:
                password = str(raw_input("\033[1;32;40mPlease input your password:\033[0m"))
                if password != p:
                    print "\033[1;31;40mThe password is incorrect\033[0m"
                    continue
                else:
                    print "\033[1;32;40myes let you in.\033[0m"
                    global money
                    money_total = 15000
                    while True:
                        print "\033[1;33;40mYou total money is: \033[0m",money_total
                        money_total = menu_show(user,money_total)
        else:
            print "\033[1;31;40mThe user is not vaild, please re-input:\033[0m"
            continue

menu.py

#!/usr/bin/python

import sys
import os
from shopping import show_shopping_list
from printlist import print_list
from withdraw import with_draw
from cashin import cash_in

def menu_show(n,mo):
    print "Welcome %s, This is the ATM system:" %n
    print "Select what you want to do:"
    print " 1. Shopping"
    print " 2. Withdraw"
    print " 3. Cash in"
    print " 4. Print list"
    print " 5. Exit"
    user_input = int(raw_input("Input 0 ~ 5 "))
    global current_user
    current_user = n
    mo = menu_select(user_input,mo)
    return mo

def menu_select(input,money):
    if input == 1:
        money = show_shopping_list(current_user,money)
    if input == 2:
        money = with_draw(current_user,money)
    if input == 3:
        money = cash_in(current_user,money)
    if input == 4:
        print_list(current_user)
    if input == 5:
        print "\033[1;33;40mThank you for using ATM, Good bye!\033[0m"
        sys.exit()
    return money

shopping.py

#!/usr/bin/python

import sys
import time

def show_shopping_list(n,m):
    
    #read the file to a dictionary
    goods_dict={}
    goods = open('goods_list','r+')
    for line in goods.readlines():
        key = line.split()[0]
        value = line.split()[1]+' '+line.split()[2]
        goods_dict[key] = value
    
    #print the goods list
    print "The current user is %s." %n
    print goods_dict   
    
    #decrease the money
    buy_number = int(raw_input("Please select which one you want to buy:"))
    goods_name = goods_dict[`buy_number`].split()[0]
    goods_value = int(goods_dict[`buy_number`].split()[1])
    
    m = calculate(int(m),goods_value)
    
    #record the log
    shopping_file_write(n,goods_name,goods_value,0)
    
    return m


def calculate(qian,pri):
    new_qian = qian - pri
    return new_qian
    
def shopping_file_write(user,name,price,fee):
    tran_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    spath = "record_tran.txt"
    f = open(spath,'a')
    f.write("%s|%s|%s|%d|%d  \n"  %(user,tran_time,name,price,fee))
    f.close()

withdraw.py

#!/usr/bin/python

import time

#withdraw function

def with_draw(n,m):
    print "Hello %s, you account have %d RMB." %(n,m)
    print "Attention: There are 5% fee per withdraw !"
    draw = int(raw_input("Please input how much money you want to with draw:"))
    m = m - draw * 1.05
    
    #record to the log
    
    withdraw_file_write(n,draw)
    
    return m

def withdraw_file_write(user,withdraw):
    shouxufei = cash * 0.05
    tran_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    spath = "record_tran.txt"
    f = open(spath,'a')
    f.write("%s|%s|withdraw|%d|%d  \n" %(user,tran_time,withdraw,shouxufei))
    f.close()

cashin.py

#!/usr/bin/python

import time

#cash in function

def cash_in(n,m):
    print "Hello %s, your account have %d RMB now." %(n,m)
    cash = int(raw_input("Please input how much money you want to save in :"))
    m = m + cash
    cashin_file_write(n,cash)
    return m

def cashin_file_write(user,cashin):
    tran_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    spath = "record_tran.txt"
    f = open(spath,'a')
    f.write("%s|%s|cashin|%d|0  \n"  %(user,tran_time,cashin))
    f.close()

printlist.py

#!/usr/bin/python

#select current user's bill

def print_list(n):
    print "Hello %s, Here is your bill:" %n
    print "Account|Date|Goods|Price|Fee"
    spath1 = "./record_tran.txt"
    f1 = open(spath1,'r')
    for line in f1.readlines():
        if line.split('|')[0] == n:
            print line

user_list

user1 123
user2 456

goods_list

1  Car  250000
2  Clothes   399
3  Shoes  199
4  Iphone5s   4999
5  Coffee   35
6  Foods    68
7  Bicycle   1688

example of record_tran.txt

user1|2014-07-08 16:59:27|Iphone5s|4999|0  
user2|2014-07-08 16:59:31|withdraw|1000|50  
user1|2014-07-08 16:59:56|withdraw|500|25  
user2|2014-07-09 14:38:33|cashin|3456|0  
user2|2014-07-09 14:39:10|Coffee|35|0

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python学习日记-1

    *使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的。

    py3study
  • Python读取键盘输入的2种方法

    Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘。如下:

    py3study
  • python 3层装饰器及应用场景

        1)把一个函数名当做实参传给另一个函数(在不修改被装饰函数的源代码情况下为其添加功能);

    py3study
  • Python实现ATM提款机系统

    好了话不多说,上列子,解释都在注释里.有看不懂的可以留言大家一起交流哦. 文件链接(Python文件和数据库文件):

    公众号---志学Python
  • Kafka 自定义分区器

    (1) 如果键值为 null,并且使用了默认的分区器,那么记录将被随机地发送到主题内各个可用的分区上。分区器使用轮询(Round Robin)算法将消息均衡地分...

    CoderJed
  • 颤技术之巅—WE ARE TEG

    邀您感受腾讯产品背后的技术力量。WE ARE TEG,you can't see,can feel! ? ? ?

    腾讯大讲堂
  • python3--变量,布尔值,用户交互 input,if语句,while循环

    已经运行了第一个python程序,即:终端---->cmd----->python 文件路劲。回车搞定~

    py3study
  • flink的local模式启动全流程源码分析

    这是一个执行WordCount的操作,我们以这个demo为入口来对整个执行流程进行分析记录。

    开发架构二三事
  • 一起升级技能,先行者课程学习笔记

    -- Js运行之前的那么一瞬间,生成一个活动对象(Active Object),简直AO对象。

    web前端教室
  • ROS(indigo) 用于机器人控制的图形化编程工具--code_it robot_blockly

    编程语言有汇编,高级语言,解释语言等,现在图形化编程也越来越流行。图形化编程简单易学。8年前,微软推出了VPL用于机器人程序设计,如Python和JavaScr...

    zhangrelay

扫码关注云+社区

领取腾讯云代金券