python實現簡易工資管理系統(Salary Manage)源碼

一、需求:

1.導入文件讀取員工的信息和工資信息,最后將增加、刪除或修改的員工工資信息寫入原來的文件中

2.能夠實現員工工資信息的增刪改查

3.當增加和修改員工信息時用戶用空格分隔員工姓名和薪資

4.實現退出功能

二、思路

1.首先需要將包含有員工薪資信息的文件讀出來存儲到一個容器里,因為員工姓名和薪資一一對應,因此想到字典的key--->value機制,將員工薪資信息存儲到字典中。

2.寫一個函數讓用戶選擇該如何操作----->add、delete、modify、search(增刪改查)以及退出操作

3.定義四個函數----- >user_add()、user_delete()、user_modify()、user_seach()

三、實現(源碼)

?

 
  1 #!/user/bin/env python
  2 #-*-coding:utf-8 -*-
  3 #Author: qinjiaxi
  4 import sys,os,re
  5 operation_list = """
  6 1.增加新員工薪資信息
  7 2.刪除已有員工薪資信息
  8 3.修改已有員工薪資信息
  9 4.查詢已有員工薪資信息
 10 5.退出操作
 11 """
 12 user_dict = {}#空字典用來存儲員工薪資信息
 13 def user_info():
 14     '''定義員工薪資信息函數'''
 15     with open('info.txt','r') as f:
 16         for i in f:
 17             i = i.strip()#去掉每行字符串前后空格和換行以及縮進
 18             user_dict[i.split()[0]] = i.split()[1]#將員工信息以鍵值對key(員工姓名)--->value(員工薪資)的方式存儲在字典中
 19             print('當前員工的姓名:', i.split()[0])
 20 
 21 def user_choice():
 22     '''用戶輸入選擇'''
 23     while True:
 24         print(operation_list)
 25         user_choice = input('請選擇操作編號:')
 26         if user_choice.isdigit():
 27             user_choice = int(user_choice)
 28             if user_choice > 5:
 29                 print('\033[31;1m請輸入正確的操作編號\033[0m')
 30             if user_choice == 1:
 31                 user_info_add()
 32             if user_choice == 2:
 33                 user_info_del()
 34             if user_choice == 3:
 35                 user_info_modify()
 36             if user_choice == 4:
 37                 user_info_search()
 38             if user_choice == 5:
 39                 sys.exit('退出程序')
 40         else:
 41             print('\033[31;1m請輸入正確的操作編號\033[0m')
 42 
 43 def user_info_add():
 44     '''定義增加新員工薪資信息函數'''
 45     while True:
 46         user_info()
 47         add_user = input('請輸入要增加員工的姓名和薪資,并以空格隔開(例如: Qinjiaxi 10000)')
 48         add_user_info = add_user.strip().split()#去掉用戶輸入前后的空格換行以及縮進,并將姓名和工資以列表形式打印
 49         if len(add_user_info) < 2:
 50             print('\033[31;1m請輸入正確的格式\033[0m')
 51         elif not add_user_info[1].isdigit():
 52             print('\033[31;1m請輸入正確的數字\033[0m')
 53         else:
 54             name = add_user_info[0].capitalize()#把用戶名的第一個字母變成大寫
 55             salary = add_user_info[1]
 56             if name in user_dict:#判斷姓名是否在字典中
 57                 print("\033[31;1m您輸入的名字已存在\033[0m")
 58             elif not name.isalpha():#判斷姓名是否是全英文
 59                 print('\033[31;1m請輸入正確的姓名')
 60             else:
 61                 with open('info.txt','a') as f:
 62                     f.write(name + ' ')
 63                     f.write(salary + '\n')
 64                 print('已將\033[31;1m%s\033[0m用戶信息添加成功' % name)
 65                 break
 66 
 67 def user_info_del():
 68     '''定義刪除員工薪資信息函數'''
 69     while True:
 70         user_info()
 71         del_user = input('請輸入要刪除員工的姓名,例如(Qinjiaxi)')
 72         del_user_info = del_user.capitalize()#把首個字母改成大寫,方便用戶輸入
 73         if del_user_info in user_dict:
 74             confirm = input('請確認是否刪除\033[32;1m %s\033[0m用戶信息--->按\033[32;1mN\033[0m退出,按任意鍵確認'% del_user_info)
 75             if confirm.capitalize() != 'N':
 76                 list = []#定義一個空列表用于存儲不需要刪除的員工信息
 77                 with open('info.txt', 'r') as f:
 78                     lines = f.readlines()
 79                     for line in lines:
 80                         if not re.search(del_user_info, line):#判斷哪些員工不需要刪除
 81                             list.append(line)
 82                 with open('info.txt', 'w') as f:
 83                     f.writelines(list)
 84                 print('\033[32;1m%s\033[0m已經刪除' % del_user_info)
 85                 break
 86             else:
 87                 print('\033[32;1m%已取消刪除\033[0m')
 88         else:
 89             print('\033[32;1m該用戶不存在\033[0m')
 90 
 91 def user_info_modify():
 92     '''定義修改員工薪資信息函數'''
 93     while True:
 94         user_info()
 95         modify_user = input('請輸入要修改員工的姓名和薪資,并以空格隔開(例如:Qinjiaxi 10000)')
 96         modify_user_info = modify_user.strip().split()
 97         if len(modify_user_info) < 2:
 98             print('\033[32;1m請輸入正確的格式\033[0m')
 99         elif not modify_user_info[1].isdigit():
