作业要求

Alex 100000
Rain 80000
Egon 50000
Yuan 30000

-----以上是info.txt文件-----

实现效果:
从info.txt文件中读取员工及其工资信息,最后将修改或增加的员工工资信息也写入原info.txt文件。

效果演示:
1. 查询员工工资
2. 修改员工工资
3. 增加新员工记录
4. 退出

>>:1

请输入要查询的员工姓名(例如:Alex):Alex
Alex的工资是:1000001. 查询员工工资
2. 修改员工工资
3. 增加新员工记录
4. 退出

>>:2

请输入要修改的员工姓名和工资,用空格分隔(例如:Alex 10):Alex 10
修改成功!
1. 查询员工工资
2. 修改员工工资
3. 增加新员工记录
4. 退出

>>:3

请输入要增加的员工姓名和工资,共空格分割(例如:Eric 100000):Eric 100000
增加成功!
1. 查询员工工资
2. 修改员工工资
3. 增加新员工记录
4. 退出

>>:4
再见!
View Code

知识点

1. 函数的基础知识:形参,实参,函数本身

2. 文件的读写,序列化文件,or open文件

  • json 文件处理
  • txt 文件处理

3. 列表/字典/集合的基础知识

4. 如何让字典简单的序列化

5. 高阶函数

6. 函数的返回值

7. 默认参数和动态参数

8. 三元公式

9. lamda 公式

问题集

1. 高阶函数的调用。在字典中,函数不写()。  

    main_menu = {
        "1": ["查询员工工资", search_user],
        "2": ["修改员工工资", modify_user],
        "3": ["增加新员工记录", add_user],
        "4": ["删除员工记录", del_user],
        "5": ["退出系统", exit]
    }

但是,在下方调用时,要记得加()

        if main_choice in main_menu:
            main_menu[main_choice][1]()

 

2. 关于 string.strip() , 如果输入string 中间有空格,这个空格会留存。 

staff_info = input('请输入要修改的员工姓名和工资,用空格分隔(例如:Alex 10):').strip()
print(staff_info)

请输入要修改的员工姓名和工资,用空格分隔(例如:Alex 10):alex 10

alex 10

 

3. 添加数字到字典的value中时,记得要写int()。 否在添加的将是个string

 

My Work

#!usr/bin/env python
# -*- coding:utf-8 -*-
# __author__ = "JaneY"

import sys
import json


def read_json_db(filename="staff_info.json"):
    # 读取json文件
    with open(filename, "r+", encoding="utf-8") as f:
        staff_dic = json.load(f)
    return staff_dic


def write_json_db(staff_dic, filename="staff_info.json"):
    # 写入json文件, save
    with open(filename, "w+", encoding='utf-8') as f:
        json.dump(staff_dic, f)


def add_user():
    # 增加员工
    staff_dic = read_json_db()
    staff_info = input('请输入要增加的员工姓名和工资,共空格分割(例如:Eric 100000):').strip()
    staff_info_list = staff_info.split(' ')      # 返回为: ["Eric", "100000"]
    staff_name = staff_info_list[0]
    staff_dic[staff_name] = int(staff_info_list[1])
    write_json_db(staff_dic)
    print("增加成功。新员工{}的工资为:{}".format(staff_name,
                                     staff_dic[staff_name]))
    main()


def del_user():
    # 删除员工
    staff_dic = read_json_db()
    staff_name = input("请输入要删除的员工姓名(例如:Eric):").strip()
    if staff_name in staff_dic:
        del staff_dic[staff_name]
        write_json_db(staff_dic)
        print("删除成功")
    else:
        print("系统无该员工信息")
    main()


def search_user():
    # 查询员工
    staff_dic = read_json_db()
    staff_name = input('请输入要查询的员工姓名(例如:Alex):').strip()
    if staff_name in staff_dic:
        print('{}的工资是:{}'.format(staff_name,
                                 staff_dic[staff_name]))
    else:
        print("无此员工信息")

    main()


def exit():
    print('再见')
    sys.exit()

def modify_user():
    # 修改信息
    staff_dic = read_json_db()
    staff_info = input('请输入要修改的员工姓名和工资,用空格分隔(例如:Alex 10):').strip()
    staff_info_list = staff_info.split(" ")   # string转为list: ["Alex","10"]
    staff_name = staff_info_list[0]
    if staff_name in staff_dic:
        staff_dic[staff_name] = int(staff_info_list[1])       # 此处必须加 int, 否则在json文件中工资将显示为"10"
        write_json_db(staff_dic)
        print("修改成功,{}的工资为{}".format(staff_name,
                                     staff_dic[staff_name]))
    else:
        print('无此员工信息')

    main()


def main():
    # 主逻辑函数
    main_menu = {
        "1": ["查询员工工资", search_user],
        "2": ["修改员工工资", modify_user],
        "3": ["增加新员工记录", add_user],
        "4": ["删除员工记录", del_user],
        "5": ["退出系统", exit]
    }
    print('工资管理系统'.center(25, '-'))
    for i in main_menu:
        print(i, main_menu[i][0])

    while True:
        main_choice = input('Dear supervisor, please input your choice\n\033[31m>>>\033[0m').strip()
        if main_choice in main_menu:
            main_menu[main_choice][1]()
        else:
            print("Invalid input, please try again")
            continue


if __name__ == "__main__":
    main()
View Code

 

posted on 2017-07-05 22:07  lg100_lg100  阅读(219)  评论(0编辑  收藏  举报