前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >员工信息表程序

员工信息表程序

作者头像
用户1679793
发布2018-04-28 09:51:11
9690
发布2018-04-28 09:51:11
举报

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("\033[36;1m没有找到你要搜索的员工!\033[0m\n")
        else:
            print("\033[35;1m找到以下员工信息!\033[0m\n")
            for i in search_info:
                print(' | '.join(i))
            print("\n\033[35;1m一共找到 %d 条信息\033[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("\033[35;1m员工 %s 的信息已经添加成功!\033[0m\n" % add_list[0])
        else:
            print("\033[35;1m你要添加员工的phone已经存在!\033[0m\n")
'''删除员工信息'''
@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("\033[35;1m员工 %s 对应的id %s 已经删除\033[0m" %(username,user_del) )
    else:
        print("\033[36;1m你查找的员工信息不存在\033[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("\033[35;1m员工信息已经修改\n %s\033[0m" %user_list)
    else:
        print("你输入修改员工信息语句无效")
while True:
    print("""\t \033[31;1m1.查询员工信息
    2.添加员工信息
    3.修改员工信息
    4.删除员工信息
    5.退出\033[0m""")
    main_dict = {'1':search,'2':add,'3':alter,'4':delete}
    user_choose = input("\033[39;1m请输入你要操作的选项号:\033[0m").strip()
    if user_choose in main_dict.keys():
        main_dict[user_choose]() #执行输入号码对应的函数
    elif user_choose == '5':
        exit("\033[35;1m已退出程序,欢迎下次使用\033[0m")
    else:
        print("\033[36;1m输入格式无效\033[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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档