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