【终究还是对python下手系列】Practice_03

各位家人们,过了个年,给自己过飘了,心静不下来,学不进去,不想学了。之前学的东西说实话,我感觉也忘的差不多了😭,昨天也不知道受了什么刺激,突然想学习学习(可能是三分钟热度,但我也必须把握住这三分钟,能学多少是多少,工作以后是真不想学呀🤣),所以我还是逼着自己再写一个系统吧,回顾回顾知识点。

作业需求:

1、从info.txt文件中读取员工及其工资信息,最后将修改或增加的员工工资信息也写入原info.txt文件。
2、能增查改员工工资
3、增、改员工工资用空格分隔
4、实现退出功能

学到这个阶段,虽然我高级函数的用法还没学,前面的也忘的差不多了🤣,但是我隐约感觉到写一个系统出来,其实在于你的思维结构,只要你有一个框架,利用学的知识很快就能写出来,框架才是核心,框架出来以后,思路就全部打开了。所以我觉得编程最重要的还是思维逻辑清晰,我不知道我说的对不对,也请各位大佬指正。。。(这人就是啥也不会,但还爱吹牛🍺)
大致思路:

查询:

当员工存在,则输出员工以及工资信息
当员工不存在,则输出无该员工,并重新输入

添加:

当员工存在,则输出该员工已存在,重新输入
当员工不存在,则添加员工以及工资信息

修改:

当员工存在时,则进行修改员工工资
当员工不存在时,则输出员工不存在,重新输入

删除:

当员工存在时,再次确定是否删除后,进行删除
当员工不存在时,则输出员工不存在,重新输入

退出:

当输入q/quit时,直接退出
当输入其他字符时,输出输入有误,重新输入

大致框架:

menu_lists='''
1.查询员工及工资
2.修改员工及工资
3.增加新员工信息
4.删除旧员工信息
5.退出
'''

def user_operation():
    print(menu_lists)
    user_operation = input("请选择操作编号>>>:")
    if user_operation.isdigit():
        user_operation = int(user_operation)
        if user_operation > 5:
            print('\033[31;1m请输入有效操作编号\033[0m')
        if user_operation == 1:
            pass
        if user_operation == 2:
            pass
        if user_operation == 3:
            pass
        if user_operation == 4:
            pass
        if user_operation == 5:
            pass
    else:
        print('\033[31;1m请输入有效操作编号\033[0m')

def search_user():
    pass
def change_user():
    pass
def add_user():
    pass
def delete_user():
    pass

最终版本:

#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# author:Janrry
# email:lxl359817643@163.com
import sys,re

menu_lists='''1.查询员工及工资
2.修改员工的工资
3.增加新员工信息
4.删除旧员工信息
5.退出'''
user_dict = {}
# user_list = []
def user_information():
    with open("info.txt", "r", encoding="utf-8") as f:
        for i in f:
            i = i.strip()
            user_dict[i.split()[0]] = i.split()[1]
            print('当前员工姓名:\033[34;1m%s\033[0m' %i.split()[0])
            # user_list.append(user_dict)

# user_information()
def user_operation():
    while True:
        print(menu_lists)
        user_operation = input("请选择操作编号>>>:")
        if user_operation.isdigit():
            user_operation = int(user_operation)
            if user_operation > 5:
                print('\033[31;1m请输入有效操作编号\033[0m')
            if user_operation == 1:
                search_user()
            if user_operation == 2:
                change_user()
            if user_operation == 3:
                add_user()
            if user_operation == 4:
                delete_user()
            if user_operation == 5:
                exit_flag = input("\033[1;33m您确定要退出吗?(yes/no)\033[0m\n")
                if exit_flag == 'yes':
                    print("\033[1;32m 退出成功! \033[0m")
                    exit(0)
        else:
            print('\033[31;1m请输入有效操作编号\033[0m')

def search_user():
    while True:
        user_information()
        search_name = input("请输入要查询的员工姓名:")
        if search_name in user_dict:
            print("\033[32;1m%s\033[0m,工资为:\033[32;1m%s\033[0m元" %(search_name,user_dict[search_name]))
            break
        else:
            print("\033[1;31m 请输入有效的员工姓名!\033[0m")

def change_user():
    while True:
        user_information()
        change_name = input("请输入要修改的员工姓名:")   #这里输入的值是字符串类型,也就是说本身change_name就是字符串,所以在下方replace的时候,user_dict[change_name]中的change_name就是字符串,不需要再加""号了,我可能还不太清楚这些概念,懵B了好长时间,才想明白。。。。
        if change_name in user_dict:
            new_salary = input("请输入新的工资:")
            if new_salary.isdigit():
                with open('info.txt','r',encoding='utf-8') as f:
                    change_list = f.readlines()     #此时,change_list是一个列表--->['zhangsan 10000\n', 'lisi 15000\n', 'wangwu 20000\n', 'zhaoliu 5000\n']

                with open('info.txt','w',encoding='utf-8') as w:
                    for change_list1 in change_list:
                        if change_name in change_list1:
                            change_list1 = change_list1.replace(user_dict[change_name],new_salary)
                        w.write(change_list1)   #这里我遇到一个BUG,一定一定一定要注意,写入的操作是在for循环遍历下的,而千万不要在if语句下。不然就会导致info.txt的内容被覆盖成只进行了替换操作的员工信息。
                print('已将 \033[1;32m%s\033[0m 的工资修改为 \033[1;32m%s\033[0m 元' % (change_name,new_salary))
                break
            else:
                print("\033[1;31m 请输入有效的数字!\033[0m")
        else:
            print("\033[1;31m 请输入有效的员工姓名!\033[0m")

def add_user():
    add_name = input("请输入新员工的姓名:")
    add_salary = input("请输入新员工的薪资:")
    if add_salary.isdigit():
        with open('info.txt','a',encoding='utf-8') as f:
            f.write(add_name+' ')
            f.write(add_salary+'\n')    #可以想想这里可不可以用writelines用法?
        print("\033[1;32m 添加成功!\033[0m")
    else:
        print("\033[1;31m 请输入有效的数字!\033[0m")

def delete_user():
    while True:
        user_information()
        delete_name = input("请输入要删除员工的姓名:")
        if delete_name in user_dict:
            del_flag = input("\033[1;33m 您确定要删除%s的信息吗?(yes/no) \033[0m\n" %(delete_name))
            if del_flag == "yes":
                list = []
                with open('info.txt','r',encoding='utf-8') as f:
                    delete_list = f.readlines()
                    for delete_list1 in delete_list:
                        if not re.search(delete_name,delete_list1):
                            list.append(delete_list1)

                with open('info.txt', 'w',encoding='utf-8') as f:
                    f.writelines(list)
                print("\033[1;32m 删除成功!\033[0m")
                break
        else:
            print("\033[1;31m 请输入有效的员工姓名!\033[0m")

user_operation()

info.txt:

zhangsan 10000
lisi 20000
wangwu 15000
zhaoliu 30000
janrry 88888888

最终效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当你的才华还撑不起你的野心时,那你就应该静下心来学习!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值