python實例_員工管理系統


一,作者介紹

吳海東:My Blog:http://www.cnblogs.com/whd-67270

二,程序說明

 

1. 查詢員工信息

 

2. 創建新員工信息

 

3. 修改員工信息

 

4. 退出

三,程序前准備

創建一個存放員工信息的文件staff.txt

四,程序腳本

 

# -*- coding: UTF-8 -*
import re
import os
BASE_DIR = (os.path.dirname(os.path.abspath(__file__)))
#print("##%s"%BASE_DIR)
def staff_file(filename):
    """
    讀取員工信息文件
    :return: 返回讀取結果
    """
    with open(filename, 'r', encoding="utf-8") as f:
        f = list(f)   # 將結果轉換成列表
        return f      # 返回結果

def file_exist_check(file_name):
    if not os.path.exists(file_name):
        print("Error: file %s is not exist!!!" % file_name)
        exit(2)


def server_options1():
    """
    打印一個服務項
    :return:返回用戶輸入的選項
    """
    for staff_tabe in range(1):
        print("1.查詢員工信息\n2.增加員工信息\n3.修改員工信息\n4.退出")    # 循環打印選項
        serial_number = input("請選擇你的服務:")   # 獲取用戶輸入的選項
        if serial_number.isdigit():   # 判斷是否是數字
            serial_number = int(serial_number)   # 轉成數字類型
            return serial_number   # 返回選項結果
        else:
            print("請輸入規范的服務編號")
            continue

def query_function():
    """
    員工模糊查詢功能選項
    :return: 返回最終的查詢結果
    """
    file_name = (BASE_DIR+"\staff.txt")    # 獲取員工信息文件
    file_exist_check(file_name) # 檢查文件是否存在
    file = staff_file(file_name)
    for fm in range(1):
        print("1.員工年齡\n2.員工職業\n3.員工登記日期")    # 循環打印選項
        fm_server = input("請選擇你要查詢的服務:")   # 獲取用戶輸入的選項
        if fm_server.isdigit():   # 判斷是否是數字
            fm_server = int(fm_server)   # 轉成數字類型
            if fm_server <= 3 and fm_server >= 0:   # 判斷是否有不規則的選項
                if fm_server == 1:
                    staff_age = input("請輸入員工年齡:")   # 獲取用戶輸入的年齡數
                    # 判斷員工信息表里是否有用戶輸入的年齡數
                    while True:
                        loginSucces = False
                        flag = 0   # 記錄查詢到的信息數
                        for staff_fm in file:
                            tmp_file = (staff_fm.strip('\n').split(','))
                            # 如果有這個年齡數的就打印輸出列表
                            if staff_age in tmp_file[2]:
                                print(tmp_file)
                                flag += 1
                            else:
                                continue   # 遞歸查詢列表
                            loginSucces = True   # 如果查詢到了列表就定義為True
                        if loginSucces == True:print("查詢到%s條您要的員工信息\n"%flag) # 打印輸出查詢到的信息數
                        if loginSucces == True:break
                        else:   # 如果沒有查詢到列表就打印此輸出,並退出查詢
                            print("\033[31;1m沒有此年齡段的用戶!\033[0m\n")
                            break
                elif fm_server == 2:
                    staff_work = input("請輸入員工職業:")   # 獲取用戶輸入的職業名
                    # 判斷員工信息表里是否有用戶輸入的職業名
                    while True:
                        loginSucces = False
                        flag = 0   # 記錄查詢到的信息數
                        for staff_fm in file:
                            tmp_file = (staff_fm.strip('\n').split(','))
                            if staff_work in tmp_file[4]:   # 如果有這個職業名的就打印輸出列表
                                print(tmp_file)
                                flag += 1
                            else:
                                continue   # 遞歸查詢列表
                            loginSucces = True   # 如果查詢到了列表就定義為True
                        if loginSucces == True:print("查詢到%s條您要的員工信息\n"%flag)   # 打印輸出查詢到的信息數
                        if loginSucces == True:break
                        else:   # 如果沒有查詢到列表就打印此輸出,並退出查詢
                            print("\033[31;1m沒有此職業的用戶!\033[0m\n")
                            break
                elif fm_server == 3:
                    staff_Date_Fegistration = input("請輸入員工登記日:")   # 獲取用戶輸入的登記日
                    # 判斷員工信息表里是否有用戶輸入的登記日
                    while True:
                        loginSucces = False
                        flag = 0   # 記錄查詢到的信息數
                        for staff_fm in file:
                            tmp_file = str(staff_fm.strip('\n').split(','))
                            # 如果有這個登記日,並且符合規范的就打印輸出列表,例如2018-03-14
                            if staff_Date_Fegistration in tmp_file[5]:
                                filter_files = re.search(
                                    '(.*\d+-\d+-\d+).*', tmp_file)
                                print(filter_files.group())
                                flag += 1
                            else:
                                continue   # 遞歸查詢列表
                            loginSucces = True   # 如果查詢到了列表就定義為True
                        if loginSucces == True:print("查詢到%s條您要的員工信息\n"%flag)   # 打印輸出查詢到的信息數
                        if loginSucces == True:break
                        else:   # 如果沒有查詢到列表就打印此輸出,並退出查詢
                            print("\033[31;1m沒有此登記日的用戶!\033[0m\n")
                            break



