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