Определение стоимости компьютера
Определение стоимости компьютера
Министерство образования Республики Беларусь Министерство образования и науки Российской Федерации Государственное учреждение высшего профессионального образования Белорусско-Российский Университет Кафедра Автоматизированные системы управления Курсовой проект по дисциплине: Теория принятия решений тема: Определение стоимости компьютера Могилев, 2010 Введение На сегодняшний день невозможно представить нашу жизнь без компьютера. Если еще несколько лет назад персональный компьютер дома имело очень мало пользователей, то сейчас все наоборот: мало у кого нет компьютера. С каждым днем компьютер становится все совершеннее, все больше он внедряется в жизнь человека. Кто-то использует компьютер для игр, кто-то для обучения, некоторые любят посидеть в Internet. На данный момент компьютер стал мощным помощником человека в решении глобальных мировых проблем. Актуальность выбранной темы курсового исследования обусловлена тем, что на компьютерном рынке предлагается великое множество различных конфигураций персональных компьютеров и комплектующих, а соответственно разнообразием цен на них. Выбор конфигурации компьютера - очень актуальная тема на сегодняшний день. Для того чтобы подобрать для себя оптимальную конфигурацию, необходимы общие знания о компьютере, о его составных частях. Исходя из того, с какой целью приобретается компьютер необходимо выбирать его составные части, а это влияет на стоимость компьютера. Таким образом, определение стоимости компьютера и комплектующих является важной задачей. Целью курсового проекта является разработка системы поддержки принятия решения (далее СППР) по определению стоимости компьютера и комплектующих. 1. Анализ предметной области и выявление факторов, влияющих на принятие решения 1.1 Анализ и обоснование выбора входных параметров системы В последние годы информационные технологии стремительно развиваются. Ассортимент компьютеров растёт с каждым днём, а соответственно и диапазон цен на них. Ученые даже вывели закономерность, что частота процессоров увеличивается вдвое каждые 18 месяцев. Вместе с этим, на устаревшие компьютеры и комплектующие уменьшается цена. Цена компьютера зависит от стоимости его частей (комплектующих). В свою очередь цена комплектующие зависят от различных факторов. Компьютер состоит из таких частей как: - Процессор - Материнская плата - Видеокарта - Оперативная память - Жесткий диск - Монитор (устройство вывода информации) - Привод - Клавиатура, мышь (устройства ввода информации) На стоимость процессора влияют его марка (Athlon, Celeron, Duron, Sempron, Pentium) и частота (900 МГц, 1700 МГц, 2500 МГц, 2800 МГц). Например, процессор Athlon с частотой 900 МГц стоит 5 долларов, а процессор Celeron с частотой 2600 МГц 14 долларов. Стоимость материнская плата зависит от марки и от модели. Например, материнская плата Asus A7V8X-X будет стоить 28 долларов, а материнская плата Asus P5K 38 долларов. На стоимость видеокарты влияют марка (Radeon, GeForce) и модель. Стоимость разных моделей видеокарты одной марки определяется объемом видеопамяти. Так, цена на видеокарту Radeon 9200 составит 13 долларов, цена на GeForce FX-5600XT составит 30 долларов. На стоимость оперативной памяти влияют типа модуля оперативной памяти (DDR, DDR-II) и объема памяти (128 Мб, 256 Мб, 512 Мб, 1024 Мб). Например, DDR 256 Мб будет стоить 7 долларов, а DDR-II 1024 Мб 17 долларов. Стоимость жесткого диска зависит от интерфейса жесткого диска (IDE, SATA2, SATA 2,5'') и объема диска (80 Гб, 120 Гб, 160 Гб, 250 Гб, 320 Гб). Например, винчестер IDE 20 Гб стоит 10 долларов, а винчестер SATA2 80 Гб стоит 24 доллара. Цена монитора зависит от марки и от модели. Стоимость разных моделей монитора одной марки определяется типом монитора (CRT, TFT) и длинной диагонали. Так, цена на монитор Samsung 753DFX(17")CRT 17 долларов, а на монитор Philips 190S(19")TFT 133 доллара. На стоимость привода влияют его возможности (CD-ROM, CD-RW, DVD-ROM, DVD-RW). Например, стоимость CD-ROM будет около 3 долларов, а DVD-RW 13 долларов. Стоимость устройств ввода информации (клавиатура, мышь) составит около 10 долларов. 1.2 Определение возможных состояний системы и откликов, генерируемых системой Полю «Процессор» соответствует ComboBox, т.е. выпадающий список, который формируется следующем образом: из файла baseCPU.txt считываются все марки процессоров, причём повторяющиеся записи не учитываются, и заносятся в ComboBox. В СППР предусмотрены следующие марки процессоров: Athlon Athlon-64 Athlon-XP Celeron Celeron-D Duron Pentium-III Pentium-4 Sempron Sempron-64 Далее, в соответствии с выбранной маркой, формируется ComboBox «Частота». Выпадающий список «Частота» формируется следующим образом: в файле baseCPU.txt осуществляется поиск записей, которые соответствуют выбранной марке и из этих записей выбираются поля «Частота», которые заносятся в выпадающий список. В СППР предусмотрены возможности ввода частоты вручную. Определение стоимости процессора в зависимости от выбранной марки осуществляется путем аппроксимации значения частоты процессора. К примеру, марке Athlon соответствуют частоты: 900 МГц 5 долларов и 3000 МГц 15 долларов. При выборе марки Athlon и вводе частоты вручную, например, 2000 МГц СППР высчитает стоимость данного процессора, которого нет в базе. Полю «Материнская плата» соответствует ComboBox, который формируется следующим образом: из файла baseMother.txt считываются все марки материнских плат, причём повторяющиеся записи не учитываются, и заносятся в ComboBox. В СППР предусмотрены следующие марки материнских плат: Asus ECS EliteGroup Epox Foxconn Gigabyte MSI Winfast Далее, в соответствии с выбранной маркой, формируется ComboBox «Модель платы». Выпадающий список «Модель платы» формируется следующим образом: в файле baseMother.txt осуществляется поиск записей, которые соответствуют выбранной марке и из этих записей выбираются поля «Модель платы», которые заносятся в выпадающий список. К примеру, марке Asus соответствуют модели: A7V8X-X, P5K, P5ND2-SLIDeluxe, A8NE, M2N-MX, M2N4-SLI, P4S8X-X. Далее в соответствии с выбранной маркой и моделью материнской платы рассчитывается среднее значение цены с заданными параметрами. Полю «Видеокарта» соответствует ComboBox, который формируется следующем образом: из файла baseVideo.txt считываются все марки видеокарт, причём повторяющиеся записи не учитываются, и заносятся в ComboBox. В СППР предусмотрены следующие марки видеокарт: Radeon GeForce GeForce2 GeForce4 Далее, в соответствии с выбранной маркой, формируется ComboBox «Модель видеокарты». Выпадающий список «Модель видеокарты» формируется следующим образом: в файле baseVideo.txt осуществляется поиск записей, которые соответствуют выбранной марке и из этих записей выбираются поля «Модель видеокарты», которые заносятся в выпадающий список. К примеру, марке Radeon соответствуют модели: 9200, 9800, 9800SE, HD2600Pro, HD2900GT, X1600Pro, X1650Pro, X1950Pro. Далее в соответствии с выбранной маркой и моделью видеокарты рассчитывается среднее значение цены с заданными параметрами. Полю «Тип модуля памяти» соответствует ComboBox, который формируется следующем образом: из файла baseMemory.txt считываются все типы модулей памяти, причём повторяющиеся записи не учитываются, и заносятся в ComboBox. В СППР предусмотрены следующие типы модулей памяти: DDR DDR-II DIMM SO-DIMM(DDR) SO-DIMM(DDRII) Далее, в соответствии с выбранным типом, формируется ComboBox «Объем памяти». Выпадающий список «Объем памяти» формируется следующим образом: в файле baseMemory.txt осуществляется поиск записей, которые соответствуют выбранному типу модуля памяти и из этих записей выбираются поля «Объем памяти», которые заносятся в выпадающий список. К примеру, типу модуля памяти DDR соответствуют объемы памяти: 128Мб, 256Мб, 512Мб, 1024Мб. Далее в соответствии с выбранным типом и объемом памяти рассчитывается среднее значение цены с заданными параметрами. Полю «Интерфейс» для жесткого диска соответствует ComboBox, который формируется следующем образом: из файла baseHDD.txt считываются все интерфейсы жесткого диска, причём повторяющиеся записи не учитываются, и заносятся в ComboBox. В СППР предусмотрены следующие интерфейсы жесткого диска: IDE SATA2 SATA 2,5'' Далее, в соответствии с выбранным интерфейсом, формируется ComboBox «Объем диска». Выпадающий список «Объем диска» формируется следующим образом: в файле baseHDD.txt осуществляется поиск записей, которые соответствуют выбранному интерфейсу и из этих записей выбираются поля «Объем памяти», которые заносятся в выпадающий список. К примеру, интерфейсу SATA2 соответствуют объемы дисков: 80Гб, 160Гб, 320Гб, 400Гб, 500Гб. Далее в соответствии с выбранным интерфейсом и объемом диска рассчитывается среднее значение цены с заданными параметрами. Полю «Марка монитора» соответствует ComboBox, который формируется следующем образом: из файла baseDispley.txt считываются все марки мониторов, причём повторяющиеся записи не учитываются, и заносятся в ComboBox. В СППР предусмотрены следующие марки мониторов: Acer CTX LG Philips Samsung Sony Далее, в соответствии с выбранной маркой монитора, формируется ComboBox «Модель монитора». Выпадающий список «Модель монитора» формируется следующим образом: в файле baseDispley.txt осуществляется поиск записей, которые соответствуют выбранной марке монитора и из этих записей выбираются поля «Модель монитора», которые заносятся в выпадающий список. К примеру, марке монитора LG соответствуют модели: FlatronF700P(17")CRT, L1730S(17")TFT, L1751S(17") TFT. Далее в соответствии с выбранной маркой и моделью рассчитывается среднее значение цены с заданными параметрами. Отклик на нажатие кнопки «ОК» вызывает математический аппарат, в котором в соответствии со всеми введёнными параметрами рассчитывается стоимость компьютера (комплектующих). Далее стоимость выводится в TextBox «Стоимость PC (комплектующих):» 1.3 Разработка интерфейса пользователя для ввода, редактирования входных параметров системы и вывода результатов работы системы Пользовательский интерфейс разделён на две части: - Выбор комплектующих - Вывод результата 2. Разработка базы знаний 2.1 Структура базы фактов База фактов представляет собой несколько баз данных (далее БД), в которых собраны данные статистические данные о ценах на комплектующие. Статистические данные взяты из рекламы на сайте www.irr.by от 10 октября 2010 года. База данных о процессоре “baseCPU.txt” имеет следующие столбцы: - Процессор - Частота - Цена База данных о материнской плате “baseMother.txt” имеет следующие столбцы: -- Марка - Модель - Цена База данных о видеокарте “baseVideo.txt” имеет следующие столбцы: - Марка - Модель - Цена База данных об оперативной памяти “baseMemory.txt” имеет следующие столбцы: - Тип модуля - Объем - Цена База данных о жестком диске “baseHDD.txt” имеет следующие столбцы: - Интерфейс - Объем - Цена База данных о мониторе “baseDispley.txt” имеет следующие столбцы: - Марка - Модель - Цена Цена в столбцах указана в долларах США. В базах данных присутствую записи, которые неоднократно повторяются по характеристикам, но отличаются по ценам. Это связано с тем, что различные пользователи продают одни и те же комплектующие по разным ценам. 2.2 Математическая модель преобразования базы фактов в базу знаний Преобразование базы фактов в базу знаний происходит следующим образом: При нажатии на кнопку «ОК» на пользовательском интерфейсе, инициализируются 12 переменных : markaCPU, my_chast_s, markaMB, modelMB, markaVIDEO, modelVIDEO, typeOZY, sizeOZY, typeHDD, sizeHDD, markaDisp, modelDisp. Далее, всоответствии с выбранными пользователем характеристиками, выбераются строки из БД, откуда далее поочерёдно считываются значения. 2.3 Разработка правил вывода системы принятия решений По заданным входным параметрам, определяются соответствующие строки в базе данных. В строке данных считывается цена выбранных комплектующих, рассчитывается средняя цена и заносится в соответствующую ему переменную. Рассмотрим данное правило на примере: Пусть входные параметры (ВП) определены как: Процессор: Athlon Частота: 2800 Марка материнской платы: Asus Модель материнской платы: M2N-MX Марка видеокарты: Radeon Модель видеокарты: 9200 Тип модуля памяти: DDR Объем памяти: 256 Интерфейс жесткого диска: IDE Объем диска: 160 Марка монитора: LG Модель монитора: Flatron F700P 17” CRT Привод: DVD-RW Клавиатура, мышка. В соответствии с правилами определяем: Цена = Ср. Цена процессора + Ср. Цена материнской платы + Ср Цена видеокарты + Ср. Цена модуля памяти + Ср. Цена жесткого диска + Ср. Цена монитора + Цена привода + Цена клавиатуры + Цена мышки = 14 + 39,4 + 15,6 + 7,75 + 39,3 + 17 + 13 + 6 + 4= 156 долларов. Итог: цена компьютера с учётом входных параметров составила 156 долларов. 3. Математическая модель редактора базы знаний 3.1 Математическая модель принятия решения После того, как база фактов преобразована в базу знаний, инициализируется набор переменных, которые соответствуют параметрам, введённым пользователем: markaCPU, my_chast_s, markaMB, modelMB, markaVIDEO, modelVIDEO, typeOZY, sizeOZY, typeHDD, sizeHDD, markaDisp, modelDisp. Если некоторые параметры не будут введены, то СППР посчитает стоимость компьютера без учета этих параметров, тоесть по комплектующим. Переменным присваиваются значения следующим образом: 1) markaCPU присваивается значение марки процессора 2) my_chast_s присваивается значение частоты процессора 3) markaMB присваивается значение марки материнской платы 4) modelMB присваивается значение модели материнской платы 5) markaVIDEO присваивается значение марки видеокарты 6) modelVIDEO присваивается значение модели видеокарты 7) typeOZY присваивается значение тип оперативной памяти 8) sizeOZY присваивается значение размер оперативной памяти 9) typeHDD присваивается значение тип жесткого диска 10) sizeHDD присваивается значение размер жесткого диска 11) markaDisp присваивается значение марки монитора 12) modelDisp присваивается значение модели монитора На следующем этапе происходит определение цены компьютера по комплектующим: 1) Определяем стоимость процессора if ( ((my_chast%50)!=0) || (my_chast<0) ) { MessageBox::Show("Частота процессора введена некорректно.\nТакой частоты нет.","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} float my_cena; bool h=true; while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaCPU) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); chast1_s=dd; chast1=Int32::Parse(dd); s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); cena1_s=s->Substring(0,i); cena1=Int32::Parse(cena1_s); //Выполняем один раз. if (h==true) {chast0=chast1; cena0=cena1; h=false;} } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } my_cena=approcsim(my_chast, chast0, cena0, chast1, cena1); cena=cena+my_cena; } Стоимость процессора зависит от марки. В базе данных baseCPU.txt в зависимости от выбранной марки строится функция аппроксимации по двум точкам А и В из базы (Координаты (частота, цена)). Координаты точки А(х0,у0), точки В(х1,у1). Таким образом, мы можем найти цену процессора (y) с произвольно заданной частотой x. Для этого запишем уравнение прямой, проходящей через 2 точки: (y1-y)/(y1-y0)= (x1-x)/(x1-x0) y=(x-x0)*(y1-y0)/(x1-x0)+y0 Программная реализация функции: float approcsim(int my_chast, int chast0, int cena0, int chast1, int cena1) { float my_cena; //Уравнение прямой проходящей через 2 точки my_cena=(my_chast-chast0)*(cena1-cena0)/(chast1-chast0)+cena0; return my_cena; } 2) Определяем стоимость материнской платы if (this->comboBox4->Text!=""&&this->comboBox3->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseMother.txt"); while(s->Length >50) {int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaMB){ s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(" "); dd=s->Substring(0,i); if (dd==modelMB) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } 3) Определяем стоимость видеокарты if (this->comboBox6->Text!=""&&this->comboBox5->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseVideo.txt"); while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaVIDEO) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); if (dd==modelVIDEO) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } 4) Определяем стоимость оперативной памяти if (this->comboBox8->Text!=""&&this->comboBox7->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseMemory.txt"); while(s->Length >50) { int i=s->IndexOf(" "); d=s->Substring(0,i); if (d==typeOZY) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(" "); dd=s->Substring(0,i); if (dd==sizeOZY) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } 5) Определяем стоимость жесткого диска if (this->comboBox10->Text!=""&&this->comboBox9->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseHDD.txt"); while(s->Length >50) { int i=s->IndexOf(" "); d=s->Substring(0,i); if (d==typeHDD) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(" "); dd=s->Substring(0,i); if (dd==sizeHDD) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } 6) Определяем стоимость монитора if (this->comboBox12->Text!=""&&this->comboBox11->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseDispley.txt"); while(s->Length >30) { int i=s->IndexOf(" "); d=s->Substring(0,i); if (d==markaDisp) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(" "); dd=s->Substring(0,i); if (dd==modelDisp) { s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } Далее инициализируется набор дополнительных параметров: Клавиатура: if(this->checkBox1->Checked) cena+=6; Мышка: if(this->checkBox2->Checked) cena+=4; 1) Если привод CD-ROM: if(this->checkBox3->Checked) cena+=3; 2) Если привод CD-RW: if(this->checkBox4->Checked) cena+=7; 3) Если привод DVD-ROM: if(this->checkBox5->Checked) cena+=10; 4) Если привод DVD-RW: if(this->checkBox6->Checked) cena+=13; 5) Если минимальная цена видеокарты (checkBox7->Checked): If(this->comboBox6->Text==""&&this->comboBox5->Text==""&&this->checkBox7->Checked) {while(s->Length >50) {… if (k==0)min=cena2_int; //мин первый элимент if ((cena2_int)<(min)) min=cena2_int; k++; } cena=cena+min; cena2=0;k=0;} 6) Если средняя цена видеокарты (checkBox8->Checked): If(this->comboBox6->Text==""&&this->comboBox5->Text==""&&this->checkBox8->Checked) {while(s->Length >50) {… String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0;} 7) Если минимальная цена оперативной памяти (checkBox9->Checked): If(this->comboBox8->Text==""&&this->comboBox7->Text==""&&this->checkBox9->Checked) {while(s->Length >50) {… if (k==0)min=cena2_int; //мин первый элимент if ((cena2_int)<(min)) min=cena2_int; k++; } cena=cena+min; cena2=0;k=0;} 8) Если средняя цена оперативной памяти (checkBox10->Checked): If(this->comboBox8->Text==""&&this->comboBox7->Text==""&&this->checkBox10->Checked) {while(s->Length >50) {… String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0;} 3.2 Разработка схемы алгоритма блока принятия решений 4. Разработка программного обеспечения 4.1 Выбор среды разработки системы Для написания программного модуля данной курсовой работы была выбрана среда программирования MS Visual C++ 2008. Данная среда позволяет работать с базами данных, включает возможность создания графического интерфейса, удобного для пользователя. 4.2 Программная реализация блока принятия решения private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { float cena=0, cena2=0; int cena2_int=0; int i=0, k=0; float ed=1; String ^markaCPU=this->comboBox1->Text; String ^my_chast_s=this->comboBox2->Text; String ^markaMB=this->comboBox3->Text; String ^modelMB=this->comboBox4->Text; String ^markaVIDEO=this->comboBox5->Text; String ^modelVIDEO=this->comboBox6->Text; String ^typeOZY=this->comboBox7->Text; String ^sizeOZY=this->comboBox8->Text; String ^typeHDD=this->comboBox9->Text; String ^sizeHDD=this->comboBox10->Text; String ^markaDisp=this->comboBox11->Text; String ^modelDisp=this->comboBox12->Text; //Определяем стоимость процессора if (this->comboBox2->Text!=""&&this->comboBox1->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseCPU.txt"); int my_chast=Int32::Parse(my_chast_s); //преобразуем string в int int chast0=0, cena0=0, chast1=0, cena1=0; String ^chast0_s="", ^cena0_s="", ^chast1_s="", ^cena1_s=""; if ( ((my_chast%50)!=0) || (my_chast<0) ) {MessageBox::Show("Частота процессора введена некорректно.\nТакой частоты нет.","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} float my_cena; bool h=true; while(s->Length >50) { int i=s->IndexOf(" "); d=s->Substring(0,i); if (d==markaCPU) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(" "); dd=s->Substring(0,i); chast1_s=dd; chast1=Int32::Parse(dd); s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); cena1_s=s->Substring(0,i); cena1=Int32::Parse(cena1_s); //Выполняем один раз. if (h==true) {chast0=chast1; cena0=cena1; h=false;} } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } my_cena=approcsim(my_chast, chast0, cena0, chast1, cena1); cena=cena+my_cena; } //Определяем стоимость материнской платы if (this->comboBox4->Text!=""&&this->comboBox3->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseMother.txt"); while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaMB) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); if (dd==modelMB) {s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } //Определяем стоимость видеокарты if (this->comboBox6->Text!=""&&this->comboBox5->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseVideo.txt"); while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaVIDEO) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); if (dd==modelVIDEO) {s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } //Определяем стоимость оперативной памяти if (this->comboBox8->Text!=""&&this->comboBox7->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseMemory.txt"); while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); if (d==typeOZY) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); if (dd==sizeOZY) {s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } //Определяем стоимость жесткого диска if (this->comboBox10->Text!=""&&this->comboBox9->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseHDD.txt"); while(s->Length >50) d=s->Substring(0,i); if (d==typeHDD) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); if (dd==sizeHDD) {s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } //Определяем стоимость монитора if (this->comboBox12->Text!=""&&this->comboBox11->Text!="") { String ^d, ^dd="", ^s=File::ReadAllText("baseDispley.txt"); while(s->Length >30) { int i=s->IndexOf(""); d=s->Substring(0,i); if (d==markaDisp) { s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); if (dd==modelDisp) {s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; } } int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } if (this->comboBox2->Text==""&&this->comboBox1->Text!="") {MessageBox::Show("Выберите частоту процессора","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} if (this->comboBox4->Text==""&&this->comboBox3->Text!="") {MessageBox::Show("Выберите модель материнской платы","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} if (this->comboBox6->Text==""&&this->comboBox5->Text!="") {MessageBox::Show("Выберите модель видеокарты","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} if (this->comboBox8->Text==""&&this->comboBox7->Text!="") {MessageBox::Show("Выберите объем оперативной памяти","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} if (this->comboBox10->Text==""&&this->comboBox9->Text!="") {MessageBox::Show("Выберите объем жесткого диска","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} if (this->comboBox12->Text==""&&this->comboBox11->Text!="") {MessageBox::Show("Выберите модель монитора","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} if (this->checkBox8->Checked&&this->checkBox7->Checked) {MessageBox::Show("Поставьте только один флажок.","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} if (this->checkBox9->Checked&&this->checkBox10->Checked) {MessageBox::Show("Поставьте только один флажок.","",MessageBoxButtons::OK,MessageBoxIcon::Warning); return;} //Мин. параметры видеокарты if (this->comboBox6->Text==""&&this->comboBox5->Text==""&&this->checkBox7->Checked) { String ^d, ^dd="", ^s=File::ReadAllText("baseVideo.txt"); int min; while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); if (k==0)min=cena2_int; //мин первый элимент if ((cena2_int)<(min)) min=cena2_int; k++; int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena=cena+min; cena2=0;k=0; } //Средн. параметры видеокарты if (this->comboBox6->Text==""&&this->comboBox5->Text==""&&this->checkBox8->Checked) { ring ^d, ^dd="", ^s=File::ReadAllText("baseVideo.txt"); while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } //Мин. параметры ОЗУ if (this->comboBox8->Text==""&&this->comboBox7->Text==""&&this->checkBox9->Checked) { String ^d, ^dd="", ^s=File::ReadAllText("baseMemory.txt"); int min; while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); if (k==0)min=cena2_int; //мин первый элимент if ((cena2_int)<(min)) min=cena2_int; k++; int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena=cena+min; cena2=0;k=0; } //Средн. параметры ОЗУ if (this->comboBox8->Text==""&&this->comboBox7->Text==""&&this->checkBox10->Checked) { String ^d, ^dd="", ^s=File::ReadAllText("baseMemory.txt"); while(s->Length >50) { int i=s->IndexOf(""); d=s->Substring(0,i); s=s->Substring(i+1,s->Length-d->Length-1); i=s->IndexOf(""); dd=s->Substring(0,i); s=s->Substring(i+1,s->Length-dd->Length-1); i=s->IndexOf("\n"); String ^p=s->Substring(0,i); cena2_int=Int32::Parse(p); cena2=cena2+cena2_int; k++; int j=s->IndexOf("\n"); s=s->Substring(j+1,s->Length-j-1); } cena2=cena2/(k*ed); cena=cena+cena2; cena2=0;k=0; } if(this->checkBox1->Checked) cena+=6;//клавиатура if(this->checkBox2->Checked) cena+=4;//мышка if(this->checkBox3->Checked) cena+=3;//CD-ROM if(this->checkBox4->Checked) cena+=7;//CD-RW if(this->checkBox5->Checked) cena+=10;//DVD-ROM if(this->checkBox6->Checked) cena+=13;//DVD-RW this->textBox2->Text=cena.ToString(); } 5. Тестирование программного продукта и оценка качества решений Для тестирования программного продукта возьмём 3 различных компьютера, и сравним стоимость, рассчитанную СППР, со стоимостью таких компьютеров на компьютерном рынке. 1) Athlon 2800, Asus M2N-MX, Radeon 9200, DDR 256Mb, HDD 160Gb, монитор LG Flatron F700P 17” CRT, DVD-RW, клавиатура, мышка. Стоимость на компьютерном рынке: 150$ 2) Pentium-4 3000, Asus M2N-MX, Radeon 9800, DDR-II 1024Mb, HDD SATA2 160Gb, монитор LG Flatron F700P 17” CRT, DVD-RW, клавиатура, мышка. Стоимость на компьютерном рынке: 170$ 3) Athlon-64 3500, Asus P5ND2-SLIDeluxe, GeForce 8600GTS, DDR-II 2048Mb, HDD SATA2 400Gb, монитор LG L1730S(17")TFT, DVD-RW, клавиатура, мышка. Стоимость на компьютерном рынке: 310$ Заключение В соответствии с результатами работы программы при заданной комплектации компьютера и ценами на компьютерном рынке ошибка составила: - Для первого теста (156-150)/150*100%=4% - Для второго теста (185-170)/170*100%=9% - Для третьего теста (310-290)/310*100%=7% Это доказывает, что данная СППР может использоваться для принятия решения. Погрешность при этом составляет не более 10%. Список используемых источников 1. Саттер Герб. Стандарты программирования на C++. 101 правило и рекомендация / Андрей Александреску. - М. : Вильямс, 2005. 2. Дейтел Харви. Как программировать на С++ / Пол Дейтел - М. : Бином, 2003.3. Шилдт Герберт. Самоучитель С++. - СПб. : БХВ-Петербург, 2003.4. Ларичев О.И. Теория и методы принятия решений. М.: Логос, 2000. - 296с.5. Эддоус М., Стэнсфилд Р. Методы принятия решений. М.: Юнити, 1997. - 590 с.6. Саати Т., Кернс К. Аналитическое планирование. Организация систем. М.: Радио и связь, 1991. - 224 с.
|