python作業之day3(工資管理系統)


day3新作業:工資管理系統

作者:LiYan(李岩)

博客地址:http://www.cnblogs.com/yange/p/7022072.html

環境:

  • 系統環境:Windows 10 專業版
  • python版本:3.6.0
  • pycharm版本:2017.1.3

作業內容:

  1. 從info.txt文件中讀取員工及其工資信息,最后將修改或增加的員工工資信息也寫入原info.txt文件
  2. 查詢員工工資
  3. 增加新員工記錄
  4. 修改員工工資
  5. 刪除員工記錄
  6. 退出

實現需求:

  • 實現對文件做增、刪、改、查的操作

流程圖:

代碼結構:

整體操作共有五個選項,分別是:
  1. 查詢:
  • 員工姓名不存在,重新輸入
  • 員工姓名存在,輸出其對應的工資
  1. 新增:
  • 員工姓名存在,重新輸入
  • 員工姓名不存在,添加信息到文件
  1. 修改:
  • 員工姓名不存在,重新輸入
  • 員工姓名存在,修改工資,把修改前、修改中、修改后的信息一起寫入到新文件
  • 刪除原文件,重命名新文件
  1. 刪除:
  • 員工姓名不存在,重新輸入
  • 員工姓名存在,刪除信息,把剩余信息寫入到新文件
  • 刪除原文件,重命名新文件
  1. 退出:退出操作;
  • 直接退出程序

文件結構:

  • salary.py:主程序
  • info.txt:員工信息存儲文件
  • ReadMe.md:說明文檔
  • png文件:流程圖

測試:

程序運行之后輸入(1,2,3,4,5)進行相關操作:

  1. 選擇1和4,只需要輸入員工姓名
  2. 選擇2和3,需要輸入員工姓名和工資,中間以空格分開
  3. 選擇5,程序直接退出

小結:

  • 難點

    1. 中間有很多重復的代碼,不知道該怎么優化
    2. 文件增、刪、改的操作比較難理解
    3. 空行的格式化比較難
  • 問題

    1. 選擇添加和修改時,只輸入員工姓名也是可以成功的
    2. 無法判斷輸入的信息屬於哪種類型
    3. 修改最后一條記錄時,寫不進去數據
    4. 刪除最后一條記錄時,會多出一行空行

員工信息存儲文件(info.txt):

Alex 11111

Rain 80000

Egon 50000

Yuan 30000

liyan 88888888

yy 999999999

yange 6666

yan 1

代碼:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __Author__ = Yan Li

# 導入模塊
import sys
import os

# 員工信息存儲文件
filename = 'info.txt'

# 過濾空行后的員工信息文件
new_filename = 'new_info.txt'

# 員工姓名列表
info_dict = {}
# 員工工資列表
user_dict = {}


# 提取用戶信息
def info():
    with open(filename, 'r') as f:
        for i in f:
            if not i.startswith('\n'):
                i = i.strip()
                # 把員工和工資信息加入字典
                info_dict[i.split(' ')[0]] = i.split(' ')[1]


# 刪除和移動文件
def file():
    # 把原文件刪除
    os.remove(filename)
    # 把新文件重命名為原文件名
    os.rename(new_filename, filename)


# 查詢
def select():
    while True:
        info()
        user_info = input('請輸入員工姓名:').strip()
        if user_info in info_dict.keys():
            print('%s的工資是:%s' % (user_info, info_dict[user_info]))
            break
        else:
            print('用戶不存在!!!')


# 新增
def insert():
    while True:
        info()
        user_info = input('請輸入要增加的員工姓名和工資:').strip()
        # 把新員工的姓名和工資加入字典
        user_dict[user_info.split(' ')[0]] = user_info.split(' ')[1]
        # 把新員工信息轉為列表
        user_list = user_info.split(' ')
        # 當新員工在當前員工信息文件中不存在
        if user_list[0] not in info_dict.keys():
            user_info = '\n' + user_info + '\n'
            # 寫入新員工信息到文件中
            with open(filename, 'a+') as f:
                f.write(user_info)
            print('%s 添加成功!' % user_list[0])
            break
        else:
            # 當新員工在當前員工信息文件中存在
            print('用戶已存在!!!')


# 修改
def update():
    while True:
        info()
        user_info = input('請輸入要修改的員工姓名和工資:').strip()
        # user_dict[user_info.split(' ')[0]] = user_info.split(' ')[1]
        # 把新員工信息轉為列表
        user_list = user_info.split(' ')
        # 當前需要修改的員工信息
        user_now = '%s %s' % (user_list[0], info_dict[user_list[0]])
        # 當新員工在當前員工信息文件中存在
        if user_list[0] in info_dict.keys():
            with open(filename, 'r') as fr, open(new_filename, 'w') as fw:
                tag = False
                for i in fr:
                    if i.strip() == user_now:
                        tag = True
                        continue
                    if not tag:
                        fw.write(i)
                    else:
                        fw.write(user_info + '\n\n')
                    if tag and i.startswith('\n'):
                        tag = False
            file()
            print('%s 修改成功!' % user_list[0])
            break
        else:
            # 當新員工在當前員工信息文件中不存在
            print('用戶不存在!!!')


# 刪除
def delete():
    while True:
        info()
        user_info = input('請輸入要刪除的員工姓名:').strip()
        # 當前需要修改的員工信息
        user_now = '%s %s' % (user_info, info_dict[user_info])
        # 當刪除的員工在當前員工信息文件中存在
        if user_info in info_dict.keys():
            with open(filename, 'r') as fr, open(new_filename, 'w') as fw:
                tag = False
                for i in fr:
                    if i.strip() == user_now:
                        tag = True
                        continue
                    if not tag:
                        fw.write(i)
                    if tag and i.startswith('\n'):
                        tag = False
            file()
            print('%s 刪除成功!' % user_info)
            break
        else:
            # 當刪除的員工在當前員工信息文件中不存在
            print('用戶不存在!!!')


choose_msg = '''
1: 查詢
2: 新增
3: 修改 
4: 刪除
5: 退出
'''

salary = {
    '1': select,
    '2': insert,
    '3': update,
    '4': delete,
    '5': sys.exit,
}

while True:
    print(choose_msg)
    # 選擇操作
    choose = input('\033[31;1m請輸入操作選項:\033[0m').strip()
    if choose not in salary.keys():
        continue
    salary[choose]()


免責聲明!

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



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