使用python实现管理系统的增删改查
使用python实现管理系统的增删改查
最近公司实习培训中,老师布置了一个pycharm作业
依据b站教程以及csdn手打,自己进行了一些更改。主要功能包括:增加、删除、修改、查询员工信息。有简单的防止id重复(插入的时候),没有设计界面,使用的是pycharm。可以通过编译运行,但可能存在bug,仅作个人记录使用
前置条件
读取文件,需要引入包。
import os.path
filename='wok_inf.txt'
主函数定义
def main():
while True:
menu()
choice=int(input('选择:'))
if choice in [0,1,2,3,4,5,6]:
if choice==0:
answer=input('确定退出管理系统? y | n ')
if answer=='y':
print('退出成功!')
break
else:
continue
#每个方法都在调用完之后回到menu(),显示菜单
elif choice==1:
insert1()
elif choice==2:
search()
elif choice==3:
modify()
elif choice==4:
delete()
elif choice==5:
show()
else:
print('输入不合法!')
这里调用的insert1(),是有简单的防止重复插入功能的函数。但是有一个问题在于如果在连续插入的时候输入了相同的id还是能成功插入,这地方不知道有没有办法解决(除了一次只能插入一个)
menu菜单展示
def menu():
print('--------欢迎使用员工管理系统--------')
print('--------主菜单--------')
print('1 录入职工信息')
print('2 查询职工信息')
print('3 修改职工信息')
print('4 删除职工信息')
print('5 所有职工信息')
print('0 退出管理系统')
print('---------------------')
插入员工信息
def insert1():
wok_list=[]
flag=False
id= input('插入ID:')
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8')as rfile:
wok_old=rfile.readlines()
for item in wok_old:
d=dict(eval(item))
if d['工号']==id:
flag=True
print('员工已存在,不能插入!请重新输入')
break
if flag==False:
name=input('姓名:')
salary=int(input('工资:'))
woker = {'工号': id, '姓名': name, '工资': salary} # 字典
# 向列表末尾添加元素
wok_list.append(woker) # append:用以在列表末尾添加新的对象
answer = input('是否继续添加? y | n ')
if answer == 'y':
insert1()
save(wok_list) # 自定义函数将列表保存到文件中
print('录入完毕')
#如果连续输入两个一样的id就不行
#将列表保存到文件中
def save(lst):
try:#存在就追加方式打开
wok_txt=open(filename,'a',encoding='Utf-8')
#追加:存在则继续写入,不存在则创建新文件
except:#不存在就写入方式打开
wok_txt = open(filename,'w', encoding='Utf-8')
for item in lst:#每一项数据遍历、转换为字符串类型,写一行之后换行
wok_txt.write(str(item)+'\n') #file.write(str):将字符串写入文件
wok_txt.close()
删除员工信息
def delete():
while True:
wok_id = input('输入删除员工的工号:')
if wok_id != ' ':
if os.path.exists(filename): # 判断文件是否存在
with open(filename, 'r', encoding='utf-8')as file: #存在则以读打开
wok_old = file.readlines() #读取旧表信息到列表
else: #文件不存在,使列表为空
wok_old=[]
flag=False #标记是否删除,默认不删除
if wok_old: #判断列表,空列表布尔值为false
#不为空将修改后的信息写入文件
with open(filename,'w',encoding='utf-8') as wfile:
s={}
for item in wok_old:
s=dict(eval(item)) #字符串转成字典
if s['工号']!=wok_id: #ID不等,不是要删除的条
wfile.write(str(s)+'\n') #写入字符串
else:
flag=True
if flag:
print('员工信息已删除')
else:
print('没有找到员工')
else: #判断列表为空(false)
print('无员工信息')
break
show()
answer = input('是否继续删除? Y | N \n')
if answer == 'y':
continue
else:
break
修改员工信息
def modify():
show()
while True:
if os.path.exists(filename): #存在
with open(filename,'r',encoding='utf-8')as rfile:
wok_old=rfile.readlines()
#信息读取完毕
else:
print('员工信息文件不存在')
return
id = input('请输入要修改的员工工号:')
with open(filename,'w',encoding='utf-8')as wfile:
for item in wok_old:
s=dict(eval(item))
if s['工号']==id:
print('请进行修改:')
s['姓名'] = input('请输入新的姓名:')
s['工资'] = input('请输入新的工资:')
wfile.write(str(s)+'\n')
print('修改成功')
else:
wfile.write(str(s)+'\n')
answer=input('是否继续修改?y | n ')
if answer=='y':
continue
else:
break
查询员工信息
def search():
wok_query=[] #定义列表,存放查找到的员工信息,可能有重名信息
while True:
id=''
name=''
if os.path.exists(filename): #员工信息文件是否存在
mode=input('按id查找请输入1,按姓名查找输入2:')
if mode=='1': #字符串类型
id=input('请输入员工工号:')
elif mode=='2':
name = input('请输入员工姓名:')
else:
print('输入有误,请重新输入')
continue #有更改 search()
with open(filename,'r',encoding='utf-8')as rfile:
wok=rfile.readlines()
for item in wok: #和删除那部分的代码比较
d=dict(eval(item)) #字符串转成字典
if id!='':
if d['工号']==id:
wok_query.append(d)
elif name!='':
if d['姓名']==name:
wok_query.append(d)
'''找到的信息放到wok_query中'''
print('查询结果:')
show_wok(wok_query)
wok_query.clear()
answer=input('是否继续查询?y | n ')
if answer=='y':
continue
else:
break
else:
print('没有员工信息文件!')
return
def show_wok(lst):
if len(lst)==0:
print('没查到')
return
#?????
format_title='{:^6}\t{:^12}\t{:^8}'
print(format_title.format('工号', '姓名', '工资'))
format_data='{:^6}\t{:^12}\t{:^8}'
for item in lst:
print( format_data.format(item.get('工号'),item.get('姓名'),item.get('工资')) )
def show():
wok_list=[]
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8')as rfile:
woker=rfile.readlines()
for item in woker:
wok_list.append(eval(item))
if wok_list:
show_wok(wok_list)
else:
print('暂未保存信息')
if __name__=='__main__':
main()
#代码入口