2017-10-29 12 views
-1

Hello StackOverflowコミュニティ、 私は、保存用の辞書を実装する従業員データベースプログラムの作成を終えています。私が実行している問題は、メニュープロンプトの前に格納されている最初のEmployeeオブジェクトを見つけることができないということです。それらはデータベースに存在しますが、自分のコードでそれらを操作することはできません。後でメニュー機能を使用して追加したものは、参照または削除することができます。私は本当に問題が何であるかは分かりません。辞書を無駄にすることを試みました。私が使っている記述はほとんど同じです。辞書検索で初期入力が認識されない

class Employee: 
    def __init__(self, name, idNo, department, title): 
     self.name = name 
     self.idNo = idNo 
     self.department = department 
     self.title = title 

    def setName(newName): 
     self.name = newName 

    def setIDNo(newID): 
     self.idNo = newID 

    def setDepartment(newDept): 
     self.department = newDept 

    def setTitle(newTitle): 
     self.title = newTitle 

    def getName(): 
     return self.name 

    def getIDNo(): 
     return self.idNo 

    def getDepartment(): 
     return self.department 

    def getTitle(): 
     return self.title 

    def __str__(self): 
     return "Name: {0} \nID number: {1} \nDepartment: {2} \nTitle: {3}\n".format(self.name, self.idNo, self.department, self.title) 

def main(): 
    empDatabase = {} 
    entry = input("Do You Want to Enter New Employee Information(Y/N): ") 
    entry = entry.upper() 
    if entry == 'Y': 
     gate = True 
     newName = input("Enter Employee Name: ") 
     newID = input("Enter Employee ID Number: ") 
     newDept = input("Enter Employee Department Name: ") 
     newTitle = input("Enter Employee Job Title: ") 
     empDatabase[newID] = Employee(newName, newID, newDept, newTitle)  
     another = input("Do You Want to Enter Another Employee Information(Y/N): ") 
     another = another.upper() 
     if another != 'Y': 
      gate = False 
     while gate == True: 
      newName2 = input("Enter Employee Name: ") 
      newID2 = input("Enter Employee ID Number: ") 
      newDept2 = input("Enter Employee Department Name: ") 
      newTitle2 = input("Enter Employee Job Title: ") 
      empDatabase[newID2] = Employee(newName2, newID2, newDept2, newTitle2) 
      another2 = input("Do You Want to Enter Another Employee Information(Y/N): ") 
      another2 = another2.upper() 
      if another2 != 'Y': 
       gate = False 
    boolGate = True 
    while boolGate == True: 
     print("\nPlease Select from the Following Menu: ") 
     print("1. Look up an Employee in the Dictionary") 
     print("2. Add a New Employee to the Dictionary") 
     print("3. Delete an Employee from the Dictionary") 
     print("4. Quit the Program") 
     print() 
     choice = eval(input("Please Enter a Number from the Menu: ")) 
     if choice == 1: 
      idNo = eval(input("Please Enter the Employee ID You are Looking for: ")) 
      dic_lookup(idNo, empDatabase) 
     elif choice == 2: 
      empDatabase = dic_add(empDatabase) 
     elif choice == 3: 
      idNo = eval(input("Please Enter the Employee ID to Delete the Employee: ")) 
      dic_delete(idNo, empDatabase) 
     else: 
      boolGate = False 
def dic_lookup(idNo, database): 
    if idNo in database: 
     print() 
     print(database.get(idNo)) 
    else: 
     print() 
     print("This Employee ID is not Available in our Database") 
def dic_add(database): 
    print() 
    addName = input("Enter New Employee Name: ") 
    addID = eval(input("Enter New Employee ID Number: ")) 
    addDept = input("Enter New Employee Department Name: ") 
    addTitle = input("Enter New Employee Job Title: ") 
    database[addID] = Employee(addName, addID, addDept, addTitle) 
    return database 

def dic_delete(idNo, database): 
    if idNo in database.keys(): 
     database.pop(idNo) 
    else: 
     print() 
     print("Employee does not exist in database") 
    return database 

main() 
+0

既存の従業員はどこにロードしますか? – Vinny

+0

インデントを修正してください。どの機能が 'Employee'クラスに属しているか不明です –

+1

@Vinny従業員が辞書に保存されています – notbob1

答えて

0

コードに沿って2つのprint文を追加しました。 最初の2つの要素が最初に追加され、3番目の要素がメニューを使用して追加されました。 、0x037FFDB0で< .Employeeオブジェクト> '2':

{ '1': これはプリントから出力さ0x037FFE30で< .Employeeオブジェクト>、3:< メイン .Employeeオブジェクトは0x037FFA30>}

最初の2つのキーは文字列、3番目は整数です。

あなたが辞書に整数キーを追加するためにあなたのコード(行45および55)を変更する場合:

empDatabase[int(newID)] = Employee(newName, newID, newDept, newTitle) 
empDatabase[int(newID2)] = Employee(newName2, newID2, newDept2, newTitle2) 

正常に動作するようです。

+0

IDを要求するステートメントの2つにevalを追加したところ、完全に機能します。 2つの欠けている機能が世界の違いをもたらすと考えたのは誰ですか? – notbob1

+0

ええ、申し訳ありません私は自分の答えを投稿した後、あなたのコメントに気づいただけです。それはとにかく助けてくれることを願っていますが、デバッグの練習として私にとっては良いことでした! – AlePorro

+1

文字列を整数に変換する正しい方法は、 'eval()'ではなく 'int()'を使うことです。 'eval()'は実行可能なコードを受け付けますが、 'int()'は入力が有効な整数でないときにエラーを投げます。 –

関連する問題