作业:
现要求你写一个简单的员工信息增删该查程序,需求如下:
当然此表在文件存储时可以这样表示
1,Alex Li,22,13651054608,IT,2013-04-01
2,Jack Wang,28,13451024608,HR,2015-01-07
3,Rain Wang,21,13451054608,IT,2017-04-01
4,Mack Qiao,44,15653354208,Sales,2016-02-01
5,Rachel Chen,23,13351024606,IT,2013-03-16
6,Eric Liu,19,18531054602,Marketing,2012-12-01
7,Chao Zhang,21,13235324334,Administration,2011-08-08
8,Kevin Chen,22,13151054603,Sales,2013-04-01
9,Shit Wen,20,13351024602,IT,2017-07-03
10,Shanshan Du,26,13698424612,Operation,2017-07-02
1.可进行模糊查询,语法至少支持下面3种查询语法:
find name,age from staff_table where age > 22
find * from staff_table where dept = "IT"
find * from staff_table where enroll_date like "2013"
2.可创建新员工纪录,以phone做唯一键(即不允许表里有手机号重复的情况),staff_id需自增
语法: add staff_table Alex Li,25,134435344,IT,2015-10-29
3.可删除指定员工信息纪录,输入员工id,即可删除
语法: del from staff_table where id=3
4.可修改员工信息,语法如下:
UPDATE staff_table SET dept="Market" WHERE dept = "IT" 把所有dept=IT的纪录的dept改成Market
UPDATE staff_table SET age=25 WHERE name = "Alex Li" 把name=Alex Li的纪录的年龄改成25
5.以上每条语名执行完毕后,要显示这条语句影响了多少条纪录。 比如查询语句 就显示 查询出了多少条、修改语句就显示修改了多少

import os
import re def create_staff_table():
'''
1.如果表存在就加载表,不存在就创建信息表
2.正常打印表
:return:
'''
msg = [
'1,Alex Li,22,13651054608,IT,2013-04-01',
'2,Jack Wang,28,13451024608,HR,2015-01-07',
'3,Rain Wang,21,13451054608,IT,2017-04-01',
'4,Mack Qiao,44,15653354208,Sales,2016-02-01',
'5,Rachel Chen,23,13351024606,IT,2013-03-16',
'6,Eric Liu,19,18531054602,Marketing,2012-12-01',
'7,Chao Zhang,21,13235324334,Administration,2011-08-08',
'8,Kevin Chen,22,13151054603,Sales,2013-04-01',
'9,Shit Wen,20,13351024602,IT,2017-07-03',
'10,Shanshan Du,26,13698424612,Operation,2017-07-02',
]
if not os.path.isfile('staff_table'):
with open('staff_table', 'w+', encoding='utf-8') as f:
for i in msg:
f.write(i+'\n')
print('初始化文件已完成')
else:
with open('staff_table', 'r', encoding='utf-8') as f:print('+-----------staff_table------------+\n'+f.read()+'+-----------end------------+') def add_info():
'''
增加用户信息
1.phone必须是唯一值
2.id自增
3.语法 add staff_table Alex Li,25,134435344,IT,2015-10-29
:return:
'''
add_in = input('增加语法如下\nadd staff_table Alex Li,25,134435344,IT,2015-10-29\n请输入增加命令>>').strip().split(',')
if add_in[0].split(' ')[0] == 'add' and add_in[0].split(' ')[1] == 'staff_table':
add_out = ' '.join(add_in[0].split(' ')[2:]) + ',' + ','.join(add_in[1:])
with open('staff_table', 'a+', encoding='utf-8') as f:
phone_list = []
f.seek(0)
for i in f:
phone_list.append(i.strip().split(',')[3])
if add_in[2] not in phone_list:
staff_id = int(i.strip().split(',')[0]) + 1
f.write(str(staff_id) + ',' + add_out + '\n')
print('1条记录已新增!')
else:
print('该手机号已经注册了!')
else:
print('错误的命令') def del_info():
'''
删除用户信息
1.只能根据用户的id删除
2.语法 del from staff where id=x
(满足条件:1.语法验证正确;)
【bug】:删除不存在id也不提示错误信息
:return:
'''
del_in = input('删除语法如下\ndel from staff where id=x\n请输入删除命令>>').strip().split(' ')
if del_in[0] + del_in[1] + del_in[2] + del_in[3] + del_in[4] == 'delfromstaffwhereid=' + re.split('=', del_in[4])[1]:#验证语法是否正确
old_file = open('staff_table','r+',encoding='utf-8')
new_file = open('staff_table1','w',encoding='utf-8')
for i in old_file:
line = i.strip().split(',')
if re.split('=', del_in[4])[1] != line[0]:
new_file.write(i)
new_file.close()
old_file.close()
os.remove('staff_table')
os.rename('staff_table1','staff_table')
else:
print('错误的语法') def change_info():
'''
修改语法:
UPDATE staff_table SET dept="Market" WHERE dept = "IT" 把所有dept=IT的纪录的dept改成Market
UPDATE staff_table SET age=25 WHERE name = "Alex Li" 把name=Alex Li的纪录的年龄改成25
1.验证语法
2.新建文件并修改msg
3.重写文件并删除原文件
-----------------------
0.找到所有输入中查找的值
1.拿到输入的值
2.替换原值
3.存储变更的数据(按索引)
4.排序后覆盖原文件
:return:
'''
change_in = input('更新语法如下\nUPDATE staff_table SET dept="Market" WHERE dept = "IT"\n'
'UPDATE staff_table SET age=25 WHERE name = "Alex Li"\n请输入更新命令>>').strip().split(' ')
dept_list = [] # 查询到的数据放这个列表
dept_list_left = [] # 没查到的数据放这个列表
dept_list_temp = [] # 我都忘这个干啥用的..
if change_in[0] == 'UPDATE'.upper() and change_in[1] == 'staff_table' \
and change_in[2] == 'SET'.upper() and change_in[4] == 'WHERE'.upper() and change_in[6] == 'dept':
change_in_dept_set = re.split('=', change_in[3])[1].replace('"', '') # 1.拿到输入的Market
change_in_dept_file = change_in[8].replace('"', '') # 1.拿到输入的IT
f = open('staff_table', 'r+', encoding='utf-8')
n_f = open('staff_table_new', 'w', encoding='utf-8')
for line in f:
dept_list_temp.append(line.strip())
for l in dept_list_temp:
if change_in_dept_file == l.strip().split(',')[4]:
l1 = l.replace(l.strip().split(',')[4], change_in_dept_set)
dept_list.append(l1)
else:
dept_list_left.append(l)
res = dept_list + dept_list_left
for lines in res:
n_f.write(lines + '\n')
f.close()
n_f.close()
os.remove('staff_table')
os.rename('staff_table_new', 'staff_table')
print('\033[31;1m%s\033[0m条数据受到影响!' % len(set(dept_list)))
elif change_in[0] == 'UPDATE'.upper() and change_in[1] == 'staff_table' \
and change_in[2] == 'SET'.upper() and change_in[4] == 'WHERE'.upper() and change_in[6] == 'name':
f = open('staff_table', 'r+', encoding='utf-8')
n_f = open('staff_table_new', 'w', encoding='utf-8')
change_in_dept_set = re.split('=', change_in[3])[1] # 1.拿到输入的age
change_in_dept_file = ' '.join(change_in[8:]).replace('"', '') # 2.拿到输入的name
for line in f:
dept_list_temp.append(line.strip())
for l in dept_list_temp:
if change_in_dept_file == l.strip().split(',')[1]:
l1 = l.replace(l.strip().split(',')[2], change_in_dept_set)
dept_list.append(l1)
else:
dept_list_left.append(l)
res = dept_list + dept_list_left
for lines in res:
n_f.write(lines + '\n')
f.close()
n_f.close()
os.remove('staff_table')
os.rename('staff_table_new', 'staff_table')
print('\033[31;1m%s\033[0m条数据受到影响!' % len(set(dept_list)))
else:
print('错误的语法!') def find_info():
'''
1.可进行模糊查询,语法至少支持下面3种查询语法:
find name,age from staff_table where age > 22
find * from staff_table where dept = "IT"
find * from staff_table where enroll_date like "2013"
:return:
'''
find_in = input('查询语法如下\n'
'find name,age from staff_table where age > 22\n'
'find * from staff_table where dept = "IT"\n'
'find * from staff_table where enroll_date like "2013"\n'
'请输入查询命令>>').strip().split(' ')
find_list = []
if find_in[1] == 'name,age' and find_in[3] =='staff_table' and find_in[5] == 'age':
with open('staff_table','r',encoding='utf-8') as f:
for line in f:
if int(find_in[7]) < int(line.strip().split(',')[2]):
find_list.append(line)
print('+--staff_table--+\n'+'+name------'+'--age+')
for i in find_list:
print('|'+i.strip().split(',')[1], i.strip().split(',')[2]+'\t|')
print('+---------------+\n'+'查询到\033[31;1m%s\033[0m条数据!'% len(set(find_list)))
elif find_in[1] == '*' and find_in[3] =='staff_table' and find_in[5] =='dept':
with open('staff_table','r',encoding='utf-8') as f:
for line in f:
if find_in[7].replace('"','') == line.strip().split(',')[4]:
find_list.append(line.strip())
print('+----------staff_table------+\n')
for i in find_list:
print(i)
print('+-----------------------------+\n'+'查询到\033[31;1m%s\033[0m条数据!' % len(set(find_list)))
elif find_in[1] == '*' and find_in[3] =='staff_table' and find_in[5] == 'enroll_date':
with open('staff_table', 'r', encoding='utf-8') as f:
for line in f:
if find_in[7].replace('"', '') == re.split('-', line.strip().split(',')[5])[0]:
find_list.append(line.strip())
print('+----------staff_table------+\n')
for i in find_list:
print(i)
print('+-----------------------------+\n' + '查询到\033[31;1m%s\033[0m条数据!' % len(set(find_list)))
else:
print('错误的命令!') def main():
while True:
print('+--------操作界面--------+\n0.打印当前信息\n1.查询员工信息\n2.新增员工信息\n3.删除员工信息\n4.修改员工信息\n5.退出\n+--------end--------+')
choice = input('请输入您的选项>>>').strip()
if choice == '':
find_info()
elif choice == '':
add_info()
elif choice == '':
del_info()
elif choice == '':
change_info()
elif choice == '':
exit()
elif choice == '':
create_staff_table()
else:
print('错误的命令,请重试!') if __name__ == '__main__':
create_staff_table()
main()

