C # двумерный массив для проверки записи в форме - PullRequest
0 голосов
/ 10 сентября 2018

Существует форма, которую должен заполнить каждый пользователь, она имеет 4 поля: дата, код счета, сумма и валюта. Код счета имеет раскрывающееся меню с большим количеством опций из 4, которые являются действительными (Здоровье, Путешествия, Питание, Отель). Поле кода счета нельзя оставлять пустым, и оно должно принимать только один из этих 4 вариантов. Пользователь делает 4 записи с каждым из 4 кодов счета. Если пользователь вводит только Health and Travel, должно появиться сообщение об ошибке, что необходимо добавить записи Meal и Hotel. Вот что я получил до сих пор:

public bool ValidateBillCode(bills billArray[][]) 
{
    for(int i = 0; i < billArray.Length; i++)
    {
        for(int j = 0; j < billArray[0].Length; j++)
        {
            if(billArray[i][j].IndexOf("Health") >= 0 ||
                billArray[i][j].IndexOf("Travel") >= 0 || 
                billArray[i][j].IndexOf("Meal") >= 0||
                billArray[i][j].IndexOf("Hotel") >= 0)
            {
                return true;
            } 
            else
            {
                return false;
            }
        }
    }
}   

Но это не гарантирует, что все четыре из них введены, и я не уверен, как сделать сообщение об ошибке, которое сообщит пользователю, какой из четырех пропущен. Я буду признателен за любую помощь с этим.

1 Ответ

0 голосов
/ 11 сентября 2018

Полагаю, вам не нужен двухмерный или зубчатый массив.Вам нужно определить структуру как:

public struct Bill
{
    public string Date;
    public string BillCode;
    public string Amount;
    public string Currency;
}

Тогда ваш ValidateBillCode() станет таким:

public bool ValidateBillCode(Bill[] billArray)
{
    bool healthEntered = false;
    bool travelEntered = false;
    bool mealEntered = false;
    bool hotelEntered = false;

    for (int i = 0; i < billArray.Length; i++)
    {
        if (billArray[i].BillCode == "Health")
            healthEntered = true;
        else if (billArray[i].BillCode == "Travel")
            travelEntered = true;
        else if (billArray[i].BillCode == "Meal")
            mealEntered = true;
        else if (billArray[i].BillCode == "Hotel")
            hotelEntered = true;
    }

    return healthEntered && travelEntered && mealEntered && hotelEntered;
}

Но это всего лишь очень упрощенный подход.Для более подходящего решения лучше использовать class вместо struct, использовать enum для BillCode , DateTime для Дата и doubleдля Сумма .

...