zoukankan      html  css  js  c++  java
  • 【python练习】员工信息增删改查程序

    员工信息增删改查程序

    功能:

    • 可进行模糊查询

      find name,age from staff_table where age > 22
      find name from staff_table where dept = "IT"
      find name from staff_table where id=4
      find age from staff_table where name = "Alex Li"
      find * from staff_table where name = "Alex Li"
      find name,age,phone from staff_table where enroll_date like "2013-04-01"
      
    • 可创建新员工纪录,以phone做唯一键(即不允许表里有手机号重复的情况),staff_id自增

      add staff_table Alex Li,25,134435344,IT,2015-10-29
      
    • 可删除指定员工信息纪录,输入员工id,即可删除

      del from staff_table where id=4
      del from staff_table where age>22
      
    • 可修改员工信息

      UPDATE staff_table SET dept="Market" WHERE dept = "IT"
      UPDATE staff_table SET age=25 WHERE name = "Alex Li"
      
    • 以上每条语名执行完毕后,显示这条语句影响了多少条纪录。 比如查询语句 显示 查询出了多少条、 修改语句显示修改了多少条等。

    表格形式如下:

    id name age phone dept enroll_date
    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

    文件存储方式如下:

    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
    

    代码:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import re
    import os
    
    data = {}  # 存放表格数据
    tables = ''
    match = {  # 表头对应关系
    	'id': 0,
    	'name': 1,
    	'age': 2,
    	'phone': 3,
    	'dept': 4,
    	'enroll_date': 5
    }
    
    '''
    测试语句:
    find name,age from staff_table where age > 22
    find name from staff_table where dept = "IT"
    find name from staff_table where id=4
    find age from staff_table where name = "Alex Li"
    find * from staff_table where name = "Alex Li"
    find name,age,phone from staff_table where enroll_date like "2013-04-01"
    find name,age,phone,enroll_date from staff_table where enroll_date like "2013"
    add staff_table Alex Li,25,134435344,IT,2015-10-29
    del from staff_table where id=4
    del from staff_table where age>22
    UPDATE staff_table SET dept="Market" WHERE dept = "IT"
    UPDATE staff_table SET age=25 WHERE name = "Alex Li"
    '''
    
    def main():
    	'''
    	主程序
    	projects:需要输出的内容
    	tables:本次操作的表格(文件名)
    	rule:数据筛选的条件
    	:return:
    	'''
    
    	while True:
    		global tables
    		global data
    		tables = ''
    		data = {
    			'id': [],
    			'name': [],
    			'age': [],
    			'phone': [],
    			'dept': [],
    			'enroll_date': []
    		}
    		inputs = input('>>>').strip()
    		handle = inputs.split(' ')[0]
    		if handle == 'find':
    			inputs_list = inputs.split(' from ')
    			projects = inputs_list[0].split(' ')[1].split(',')  # 打印内容
    
    			inputs_list1 = inputs_list[1].split(' where ')
    			tables = inputs_list1[0]  # 表格
    			rule = inputs_list1[1].replace('=', '==')
    
    			db_open()
    			prints(projects,find(rule))
    		elif handle == 'add':
    			inputs_list = inputs.split(' ', 2)
    			tables = inputs_list[1]
    
    			db_open()
    			add(inputs_list)
    		elif handle == 'del':
    			inputs_list = inputs.split(' from ')[1].split(' where ')
    			tables = inputs_list[0]
    			rule = inputs_list[1].replace('=', '==')
    
    			db_open()
    			delete(find(rule))
    		elif handle == 'UPDATE':
    			inputs_list = inputs.split(' SET ')
    			tables = inputs.split(' ')[1]
    			updates = inputs_list[1].split(' WHERE ')[0].replace('=', '==')
    			rule = inputs_list[1].split(' WHERE ')[1].replace('=', '==')
    			print(tables)
    			db_open()
    			update(find(rule),updates)
    		else:
    			print('33[0;33mPlease input:
    '
    				  'find [id,name,...] from [table] where [id,name,...][><=like][id,name,...]
    '
    				  'add [table] [name,age,...]
    '
    				  'del from [table] [id,name,...] where [id,name,...][><=like][id,name,...]
    '
    				  'UPDATE [table] set [id,name,...] = [id,name,...] WHERE [id,name,...][><=like][id,name,...]33[0m ')
    			continue
    
    def db_loads(loads):
    	'''
    	将数据载入data字典,data字典用于存放表格数据
    	:param loads: 文件读取的每一行内容
    	:return:
    	'''
    	if loads:
    		staff_id,name,age,phone,dept,enroll_date=loads.strip().split(',')
    		# print(staff_id,name,age,phone,dept,enroll_date)
    		data['id'].append(int(staff_id))
    		data['name'].append(name)
    		data['age'].append(int(age))
    		data['phone'].append(int(phone))
    		data['dept'].append(dept)
    		data['enroll_date'].append(enroll_date)
    
    def db_open():
    	'''
    	打开文件,读取内容,调用db_loads(loads)
    	:return:
    	'''
    	with open(tables,'r',encoding='utf-8') as f:
    		for line in f:
    			db_loads(line.strip())
    
    def db_save_a(data):
    	'''
    	文件追加写入
    	:param data:
    	:return:
    	'''
    	with open(tables,'a',encoding='utf-8') as f:
    		f.write(data)
    	print('33[0;33mdata has been saved ...33[0m')
    
    def find(rule):
    	'''
    	查找符合条件的id
    	:param rule: 数据筛选的条件
    	:return: 列表形式的id
    	'''
    	id = []
    	if 'like' in rule:
    		key = rule.split(' ')
    		cmd = "%s in item"%(key[-1])
    	else:
    		key = re.findall('w+', rule)
    		cmd = rule.replace(key[0], 'item')
    
    	for index,item in enumerate(data[key[0]]):
    		exec('''if %s:
    		id.append(index)
    		'''%cmd)
    	print('33[0;33mFind %s pieces of information ...33[0m'%len(id))
    	return id
    
    def add(inputs_list):
    	'''
    	数据增加操作,分别调用db_save_a追加内容,db_loads加载新数据至data字典
    	:param inputs_list:要增加的数据
    	:return:
    	'''
    	if int(inputs_list[2].split(',')[2]) in data['phone']:
    		print('33[0;33mThe phone number is the same as the others...33[0m')
    	else:
    		add_data = str(len(data['id'])+1)+','+inputs_list[2]+'
    '
    		db_save_a(add_data)
    		db_loads(add_data)
    
    def delete(lists):
    	'''
    	删除操作
    	:param lists: 要删除的数据
    	:return:
    	'''
    	with open(tables, 'r+', encoding='utf-8') as f, open('data_new.txt', 'w') as f2:
    		i,j = 1,1
    		for line in f:
    			if int(line.split(',')[0]) not in list(map(lambda x:x+1,lists)):
    				line = line.replace(str(j), str(i), 1)
    				f2.write(line)
    				i += 1
    			j += 1
    	os.remove(tables)
    	os.rename('data_new.txt',tables)
    	print('33[0;33m...
    delete success !33[0m')
    
    def update(lists,updates):
    	'''
    	数据更改操作
    	:param lists: 筛选出的数据id列表
    	:param updates: 需要更新的数据
    	:return:
    	'''
    	key = re.findall('w+',updates)
    	with open(tables, 'r+', encoding='utf-8') as f, open('data_new.txt', 'w') as f2:
    		for line in f:
    			if int(line.split(',')[0]) in list(map(lambda x: x + 1, lists)):
    				tem = line.split(',')
    				tem[match[key[0]]] = key[1]
    				line = ','.join(tem)
    			f2.write(line)
    	os.remove(tables)
    	os.rename('data_new.txt', tables)
    	print('33[0;33m%s changes ...33[0m'%len(lists))
    
    def prints(projects,data_num):
    	'''
    	内容输出打印模块
    	:param projects: 需要打印的内容
    	:param data_num: 数据的id列表
    	:return:
    	'''
    	tem = ''
    	tem1 = ''
    	if '*' in projects:
    		projects = data.keys()
    
    	for i in projects:
    		tem1 += "'%s'.center(11,' '),'|',"%i
    		tem += "str(data['%s'][j]).center(11,' '),'|'," %i
    
    	eval("print(" + tem1  + ")")
    	for j in data_num:
    		print('- - - - - - -'.center(14, ' ')*len(projects))
    		eval("print(" + tem + ")")
    
    
    if __name__ == '__main__':
    	main()
    
  • 相关阅读:
    hdu 5116 计数
    hdu 5117 数学公式展开 + dp
    hdu 5115 Dire Wolf 区间dp
    I00025 寻找循环数
    外部设备发展趋势
    外部设备发展趋势
    互联网
    互联网
    I00024 出钱买羽
    I00024 出钱买羽
  • 原文地址:https://www.cnblogs.com/q1ang/p/9404568.html
Copyright © 2011-2022 走看看