7月9日安排

上午 完成 函数所有作业及视频学习和笔记,并完成员工信息表的增加和删除

下午 完成员工信息表的修改和查询

晚上 完成模块10个视频,记录笔记

路飞学城Python-Day10(practise)的更多相关文章

  1. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...

  2. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  3. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  4. 路飞学城-Python开发集训-第3章

    学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...

  5. 路飞学城-Python开发集训-第1章

    学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...

  6. 路飞学城-Python开发集训-第4章

    学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...

  7. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...

  8. 路飞学城Python-Day19(practise)

    # 特性1.继承:2.多态:3.封装 # 1.继承的用处:通过继承就可以解决类与类之间的代码冗余关系 # 2.多态的用处:1.增加了程序的灵活性,以不变应万变,使用者都是同一种形式去调用(func(a ...

  9. 路飞学城-Python开发-第二章

    ''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...

  10. 路飞学城-Python开发-第三章

    # 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...

随机推荐

  1. 代码行数统计(mac)

    如何统计自己的代码量?下面介绍两个方法: 一.cloc 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码 ...

  2. XP访问WIN10共享打印机提示错误:操作无法完成,拒绝访问

    XP系统添加打印机--连接到此计算机的本地打印机(取消自动检测)--创建新端口(LOCAL port)----输入端口名\\计算机名\打印机名.(例如:\\adubei\\HP lasjet 1020 ...

  3. easyUI在使用字符串拼接时样式不起作用,点击加号增加一行,点击减号删除一行效果。

    拼接的按钮没有样式,需要使用 var str = $("<a href='javascript:void(0)' class='easyui-linkbutton' onclick=' ...

  4. 基础——(4)D Latch(D锁存器)

    S-R Latch Put a inverter there: Invertor的组成: tie both of the inputs together加上一个nor gate 就能组成一个inver ...

  5. 一些html5

    ---匿名函数(funcation(){}())---- 一.拖拽 draggable=ture-----A拖动元素上事件 1. 拖拽开始:ondragstart2. 拖拽中:ondrag3. 拖拽结 ...

  6. 【【henuacm2016级暑期训练】动态规划专题 F】Physics Practical

    [链接] 我是链接,点我呀:) [题意] 给你n个数字 让你删掉最小的数字 使得: 剩余的数字中 "最大的数字"小于等于"最小的数字*2" [题解] 把数据从小 ...

  7. java源码之List(ArrayList,LinkList,Vertor)

    1,List概括 List的框架图 (01) List 是一个接口,它继承于Collection的接口.它代表着有序的队列. (02) AbstractList 是一个抽象类,它继承于Abstract ...

  8. C#-常用对象-思维导图

    C#-常用对象-思维导图 链接:http://pan.baidu.com/s/1jHNgS78 密码:3i74 如有错误,请告知我!

  9. 使用BabeLua在cocos2d-x中编辑和调试Lua

    使用BabeLua在cocos2d-x中编辑和调试Lua BabeLua是一款基于VS2012/2013的Lua集成开发环境,具有Lua语法高亮,语法检查.自己主动补全.高速搜索,注入宿主程序内对Lu ...

  10. 字符串中连续出现最多的子串 &amp; 字符串中最长反复子串

    字符串中连续出现最多的子串 & 字符串中最长反复子串 字符串中连续出现最多的子串 & 字符串中最长反复子串,这两个问题都能够用后缀数组来表示,至于后缀数组能够參考编程珠玑P156:后缀 ...