我试图制作一个代码,在用户创建用户后为用户提供个人号码 [英] I trying to make a code that gives the user a personal number after they have made an user

查看:39
本文介绍了我试图制作一个代码,在用户创建用户后为用户提供个人号码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的 ruby​​ 代码.当您运行它并按 1 时,它会询问您的姓名和出生日期.我想在用户输入姓名和出生日期后给他一个个人号码.此外,我会很高兴搜索用户编号以在文件中找到它们.希望有人能帮忙!

Here is my ruby code. When you run it and you press 1 it will ask you for name and birth of date. I want to give the user a personal number after he is finished typing name and birth date. Futhermore I would be great to search for the users number to find them in the file. Hope someone can help!

如果我需要帮助,我在此处写了#HELP.代码工作正常,但我不知道如何编码我的问题...

I have written #HELP HERE were i need help. The code works fine, but I dont know how to code my problem...

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

推荐答案

关于这段代码(你的和我的)有很多话要说.使用 -w 选项运行 Ruby 以显示未使用的变量,它指出可能的错误,例如:

There is a lot to say about this code (yours and mine). Run Ruby with the -w option to display unused variables, it points to possible mistakes like :

$ 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

有很多 File.read,我已经用 IO.readlines 替换了它们,它创建了一个行数组(对于不是千兆字节的文件也可以).它还允许存储用户号码.

There are a lot of File.read, I have replaced them by an IO.readlines which creates an array of lines (OK for files which are not Gigabytes big). It also allows to store user numbers.

和 Ruby 一样,有很多方法可以做同样的事情.

As always in Ruby, there are many ways to do the same thing.

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

这篇关于我试图制作一个代码,在用户创建用户后为用户提供个人号码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