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了......来吧 十二,动机和情绪总不会错,只是行为没有效果而已 动机在潜意识里,总是正面的.潜意识从来不会伤害自己,只会误会的以为某行为可以满足该动机,而又不知道有其他做法的可能 ...
随机推荐
- gearman参数说明
-b, –backlog=BACKLOG 连接请求队列的最大值 -d, –daemon Daemon 守护进程化 -f, –file-descriptors=FDS 可打开的文件描述符数量 -h, – ...
- wx import require的理解
服务器端的Node.js遵循CommonJS规范.核心思想是允许模块通过require 方法来同步加载所要依赖的其他模块,然后通过 exports或module.exports来导出需要暴露的接口. ...
- 第201天:js---实现继承的5种方式
一.构造函数方式 //构造函数 function People(){ this.race = '汉族'; } People.prototype={ eat:function(){ console.lo ...
- Qt消息机制和事件
Qt消息机制和事件 1 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应 ...
- 【BZOJ4311】向量(线段树分治,斜率优化)
[BZOJ4311]向量(线段树分治,斜率优化) 题面 BZOJ 题解 先考虑对于给定的向量集,如何求解和当前向量的最大内积. 设当前向量\((x,y)\),有两个不同的向量\((u1,v1),(u2 ...
- 【BZOJ4568】幸运数字(线性基,树链剖分,ST表)
[BZOJ4568]幸运数字(线性基,树链剖分,ST表) 题面 BZOJ Description A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市 ...
- 【SPOJ】QTREE7(Link-Cut Tree)
[SPOJ]QTREE7(Link-Cut Tree) 题面 洛谷 Vjudge 题解 和QTREE6的本质是一样的:维护同色联通块 那么,QTREE6同理,对于两种颜色分别维护一棵\(LCT\) 每 ...
- 【BZOJ4011】【HNOI2015】落忆枫音(动态规划)
[BZOJ4011][HNOI2015]落忆枫音(动态规划) 题面 BZOJ 洛谷 Description 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜 ...
- 跨域通信的解决方案JSONP
在web2.0时代,熟练的使用ajax是每个前端攻城师必备的技能.然而由于受到浏览器的限制,ajax不允许跨域通信. JSONP就是就是目前主流的实现跨域通信的解决方案. 虽然在在jquery中,我们 ...
- 「CodePlus 2017 11 月赛」可做题
这种题先二进制拆位,显然改的位置只有每一段确定的数的开头和结尾,只需要对于每一个可决策位置都尝试一下填1和0,然后取min即可. #include<iostream> #include&l ...