mutasadiq iqbal Ответов: 4

Функция поиска в C#


Я хочу сделать функцию поиска, но она не работает должным образом.

Что я уже пробовал:

namespace Banking_system
{
    class Program
    {
        static string[] customer_name;
        static int b;
         static string[] notes = new string[] { "10", "20", "50", "100", "500", "1000", "5000" };
        //static int[] notes = new int[] { 10, 20, 50, 100, 500, 1000, 5000 };
        static int[] freq_counter = new int[] {0};
        static int[] bank_balance;

        static void Main(string[] args)
        {
            int[] deposit;
            int[] retrieve;
            int choice;
            char check;  
            int a;
            Console.WriteLine("Welcome the MIB Bank");
            Console.WriteLine("First Muslim International Bank");

            Console.WriteLine("Enter the value for no of Customer in our bank");
            a = Convert.ToInt32(Console.ReadLine());
            b=a;
            customer_name = new string[a];
            deposit = new int[a];
            retrieve = new int[a];
          
            bank_balance = new int[a];
            for(int i=0;i< a; i++)
            {
                Console.WriteLine("Enter the name of the Customer");
                customer_name[i] = Console.ReadLine();

                Console.WriteLine(customer_name[i]+" Enter the current balance of");
                bank_balance[i] = Convert.ToInt32(Console.ReadLine());
            }
            while (true)
            {
                Console.WriteLine("Welcome you are the vaulable customer in MIB Bank");
                Console.WriteLine("1- Deposit Amount\n 2- Retrieve Amount\n 3- Check Balance Amount");
                choice = Convert.ToInt32(Console.ReadLine());

                if (choice == 1)
                {
                    Program p = new Program();
                    p.deposit_amount(deposit);
                }
                else if (choice == 2)
                {
                    Program p = new Program();
                    p.retrieve_amount(retrieve);
                }
                else if(choice == 3)
                {
                    Program p = new Program();
                    p.total_bank_balance();
                }
                while (true)
                {
                    Console.WriteLine("Do you want to go to the menu again\n 1- Press y or Y for Yes\n 2- Press n or N for No");
                    check = Convert.ToChar(Console.ReadLine());
                    if(check=='y' || check == 'Y')
                    {
                        break;
                    }
                    else if(check=='n' || check == 'N')
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Please Enter the Vaild Key");
                    }
                }
                if(check=='n' || check == 'N')
                {
                    break;
                }
            }
            Console.ReadLine();
        }//End of main funcion
        
        int []deposit_amount(int []deposit)
        {
            deposit = new int[b];

            for (int k = 0; k < b; k++)
            {                
                string name;

                Console.WriteLine(customer_name[k] + " Please Enter your new Deposit Amount");
                deposit[k] = Convert.ToInt32(Console.ReadLine());
                bank_balance[k] = bank_balance[k] + deposit[k];

                Console.WriteLine(customer_name[k] + "Your New Deposit amount is " + bank_balance[k]);
            }
            return deposit;
        }

        
        int[] retrieve_amount(int[]retrieve)
        {
            retrieve = new int[b];
            
            for (int k = 0; k < b; k++)
            {
                Console.WriteLine(customer_name[k] + " Please Enter your new Retrieve Amount");
                retrieve[k] = Convert.ToInt32(Console.ReadLine());
                bank_balance[k] = bank_balance[k] - retrieve[k];
                Console.WriteLine(customer_name[k] + "Your New Amount is " + bank_balance[k]);
            }
            return retrieve;
        }

        void total_bank_balance()
        {
            string name;
            int balance;
          
            Console.WriteLine("Please Enter the name for check the total balance");
            name = Console.ReadLine();
            search(name);
            for (int k = 0; k < b; k++)
            {
                Console.WriteLine(name + " Your total bank balance is " + bank_balance[k]);
            }

        }// End of Total Balance
        string search(string name)
        {   
            for (int k = 0; k < b; k++)
            {               
                if (customer_name[k] == name)
                {                    
                    return name;                    
                }
                else
                {
                    Console.WriteLine("Client name is not in our database");                    
                }
               
            }
            return "null";
        }

    }// End of Class Program
}// End of namespace Banking System

F-ES Sitecore

"Не работает" не дает никому достаточно информации, чтобы помочь вам. Вы бы не позвонили механику и не сказали: "моя машина не работает, как мне ее починить?" Используйте отладчик для пошагового просмотра кода и выяснения того, что он делает, чего вы не хотите, или не делает того, что вы хотите. Когда вы это выясните, попробуйте подумать о том, как изменить код, чтобы сделать то, что вы хотите. Если вы выполняете некоторую отладку и находите причину, то не стесняйтесь задавать конкретный вопрос о вашем коде, но мы здесь не для того, чтобы вы сбрасывали 100 строк кода и просили нас исправить его, когда мы понятия не имеем, что он должен делать.

Patrice T

