Я пытаюсь написать программу киоска для своего печатного центра в школе, чтобы ученики могли выбрать размер и тип носителя, а затем сделать так, чтобы он определил цену.В настоящее время я делаю это с переключателями, которые работают нормально, но мы добавляем еще много опций, и более подходящим будет раскрывающийся список.Кроме того, мой код для расчета цены выходит из-под контроля.Я хотел бы настроить это так, чтобы расчет цены был простым.Настройка выглядит примерно так:
Файл1 - Размер бумаги (9 вариантов) - Тип носителя (18 параметров) Файл2, Файл 3 и т. Д.
Я собирался сохранить это в трехмерном массивеимя_файла [] paperize [] media [] для обработки цены.
Проблема в том, что не все типы носителей доступны во всех размерах.Я вижу, что вы не можете отключить элементы в списке.Если вы выберете один размер, я могу выборочно заполнить другой выпадающий список элементами или без них, но это изменит мои порядковые номера.Если бы я мог отключить товары, я мог бы сохранить тот же индекс и сделать простой цикл для обработки цен.Как и сейчас, мне пришлось бы вручную указывать и зацикливать для каждого размера бумаги, так как типы носителей имеют разные индексы.
Надеюсь, это имеет смысл, я на самом деле не программист, я просто пытаюсь что-то сделатьпросто улучшить наш рабочий процесс и точность в центре печати.Я могу предоставить скриншот старой программы и макет моей новой программы, если это поможет.Кто-нибудь может придумать более элегантное решение для этого?
Спасибо !!
РЕДАКТИРОВАТЬ
Yikes .. Ладно, это становится сложнее, чем яОжидая: Спасибо всем за ваш вклад, это очень ценится.Я действительно не ожидал никаких ответов, и их было много.Благодарю вас.Я попробовал идею таблицы, упомянутую ниже, но я не совсем уверен, как реализовать ее.Я прокомментирую этот пост за то, что я пытался.Позвольте мне представить более подробную информацию в случае, если у кого-то есть другая идея.
Например, что я пытаюсь сделать:
Размер = 8,5x11 имеет media = matte, двухсторонний matte,блеск, глянец, ацетат, резюме Размер = 11x17 имеет материал = тот же минус ацетат и резюме и т. д., до 60 "рулон с носителем с подсветкой и все виды материала.
Цена за 8,5x11 составляет 1,50 независимобумаги, а затем каждая бумага имеет свою собственную цену. Цена за 11x17 составляет 3,00, и каждая бумага имеет свою собственную цену, которая больше, чем их 8,5x11 аналогов
8.5x11 matte = .25
11x17 matte = .50
8.5x11 matte total = 1.75
11x17 matte total = 3.50
Я пытаюсь сделать это всего за несколько шаговВ настоящее время у меня есть переключатели, которые занимают много экранного пространства и выполняют такие вещи, как: Когда 11x17_1.Checked ацетат_1. Отключен и т. д. Также для расчета цены у меня есть сотни строк кода, выполняющих такие вещи, как:
If(8.5x11_1.Checked)
{
If(matte_1.Checked)
price = 8.5x11matte_1;
if(luster_1.Checked)
price = 8.5x11luster_1;
...etc.
}
Для рулонов требуется больше данных (высота) для обработки, так как мы взимаем за них линейный дюйм. В настоящее время для каждого файла у меня есть поле высоты, котороеони обязательны для заполнения.Я мог бы просто поместить поле высоты рядом с каждым файлом для моей новой версии.Затем, если они выберут рулон, бюст шкафа высоты будет заполнен, что потребует больше IF ... которых у меня сейчас сотни.Есть какие-нибудь мысли по поводу более элегантного способа сделать это?
У меня просто нет опыта программирования, чтобы упростить это, но я знаю, что это может быть сделано в 10 строках кода с использованием массива и выпадающих списков.:
Прошло много времени с тех пор, как я использовал массивы, но я думал о чем-то вроде:
Selection [file_1] [combobox_size.Index] [combobox_media.Index]
Я думаю, мне придется вручную определять каждое значение массива, так как цены являются произвольными?
[0][0][0] = 1.75
[0][0][1] = 1.75
[0][0][2] = 2.00
И т. Д.
Моя форма win будет иметь, скажем, 12 строк, чтобы они могли ввестиимя файла, а затем выберите раскрывающиеся списки.Если имя файла! = Ноль, то я обработаю цену для файла и выбора.
Так, если бы файл 1 был 11x17 глянец, мой массив был бы что-то вроде:
[0] [1] [3], который я бы заранее определил со значением 4,00 $, например
Если это рулон, то я просто умножил бы на нужную высоту.
Эта логика звучит или крайне неэффективна?
РЕДАКТИРОВАТЬ # 3
Хорошо, почти там, я думаю. К сожалению, мне не удалось выяснить другие решения, предлагаемые сообществом, но я написал функцию «get_index», которая выглядит следующим образом:
public static int get_index(string index)
{
if (index == "Matte")
return (1);
....
if (index == "Luster")
return (3);
....
else
return (0);
}
В моей основной программе я определяю цены следующим образом:
for (int x = 0; x < filenum; x++)
{
pricegrid[x, 0, 0] = 1.75; // 8.5x11 Resume
pricegrid[x, 0, 1] = 1.75; // 8.5x11 Matte
pricegrid[x, 0, 2] = 1.75; // 8.5x11 Double Sided Matte
pricegrid[x, 0, 3] = 2.35; // 8.5x11 Luster
.....
}
Затем, чтобы рассчитать цену, я делаю что-то вроде этого вызова функции get_index:
private void calculate_price()
{
getindex[0] = get_index(media1.SelectedItem.ToString());
....
}