2017-08-02 4 views
-1

最初の従業員を格納しますが、別の従業員を追加しようとすると、追加の従業員を表示できません。以下は従業員の記録を表示する方法です。助けてくれてありがとう!ルビクラスメソッドは、追加のユーザ入力を配列にプッシュすることができません

Employeeクラス

class Employee 
    attr_accessor :employee, :role, :location 

    def initialize(employee, role, location) 
    @employee = employee 
    @role = role 
    @location = location 
    end 

    def employee_change(new_emp) 
    @employee = new_emp 
    end 

    def role_change(new_role) 
    @role = new_role 
    end. 


    def location_change(new_loc) 
    @location = new_loc 
    end 
end 

メインメニュー

def main_menu 
    puts "Welcome to the Employee Portal" 
    puts "Please select an option below: " 
    puts "---------------------" 
    puts "1. Create New Employee Record." 
    puts "2. View an existing record." 
    puts "3. Modify an existing record." 
    puts "4. Exit Portal" 

    option = gets.chomp.to_i 

    if option == 1 
    create_record 
    main_menu 

    elsif option == 2 
    view_record 

    elsif option == 3 
    modify 

    elsif option == 4 
    puts "Thank you for using the Employee Portal" 
    exit 
    else 
    puts "Not a valid option. Please try again." 
    main_menu 
    system("clear") 

    end 
end 

新入社員(メインメニューからオプション1)を作成します

def create_record 
    puts "Create New Employee Record, click 'Enter' to begin" 
    puts "Enter Employee Information: " 
    employee = gets.chomp.capitalize 

    puts "Enter Employee's Role: " 
    role = gets.chomp.capitalize 

    puts "Enter Employee's Current Work Location: " 
    location = gets.chomp.capitalize 

    puts "\n" 

    new_record = Employee.new(employee, role, location) 
    @record.push(new_record) 

    puts "New Employee Record has been created." 
    puts "Name: #{employee}" 
    puts "Role: #{role}" 
    puts "Location: #{location}" 

    system("clear") 

    main_menu 
end 

ビュー従業員(メインメニューからオプション2)

def view_record 
    puts "Enter Employee Name to view record: " 
    name = gets.chomp.capitalize 
    system("clear") 

    @record.each do |a| 
    if a.employee == name 

     puts "\n" 
     puts "Employee Information " 
     puts "--------------------" 
     puts " Name : #{a.employee}" 
     puts " Role(s) : #{a.role}" 
     puts " Location(s) : #{a.location}" 
     puts " Type 'Exit' to return to the Main Menu " 

    else 
     puts "That is not a valid entry, please try again." 
     view_record 
     main_menu 
    end 
    end 
end 

変更従業員(メインメニューからオプション3)

def modify 
    system("clear") 
    puts "Enter employee name to modify existing record: " 
    name = gets.chomp.capitalize 

    @record.each do |r| 
    if r.employee == name 
     puts "Employee found." 
     puts "Select an option to modify." 
     puts "-----------------------------------" 
     puts "1.) Modify employee's name." 
     puts "2.) Modify employee's role." 
     puts "3.) Modify employee's location." 
     puts "4.) Return to Main Menu" 
     puts "\n" 

     option = gets.chomp.to_i 

     if option == 1 
     change_employee 

     elsif option == 2 
     change_role 

     elsif option == 3 
     change_location 

     elsif option == 4 
     main_menu 
     else 
     puts "Invalid selection. Please try again." 
     modify 
     end 
    end 
    end 
end 

変更従業員(修正からオプション1)

def change_employee 
    puts "Enter new employee name: " 
    new_emp = gets.chomp.capitalize 
    @record.each do |r| 
    if r.employee == employee 
     r.employee_change(new_emp) 
     puts "#{r.employee} has been updated to #{r.employee}" 
    end 
    end 
end 

Cハンゲの従業員の役割(修正からオプション2)

def change_role 
    puts "What is #{r.employee}\'s new role?: " 
    new_role = gets.chomp.capitalize 
    @record.each do |r| 
    if r.employee == employee 
     r.role_change(new_role) 
     puts "#{r.employee}\'s new role is #{r.role}" 
    end 
    end 
end 

変更従業員の場所(修正からオプション3)

def change_location 
    puts "What is #{r.employee}\'s new location?: " 
    new_loc = gets.chomp.capitalize 
    @record.each do |r| 
    if r.employee == employee 
     r.location_change(new_loc) 
     puts "#{r.employee} has been transfer to new location, #{r.location}." 
    end 
    end 
end 

プログラムの実行

@record = [] 
system("clear") 
main_menu 
+1

これは答えではなく、提案です。通常、ルビスタイルでは、より明確であるという理由だけで、 '@ record'ではなく' @ records'を配列/リストに指定します。ほとんどの開発者は@recordを見て、「単一のデータベースレコード」と考えます。 – whodini9

+6

実際にはどうなりますか?それがうまくいかないことをどのように知っていますか?配列に、あなたが思うものが含まれていることを確認しましたか? –

+3

何が起こっているのかを「できない」と言わなければならない場合は、おそらく問題を十分にはっきりさせていないでしょう。コードが物理的にあなたが何かをやることを妨げていましたか?特定のアクションを実行しようとすると、マウスがあなたを噛んでいますか?アプリケーションがクラッシュしますか? ;) – coreyward

答えて

0

問題がありますview_recordメソッドを使用してください。

def view_record 
    puts "Enter Employee Name to view record: " 
    name = gets.chomp.capitalize 
    system("clear") 

    if a = @record.detect { |rec| rec.employee == name } 
    puts "\n" 
    puts "Employee Information " 
    puts "--------------------" 
    puts " Name : #{a.employee}" 
    puts " Role(s) : #{a.role}" 
    puts " Location(s) : #{a.location}" 
    puts " Type 'Exit' to return to the Main Menu " 
    else 
    puts "That is not a valid entry, please try again." 
    view_record 
    end 
end 

このように変更すると、正常に動作します。

@recordのすべてのレコードでif...elseステートメントを呼び出していたという問題がありました。したがって、2 Employeeを作成すると、最初の名前は「John」、2番目の名前は「Jane」となります。 「Jane」を表示すると、「John」の部分がelseになります。最初のレコードであるため、elseを終了すると、「Jane」の部分はifとなります。しかし、同じ問題でview_recordコールの[おそらく長い]スタックを最後に完了した後は、決して返さないmain_menuに戻ります(その方法の最後のelse条件のために)、 "John"のelseは返されませんそれはmain_menuを再呼び出しします)

希望と意味があることを望みます。

注:

  1. modifyは同じ問題を持っているようだとchange_x方法がループを通って、if声明に対する各従業員をチェックしますが、以来、無else問題ありません(私はまだ個人的にそれらを変更したいです、これらにもdetectを使用する)。彼らは実行しますように1人の以上の従業員が同じ名前を持つことができる場合は、代わりにdetectselectを使用し、empty?かを確認することができ
  2. employeeがそれらに定義されていないため
  3. change_x方法は、見ていませんselectによって返されたものだけを繰り返し、その上にif部分だけを呼び出します。
関連する問題