Главная Рефераты по сексологии Рефераты по информатике программированию Рефераты по биологии Рефераты по экономике Рефераты по москвоведению Рефераты по экологии Краткое содержание произведений Рефераты по физкультуре и спорту Топики по английскому языку Рефераты по математике Рефераты по музыке Остальные рефераты Рефераты по авиации и космонавтике Рефераты по административному праву Рефераты по безопасности жизнедеятельности Рефераты по арбитражному процессу Рефераты по архитектуре Рефераты по астрономии Рефераты по банковскому делу Рефераты по биржевому делу Рефераты по ботанике и сельскому хозяйству Рефераты по бухгалтерскому учету и аудиту Рефераты по валютным отношениям Рефераты по ветеринарии Рефераты для военной кафедры Рефераты по географии Рефераты по геодезии Рефераты по геологии Рефераты по геополитике Рефераты по государству и праву Рефераты по гражданскому праву и процессу Рефераты по делопроизводству Рефераты по кредитованию Рефераты по естествознанию Рефераты по истории техники Рефераты по журналистике Рефераты по зоологии Рефераты по инвестициям Рефераты по информатике Исторические личности Рефераты по кибернетике Рефераты по коммуникации и связи |
Курсовая работа: Телефонная компанияКурсовая работа: Телефонная компанияКУРСОВОЕ ПРОЕКТИРОВАНИЕ ПО БАЗАМ ДАННЫХ ТЕМА: "Телефонная компания" Одесса 2010 Аннотация Объектом исследования является развитие навыков проектирования информационных систем и закрепление знаний, полученных за время изучения дисциплины "Базы данных". Цель работы – разработка и создание базы данных для предметной области Аварийная служба. Метод исследования – изучение видов деятельности в служба рекламы, составление и отладка программы, для работы с базой данных (программа написана на языке С++). Содержание Введение 1. Анализ предметной области 1.1 Рабочие цели системы 1.2 Этапы проектирования БД 1.3 Концептуальная модель 2. Преобразование модели ER в реляционную модель 3. Запросы к базе данных системы 4. Описание групп пользователей ИС 5. Текст программы Заключение Список литературы Введение Цель работы: является развитие навыков проектирования информационных систем и закрепление знаний, полученных за время изучения дисциплины "Базы данных". Задание: предметная область "Реклама в коммерческом издании". Возможные виды деятельности: учет клиентов с возможными льготами; учет совершенных ими заказов по различным направлениям; расчет стоимости заказа с учетом типа, даты продолжительности; оплата клиентами услуг. 1. Анализ предметной области 1.1 Рабочие цели системы Согласно заданию, программный продукт должен фиксировать такие данные как: - клиентов с возможными льготами; - заказ клиентов по различным типам; - стоимость заказа с учетом типа, даты и продолжительности; - оплата клиентом услуг. В связи с этим были сформированы следующие таблицы в базе данных: Клиенты; Услуги; Звонки; Льготы. А также таблицы, связывающие данные таблицы. Так же ПП должен выполнять следующие функции: Вывод списка услуг клиента; Вывод списка заказов клиента; Вывод списка клиентов по первым буквам; Вывод списка заказов за данный промежуток; Вывод списка заказов в данный промежуток; Вывод количества клиентов с данным типом услуги; Вывод количества неоплаченых счетов; Вывод количества клиентов по услугам; Вывод количества клиентов по льготам; Вывод клиента с наибольшим долгом; Для каждой льготы определить клиента с наименьшим сроком льготы; Для каждой услуги определить а клиента с наименьшим сроком услуги; Вывод клиентов, не имеющих льгот; Вывод клиентов, не имеющих услуг; Вывод состояний счетов; Вывод состояний сроков услуг; Обновить наличие долга; Обновить отсутствие долга. 1.2 Этапы проектирования БД После анализа предметной области были сформированы ранее перечисленные таблицы. В таблице "Клиент" был выбран первичный ключ "Идентификатор клиента", т.к. данного ключа достаточно для уникального определения каждого клиента, поскольку данные характеризующие клиента не могут повториться дважды. В таблице "Услуги" и "Льготы" были также выбраны первичные ключи "Идентификатор", т.к. данных полей достаточно для уникального определения данных в таблицах. При выборе данных таблиц и их связующих таблиц, поля были выбраны с учетом нормализации отношений, т.е. таблицы не содержат избыточное количество повторяющихся данных и не могут привести к различным родам аномалий. 1.3 Концептуальная модель 2. Преобразование модели ER в реляционную модель
3. Запросы к базе данных системы Вывод списка услуг клиента SELECT A.id_service, A.opisanie, C.surname FROM services AS A, ys_ab AS B, Klient AS C WHERE A.id_service=B.id_service and B.id_klient=C.id_klient and C.surname=(Фамилия_Пользователя) Вывод списка звонков клиента SELECT A.id_call, A.data, A.time_beg, A.time_and, C.opisanie, B.surname FROM Call AS A, Klient AS B, Napravlenie AS C WHERE A.id_klient=B.id_klient And A.id_napravlenie=C.id_napravlenie And B.surname=(Фамилия_Пользователя) Вывод списка клиентов по первым буквам SELECT * FROM Klient WHERE surname like Первые_буквы% Вывод списка клиентов по первым цифрам SELECT * FROM Klient WHERE num like Первые_цифры% Вывод списка звонков за данный промежуток SELECT * FROM call WHERE data Between Начальная_Дата and Конечная_Дата Вывод списка услуг в данный промежуток SELECT A.Data, A.Srok, B.Surname FROM ys_ab AS A, Klient AS B WHERE A.id_klient=B.id_klient and A.Data between Начальная_Дата and Конечная_Дата Вывод количества клиентов с данной услугой SELECT Count(*) FROM services WHERE services.id_service=Идентификато_услуги Вывод количества отрицательных счетов SELECT count(*) FROM Klient WHERE bill<0; Вывод количества клиентов по услугам SELECT A.id_service, B.opisanie, Count(*) FROM ys_ab AS A, services AS B WHERE A.id_service=B.id_service GROUP BY A.id_service, B.opisanie; Вывод количества клиентов по льготам SELECT A.id_lgot, B.opisanie, Count(*)FROM lg_ab AS A, lgot AS B WHERE A.id_lgot=B.id_lgot GROUP BY A.id_lgot, B.opisanie; Вывод клиента с наибольшим долгом SELECT * FROM klient AS A WHERE bill<= ALL (select bill from klient ); Вывод клиентов, имеющих услуги SELECT * FROM klient AS A WHERE A.id_klient =ANY (select B.id_klient from ys_ab AS B); Для каждой льготы определить клиента с наименьшим сроком льготы SELECT A.opisanie, B.surname, B.ab_name FROM lgot AS A, klient AS B, lg_ab AS C WHERE A.id_lgot=C.id_lgot AND B.id_klient=c.id_klient AND C.srok<=All (select Srok from lg_ab where lg_ab.id_lgot=A.id_lgot); Для каждой услуги определить клиента с наименьшим сроком услуги SELECT A.opisanie, B.surname, B.ab_name FROM services AS A, klient AS B, ys_ab AS C WHERE A.id_service=C.id_service AND B.id_klient=c.id_klient AND C.srok<=All (select Srok from ys_ab where ys_ab.id_service=A.id_service); Вывод клиентов, не имеющих льгот SELECT A.surname FROM Klient AS A WHERE A.id_klient not IN (select id_klient from lg_ab); Вывод клиентов, не имеющих услуг SELECT A.surname FROM Klient AS A WHERE A.id_klient not IN (select id_klient from ys_ab); Вывод состояний счетов SELECT id_klient,surname,ab_name,'norm' from Klient where bill>0 UNION SELECT id_klient,surname,ab_name,'minus' from Klient where bill<0; Вывод состояний сроков услуг SELECT *,Srok-Now() FROM ys_ab where (Srok-Now())>0 union SELECT *,Srok-Now() FROM ys_ab where (Srok-Now())<0; Обновить наличие долга update klient set [More info]='imeet dolg' where id_klient in (select id_klient from klient where bill<0); Обновить отсутствие долга update klient set [More info]='ne imeet dolg' where id_klient in (select id_klient from klient where bill>0); 4. Описание групп пользователей ИС В данной области были выделены две группы пользователей. Первая группа – менеджер-оператор: - возможность просмотра таблиц "Клиенты", "Рекламы", "Льготы-Клиенты", "Услуги-Клиенты", "Оплаты". - возможность выполнения всех перечисленных в анализе требований действий. - возможность внесения оплаты. Вторая группа – администратор: - возможность просмотра таблиц "Клиенты", "Услуги", "Льготы-Клиенты", "Услуги-Клиенты", "Оплаты". - возможность выполнения всех перечисленных в анализе требований действий. - возможность внесения оплаты. - возможность просмотра журнала событий, произошедших в системе. - возможность изменения всех таблиц (кроме журнала событий): -редактирование записей. -добавление записей. - удаление записей. - возможность создания нового пользователя. Интерфейс ИС Программный продукт содержит одно окно, которое в зависимости от выполняемых действий преобразуется под выполняемое действие 1. Первоначальное окно программы: 2. Окно программы, которое видит менеджер-оператор после ввода своего логина и пароля: 3. Окно программы, которое видит менеджер-оператор после нажатия кнопки "Таблицы": Окно программы, которое видит менеджер-оператор после нажатия кнопки "Функции": 4. Окно программы, которое видит менеджер-оператор после нажатия кнопки "Оплата": При этом, пользователь вводит номер в поле ввода номера и автоматически вписывается фамилия в поле фамилии, которою в последствии пользователь должен согласовать с клиентом. 5. Окно программы, которое видит менеджер-оператор после выбора пункта в меню "Таблицы": 6. Окно программы, которое видит менеджер-оператор после выбора пункта в меню "Функции": 7. Окно программы, которое видит администратор после ввода своего логина и пароля: 8. Окно программы, которое видит администратор после нажатия кнопки "Изменить Клиент-Льгота": 9. Окно программы, которое видит администратор после нажатия кнопки "Добавить запись": 10. Окно программы, которое видит администратор после нажатия кнопки "Добавить льготу": 11. Окно программы, которое видит администратор после нажатия кнопки "Изменить Клиент-Услуга": 12. Окно программы, которое видит администратор после нажатия кнопки "Добавить запись": 13. Окно программы, которое видит администратор после нажатия кнопки "Добавить услугу": Сообщения программы, причины, их вызывающие, и реакция пользователя на сообщения ü Сообщение о неверном имени пользователя или пароля. При возникновении данной ошибки пользователю выводится сообщение о возникновении данной ситуации, очищается поле пароля и система ждет повторного ввода. ü Сообщение о неверном внесении оплаты. При возникновении данной ошибки пользователю выводится сообщение о возникновении данной ситуации, очищаются все поля ввода. Требуется ввести верные данные. ü Сообщение о неверном внесении нового пользователя. При возникновении данной ошибки пользователю выводится сообщение о возникновении данной ситуации, очищаются все поля ввода. Требуется ввести верные данные. 5. Тексты программы #pragma once int zap=0;//переменная для определения текущего запроса int id=0;//переменная для определения текущего пользователя в системе int level=0;//переменная для определения выдаваемых функций пользователю int op_new=-1;//переменная для определения действий кнопки "добавить" int ChoiseToLV2=0;//переменная, определяющая выводимую и вводимую информацию в функциях. //участок кода, реализующий один из запросов на вывод таблиц в программе..в основном в остальных запросах изменяется лишь значение переменной q, в которую и вписывается сам запрос. private: System::Void listBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { this->listView1->Visible=true; this->ClientSize = System::Drawing::Size(960, 580); this->listView1->Items->Clear(); cn->Open(); int choise=this->listBox1->SelectedIndex; if(choise==0) { String ^q="Select * from Klient;"; System::Data::OleDb::OleDbCommand^cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); System::Data::OleDb::OleDbDataReader ^rdr=cmd->ExecuteReader(); int k=0; while(rdr->Read()) { this->columnHeader1->Text=L"ид"; this->listView1->Items->Add(Convert::ToString(rdr[0])); this->columnHeader2->Text=L"Фамилия"; this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[1])); this->columnHeader3->Text=L"Имя"; this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[2])); this->columnHeader4->Text=L"Номер"; this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[3])); this->columnHeader5->Text=L"Счет"; this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[4])); this->columnHeader6->Text=L"Доп.инф."; this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[5])); this->columnHeader7->Text=L""; k++; } rdr->Close(); cn->Close();}} //действия при нажатии на кнопку "Внести" в меню "Оплата". private: System::Void button11_Click(System::Object^ sender, System::EventArgs^ e) { String ^q; System::Data::OleDb::OleDbCommand ^cmd; System::Data::OleDb::OleDbDataReader ^rdr; cn->Open(); if(op_new==1) { double summ_ins=Convert::ToDouble(this->textBox8->Text); double summ; int chosen_id; q="Select * from klient"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); while(rdr->Read()) { if(Convert::ToString(rdr[1])==this->comboBox1->Text && Convert::ToInt32(rdr[3])==Convert::ToInt32(this->comboBox2->Text)) { chosen_id=Convert::ToInt32(rdr[0]); summ=summ_ins+Convert::ToDouble(rdr[4]); q="update klient set bill ='"+Convert::ToString(summ)+"' where id_klient="+chosen_id+";"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); q="INSERT INTO Oplata ( Data, summ, id_klient )values (Date(),'"+Convert::ToString(summ_ins)+"','"+chosen_id+"'); "; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); } } rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Внесение суммы "+Convert::ToString(summ_ins)+" на счет клиента с ID "+chosen_id+"');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } } //действия при нажатии на кнопку "Изменить" private: System::Void button13_Click(System::Object^ sender, System::EventArgs^ e) { cn->Open(); if(ChoiseToLV2==1) { String ^q="update lg_ab SET Data='"+this->textBox10->Text+"',Srok='"+this->textBox11->Text+"',id_lgot="+Convert::ToInt32(this->textBox12->Text)+",id_klient="+Convert::ToInt32(this->textBox13->Text)+" where id_lg_ab="+Convert::ToInt32(this->textBox9->Text); System::Data::OleDb::OleDbCommand ^cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); System::Data::OleDb::OleDbDataReader ^rdr=cmd->ExecuteReader(); rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Изменение записи в таблице клиент-льгота с ID "+Convert::ToInt32(this->textBox9->Text)+"');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==4) { String ^q="update ys_ab SET Data='"+this->textBox10->Text+"',Srok='"+this->textBox11->Text+"',id_service="+Convert::ToInt32(this->textBox12->Text)+",id_klient="+Convert::ToInt32(this->textBox13->Text)+" where id_ys_ab="+Convert::ToInt32(this->textBox9->Text); System::Data::OleDb::OleDbCommand ^cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); System::Data::OleDb::OleDbDataReader ^rdr=cmd->ExecuteReader(); rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Изменение записи в таблице клиент-услуга с ID "+Convert::ToInt32(this->textBox9->Text)+"');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } cn->Close(); } //действия при нажатии на кнопку "Удалить" private: System::Void button14_Click(System::Object^ sender, System::EventArgs^ e) { cn->Open(); System::Data::OleDb::OleDbCommand ^cmd; System::Data::OleDb::OleDbDataReader ^rdr; if(ChoiseToLV2==1) { String ^q="delete from lg_ab where id_lg_ab="+Convert::ToInt32(this->textBox9->Text); cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Удаление записи в таблице клиент-льгота с ID "+Convert::ToInt32(this->textBox9->Text)+"');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==2) { String ^q="delete from lgot where id_lgot="+Convert::ToInt32(this->textBox9->Text); cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Удаление записи в таблице льгота с ID "+Convert::ToInt32(this->textBox9->Text)+"');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==3) { String ^q="delete from Klient where id_klient="+Convert::ToInt32(this->textBox9->Text); cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Удаление записи в таблице Клиент с ID "+Convert::ToInt32(this->textBox9->Text)+"');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==4) { String ^q="delete from ys_ab where id_ys_ab="+Convert::ToInt32(this->textBox9->Text); cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Удаление записи в таблице клиент-услуга с ID "+Convert::ToInt32(this->textBox9->Text)+"');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==5) { String ^q="delete from services where id_service="+Convert::ToInt32(this->textBox9->Text); cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Удаление записи в таблице услуга с ID "+Convert::ToInt32(this->textBox9->Text)+"');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } rdr->Close(); cn->Close(); } //Действия при нажатии на кнопку "Добавить" private: System::Void button16_Click(System::Object^ sender, System::EventArgs^ e) { cn->Open(); System::Data::OleDb::OleDbCommand ^cmd; System::Data::OleDb::OleDbDataReader ^rdr; if(ChoiseToLV2==1) { String ^q="insert into lg_ab (Data,Srok,id_lgot,id_klient) VALUES('"+this->textBox10->Text+"','"+this->textBox11->Text+"',"+Convert::ToInt32(this->textBox12->Text)+","+Convert::ToInt32(this->textBox13->Text)+")"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Добавление записи в таблицу клиент-льгота');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==2) { String ^q="insert into Lgot (Opisanie,Stoimost)VALUES('"+this->textBox10->Text+"',"+Convert::ToInt32(this->textBox11->Text)+")"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Добавление записи в таблицу Льготы');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==3) { String ^q="insert into Klient (Surname,ab_name,Num,bill)VALUES('"+this->textBox10->Text+"','"+this->textBox11->Text+"',"+Convert::ToInt32(this->textBox12->Text)+","+Convert::ToDouble(this->textBox13->Text)+")"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Добавление нового клиента');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==4) { String ^q="insert into ys_ab (Data,Srok,id_service,id_klient) VALUES('"+this->textBox10->Text+"','"+this->textBox11->Text+"',"+Convert::ToInt32(this->textBox12->Text)+","+Convert::ToInt32(this->textBox13->Text)+")"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Добавление записи в таблицу клиент-услуга');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } if(ChoiseToLV2==5) { String ^q="insert into services (Opisanie,Stoimost)VALUES('"+this->textBox10->Text+"',"+Convert::ToInt32(this->textBox11->Text)+")"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Добавление записи в таблицу услуги');"; cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); rdr=cmd->ExecuteReader(); rdr->Close(); } rdr->Close(); cn->Close(); } //Действия, происходящие при внесении данных в поле ввода номера private: System::Void comboBox2_TextUpdate(System::Object^ sender, System::EventArgs^ e) { cn->Open(); String ^q="SELECT surname FROM Klient WHERE num like '"+this->comboBox2->Text+"%';"; System::Data::OleDb::OleDbCommand^cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn); System::Data::OleDb::OleDbDataReader ^rdr=cmd->ExecuteReader(); while(rdr->Read()) { this->comboBox1->Text=Convert::ToString(rdr[0]); } rdr->Close(); cn->Close(); } Заключение Данная курсовая работа заключала в себе анализ и создание базы данных для аварийной службы. Целью курсовой работы является развитие навыков проектирования информационных систем и закрепление знаний, полученных за время изучения дисциплины "Базы данных". Цели и задачи были полностью выполнены. Это означает, что материал по дисциплине "База данных" был полностью усвоен и принят за основу моему дальнейшему развитию. Список литературы 1. Дейт, К. Дж. Введение в системы Баз Данных, 7-е издание.: Пер. с англ. Ю.Г. Гордиенко; Под ред. А.В. Слепцова / К. Дж. Дейт - М.: Издательский дом "Вильямс", 2001. – 1072с. 2. Роб, П., Коронел, К. Системы баз данных: проектирование, реализация и управление.- 5-е изд., перераб. и доп./ Пер. с англ. А. Никифоров; Под ред. Е. Кондукова / П. Роб, К. Коронел – СПб.: БХВ – Петербург, 2004. – 1040 с. 3. Вендров, A. M. Проектирование программного обеспечения информационых систем: Учебник / A. M. Вендров. - М.: "Финансы и статистика", 2000. - 352 с. 4. Калянов, Г. Н. CASE. Структурный системный анализ / Г.Н. Калянов. - М.: Лори, 1996. - 437 с. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||