def list_number(file_name):
    """
    獲取文件的總行數
    :return: 返回一個總行數
    """
    with open(file_name, 'r', encoding="utf-8") as f:
        text = f.read()
        length = len(text.splitlines())
        return length


def add_function():
    """
    創建一條新的員工數據項,把新的數據項寫入原文件
    :return:
    """
    file_name = (BASE_DIR + "\staff.txt")  # 獲取員工信息文件
    file_exist_check(file_name)  # 檢查文件是否存在
    while True:
        flag = list_number(file_name)    # 獲取員工信息列表的總行數
        try:
            staff_name, staff_age, staff_phone, staff_work, staff_date = input(
                '請輸入新員工詳細信息:').strip().split()   # 獲取用戶輸入的各項新員工詳細信息
        except ValueError:
            print('信息不符合規范!請規范填寫以空格隔開,例如:姓名 年齡 電話號碼 職業 入職日期')
        else:
            staff_phone = str(staff_phone)   # 用戶輸入的新員工電話號要做特殊處理
            if re.search('(\d{11})', staff_phone):   # 判斷是否是11位的電話號
                file_tmp = staff_file(file_name)   # 讀取員工信息列表
                for staff_fm in file_tmp:
                    staff_number = staff_fm.strip('\n').split(',')
                    staff_number = staff_number[3]   # 截取列表每行的電話號碼
                    if staff_phone in staff_number:   # 判斷用戶輸入的新員工電話號是否有在列表里
                        print('%s\n這個號碼已經存在!' % staff_number)
                    else:
                        continue   # 遞歸查詢列表
                else:
                    # 判斷用戶輸入的除電話號意外的所有信息數據類型是否符合規范
                    if staff_name.isalpha() and staff_age.isdigit() and staff_work.isalpha()\
                            and re.search('(\d{4}-\d{2}-\d{2})', staff_date):
                        with open('staff.txt', 'a+', encoding='utf-8') as f_c:
                            flag += 1   # 行數自加
                            # 把規范的新員工信息寫入員工信息表
                            f_c.write(
                                "\n%s,%s,%s,%s,%s,%s" %
                                (flag, staff_name, staff_age, staff_phone, staff_work, staff_date))
                            print('添加成功')
                            break
                    else:   # 如果有不符合規范的數據類型就打印此輸出
                        print('輸入的信息有不規范的類型,請重新輸入!')
                        continue   #重新輸入新員工信息
            else:   # 如果有不符合規范的電話號就打印此輸出
                print('請輸入規范的11位數的電話號碼!')


def file_tmp1(file_tmp):
    """
    :param file_tmp:
    :return:
    """
    for line_tmp in file_tmp:
        line_tmp = line_tmp.strip('\n').split(',')
        print(line_tmp)
    return file_tmp


def update_function():
    file_name = (BASE_DIR + "\staff.txt")  # 獲取員工信息文件
    file_exist_check(file_name)  # 檢查文件是否存在
    while True:
        flag = list_number(file_name)   # 獲取員工信息文件的行數
        file_tmp1(staff_file(file_name))   # 循環打印出整個員工信息列表
        staff_id = input('請輸入要修改的員工ID號:').strip()   # 獲取用戶輸入的員工ID號
        if re.match('\d', str(staff_id)):   # 判斷用戶輸入的ID號是否是數據類型
            # 判斷用戶輸入的ID號數是否等於列表的行數並且不等於0
            if int(staff_id) == int(flag) and int(staff_id) > 0:
                with open('staff.txt', 'r', encoding='utf-8')as f:
                    lines = f.readlines()   # 讀取整個員工信息列表
                with open('staff.txt', 'w', encoding='utf-8')as f_up:   # 寫入員工列表
                    for line in lines:   # 循環已逗號分割員工列表
                        single_list = line.strip('\n').split(',')
                        # 判斷用戶輸入的ID號是否有在員工列表里,有就打印出這個列表
                        if str(staff_id) in single_list:
                            print(single_list)
                            # 獲取用戶要修改這個列表的具體數據項
                            staff_info = input('請輸入要修改的員工信息:').strip()
                            # 獲取用戶輸入的新數據項
                            new_staff_info = input('請輸入要修改的新員工信息:').strip()
                            # 判斷用戶輸入的要修改項是否在這個列表里
                            if staff_info in single_list:
                                # 如果有這個選項就把舊的數據替換成新的數據
                                single_list[single_list.index(staff_info)] = new_staff_info
                                # 把這個列表以逗號重新責成一個新列表
                                new_single_list = ','.join(single_list)
                                # 把之前匹配到的列表替換成新的列表
                                line = line.replace(line, new_single_list)
                            else:
                                print("沒有此信息的用戶")
                        # 如果用戶輸入的ID不在這個員工列表里,把這個列表直接寫入文件
                        f_up.write("%s\n" % line.strip())
                    break
            else:
                print("沒有這個員工ID號!")
        else:
            print("請輸入規范的員工ID號")


while True:
    serial_number = server_options1()
    if serial_number <= 4 and serial_number >= 0:
        if serial_number == 1:   # 選項1進入查詢員工服務
            query_function()
        elif serial_number == 2:   # 選項2進入創建員工服務
            add_function()
        elif serial_number == 3:   # 選項3進入修改員工服務
            update_function()
        elif serial_number == 4:   # 退出員工管理系統
            exit("謝謝使用,再見!")
    else:
        print("請輸入規范的服務編號!\n")
        continue

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM