python作业员工信息表程序(第四周)
作业需求:
1. 员工信息表程序,实现增删改查操作:
2. 可进行模糊查询,语法至少支持下面3种:
select name,age from staff_table where age > 22
select * from staff_table where dept = "IT"
select * from staff_table where enroll_date like "2013"
查到的信息,打印后,最后面还要显示查到的条数
3. 可创建新员工纪录,以phone做唯一键,staff_id需自增
4. 可删除指定员工信息纪录,输入员工id,即可删除
5. 可修改员工信息,语法如下:
UPDATE staff_table SET dept="Market" where dept = "IT"
6. 注意:以上需求,要充分使用函数,请尽你的最大限度来减少重复代码
思路解析:
1. 将原始员工信息记录到文件
2. 读取文件并添加到列表,进行添加删除更新操作,并写入到文件中
程序核心代码:
peopledb
1,Jack Wang,30,43304320533,INS,2015-05-03 2,Alex Li,22,23651054608,IT,2013-04-01
员工信息表.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Colin Yao
"""python 员工信息表操作"""
import sys
import os def select1():
'''
查看文件函数
:return:
'''
with open('peopledb', 'r', encoding='utf-8') as f:
line = f.readlines()
for i in line:
print(i)
def select():
'''
查询函数
:return:
'''
msg = '''
请输入或复制查询命令例如: 1. select name,age from staff_table where age > 22
2. select * from staff_table where dept = "IT"
3. select * from staff_table where enroll_date like "2013"
'''
print(msg)
user_choice_input = input(">>>:")
user_choice_input1 = user_choice_input.split(' ')
if user_choice_input == 'select name,age from staff_table where age > %s' % (user_choice_input1[7]):
with open('peopledb', 'r+', encoding='utf-8') as f:
list1 = []
count = 0
for line in f:
i = line.strip().split(',')
if i[2] > user_choice_input1[7]:
list1.append(i)
for s in list1:
count = count + 1
for j in list1:
print(j)
print('满足条件的个数为>>:%s' % (count))
elif user_choice_input == ('select * from staff_table where dept = %s' % (user_choice_input1[7])):
with open('peopledb', 'r+', encoding='utf-8') as f:
list2 = []
count = 0
for line in f:
i1 = line.strip().split(',')
if i1[4] == eval(user_choice_input1[7]):
list2.append(i1)
for s1 in list2:
count = count + 1
# print(list1)
for j1 in list2:
print(j1)
print('满足条件的个数为>>:%s' % (count))
elif user_choice_input == ('select * from staff_table where enroll_date like %s' % (user_choice_input1[7])):
with open('peopledb', 'r+', encoding='utf-8') as f:
list3 = []
list4 = []
count = 0
for line in f:
i = line.strip().split(',')
list3.append(i)
for j in list3:
m = j[5].split('-')
if m[0] == eval(user_choice_input1[7]):
list4.append(j)
for s in list4:
count = count + 1
if count < 1:
print("没有找到类似的条目:")
pass
else:
pass
for j in list4:
print(j)
print('满足条件的条数为>>:%s' % (count))
return () def alter():
'''
添加函数
:return:
'''
msg = ''' 1)添加命令如下:Jack Wang,30,13304320533,HR,2015-05-03 '''
print(msg)
user_choice_input = input("请输入命令>>>:")
user_choice_input1 = user_choice_input.split(',')
with open('peopledb', 'r+', encoding='utf-8') as f:
list = []
for line in f:
s2 = line.strip().split(',')
m = s2[3]
list.append(m)
if user_choice_input1[2] in list:
print('这条记录已经存在')
main()
else:
my_index = str(len(list) + 1)
user_choice_input1.insert(0, my_index)
user_choice_input1 = ','.join(user_choice_input1)
f.write('\n')
f.write(user_choice_input1)
f.close()
print("记录添加完成", '\n')
select1()
return () def delect():
'''
删除函数
:return:
'''
print("请输入删除命令例如: 输入用户ID 既可以从staff_table里删除")
msg = '''
1)按1 删除、直接删除ID即可
2)按2或者q退出
3)按任意返回上一层
'''
print(msg)
user_choice_input = input("请输入命令>>>: ")
if user_choice_input == '':
print("现有的用户为:")
select1()
print('\n')
user_choice_input1 = input("请输入需要删除的用户ID:")
user_choice_input2 = user_choice_input1[0]
f = open('peopledb', 'r+', encoding='utf-8')
f1 = open('new_peopledb', 'w+', encoding='utf-8')
for line in f:
i = line.strip().split(',')
i1 = i[0]
if user_choice_input2 != i1:
i = ','.join(i)
f1.write(i)
f1.write('\n')
else:
continue
f.close()
f1.close()
os.remove('peopledb')
os.rename('new_peopledb', 'peopledb')
print('\n')
select1()
elif user_choice_input == '' or 'q':
sys.exit()
return () def update():
'''
更新函数
:return:
'''
msg = '''
1)这里第一个等号按照没有空格的格式划分
2)命令范例:UPDATE staff_table SET dept="INS" where dept = "HR"
'''
print(msg)
user_choice_input = input("请输入命令>>>:")
user_choice_input1 = user_choice_input.split(' ')
dept = user_choice_input1[3].split('=')
dept_new = dept[1]
dept_old = user_choice_input1[7]
if user_choice_input == ('UPDATE staff_table SET dept=%s where dept = %s' % (dept_new, dept_old)):
dept_new1 = eval(dept_new)
dept_old1 = eval(dept_old)
f = open('peopledb', 'r+', encoding='utf-8')
f1 = open('new_peopledb', 'w+', encoding='utf-8')
for line in f:
i = line.strip().split(',')
dept_change = i[4]
if dept_change == dept_old1:
i[4] = eval(dept_new)
i = ','.join(i)
f1.write(i)
f1.write('\n')
f.close()
f1.close()
os.remove('peopledb')
os.rename('new_peopledb', 'peopledb')
print('\n')
select1()
pass
return () def main():
'''
交互程序
:return:
'''
print("员工信息表操作作业练习")
msg = '''
1)查询
2)添加
3)删除
4)更新
5) 退出
'''
exit_flag = False
while not exit_flag:
print(msg)
user_choice = input("请选择>>:")
if user_choice == '':
select()
elif user_choice == '':
alter()
elif user_choice == '':
delect()
elif user_choice == '':
update()
elif user_choice == '' or 'q':
sys.exit()
else:
print("您的选择有误、请重新输入") main()
python作业员工信息表程序(第四周)的更多相关文章
- day12 python作业:员工信息表
作业要求: 周末大作业:实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearc ...
- python练习题-员工信息表
周末大作业:实现员工信息表文件存储格式如下:id,name,age,phone,job1,Alex,22,13651054608,IT2,Egon,23,13304320533,Tearcher3,n ...
- python写员工信息表作业笔记
需求 流程图
- python-查询员工信息表
python查询员工信息表 基本要求: 用户可以模糊查询员工信息 显示匹配了多少条,匹配字符需要高亮显示 代码: #!/usr/env python #coding:utf-8 import time ...
- python基础之员工信息表作业
周末大礼包 文件存储格式如下: id, name, age, phone, job 1, Alex, 22, 13651054608, IT 2, Egon, 23, 13304320533, Tea ...
- s9.16作业,员工信息表
转载https://blog.csdn.net/qq_35883464/article/details/83151464 实现员工信息表文件存储格式如下:id,name,age,phone,job1, ...
- python's sixteenth day for me 员工信息表
import os user_dic = { 'username':None, 'password':None, 'login':True } flag = False name_list = ['i ...
- python-打印简单公司员工信息表
python-打印简单公司员工信息表 要求,输入name不为空,输入次数最多3次,3次后跳出程序: 知识点: raw_input str转int whil if elif else continue ...
- python3 员工信息表
这是最后一条NLP了......来吧 十二,动机和情绪总不会错,只是行为没有效果而已 动机在潜意识里,总是正面的.潜意识从来不会伤害自己,只会误会的以为某行为可以满足该动机,而又不知道有其他做法的可能 ...
随机推荐
- webgl学习笔记四-动画
写在前面 建议先阅读下前面我的三篇文章. webgl学习笔记一-绘图单点 webgl学习笔记二-绘图多点 webgl学习笔记三-平移旋转缩放 下面我们将讲解下如何让一个正方形动起来~不断擦除和重绘 ...
- android面试(1)----布局
1.说出android 五中布局,并说出各自作用? FrameLayout: 堆叠布局,也是就可以堆在一起.最长应用于Fragment的使用上. LinearLayout: 线性布局,可以是竖排或水平 ...
- BZOJ4919 大根堆(动态规划+treap+启发式合并)
一个显然的dp是设f[i][j]为i子树内权值<=j时的答案,则f[i][j]=Σf[son][j],f[i][a[i]]++,f[i][a[i]+1~n]对其取max.这样是可以线段树合并的, ...
- UVA - 11997(巧妙的优先队列)
题意: 有k个整数数组,各包含k个元素,在每个数组中取一个元素加起来,可以得到kk个和,求这些和中最小的k个值 解析: 从简单的情况开始分析:经典方法,对原题没有思路,那么分析问题的简化版 这是对于两 ...
- ORACLE 存储过程异常捕获并抛出
for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...
- Linux内核分析第四周学习总结——系统调用的工作机制
Linux内核分析第四周学习总结--系统调用的工作机制 内核态 执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级. 用户态 执行级别低,只能访问0x0000 ...
- 实现了一下Berlekamp-Massey
//from https://www.cnblogs.com/TSHugh/p/9265155.html //在FP中求固定项数数列的线性递推式 //此递推式严格符合数学定义,故可能在末尾出现一些看起 ...
- OpenCV(C++版)图像读取,创建,复制,保存,显示
http://blog.163.com/yuyang_tech/blog/static/21605008320132642254689/ 一个小例子: #include "stdafx.h& ...
- iOS之富文本(一)
NSAttributedString叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化. 通过以下代码即可实现上面 ...
- 徒手创建一个 jsp 项目
在开始之前,先回顾一下 jsp 和 servlet,jsp 和 servlet 本质是一样的,因为 jsp 最终必须编译成 servlet 才能运行. 因为 jsp 的那些标签 jvm 是无法直接运行 ...