员工信息表程序

2018-04-28 09:51:11 浏览数 (1)

1.需求

(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).查到的信息,打印后,最后面还要显示查到的条数 (4).可创建新员工纪录,以phone做唯一键,staff_id需自增 (5).可删除指定员工信息纪录,输入员工id,即可删除 (6).可修改员工信息,语法如下:   UPDATE staff_table SET dept = "Market" where dept = "IT" 注意:以上需求,要充分使用函数,请尽你的最大限度来减少重复代码

2..简易流程图

3.程序目录结构

代码语言:javascript复制
├── backup                                    ---->        备份员工数据目录
│   ├── __init__.py
│   └── staff_table2017-08-03 18-58-17
├── bin                                       ----->         执行程序目录
│   ├── __init__.py
│   └── main.py                            ---->         员工信息主程序
├── db                                        ---->           数据保存目录
│   ├── __init__.py
│   └── staff_table                        ---->           员工信息表
├── __init__.py
├── README

4.bin目录

代码语言:javascript复制
#coding:utf-8
#Author:ZhiWenwei
import os
import time
import shutil
staff_table_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   r'/db/staff_table'  #获取员工信息文件绝对路径
print(staff_table_path)
backup_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   '/backup/'  #备份路径
'''定义一个能备份文件的装饰器,在修改原文件前先进行备份'''
def bakcup(func):
    def bk(*args,**kwargs):
        shutil.copy(staff_table_path,backup_dir   'staff_table'   time.strftime("%Y-%m-%d %H-%M-%S"))
        func(*args,**kwargs)
    return bk
'''查询员工信息'''
def search():
    user_search = input("请输入查询语句:").strip()
    user_search_list = user_search.split(' ') #拆分为列表
    search_info = [] #搜索结果放此列表
    with open(staff_table_path,'r',encoding='utf-8') as f:
        for line in f:
            user_info = line.strip().split(',') #循环出员工信息并拆分为列表
            conditional = '%s %s %s' %(user_info[2],user_search_list[6],user_search_list[7]) #将条件字符串写入变量
            if user_search_list[6] == '=': #判断是等号就替换
                conditional =conditional.replace('=','==')
            if user_search_list[5] == 'age' and user_info[0].isdigit() and eval(conditional):#判断年龄和员工账户
                print(type(conditional))
                search_info.append([user_info[1],user_info[2]])
            elif user_search_list[5] == 'dept'and user_info[4] in user_search_list[7]: #判断员工职位条件
                search_info.append(user_info)
            elif user_search_list[5] == 'enroll_date' and user_info[5][0:4] in user_search_list[7]: #判断日期
                search_info.append(user_info)
        if not search_info:
            print("33[36;1m没有找到你要搜索的员工!33[0mn")
        else:
            print("33[35;1m找到以下员工信息!33[0mn")
            for i in search_info:
                print(' | '.join(i))
            print("n33[35;1m一共找到 %d 条信息33[0m" % len(search_info))
    return search_info
'''添加员工信息'''
@bakcup
def add():
    user_add = input("请输入添加员工信息的语句:").strip()
    add_list = user_add.split(',') #拆分为列表
    phone = [] #电话列表
    with open(staff_table_path,'r ',encoding='utf-8') as f:
        user_id = 0 #员工id初始变量值
        for line in f:
            user_info = line.strip().split(',') #拆分为列表
            phone.append(user_info[3])
            if user_info[0].isdigit() and user_id < int(user_info[0]):#判断员工id
                user_id = int(user_info[0]) #这里取文件最后一个员工的id号,如果没有则user_id为0
        if add_list[2] not in phone: #判断电话是否唯一
            f.write('n'   str(user_id   1)   ','   ','.join(add_list))
            print("33[35;1m员工 %s 的信息已经添加成功!33[0mn" % add_list[0])
        else:
            print("33[35;1m你要添加员工的phone已经存在!33[0mn")
'''删除员工信息'''
@bakcup
def delete():
    user_del = input("请输入你要删除的员工id号:").strip()
    flag = False
    with open(staff_table_path,'r',encoding='utf-8') as f,
        open(staff_table_path   '_new','w',encoding='utf-8') as f2:
        for line in f:
            line = line.split(',')
            if line[0] == user_del:
                username = line[1] #定义删除的员工名,给后面输出提示
                line = ''
            elif line[0].isdigit() and int(user_del) < int(line[0]): #删除的员工后面的id减1
                line[0] = str(int(line[0]) - 1)
                flag = True
            f2.write(','.join(line)) #把列表里面的各个元素以逗号分开后连接成整个元素并写到文件中
    if flag == True:
        os.remove(staff_table_path)
        os.rename(staff_table_path   '_new',staff_table_path)
        print("33[35;1m员工 %s 对应的id %s 已经删除33[0m" %(username,user_del) )
    else:
        print("33[36;1m你查找的员工信息不存在33[0m")
'''修改员工信息'''
@bakcup
def alter():
    user_alter = input("请输入你要修改的员工信息语句:").strip()
    altre_list = user_alter.split(' ')
    flag = False
    user_list = []
    with open(staff_table_path, 'r', encoding='utf-8') as f, 
            open(staff_table_path   '_new', 'w', encoding='utf-8') as f2:
        for line in f:
            user_info = line.strip().split(',')
            if user_info[4] in altre_list[9]:
                user_info[4] = altre_list[5].strip('"')
                user_list.append(user_info)
                flag = True
            print(user_info[4])
            f2.write(','.join(user_info)   'n') #把列表里面的各个元素以逗号分开后连接成整个元素并写到文件中
    if flag == True:
        os.remove(staff_table_path)
        os.rename(staff_table_path   '_new',staff_table_path)
        print("33[35;1m员工信息已经修改n %s33[0m" %user_list)
    else:
        print("你输入修改员工信息语句无效")
while True:
    print("""t 33[31;1m1.查询员工信息
    2.添加员工信息
    3.修改员工信息
    4.删除员工信息
    5.退出33[0m""")
    main_dict = {'1':search,'2':add,'3':alter,'4':delete}
    user_choose = input("33[39;1m请输入你要操作的选项号:33[0m").strip()
    if user_choose in main_dict.keys():
        main_dict[user_choose]() #执行输入号码对应的函数
    elif user_choose == '5':
        exit("33[35;1m已退出程序,欢迎下次使用33[0m")
    else:
        print("33[36;1m输入格式无效33[0m")

5.db目录

代码语言:javascript复制
staff_id,name,age,phone,dept,enroll-date
1,zhiww,29,18898564892,IT,2013-02-12
2,wangying,12,100861343251,IT,2008-02-12
3,zhoujielun,29,110,IT,2008-02-12
4,zhangsan,36,100861221,HR,2008-02-12
5,zhoujielun,29,114550,IT,2007-02-12
6,alex,25,13798708765,IT,2015-06-15
7,chen,29,1889856413,IT,2013-02-12
8,zjlun,25,13569856669,HR,2008-02-12

总结:每个功能用一个函数的实现!

0 人点赞