Мы понятия не имеем, чего вы ожидаете или что вы получаете неправильно.

4 Ответов

Рейтинг:
2

Richard MacCutchan

Функция поиска должна возвращать либо boolean стоимость true или false или , еще лучше, индекс массива имени, которое вы ищете. В своем коде вы вызываете функцию поиска, но игнорируете ее возвращаемое значение. Затем вы показываете общий банковский баланс для каждого клиента.


Рейтинг:
1

KarstenK

В вашей функции поиска-статический б. То есть считается, что север недостаток
или ошибка
. Поскольку вам нужен размер массива, добавьте это значение в качестве параметра в вашу функцию поиска, а также измените возвращаемое значение, например:

string searchName(string name, int count)
        {   
            for (int k = 0; k < count; k++)
            {               
                if (customer_name[k] == name)
                {                    
                    return name;                    
                }
                else
                {
                    Console.WriteLine("Client name is not in our database");                    
                }               
            }
            return "";
        }

   // usage
   string foundName = searchName(name, countToSearch/*your job*/);
   if( !foundName.isEmpty ) {
     // found => do stuff!!!
   } else {
     // no match => handle error
   }


Рейтинг:
0

CPallini

Я даю вам отправную точку:

using System;

namespace Banking_system
{

    class Customer
    {
        string name;
        int balance;

        public Customer(string name, int balance)
        {
            this.name = name;
            this.balance = balance;
        }
        public string Name { get => name; }
        public int Balance { get => balance; }

        public int retrieve_amount(int amount)
        {
            balance -= amount;
            return balance;
        }
        public int deposit_amount(int amount)
        {
            balance += amount;
            return balance;
        }
    }

    class Bank
    {
        string name;
        Customer[] customer;
        public Bank(string name) { this.name = name; }
        public string Name { get => name; }

        public Customer search_customer(string name)
        {
            foreach (Customer c in customer)
            {
                if (c.Name == name) return c;
            }
            // not found
            return null;
        }
        public static void Main(string[] args)
        {
            Bank bank = new Bank("MIB");

            Console.WriteLine("Welcome the {0} Bank", bank.Name);
            Console.WriteLine("First Muslim International Bank");
            Console.WriteLine("Enter the value for no of Customers in our bank");

            int customers = Convert.ToInt32(Console.ReadLine());
            bank.customer = new Customer[customers];
            for (int n = 0; n < customers; ++n)
            {
                Console.WriteLine("Customer {0}/{1}", (n + 1), customers);
                Console.WriteLine("Please enter the  customer name");
                string name = Console.ReadLine();

                Console.WriteLine("Please enter the customer initial balance of {0}", name);
                int balance = Convert.ToInt32(Console.ReadLine());
                bank.customer[n] = new Customer(name, balance);
            }

            string answer = "";
            do
            {
                Console.WriteLine("Please enter your name");
                string name = Console.ReadLine();
                Customer current_customer = bank.search_customer(name);
                if (current_customer == null)
                {
                    Console.WriteLine("Sorry we cannot find {0} in our customer list", name);
                    continue;
                }
                Console.WriteLine("Welcome in MIB bank, Valuable customer. Please choose the operation");
                Console.WriteLine("1- Deposit Amount\n2- Retrieve Amount\n3- Check Balance Amount");
                int choice = Convert.ToInt32(Console.ReadLine());
                switch (choice)
                {
                    case 1:
                        Console.WriteLine("Please enter the amount to deposit");
                        current_customer.deposit_amount(Convert.ToInt32(Console.ReadLine()));
                        break;
                    case 2:
                        Console.WriteLine("Please enter the amount to retrieve");
                        current_customer.retrieve_amount(Convert.ToInt32(Console.ReadLine()));
                        break;
                    case 3:
                        break; // nothing to do
                    default:
                        Console.WriteLine("{0} is an invalid choice", choice);
                        break;
                }
                Console.WriteLine("Your updated balance is {0}", current_customer.Balance);
                Console.WriteLine("Enter Q or q to quit, any other key to continue");
                answer = Console.ReadLine().ToUpper();
            } while (answer != "Q");
        }
    }
}// End of namespace Banking System


Рейтинг:
0

Aarti Meswania

Привет мутасадик Икбал

Ваш вопрос, вероятно, не тот, который может быть решен, поскольку это длинный код, и мы не знаем, какие точные данные содержат все задействованные переменные.

Но позвольте мне дать вам руководство,

1. please debug your code carefully
2. check value of "b" variable, it might be not allowing to pass your criteria in for loop where you check "k<b" inside search method
3. check all values held in array "customer_name", it is possible that it is not properly derived and does not hold target value you want to compare with the "name"variable
4. check value held in variable "name" itself, it is possible that it is not containing expected value to compare


Короче говоря, ваше лучшее решение-тщательно отлаживать код и не терять мужества, пока вы его не исправите!

Счастливого Кодирования! :)