學(xué)習(xí)python之路--Day2:工資管理系統(tǒng)

需求

工資管理系統(tǒng)
Alex 100000
Rain 80000
Egon 50000
Yuan 30000
-----以上是info.txt文件-----
實現(xiàn)效果:
從info.txt文件中讀取員工及其工資信息,最后將修改或增加的員工工資信息也寫入原info.txt文件。
效果演示:

  1. 查詢員工工資
  2. 修改員工工資
  3. 增加新員工記錄
  4. 退出
    >>:1
    請輸入要查詢的員工姓名(例如:Alex):Alex
    Alex的工資是:100000。
    \1. 查詢員工工資
    \2. 修改員工工資
    \3. 增加新員工記錄
    \4. 退出

:2
請輸入要修改的員工姓名和工資,用空格分隔(例如:Alex 10):Alex 10
修改成功!

  1. 查詢員工工資
  2. 修改員工工資
  3. 增加新員工記錄
  4. 退出
    >>:3
    請輸入要增加的員工姓名和工資,共空格分割(例如:Eric 100000):Eric 100000
    增加成功!
    \1. 查詢員工工資
    \2. 修改員工工資
    \3. 增加新員工記錄
    \4. 退出
    >>:4
    再見!

這個作業(yè)和上周我們做的購物車商家接口,管理商品列表的模塊十分類似,可以借鑒一下。
流程圖我們可以先畫:

salary_manage

實現(xiàn)

根據(jù)這個操作流程,我們可以先寫出一個demo:

#owner:houyizhong
#version:1.0

staff_dict={}

f=open("info.txt","r")
lines=f.readlines()
f.close()

#read staff
for i in lines:
      raw=i.split(" ")
      name=raw[0]
      salary=raw[1].strip()
      staff_dict[name]=salary

#print staff
f=open("info.txt","r")
for line in f:
      print line,
f.close()

#write file
def write_file():
      f=open("info.txt","w")
      for name in staff_dict:
              f.write("{0} {1}\n".format(name,staff_dict[name]))
      f.close()

def search():
      choice_name=input("請輸入要查詢的員工姓名(例如:Alex):")
      if choice_name in staff_dict:
              salary=staff_dict[choice_name]
              print("{0}的工資是:{1}".format(choice_name,salary))
      else:
              print("Sorry,your enter is not a staff!")

def modify():
      enter=input("請輸入要修改的員工姓名和工資,用空格分隔(例如:Alex 10):")
      list=enter.split(" ")
      name=list[0]
      salary=list[1]
      if name in staff_dict:
              staff_dict[name]=salary
              print("修改成功!")
      else:
              print("Sorry,your enter is not a staff!")

def add():
      enter=input("請輸入要增加的員工姓名和工資,共空格分割(例如:Eric 100000):")
      list=enter.split(" ")
      name=list[0]
      salary=list[1]
      staff_dict[name]=salary
      print("操作成功!")

while True:
      print("1. 查詢員工工資\n2. 修改員工工資\n3. 增加新員工記錄\n4. 退出")
      choice=input(">>")
      if choice == "1":
              search()
      elif choice == "2":
              modify()
      elif choice == "3":
              add()
      elif choice == "4":
              write_file()
              exit("再見!")
      else:
              print("Your enter invalid!Try again.")

這里用字典來盛放員工信息,每次修改只是對字典的修改,只有退出的時候才會將字典寫入文件里,這么做的道理是,我修改員工信息或者新增員工時就不用重復(fù)的打開、寫入文件了,每次運行程序只需一次寫入文件操作,大大降低了文件操作的負(fù)擔(dān),同時避免了修改完文件之后,字典里還是顯示啟動時讀取的內(nèi)容,沒有跟上后續(xù)內(nèi)容的變化,而我們這樣寫就可以實時看到、修改自己剛才增改的內(nèi)容了。

按照這個程序運行結(jié)果來看,確實實現(xiàn)了需求所述的內(nèi)容?,F(xiàn)在我們來對一些細(xì)枝末節(jié)的東西做些優(yōu)化。
我們注意到這個程序還有一個bug,就是修改新增操作的時候如果只寫了員工名,沒有加工資是會有問題的,所以我們也需要對這一部分內(nèi)容做個判斷,優(yōu)化之后的代碼如下:

#-*- coding:utf-8 -*-
#owner:houyizhong
#version:2.0

staff_dict={}

f=open("info.txt","r")
lines=f.readlines()
f.close()

#read staff
for i in lines:
        raw=i.split(" ")
        name=raw[0]
        salary=raw[1].strip()
        staff_dict[name]=salary

#print staff
f=open("info.txt","r")
for line in f:
        print (line,end='')
f.close()

#write file
def write_file():
        f=open("info.txt","w")
        for name in staff_dict:
                f.write("{0} {1}\n".format(name,staff_dict[name]))
        f.close()

def search():
        choice_name=input("請輸入要查詢的員工姓名(例如:Alex):")
        if choice_name in staff_dict:
                salary=staff_dict[choice_name]
                print("{0}的工資是:{1}".format(choice_name,salary))
        else:
                print("Sorry,your enter is not a staff!")

def modify():
        enter=input("請輸入要修改的員工姓名和工資,用空格分隔(例如:Alex 10):")
        list=enter.split(" ")
        if len(list) == 2:
            name=list[0]
            salary=list[1]
            if salary.isdigit():
                if name in staff_dict:
                        staff_dict[name]=salary
                        print("修改成功!")
                else:
                        print("Sorry,your enter is not a staff!")
            else:
                    print("Please enter correct salary!")
        else:
                print("Please enter correct information!")

def add():
        enter=input("請輸入要增加的員工姓名和工資,共空格分割(例如:Eric 100000):")
        list=enter.split(" ")
        if len(list) == 2:
            name=list[0]
            salary=list[1]
            if salary.isdigit():
                staff_dict[name]=salary
                print("操作成功!")
            else:
                print("Please enter correct salary!")
        else:
                print("Please enter correct information!")

while True:
        print("1. 查詢員工工資\n2. 修改員工工資\n3. 增加新員工記錄\n4. 退出")
        choice=input(">>")
        if choice == "1":
                search()
        elif choice == "2":
                modify()
        elif choice == "3":
                add()
        elif choice == "4":
                write_file()
                exit("再見!")
        else:
                print("Your enter invalid!Try again.")

我們在modify(),add()這兩個函數(shù)的主邏輯里,加入了if len(list) == 2: 這句話,這樣就能判斷用戶輸入的信息是否是兩個,是否符合要求,同時也加入了if salary.isdigit():這句,用來判斷輸入的最后一項是不是個數(shù)字。

結(jié)語

我們利用了字典,函數(shù)和讀取寫入文件方面的知識,為了避免操作的復(fù)雜性,和為了代碼的易讀性,我們將所有的修改操作都先寫入字典中,再由字典寫入文件,文件即時修改方面可能不夠快,但是保證了信息的一致性和完整性。這個在以后的程序設(shè)計中,是一個可以借鑒和考慮的地方。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,637評論 18 399
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,603評論 9 468
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評論 19 139
  • 因為熱愛互聯(lián)網(wǎng),所以身邊有很多互聯(lián)網(wǎng)的朋友,很多時候自己想不明白的事情會跟他們交流。但是發(fā)現(xiàn)有時候說了一個事之后對...
    Willsland閱讀 908評論 1 3
  • 很想回到小時候,你還在。 一個人離開,除了回憶, 十七年間 能看到的 能碰到的只有這些了。 我不記得從何時起,我...
    小王叫不才閱讀 773評論 0 0

友情鏈接更多精彩內(nèi)容