100             print('\033[32;1m請輸入正確的數字\033[0m')
101         else:
102             name = modify_user_info[0].capitalize()#姓名
103             salary = modify_user_info[1]#薪資
104             if name in user_dict:
105                 with open('info.txt', 'r') as f:
106                     lines = f.readlines()
107                 with open('info.txt', 'w') as f_w:
108                     for line in lines:
109                         if name in line:
110                             line = line.replace(user_dict[name], salary)#替換薪資
111                         f_w.write(line)
112                 print('已將\033[32;1m%s\033[0m的工資修改為\033[32;1m%s\033[0m元'%(name, salary))
113                 break
114             else:
115                 print('\033[32m;1m您輸入的用戶不存在\033[0m')
116 
117 def user_info_search():
118     '''定義查詢員工薪資信息函數'''
119     while True:
120         user_info()
121         search_user = input('請輸入要查詢的員工姓名(例如:Qinjiaxi)')
122         search_user_info = search_user.capitalize()
123         if search_user_info in user_dict:
124             print('\033[32;1m%s\033[0m工資為\033[32;1m%s\033[0m元' % (search_user_info, user_dict[search_user_info]))
125             break
126         else:
127             print('\033[32;1m您輸入的用戶不存在\033[0m')
128 
129 user_choice()
 

?

 

轉載于:https://www.cnblogs.com/qinlangsky/p/9487406.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451582.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451582.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451582.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 的作用

print正常是要輸出到屏幕上&#xff0c;如果你希望輸出到其他地方比如文件&#xff0c;就需要使用>>來把輸出導向到文件。空格的目的是要區分關鍵詞&#xff0c;如果你輸入的是print>>&#xff0c;電腦會把它當成一個單詞&#xff0c;而無法知道是print函數。

操作系統內存管理

參考文獻&#xff1a; 20 張圖揭開內存管理的迷霧 感謝三太子敖丙分享&#xff01;

hexo github搭建博客常用的命令

這些命令你都用過嗎&#xff1f; npm install hexo -g #安裝 npm update hexo -g #升級 hexo init #初始化 hexo new "postName" #新建文章 hexo new page "pageName" #新建頁面 hexo generate #生成靜態頁面至public目錄 hexo server #開啟預覽訪問端口&a…

寫博客的好處,專家告訴你

把自己平時在做項目時和自己學習時的一些經驗和心得記錄下來。那樣&#xff0c;首先可以增強自己對知識點的理解&#xff1b;其次&#xff0c;以后再用到的話&#xff0c;可以很方便的查詢&#xff1b;最后&#xff0c;才是分享給大家&#xff0c;可以在用到這方面的知識的時候…

解決報錯:java.util.UnknownFormatConversionException: Conversion = ‘p‘

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. ssm框架下 報錯如題 2. 錯誤原因&#xff1a;我的情況是&#xff0c;代碼中實體屬性映射書寫和數據庫字段名字不一致。 選中位置數據…

JVM和JMM的區別

參考文獻&#xff1a; java中JVM和JMM之間的區別 感謝作者分享&#xff01;

[Java][網絡編程]服務端向客戶端發送信息

