2017-10-16 8 views
-1

ここは私のルビーコードです。あなたがそれを実行し、1を押すと、あなたは日付と名前の誕生日を尋ねます。私は名前と生年月日を入力し終えた後、ユーザーに個人番号を与えたい。さらに、私はユーザー番号を検索してファイル内で見つけることができれば嬉しいです。誰かが助けることを願っています!ユーザー作成後に個人番号を与えるコードを作成しようとしています

私は#HELPを書いたが、私は助けが必要だった。私はあなたが数字が生成されたいかわからないが、このような何かが、仕事ができるコードが正常に動作しますが、私は私の問題をコーディングする方法を知らない...

file = File.new("Capgemini.txt", "a") #load information on startup, and create the file 

     class Customer # Making a class for the whole code to call it up later in the code 

      def new_custom 

    er # The costumer method 


       prompt = "> " #creating a class for prompt here, since I use it multiple times 
       puts"Full name of the person?" 
       print prompt 
       @name = gets.chomp.upcase #A global variabel which i can use outside the class 

       if File.read("Capgemini.txt").include?(@name) #so you don't register the same name, twice 
        puts"This name is already stored. Returning you to the main menu." 
        puts "_____________________________________________" 
        else 
       #puts"What is your employee number?" 
       #print prompt 
       #@number = gets.chomp #Global 
       puts"Date of birth? (DD/MM/YYYY)" 
       print prompt 
       @birth = gets.chomp #Global 

       puts"Thanks for the input." 
       puts "_____________________________________________" 

       puts"Is this information correct? " #Giving the user all the information back to check for mistakes, etc. 

       puts ("Name: #{@name} Number: #{@number} Date of birth: #{@birth}") 
       puts "_____________________________________________" 

       puts "Yes or No?" 
       print prompt 

       while user_input = gets.chomp.upcase #loop while getting user input 
        case user_input 
        when "YES" 
        file = File.new("Capgemini.txt", "a") 
        file.puts("#{@name}, Number: #{@number}, Date of birth: #{@birth}") #puts the information into the textfile, separeted by commas 
        file.close 

        #NEED HELP HERE 

        number = File.readlines('Capgemini.txt') 


        puts "_____________________________________________" 
        puts 
        puts "Your employee number: " 
        puts "_____________________________________________" 


        #NEED HELP OVER HERE^ 





        puts 
        puts "The information has now been stored in the Capgemini.txt file." 
        puts "_____________________________________________" 
        break # make sure to break so you don't ask again 
        when "NO" 
        puts "The information has not been stored. Returning you to the main menu." 
        puts "_____________________________________________" 
        break # and again 
        else 
        puts "Please either write 'Yes' or 'No'" 
        print prompt # print the prompt, so the user knows to re-enter input 
        end 
        end 
       end 
     end 

     def search_customer(search) 

       keyword = File.readlines('Capgemini.txt') #converting all the lines into indexes in an Array 



       matches = keyword.select { |name| name[/#{search}/] } # 



       if File.read("Capgemini.txt").include?(search) #An if statement that will print the results if the textfile matches the keyword 
        puts "_____________________________________________"    
        puts ("Search results including the word/number/birth " + search + ":") 
        puts "_____________________________________________" 

        puts matches 
        puts "_____________________________________________" 
        else #If not it will give the user feedback that its not there 
        puts "_____________________________________________" 
        puts ("Sorry, we couldnt find #{search} in the textfile.") 
        puts "_____________________________________________" 
       end 
     end 

     def all_customers 

      f = File.new("Capgemini.txt","r") 
      while !(f.eof?) 
       line = f.gets() 
       puts line 
    end 

     end 

     def delete_customer 

       puts("What customer do you want to delete?") 
       print("> ") 
       keyword = gets.chomp.upcase 



       txt_file = File.readlines('Capgemini.txt') 
       matches = txt_file.select { |name| name[/#{keyword}/] } 
       search_results = matches.length 




       if search_results > 1 
        puts "_____________________________________________"  
        puts "The name you entered gave these outputs:" 
        puts "" 
        puts matches 
        puts "" 
        puts "Please specify the name better, as we only allow one person to be deleted at the time. \nReturning you to the main menu." 
        puts "_____________________________________________"  

        else 

       if File.read("Capgemini.txt").include?(keyword) #An if statement that will print the results if the textfile matches the person 
        puts "_____________________________________________"    
        puts ("Is this the person you want to delete?") 
        puts matches 

        puts "_____________________________________________" 

        puts "Yes or No?" 
       print "> " 

       while user_input = gets.chomp.upcase # loop while getting user input 
        case user_input 
        when "YES" 

        no_matches = txt_file.reject { |name| name[/#{keyword}/] } 

        File.open('Capgemini.txt','w+'){|out| out.puts no_matches} 
        puts"User has been deleted. Returning you to the main menu." 


        puts "_____________________________________________" 
        break # make sure to break so you don't ask again 
        when "NO" 
        puts "User will not be deleted. Returning you to the main menu." 
        puts "_____________________________________________" 
        break # and again 
        else 
        puts "Please either write 'Yes' or 'No'" 
        print "> " # print the prompt, so the user knows to re-enter input 
        end 
        end 


        puts "_____________________________________________" 
        else #If not it will give the user feedback that its not there 
        puts "_____________________________________________" 
        puts ("Sorry, we couldnt find #{keyword} in the textfile.") 
        puts "_____________________________________________" 
       end 
       end 

      end 

    end 

    customer = Customer.new 
    require 'io/console' 
    select = 0 
    prompt = "> " 
    puts 
    puts 
    puts "Welcome to Capgemini Sogeti Denmark" 
    puts "_____________________________________________" 

    loop do (select != 7) 
     puts 
     puts("Press 1 to register a new user.\nPress 2 to search for a employee or keyword within the textfile.\nPress 3 to show all customers.\nPress 4 to delete a customer.\nPress 5 to exit.") 
     puts "_____________________________________________" 
     select = STDIN.getch.to_i 

     if(select == 1) 
      customer.new_customer 

     elsif(select == 2) 
     puts("What customer/keyword do you want to search for?") #You can search for a keyword, like forexample 'Manzur' which will prompt you back with every user names Manzur 
     print prompt 
     customer.search_customer(gets.chomp.upcase) 


     elsif(select == 3) 

     customer.all_customers 
     puts "_____________________________________________" 




     elsif(select == 4) 

     customer.delete_customer 


     elsif(select == 5) 
     puts 
     puts "The application will now exit." 
     puts "_____________________________________________" 

     break 

     else 
     puts"Invalid input. Please try again." 
     puts "_____________________________________________" 

     end 

    end 
+0

小メモ:タグは言語を伝達します。それをタイトルで繰り返す必要はありません。 – tadman

+0

これは、どのような形や形のRailsにも見えません。これは通常のRubyコードのヒープです。 – tadman

答えて

0

これは、常にあなたのテキストファイルから最大の番号を与え、1を追加します。

この方法は、かなり大量の従業員では遅くなることに注意してください。

if File.exist?('Capgemini.txt') 
    number = File.readlines('Capgemini.txt') 
    @number = 1 
    number.each do |x| 
     customer = x.split(',') 
     customer_number = customer[1].gsub('Number: ', '').to_i 
     if customer_number >= @number 
     @number = customer_number + 1 
     end 
    end 
else 
    @number = 1 
end 

出力:

BOB ROSS, Number: 1, Date of birth: 07/07/2007 
WILL SMITH, Number: 2, Date of birth: 08/08/2008 
JIM BOB, Number: 3, Date of birth: 09/09/2009 

あなたはまた、配列を検索するための同様の方法を使用することができます。このコードについて言いたいことがたくさんあります

number = File.readlines('Capgemini.txt') 
number.each do |x| 
    customer = x.split(',') 
    customer_name = customer[0] 
    customer_number = customer[1].gsub('Number: ', '').to_i 
    customer_bday = customer[2].gsub('Date of birth: ', '') 

    if customer_name == some_variable 
    puts x 
    end 
end 
0

(あなたと私) 。未使用の変数を表示するには-wオプションで実行Rubyは、それは同様に可能過ちを指す:File.readがたくさんあります

$ ruby -w t_op.rb 
t_op.rb:180: warning: mismatched indentations at 'end' with 'class' at 3 
t_op.rb:191: warning: possibly useless use of != in void context 
t_op.rb:1: warning: assigned but unused variable - file 

、私はOKファイルに対してどの(行の配列を作成するIO.readlinesすることによって、それらを交換しました大きなギガバイトではありません)。また、ユーザー番号を格納することもできます。

いつものようにRubyでは、同じことをする方法はたくさんあります。

require 'io/console' 

class Customer 
    attr_reader :file 

    def initialize(p_file_name) 
     @file_name = p_file_name 
     refresh 
     @next_number = @numbers.max + 1 
    end 

    def refresh 
     @lines = IO.readlines(@file_name) # load information on startup 
     @numbers = [] 
     @names = @lines.collect do | line | 
      # the line has the format : <name>, Number: <number>, Date of birth: <birth> 
      idxn = line.index(', Number') 
      idxd = line.index(', Date') 
      @numbers << line[idxn + 10...idxd].to_i 
      line[0...idxn] 
     end 
    end 

    def new_customer 
     prompt = "> " # creating a local variable for prompt, since I use it multiple times 
     puts 'Full name of the person ?' 
     print prompt 
     name = gets.chomp.upcase 

     if @names.include?(name) #so you don't register the same name, twice 
     then 
      puts_underlined 'This name is already stored. Returning you to the main menu.' 
     else 
      puts 'Date of birth? (DD/MM/YYYY)' 
      print prompt 
      birth = gets.chomp # TODO check validity 
      puts_underlined 'Thanks for the input.' 

      puts 'Is this information correct ?' # Giving the user all the information back to check for mistakes, etc. 
      puts_underlined "Name: #{name} Number: #{@next_number} Date of birth: #{birth}" 
      puts 'Y(es) or N(o)' 
      print prompt 

      while user_input = gets.chomp.upcase #loop while getting user input 
       case user_input[0] 
       when 'Y' 
        line = "#{name}, Number: #{@next_number}, Date of birth: #{birth}" 
        @next_number +=1 
        @lines << line 
        File.open(@file_name, 'a') do | file | # open the file for append, ensure it will be closed by the end of the block 
         file.puts line # puts the information into the textfile, separeted by commas 
        end 
        puts 
        puts_underlined "The information has now been stored in the #{@file_name} file." 
        break # make sure to break so you don't ask again 
       when 'N' 
        puts_underlined 'The information has not been stored. Returning you to the main menu.' 
        break # and again 
       else 
        puts 'Please either write Y(es) or N(o)' 
        print prompt # print the prompt, so the user knows to re-enter input 
       end 
      end 
     end 
    end # new_customer 

    def search_customer(search) 
     matches = @lines.grep(/#{search}/) 

     unless matches.empty? # An if statement that will print the results if the textfile matches the keyword 
      puts_underlined() 
      puts_underlined "Search results including the word/number/birth #{search} :" 
      puts matches 
      puts_underlined() 
     else # If not it will give the user feedback that it's not there 
      puts_underlined() 
      puts_underlined "Sorry, we couldnt find #{search} in the text file." 
     end 
    end 

    def search_customer_number(search) 
     index = @numbers.index(search.to_i) 

     if index 
     then # found, print the user 
      puts_underlined() 
      puts_underlined "This is the user number #{search} :" 
      puts @lines[index] 
      puts_underlined() 
     else # not found, it will give the user feedback that it's not there 
      puts_underlined() 
      puts_underlined "Sorry, we couldnt find the user #{search}." 
     end 
    end 

    def all_customers 
     puts @lines 
    end 

    def delete_customer 
     puts 'Which customer do you want to delete ?' 
     print '> ' 
     keyword = gets.chomp.upcase 
     matches = @lines.grep(/#{keyword}/) 

     case matches.size 
     when 0 # not found, give the user feedback that it's not there 
      puts_underlined() 
      puts_underlined "Sorry, we couldnt find #{keyword} in the textfile." 
     when 1 # print the results if the textfile matches the person 
      puts_underlined() 
      puts 'Is this the person you want to delete ?' 
      puts_underlined matches 
      puts 'Yes or No?' 
      print '> ' 

      while user_input = gets.chomp.upcase # loop while getting user input 
       case user_input 
       when 'YES' 
        no_matches = @lines.reject { | line | line[/#{keyword}/] } 
        File.open(@file_name, 'w+') { | out | out.puts no_matches } 
        refresh 
        puts_underlined 'User has been deleted. Returning you to the main menu.' 
        break # make sure to break so you don't ask again 
       when 'NO' 
        puts_underlined 'User will not be deleted. Returning you to the main menu.' 
        break # and again 
       else 
        puts "Please either write 'Yes' or 'No'" 
        print '> ' # print the prompt, so the user knows to re-enter input 
       end 
      end 
     else 
      puts_underlined() 
      puts 'The name you entered gave these outputs:' 
      puts 
      puts matches 
      puts 
      puts_underlined "Please specify the name better, as we only allow one person to be deleted at the time. \nReturning you to the main menu." 
     end 
    end # delete_customer 
end # class Customer 

def puts_underlined(p_text = nil) 
    puts p_text if p_text 
    puts '_____________________________________________' 
end 

file_name = 'Capgemini.txt' 
customer = Customer.new(file_name) 
prompt = "> " 
puts 
puts_underlined 'Welcome to Capgemini Sogeti Denmark' 

loop do 
    puts 
    puts_underlined "Press 1 to register a new user.\nPress 2 to search for a employee.\nPress 3 to search for a keyword within the textfile.\nPress 4 to show all customers.\nPress 5 to delete a customer.\nPress 6 to exit." 
    select = STDIN.getch.to_i 

    case select 
    when 1 
     customer.new_customer 
    when 2 
     puts 'Which customer number do you want to search for ?' 
     print prompt 
     customer.search_customer_number(gets.chomp.upcase) 
    when 3 
     puts 'What keyword do you want to search for ?' # You can search for a keyword, like for example 'Manzur' which will prompt you back with every user names Manzur 
     print prompt 
     customer.search_customer(gets.chomp.upcase) 
    when 4 
     customer.all_customers 
     puts_underlined() 
    when 5 
     customer.delete_customer 
    when 6 
     puts 
     puts_underlined 'The application will now exit.' 
     break 
    else 
     puts_underlined 'Invalid input. Please try again.' 
    end 
end 
関連する問題