/*前置知識&#xff08;服務端&#xff09;1.首先要常見一個ServerSocket對象 服務端套接字&#xff0c;并且在服務端套接字里面確定需要使用的端口2.然后要創建一個Socket對象來接收ServerSocket的返回值。通常一個Socket對象對應一個客戶端/涉及到多個客戶端需要通過線程來解…

【Python】如何判斷一個字符串為空

#方法一 if oneString: print "not empty" else: print "empty" #方法二 if oneString "": print "empty" else: print "not empty"

LRU 實現緩存

LRU:Least Recently used 最近最少使用 1.使用LinkedHashMap實現 inheritance實現方式 繼承map類 可以使用Collections.synchronizedMap方式實現線程安全的操作 public class LruCache<K,V> extends LinkedHashMap<K,V> {private final int MAX_CACHE_SIZE;public …

使用vsftp作為集群的yum倉庫

地址規劃&#xff1a;vsftp服務器的地址為172.16.1.61使用的環境&#xff1a;[rootnfs01 scripts]# uname -a Linux nfs01 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux首先在yum服務器上掛載本地光盤mkdir /media/cdrom ;mount…

純做技術是自娛自樂 拋開技術做技術才是出路

短短一生不過數十載&#xff0c;對于很多人而言&#xff0c;作IT、作技術只是生命中的某一段&#xff0c;并非所有。而無論是換工作還是換行業&#xff0c;只是一種形式而已&#xff0c;最終我們追求的是成功、是榮譽、是收獲。于是在年輕的這幾年里&#xff0c;作為技術人員理…

TOAD連接Oracle數據庫失敗:OCI_INVALID_HANDLE解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. toad 連接Oracle數據庫連接失敗如圖&#xff1a; 2. 導致這個情況的前因&#xff1a;toad運行情況下&#xff0c;突然斷電。 3. 解決…

多線程三大特性:原子性、有序性、可見性

參考文獻&#xff1a;三大性質總結&#xff1a;原子性&#xff0c;有序性&#xff0c;可見性 感謝作者分享&#xff01;

git checkout 和 git reset

git checkout 主要有三個作用&#xff1a; 第一個就是切換分支。例如你從遠程倉庫clone下來所有的源代碼&#xff0c;你git branch一下會看到你通常是在master&#xff0c;如果你想切換到某一個分支上呢&#xff1f;git checkout <branchname>第二個就是放棄對某個文件的…

python-訪問者模式

源碼地址:https://github.com/weilanhanf/PythonDesignPatterns 說明&#xff1a; 訪問者模式的基本想法是&#xff0c;軟件系統中擁有一個由許多對象構成的、比較穩定的對象結構&#xff0c;這些對象的類都擁有一個 accept 方法用來接受訪問者對象的訪問。訪問者是一個接口&am…

面試題:Fibonacci數列

題目描述&#xff1a;大家都知道斐波那契數列&#xff0c;現在要求輸入一個整數n&#xff0c;請你輸出斐波那契數列的第n項&#xff08;從0開始&#xff0c;第0項為0&#xff09;。 方法1&#xff1a;遞歸 public class Solution {public int Fibonacci(int n) {if (n 0){retu…

“行到水窮處,坐看云起時.“

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 自由自在&#xff0c;隨意而行&#xff0c; 只沿著流水向上&#xff0c;不知不覺的就走到了泉眼盡頭&#xff0c; 無路可走的時候 &…

git commit -m和git commit -am

字面解釋的話&#xff0c;git commit -m用于提交暫存區的文件&#xff1b;git commit -am用于提交跟蹤過的文件 要理解它們的區別&#xff0c;首先要明白git的文件狀態變化周期&#xff0c;如下圖所示 工作目錄下面的所有文件都不外乎這兩種狀態&#xff1a;已跟蹤或未跟蹤。已…

磁盤結構簡介

這里講的主要是網上所謂的老式磁盤&#xff0c;它是由一個個盤片組成的&#xff0c;我們先從個盤片結構講起。如圖1所示&#xff0c;圖中的一圈圈灰色同心圓為一條條磁道&#xff0c;從圓心向外畫直線&#xff0c;可以將磁道劃分為若干個弧段&#xff0c;每個磁道上一個弧段被稱…

java中的對象監視器

參考文章&#xff1a;監視器–JAVA同步基本概念 感謝作者分享&#xff01;