Скачать .docx |
Курсовая работа:
МИНИСТЕРТВО ОБРАЗОВАНИЯ И НАУКИ УКРИИНЫ
ДОНЕЦКИЙ ПОЛИТЕХНИЧЕСКИЙ ТЕХНИКУМ
КУРСОВАЯ РАБОТА
«Технологии разработки программного обеспечения»
для специальности 5.080405 «Программирование для электронно-вычислительной техники та автоматизованих систем»
Тема: «Учёт экспорта фирмы»
Выполнил:
студент группы ПЕС 07-1
Айнетдинов И.Р.
Проверила:
Федорина Т.В.
Донецк 2011
СОДЕРЖАНИЕ
Введение
1. Техническое задание.
1.1. Назначение разработки.
1.2. Требований к программному средству.
1.3. Требований к программной документации.
1.4 Определение структуры входных выходных данных
1.5. Стадий и этапы разработки. Модель жизненного цикла.
2. Системный анализ и анализ потребностей.
3. Проектирование программного продукта.
4. Разработка программного средства.
4.1. Разработка алгоритма решения задачи.
4.2. Описание алгоритма решения задачи.
4.3. Разработка интерфейса ПС.
4.4. Описание структуры исходной информации.
5. Тестирование и отладка.
5.1. Выбор методов тестирования.
5.2. Нахождение и ликвидация ошибок.
6. Руководство системного программиста.
7. Руководство программиста.
8. Пособие пользователя.
9. Оценка проекта.
Выводы.
Список используемой литературы.
Приложение А. Диаграммы UML
Приложение Б. Листинг
Приложение В. Результаты работы
ВВЕДЕНИЕ
UML — язык графического описания для объектного моделирования в области разработки программного обеспечения. UML является языком широкого профиля, это открытый стандарт, использующий графические обозначения для создания абстрактной модели системы, называемой UML-моделью. UML был создан для определения, визуализации, проектирования и документирования в основном программных систем. UML не является языком программирования, но в средствах выполнения UML-моделей как интерпретируемого кода возможна кодогенерация.
Преимущества UML
1. UML объектно-ориентированный, в результате чего методы описания результатов анализа и проектирования семантически близки к методам программирования на современных ОО-языках;
2. UML позволяет описать систему практически со всех возможных точек зрения и разные аспекты поведения системы;
3. Диаграммы UML сравнительно просты для чтения после достаточно быстрого ознакомления с его синтаксисом;
4. UML расширяет и позволяет вводить собственные текстовые и графические стереотипы, что способствует его применению не только в сфере программной инженерии;
5. UML получил широкое распространение и динамично развивается.
CASE-средства. Общая характеристика
CASE-средства позволяют проектировать любые системы на компьютере. Необходимый элемент системного и структурно-функционального анализа, CASE-средства позволяют моделировать бизнес-процессы, базы данных, компоненты программного обеспечения, деятельность и структуру организаций. Применимы практически во всех сферах деятельности. Результат применения CASE-средств - оптимизация систем, снижение расходов, повышение эффективности, снижение вероятности ошибок.
Современные CASE-средства охватывают обширную область поддержки многочисленных технологий проектирования ИС: от простых средств анализа и документирования до полномасштабных средств автоматизации, покрывающих весь жизненный цикл ПО.
Целью данной работы является разработка программной системы «Учёт экспорта фирмы». Данная программная система обеспечивает функции:
1. Ввод данных;
2. Вывод данных;
3. Сохранение информации о фирме в базу данных;
4. Поиск выбранной информации по базы данных.
Задачами курсового проекта являются:
- анализ возможных подходов и методов решения с обоснованием выбранного подхода;
- выбор или разработка модели (математической, структурной, ин-формационной), необходимой для достижения цели;
- выбор эффективных алгоритмов с учетом их точности, устойчивости, сходимости;
- анализ полученных результатов работы программного обеспечения.
Название программной системы:
«Учёт экспорта фирмы». (УЭФ)
2. Техническое задание
2.1 Назначение разработки.
Разработать программу для учёта фирм экспортируемых товар а также учесть список поставщиков этих контор. Программа должна обеспечить сохранение данных на физической памяти компьютера.
Целью разработка программы является создание быстрого и качественного обслуживания, где требование заказчика будут учтены. Введен контроль срока выполнения работ, который необходимо установить при оформлении заказа.
Программа позволит быстро и просто сохранять данные о фирме, в зависимости от пожеланий клиента. Программа будет обладать простым, доступным и понятным интерфейсом, так что даже начинающий пользователь сможет быстро и без особых усилий разобраться в программном средстве.
Программы должна осуществлять просмотр уже имеющейся в базе данных информации, редактировать ее добавляя/удаляя записи или просто изменяя их, осуществлять поиск. Все эти действия выполняются с помощью графического интерфейса – экранной формы и его элементов.
В программе должны быть реализованы все необходимые функции для работы с данными:
· Добавление данных посредством заполнения пустых полей
· Удаление записей из базы данных
· Выполнение поиска по значению любого из вышеперечисленных полей
· Сохранение результата выполнения запроса в HTML файл
2.2. Требований к программному средству.
Данный программный продукт создавался на ПК с такими техническими характеристиками:
1. Тип компьютера: многопроцессорный компьютер с ACPI.2. Операционнаясистема: Microsoft Windows 7 Professional.
3. Объем оперативной памяти: 512Мб.4. Процессор: Intel(R) Pentium(R) 4CPU 2.70GHz.5. Монитор: SyncMaster 796MB/796MBplus.6. Средаразработки: Microsoft Visual C++ 6.0 Standard Edition.Программы используемые при написании данного продукта:
1) Microsoft Visual C++ 6.0
2) Rational rose 2000
Такие минимальные требования к техническим средствам нужны:
1) ОС Microsoft Windows XP
2) Intel Pentium II S300 500 МHz
3) 20 Mб ПЗУ
4) 128ОЗУ
5) VGA Ati Radeon 3410128MB
6) Microsoft Visual C++ 6.0
7) MS Excel 2003
8) MS Word 2010
9) Привод CD/DVD-ROM
10) Монитор
11) Клавиатура
12) Мышь
2.3. Требований к программной документации.
Разъяснительная записка должна быть выполнена согласно ГОСТам, действующим на данный момент:
ГОСТ 2.004-88 ЕСКД. Общие требования выполнению конструкторских и технологических документов на печатающих и графических устройствах вывода ЭВМ
ГОСТ 2.104-68 ЕСКД. Основные надписи.
ГОСТ 2.ЗО1-б8 ЕСКД. Форматы.
ГОСТ 19,106-78 ЕСПД. Требования программным документам выполненным печатным способом.
ГОСТ 19.404-79 ЕСПД, Пояснительная записка. Требования содержанию и оформлению.
ГОСТ 17.2-85 Правила оформления пояснительной записки и графической части дипломных и курсовых проектов.
ГОСТ 17.4-91 Правила оформления программной документации
ДСТУ 3008-95 Документація. Звіти у сфері науки і техніки. Структура і правила оформлення.
Область использования разработанного программного продукта.
Я разработал программу «Для учёта экспорта фирмы», которая может использоваться в сферах торговли, промышленности, и акционерном обществе.
На компьютере должна быть установлена операционная система Windows 7 Home/ Windows 7 Professional, наличие самой программы Microsoft Visual С++ или отдельных её библиотек необязательно.
2.4 Определение структуры входных/выходных данных
Введенные данные будут хранится в базе данных ychet.тхт. Его можно просмотреть с помощью Текстового редактора.
Таблица 1.1 - Определение структуры входних данных
Идентификатор | Тип | Диапазон значений | Объяснение | ||
m_kod | CString | [1…50] | Используется для ввода идентификационного номера записи |
||
m_firma | CString | [1…50] | Используется для ввода наименования фирмы | ||
m_prod | CString | [1…50] | Используется для ввода имени продавца | ||
m_kont | CString | [1…50] | Используется для ввода контакта | ||
m_pokyp | CString | [1…50] | Используется для ввода имени покупателя | ||
m_result |
CString | [1…50] | Используется для вывода искомых данных и для вывода оповещений |
2.5. Стадий и этапы разработки. Модель жизненного цикла.
Моделью конструирования своего программного обеспечения я выбрал классический жизненный цикл.
То есть разработка рассматривается как последовательность этапов. Добавлю также, что переход на следующий, иерархически нижний этап происходит только после полного завершения работ на текущем этапе.
Подразумевается, что разработка начинается на системном уровне и проходит через анализ, проектирование, кодирование, тестирование и сопровождение. При этом моделируются действия стандартного инженерного цикла.
Системный анализ задает роль каждого элемента в компьютерной системе, взаимодействие элементов друг с другом. Поскольку ПО является лишь частью большой системы, то анализ начинается с определения требований ко всем системным элементам и назначения подмножества этих требований программному «элементу». Необходимость системного подхода явно проявляется, когда формируется интерфейс ПО с другими элементами (картинками, ставкой и тд). На этом же этапе начинается решение задачи планирования проекта ПО. В ходе планирования проекта определяются объем проектных работ и их риск, необходимые трудозатраты, формируются рабочие задачи и план-график работ. На этом этапе рассматривалось, как именно будут взаимосвязаны в программе элементы, пользователь, интерфейс.
Анализ требований относится к программному элементу — программному обеспечению. Уточняются и детализируются все функции программы (Смена картинок, Суммирование выигрыша с капиталом, Сравнение картинок и тд.), характеристики и интерфейс программы.
Проектирование состоит в создании представлений:
- архитектуры ПО;
- модульной структуры ПО;
- алгоритмической структуры ПО;
- структуры данных;
- входного и выходного интерфейса.
Кодирование. На этом этапе диаграммы, которые были построены на этапе проектирования, переводятся в текст на языке программирования.
Тестирование — выполнение программы для выявления дефектов в функциях, логике и форме реализации программного продукта. На этом этапе были подготовлены тесты для проверки правильности работы программы.
Сопровождение — это внесение изменений в эксплуатируемое ПО. Цели изменений:
- исправление ошибок;
- адаптация к изменениям внешней для ПО среды;
- усовершенствование ПО по требованиям заказчика.
Сопровождение ПО состоит в повторном применении каждого из предшествующих шагов (этапов) жизненного цикла к существующей программе, но не в разработке новой программы.
Достоинства классического жизненного цикла: дает план и временной график по всем этапам проекта, упорядочивает ход конструирования.
Недостатки классического жизненного цикла:
1) реальные проекты часто требуют отклонения от стандартной последовательности шагов;
2) цикл основан на точной формулировке исходных требований к ПО (реально в начале проекта требования заказчика определены лишь частично);
3) результаты проекта доступны заказчику только в конце работы.
Входе работы на системный анализ было потрачено 6 дней, на анализ требований – 4 дней, на проектирование – 2 недели, на кодирование – 10 дней, на тестирование – 3 дня, на сопровождение – 1 день.
3. Системный анализ и анализ потребностей.
Программа состоит из нескольких функций. Рассмотрим их:
1. Сохранение данных
При нажатии на эту кнопку все поля заносяться в базу данных в строгом порядке. Если одно из полей не заполнено, то выводиться сообщение «Вы ввели не все поля».
2. Поиск
Поиск реализован очень удобно. Для того чтобы найти любые данные по определённому параметру нужно ввести в соответствующее поле свой запрос и нажать Поиск. В поле выведутся найденные данные по нашему запросу.
3. Следующая предыдущая запись.
Если в результате поиска есть несколько записей, то при помощи этих кнопок можно перелистывать предыдущую и следующую запись.
4. Удаление данных
Удаление данных реализовано на основе поиска. Для того чтобы удалить запись нужно найти её при помощи поиска, при потребности пролистать, а уже после нажав на кнопку «Удалить запись» удалиться запись. В функциональности программы также встроена функция ведения истории. При завершении программы все данные текущей сессии, записываются в отдельный файл, тем самым, если была изменена, внесена или удалена не та информация предыдущую базу можно вернуть.
5. Сохранение изменённых данных
В программе есть функция изменения уже имеющихся записей. Для изменения записи достаточно изменить данные, которые нужны, в поле и нажать кнопку «Сохранение найденной записи». При нажатии на кнопку данные будут сохраняться в базе данных.
4. Проектирование программного продукта.
Rational Software — компания-разработчик программного обеспечения. До 2003 года Rational была независимой компанией, в 2003 году компания была куплена фирмой IBM. Большинство продуктов компании предназначены для моделирования, а также для разработки и поддержки программного обеспечения.
Также в компании разработана методология разработки программного обеспечения — Rational Unified Process (RUP). В методологии даются рекомендации по всем этапам разработки: от моделирования бизнеса до тестирования и сдачи в эксплуатацию готовой программы.
1. Deployment diagram (Диаграмма развёртывания)
Диаграмма развёртывания, Deployment diagram — служит для моделирования работающих узлов (аппаратных средств, англ. node) и артефактов, развёрнутых на них. В UML 2 на узлах разворачиваются артефакты (англ. artifact), в то время как в UML 1 на узлах разворачивались компоненты. Между артефактом и логическим элементом (компонентом), который он реализует, устанавливается зависимость манифестации.
2. Use case diagram (диаграммы прецедентов)
Диаграмма прецедентов (Use case diagram, диаграмма вариантов использования) — диаграмма, на которой отражены отношения, существующие между акторами и прецедентами. Основная задача — представлять собой единое средство, дающее возможность заказчику, конечному пользователю и разработчику совместно обсуждать функциональность и поведение системы.
3. Activity diagram (диаграммы активности)
Это дальнейшее развитие диаграммы состояний. Фактически данный тип диаграмм может использоваться и для отражения состояний моделируемого объекта, однако, основное назначение Activity diagram в том, чтобы отражать бизнес-процессы объекта. Этот тип диаграмм позволяет показать не только последовательность процессов, но и ветвление и даже синхронизацию процессов. Этот тип диаграмм позволяет проектировать алгоритмы поведения объектов любой сложности, в том числе может использоваться для составления блок-схем.
4. State Maсhine diagram (диаграммы состояний)
Каждый объект системы, обладающий определенным поведением, может находится в определенных состояниях, переходить из состояния в состояние, совершая определенные действия в процессе реализации сценария поведения объекта. Поведение большинства объектов реальных систем можно представить с точки зрения теории конечных автоматов, то есть поведение объекта отражается в его состояниях, и данный тип диаграмм позволяет отразить это графически. Для этого используется два вида диаграмм: Statechart diagram (дмаграмма состояний) и Activity diagram (диаграмма активности).
5. Interaction diagram (диаграммы взаимодействия)
Диаграмма взаимодействия - это диаграмма, на которой представлено взаимодействие, состоящее из множества объектов и отношений между ними, включая и сообщения, которыми они обмениваются. Этот термин применяется к видам диаграмм с акцентом на взаимодействии объектов (диаграммах кооперации, последовательности и деятельности).
6. Class diagram (диаграммы классов)
Диаграмма классов представляет собой граф, вершинами которого являются элементы типа «классификатор», связанные различными типами структурных отношений. Диаграмма классов может также содержать интерфейсы, пакеты, отношения и даже отдельные экземпляры, такие как объекты и связи.
7. Collaboration diagram (диаграммы сотрудничества)
Диаграмма сотрудничества ( Collaboration diagram ) предназначена для описания методов взаимодействия между объектами. Для пояснения смысла и назначения диаграммы необходимо ввести такое понятие как сотрудничество.
8. Component diagram (диаграммы компонентов)
Диаграмма компонентов— статическая структурная диаграмма, показывает разбиение программной системы на структурные компоненты и связи (зависимости) между компонентами. В качестве физических компонент могут выступать файлы, библиотеки, модули, исполняемые файлы, пакеты и т. п.
5. Разработка программного средства.
5.1. Разработка алгоритма решения задачи.
5.2 Описание алгоритма решения задачи
Переход на предыдущую запись выполняется с помощью :
….
void CFilesDlg::OnButton3()
{ i--;
UpdateData();
m_result.Empty();
if (i>=1)
….
Переход на следующую запись выполняется с помощью :
….
void CFilesDlg::OnButton2()
{ UpdateData();
m_result.Empty();
if (i<=k)
{
….
Поиск выполняется с помощью :
….
void CFilesDlg::OnButton1()
{ UpdateData();
m_result.Empty();
if(m_kod!="")
Poisk(m_kod);
….
Сохранение результата запроса в виде HTML файла выполняется с помощью:
….
{
// Обновление переменных
UpdateData(true);
CString str;
CStdioFile fSave("zapros.html", CFile::modeCreate |
CFile::modeWrite |
CFile::typeBinary);
str+="<HTML> \n <TITLE>Результатвыполнениязапроса</TITLE> \n";
str+="<BODY> \n <FONT size=15>";
….
Удаление записи выполняется с помощью :
….
void CFilesDlg::OnButton5()
{
UpdateData();
m_FilePath="1.txt";//Инициализация переменной для хранения пути к файлу 1.txt
CStdioFile fOpen(m_FilePath,CFile::modeRead);//Открытиефайла 1.txt длячтения
CString s;
m_View.Empty();
….
Сохранение новой записи выполняется с помощью :
….
void CFilesDlg::OnSaveFile()
{
// Обновление переменных
UpdateData(true);
// Создание файла по заданному пути и открытие
// его на запись в двоичном режиме
CStdioFile fSave(m_FilePath, CFile::modeCreate |
CFile::modeWrite |
CFile::typeBinary);
….
5.3. РазработкаинтерфейсаПС.
В данной программе интерфейс является простым в использовании и не требует особых навыков для работы, даже начинающий пользователь сможет без особого труда разобраться с программой.
5.4. Описание структуры наследственных классов
Для реализации задания курсового проекта было решено использовать классы иерархии NFC. На основе существующих классов были определены конкретные классы для приложения CFileApp, CFileDlg, CaboutDLG, кроме функции базовых классов в классы приложения были внесены дополнительные функции для реализации добавления записи, удаления записи, поиска и просмотра. Так же были использованы функции для работы с текстовыми и HTML файлами.
CWinApp => CFileApp =>
virtual BOOL InitInstance();
CDialog => CAboutDlg
CDialog => CFilesDlg =>
void FillFileStatus();
CString m_FileTitle;
CString m_FilePath;
CString m_result;
CString m_kod;
CString m_firma;
CString m_prod;
CString m_kont;
CString m_pokyp;
virtual void Update();
virtual void Poisk(CString Lpsz);
virtual void Ochistka();
afx_msg void OnOpenFile();
afx_msg void OnSaveFile();
6. Тестирование и отладка.
6.1. Выбор методов тестирования.
Методы выявления ошибок. Программисту надо знать методы уменьшения числа ошибок и методы выявления ошибок. Рассмотрим наиболее эффективные.
а) Метод обзора кода. Это визуальный просмотр текста программы, анализ логики выполнения отдельных операторов Цель обзора - найти как можно больше ошибок в новом коде перед его первой компиляцией . Компилятор не рекомендуется применять даже для выявления синтаксических ошибок, как ни удивительно это покажется большинству программистов. Согласно статистике, компилятор языка Си++ не замечает 9,4% синтаксических ошибок и опечатки. Например, вместо индекса i используется j . И та, и другая переменные описаны в программе, поэтому такая ошибка компилятором не распознается, а на этапе тестирования время на устранение подобных ошибок увеличивается в десятки раз. По данным разных исследований, при обзоре кода одна ошибка выявляется и ликвидируется в среднем каждые 5-20 мин, на этапе тестирования модулей - каждые 15-30 мин и на этапе комплексного тестирования - каждые 8 ч.
б) Контрольный анализ.
Это процедура просмотра работ руководителем для выявления возможных ошибок . Проведение контрольного анализа периодически планируется для всех исполнителей на всех стадиях процесса разработки ПО . К этой работе привлекают руководителя проекта, программиста, работа которого анализируется, а также нескольких специалистов, знакомых с существом дела. Для просмотра выбирается одна какая-то часть системы, и каждому участнику анализа выдается соответствующая информация (например, документированный проект программы для оценивания этапа проектирования, текст кода при анализе этапа кодирования). В случае необходимости программист дает пояснения по рассматриваемому модулю. Целью проведения контрольного анализа является обнаружение ошибок , а не их исправление. Продолжительность этой процедуры невелика - не более двух часов. Объясняя проект другим, исполнитель может выявить неточно сформулированные спецификации, либо незаданные условия. Существенным является то, что такой анализ не имеет целью собственно оценку работы исполнителей. Иначе исполнитель мог бы попытаться скрыть существующие неясности либо представить все в розовом цвете.
в) Метод чтения программы. Часто используется опытными программистами для установления правильности системы. Является очень эффективным. При возникновении непонятной ошибки программист анализирует свою программу вместе с коллегами . Даже если коллеги ничего не могут сказать по существу, что вполне понятно, данный метод часто позволяет успешно определить ошибку. Ошибки обнаруживают, когда программист, к которому обратились за помощью, не понимая некоторых фрагментов, просит автора программы дать пояснения. Метод чтения программы зарекомендовал себя как один из самых эффективных в отношении стоимости методов обнаружения ошибок в системе. Для ускорения и повышения эффективности процесса отладки и выявления ошибок программисты используют специализированные средства такие как: DevPartner 64 - предназначен для отладки и выявления ошибок в 64-битных приложениях. Разработчики могут автоматически обнаруживать и диагностировать утечки памяти, переполнение буферов, некорректные вызовы интерфейсов API и другие распространенные ошибки программирования. В состав пакета включена 64-битная версия известного отладчика SoftICE , который предоставляет обзор всех данных и инструкций, используемых в 64-битном варианте операционной системы Windows XP . Новая реализация признанной технологии SoftICE позволяет выявить и проанализировать любые типы ошибок - от неверной ссылки в указателе до несоответствия типов данных. Реализована уникальная возможность переключения между представлениями работы ядра и приложения.
Я выбрал данный метод тестирования, так как он наиболее удобен при тестировании данного программного продукта и не сложен для программиста.
6.2. Нахождение и ликвидация ошибок.
Тестирование программы влияет на качество разрабатываемого программного продукта, чем больше проведено тестов, чем больше недочетов выявлено, тем успешнее продукт (при условии их исправления).
Тестирование курсового проекта проходило на каждом этапе его разработки, если выявлялись проблемы, они исправлялись сразу или в течение ближайшего времени, чтобы одни ошибки не повлекли за собой другие. Тестирование влечет за собой трату огромных сил на нахождение всевозможных проблем и их исправление, что могло вести к задержкам на этапе выполнения других функций.
В ходе тестирования были обнаружены следующие проблемы:
1) Неверно добавляется поставщик в файл.
Описание: новый поставщик записывался поверх старого;
Причина: курсор выставлен в начало файла, запись происходит поверх существующих элементов;
Решение: при открытии файла перед записью курсор переводился в конец файла;
2) Не работает сортировка.
Описание: при попытке сортировке выдавало ошибку ;
Причина: неверное присвоение переменной в классе Wizard;
Решение: переприсвоение переменной;
3) Не работает обновление поля таблицы.
Описание: при добавлении записи в базу, изменения не сохранялись; функция Update() выдавала ошибку;
Причина: неверная последовательность действий;
Решение: в начало функции добавил функцию Edit(), установил переменную m_bAdd=true. При переходе на след запись изменения сохраняются;
7. Руководство системного программиста
Программное средство не предъявляет к платформе, на которой будет функционировать никаких особенных требований. Единственным требование является своевременное получение ресурсов при исполнении. Программное средство можно определить как интерфейс.
8. Руководство програмиста
Программное средство не предъявляет особенных требований к платформе и к системе в целом.
Минимальные системные требования для нормальной эксплуатации программного средства:
1) ОС Microsoft Windows XP
2) Intel Pentium II S300 500 МHz
3) 20 Mб ПЗУ
4) 128ОЗУ
5) VGA Ati Radeon 3410128MB
6) Microsoft Visual C++ 6.0
7) MS Word 2007
9. Пособие пользователя.
Работа с программой начинается с ее запуска двойным кликом мыши на ярлыке Рисунок 9.1 Для того что бы добавить новую запись о фирме необходимо заполнить пустые поля показанные на рис. 9.2Рисунок 9.2После чего нажать на кнопку «Сохранить запись» после чего все данные сохранятся в текстовый файл 1.txt Для поиска необходимой вам записи необходимозаполнить интересующее вас пустое поле показанное на рис.2. А после нажать кнопку поиск Если результатом поиска является несколько записей, то для перехода между записями необходимо воспользоваться кнопками перемещения и Для удаления записи нужно воспользоваться клавишей удаления . Для создания HTML файла на основе результата выполненного запроса. Необходимо нажать на кнопку после чего будет создан HTML файла содержащий результат поиска.10.Оценка проекта.
- Шаг 1. Область назначения проектируемого продукта разбивается на ряд функций, каждую из которых можно оценить индивидуально:
f 1 , f 2 ,…, fn .
f 1= Запуск приложения
f 2= Информация о разработчике
f 3= Информация о программе
f 4= Ввод данных
f 5= Удаление данных
f 6= Сохранение запроса в HTML
f 7= Поиск
f 8= Сравнение картинок
f 9=выход
- Шаг 2. Для каждой функции fi , планировщик формирует лучшую LOCлучш i (FРлучш i ), худшую LOCхудш i (FРхудш i ) и вероятную оценку LOCвероятн i (FРвероятн i ). Используются опытные данные (из метрического базиса) или интуиция. Диапазон значения оценок соответствует степени предусмотренной неопределенности.
f 1
LOC Худш =0.085
LOC лучш =0.1
LOC вероят =0.092
f 2
LOC Худш =0.01
LOC лучш =0.004
LOC вероят =0.004
f 3
LOC Худш =0.01
LOC лучш =0.004
LOC вероят =0.005
f 4
LOC Худш =0.004
LOC лучш =0.01
LOC вероят =0.004
f 5
LOC Худш =0.035
LOC лучш =0.025
LOC вероят =0.028
f 6
LOC Худш =0.004
LOC лучш =0.01
LOC вероят =0.006
f 7
LOC Худш =0.005
LOC лучш =0.012
LOC вероят =0.008
f 8
LOC Худш =0.075
LOC лучш =0.09
LOC вероят =0.082
f 9
LOC Худш =0.006
LOC лучш =0.012
LOC вероят =0.008
- Шаг 3. Для каждой функции/ в соответствии с -распределением вычисляется ожидаемое значение LOC- (или FP-) оценки:
LOCож i =(LOCлучш i + LOCхудш i +4xLOCвероятн i )/ 6.
f1
LOCож i =(0.085+ 0.1 +4* 0.092)/ 60.09.
f2
LOCож i =(0.004+ 0.01 +4*0.004)/ 60.005.
f3
LOCож i =(0.004+ 0.01 +4*0.005)/ 60.006.
f4
LOCож i =(0.004+ 0.01 +4*0.004)/ 60.005.
f5
LOCож i =(0.025+ 0.035 +4*0.028)/ 60.029.
f6
LOCож i =(0.01+0.004 +4*0.006)/ 60.006.
f7
LOCож i =(0.005+ 0.012 +4*0.008)/ 60.008.
f8
LOCож i =(0.09+ 0.075 +4*0.082)/ 60.082.
f9
LOCож i =(0.006+ 0.01 +4*0.008)/ 60.008.
- Шаг 4. Определяется значение LOC- или FP-производительности разработки функции.
Используется один из трех подходов:
для i -й функции на основе метрики средней производительности вычисляется настраиваемая величина производительности:
ПРОИЗВi =ПРОИЗВср х(LOCср /LOCож i ),
LOCср=ПРОИЗВср
LOCср =(LOCож1 +LOCож2 +LOCож3 +LOCож4 +LOCож5 +LOCож6 +LOCож7 +LOCож8 +LOCож9 )/9=
=(0.092+0.005+0.006+0.005+0.029+0.006+0.008+0.082+0.008)/9=0.026
f 1
ПРОИЗВi =0.026*(0.026/0.092)0.007
f 2
ПРОИЗВi =0.026*(0.026/0.005)0.135
f 3
ПРОИЗВi =0.026*(0.026/0.006)0.113
f 4
ПРОИЗВi =0.026*(0.026/0.005) 0.135
f 5
ПРОИЗВi =0.026*(0.026/0.029)0.023
f 6
ПРОИЗВi =0.026*(0.026/0.006)0.113
f 7
ПРОИЗВi =0.026*(0.026/0.008)0.085
f 8
ПРОИЗВi =0.026*(0.026/0.082)0.008
f 9
ПРОИЗВi =0.026*(0.026/0.008)0.085
где LOCcp — средняя LOC-оценка, взятая из метрического базиса (соответствует средней производительности);
- Шаг 5. Вычисляется общая оценка затрат на проект: для первого подхода
.
ЗАТРАТЫ=(LOCож1 /ПРОИЗВ1 )+ (LOCож2 /ПРОИЗВ2 )+ (LOCож3 /ПРОИЗВ3 )+ +(LOCож4 /ПРОИЗВ4 )+ (LOCож5 /ПРОИЗВ5 )+ (LOCож6 /ПРОИЗВ6 )+ (LOCож7 /ПРОИЗВ7 )+ (LOCож8 /ПРОИЗВ8 )+ +(LOCож9 /ПРОИЗВ9 )= =(0.092/0.007)+(0.005/0.135)+(0.006/0.113)+(0.005/0.135)+(0.029/0.023)+(0.006/0.113)+(0.008/0.085)+(0.082/0.008)+(0.008/0.085) 0.028
- Шаг 6. Вычисляется общая оценка стоимости проекта: для первого и второго подходов
,
СТОИМОСТЬ = 312,9*1=312,9
где УД_СТОИМОСТЬср — метрика средней стоимости одной строки, взятая из метрического базиса.
УД_СТОИМОСТЬср =$1
СТОИМОСТЬ==(LOCож1 +LOCож2 +LOCож3 +LOCож4 +LOCож5 +LOCож6 +LOCож7 +LOCож8 +LOCож9 )x
УД_СТОИМОСТЬср =(0.092+0.005+0.006+0.005+0.029+0.006+0.008+0.082+0.008)*1=0.312
11. Вывод
В результате выполнения курсового проекта была создана программа «Учет экспорта фирмы», обеспечивающая основные функции работы с базой данных (просмотр, редактирование, добавление/удаление записей, поиск). Также мной были получены знания о работе с базами данных в среде VisualStudio С++, в частности о возможностях, предоставляемых пакетом MFC: механизмах соединения с файлами имеющими разрешение *.txt, методах, позволяющих осуществлять работу с базой данных (редактирование, добавление/удаление записей, поиск), а также появился интерес к дальнейшему, еще более углубленному изучению данной темы, для совершенствования знаний по ней.В ходе разработанного курсового проекта я закрепил и углубил теоретические знания, приобрел практические навыки по разработке и проектированию ПО. Изучил методы, языки и технологии разработки программных систем; овладел методами и средствами анализа, описания и проектирования человеко-машинного взаимодействия, инструментальными средствами разработки пользовательского интерфейса, освоил методы и средства тестирования, отладки и испытаний ПС; закрепил владение методами разработки и анализа алгоритмов, моделей и структур данных, объектов и интерфейсов.
Я считаю, что современные компьютеры необходимы человеку в работе. В дальнейшем, когда мир будет подрастать и развиваться, с ним будут меняться и технологии.
Самое лучшее, что с развитием компьютерных технологий развивается и такая сравнительно молодая наука, как программная инженерия. Она ориентирована на комплексное решение задач, связанных с разработкой особой разновидности сложных систем — программных систем.
Многие стереотипы и приемы, разработанные в физическом мире, оказались неприменимы к инженерии программных систем. Современное общество впадает во все большую зависимость от программных технологий и хочет чего-то новенького, свеженького. А программные системы можно всегда подвергать развитию и модернизации.
Поэтому современные программные инженеры всегда и везде востребованы.
Приложение А
Приложение Б Листинг программы// FilesDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Files.h"
#include "FilesDlg.h"
#include "Conio.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
CString text;
CString *p=new CString[100];
int k=0,i=0,q;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFilesDlg dialog
CFilesDlg::CFilesDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFilesDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFilesDlg)
m_View = _T("");
m_result = _T("");
m_kod = _T("");
m_firma = _T("");
m_prod = _T("");
m_kont = _T("");
m_svoboda = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_FileTitle = ""; // Начальная инициализация
m_FilePath = ""; // Начальная инициализация
}
void CFilesDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFilesDlg)
DDX_Control(pDX, IDC_View, m_ViewCtrl);
DDX_Text(pDX, IDC_View, m_View);
DDX_Text(pDX, IDC_EDIT5, m_result);
DDX_Text(pDX, IDC_1, m_kod);
DDX_Text(pDX, IDC_EDIT1, m_firma);
DDX_Text(pDX, IDC_EDIT2, m_prod);
DDX_Text(pDX, IDC_EDIT3, m_kont);
DDX_Text(pDX, IDC_EDIT4, m_svoboda);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFilesDlg, CDialog)
//{{AFX_MSG_MAP(CFilesDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_Save, OnSaveFile)
ON_EN_SETFOCUS(IDC_Status, OnSetfocusStatus)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_COMMAND(ID_MENUITEM32771, OnMenuitem32771)
ON_COMMAND(ID_MENUITEM32772, OnMenuitem32772)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFilesDlg message handlers
BOOL CFilesDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
return TRUE;
}
void CFilesDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CFilesDlg::Update()
{
m_FilePath="1.txt";//Инициализация переменной для хранения пути к файлу 1.txt
CStdioFile fOpen(m_FilePath,CFile::modeRead);//Открытиефайла 1.txt длячтения
CString s;
m_View.Empty();
text.Empty();// Очистка строк
// Организация построчного чтения текста, пока не будет достигнут конец файла
while(fOpen.ReadString(s))
{
m_View += s;
m_View += "\r\n";
}
text=m_View;//Инициализация переменной для хранения текста из файла
// Отображение файла
UpdateData(false);
// Закрытие файла
fOpen.Close();
}
void CFilesDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
Update();
}
HCURSOR CFilesDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CFilesDlg::OnSaveFile()
{
// Обновление переменных
UpdateData(true);
// Создание файла по заданному пути и открытие
// его на запись в двоичном режиме
CStdioFile fSave(m_FilePath, CFile::modeCreate |
CFile::modeWrite |
CFile::typeBinary);
fSave.WriteString(text);
if ((m_kod!="") || (m_firma!="") || (m_prod!="") || (m_kont!=""))
{ text="";
text+=m_kod;
text+=" ";
text+=m_firma;
text+=" ";
text+=m_prod;
text+=" ";
text+=m_kont;
text+=" ";
text+=" ";
fSave.WriteString(text);
Ochistka();
fSave.Close();// Закрытиефайла
Update();
UpdateData(false);
}
}
void CFilesDlg::Ochistka()
{m_kod.Empty();
m_firma.Empty();
m_prod.Empty();
m_kont.Empty();
m_svoboda.Empty();
}
void CFilesDlg::Poisk(CString stroka)
{ UpdateData();
m_result.Empty();
m_FilePath="1.txt";//Инициализация переменной для хранения пути к файлу 1.txt
CStdioFile fOpen(m_FilePath,CFile::modeRead);//Открытиефайла 1.txt длячтения
CString s;
while(fOpen.ReadString(s))
if (s.Find(stroka)>=0)
{
p[i]="";
p[i] += s;
k=i;
i++;
}
m_result+=p[0];
fOpen.Close();
UpdateData(false);
i=0;
Ochistka();
}
void CFilesDlg::OnSetfocusStatus()
{
// Переводфокусанадругое "текстовоеполе"
m_ViewCtrl.SetFocus();
}
void CFilesDlg::OnClose()
{
CDialog::OnClose();
}
void CFilesDlg::OnOK()
{
CDialog::OnOK();
}
void CFilesDlg::OnButton1()
{ UpdateData();
m_result.Empty();
if(m_kod!="")
Poisk(m_kod);
else
if(m_firma!="")
Poisk(m_firma);
else
if(m_prod!="")
Poisk(m_prod);
else
if(m_kont!="")
Poisk(m_kont);
else
if(m_svoboda!="")
Poisk(m_svoboda);
else m_result="Введите строку для поиска в одно из полей расположенных выше";
UpdateData(false);
}
void CFilesDlg::OnButton2()
{ UpdateData();
m_result.Empty();
if (i<=k)
{
m_result.Empty();
i++;
m_result=p[i];
}
else m_result+=p[k];
UpdateData(false);
}
void CFilesDlg::OnButton3()
{ i--;
UpdateData();
m_result.Empty();
if (i>=1)
{
m_result.Empty();
m_result+=p[i-1];
}
else m_result+=p[0];
UpdateData(false);
}
void CFilesDlg::OnButton4()
{
// Обновлениепеременных
UpdateData(true);
CString str;
CStdioFile fSave("zapros.html", CFile::modeCreate |
CFile::modeWrite |
CFile::typeBinary);
str+="<HTML> \n <TITLE>Результатвыполнениязапроса</TITLE> \n";
str+="<BODY> \n <FONT size=15>";
for (i=0;i<=k;i++)
{
str+=p[i];
str+="<BR>";
}
str+="</FONT></BODY> \n </HTML>";
fSave.WriteString(str);
fSave.Close();
}
void CFilesDlg::OnButton5()
{ UpdateData();
m_FilePath="1.txt";//Инициализацияпеременнойдляхраненияпутикфайлу 1.txt
CStdioFile fOpen(m_FilePath,CFile::modeRead);//Открытиефайла 1.txt длячтения
CString s;
m_View.Empty();
text.Empty();// Очистка строк
// Организация построчного чтения текста, пока не будет достигнут конец файла
while(fOpen.ReadString(s))
{ if (s.Compare(m_result)!=0)
{
text += s;
text += "\r\n";
}
}
m_result.Empty();
m_result+="Запись удалена из базы данных";
UpdateData(false);
// Закрытие файла
fOpen.Close();
OnSaveFile();
}
void CFilesDlg::OnMenuitem32771()
{
if (MessageBox("Выуверены?", "Question",
MB_ICONQUESTION|MB_OKCANCEL)==IDOK)
EndDialog(0);
}
void CFilesDlg::OnMenuitem32772()
{
CAboutDlg dlgAbout;//создаемобъект
dlgAbout.DoModal();//показываем
}
// FilesDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Files.h"
#include "FilesDlg.h"
#include "Conio.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
CString text;
CString *p=new CString[100];
int k=0,i=0,q;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFilesDlg dialog
CFilesDlg::CFilesDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFilesDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFilesDlg)
m_View = _T("");
m_result = _T("");
m_kod = _T("");
m_firma = _T("");
m_prod = _T("");
m_kont = _T("");
m_svoboda = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_FileTitle = ""; // Начальная инициализация
m_FilePath = ""; // Начальная инициализация
}
void CFilesDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFilesDlg)
DDX_Control(pDX, IDC_View, m_ViewCtrl);
DDX_Text(pDX, IDC_View, m_View);
DDX_Text(pDX, IDC_EDIT5, m_result);
DDX_Text(pDX, IDC_1, m_kod);
DDX_Text(pDX, IDC_EDIT1, m_firma);
DDX_Text(pDX, IDC_EDIT2, m_prod);
DDX_Text(pDX, IDC_EDIT3, m_kont);
DDX_Text(pDX, IDC_EDIT4, m_svoboda);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFilesDlg, CDialog)
//{{AFX_MSG_MAP(CFilesDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_Save, OnSaveFile)
ON_EN_SETFOCUS(IDC_Status, OnSetfocusStatus)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_COMMAND(ID_MENUITEM32771, OnMenuitem32771)
ON_COMMAND(ID_MENUITEM32772, OnMenuitem32772)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFilesDlg message handlers
BOOL CFilesDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
return TRUE;
}
void CFilesDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CFilesDlg::Update()
{
m_FilePath="1.txt";//Инициализация переменной для хранения пути к файлу 1.txt
CStdioFile fOpen(m_FilePath,CFile::modeRead);//Открытиефайла 1.txt длячтения
CString s;
m_View.Empty();
text.Empty();// Очистка строк
// Организация построчного чтения текста, пока не будет достигнут конец файла
while(fOpen.ReadString(s))
{
m_View += s;
m_View += "\r\n";
}
text=m_View;//Инициализация переменной для хранения текста из файла
// Отображение файла
UpdateData(false);
// Закрытие файла
fOpen.Close();
}
void CFilesDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
Update();
}
HCURSOR CFilesDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CFilesDlg::OnSaveFile()
{
// Обновление переменных
UpdateData(true);
// Создание файла по заданному пути и открытие
// его на запись в двоичном режиме
CStdioFile fSave(m_FilePath, CFile::modeCreate |
CFile::modeWrite |
CFile::typeBinary);
fSave.WriteString(text);
if ((m_kod!="") || (m_firma!="") || (m_prod!="") || (m_kont!=""))
{ text="";
text+=m_kod;
text+=" ";
text+=m_firma;
text+=" ";
text+=m_prod;
text+=" ";
text+=m_kont;
text+=" ";
text+=" ";
fSave.WriteString(text);
Ochistka();
fSave.Close();// Закрытиефайла
Update();
UpdateData(false);
}
}
void CFilesDlg::Ochistka()
{m_kod.Empty();
m_firma.Empty();
m_prod.Empty();
m_kont.Empty();
m_svoboda.Empty();
}
void CFilesDlg::Poisk(CString stroka)
{ UpdateData();
m_result.Empty();
m_FilePath="1.txt";//Инициализация переменной для хранения пути к файлу 1.txt
CStdioFile fOpen(m_FilePath,CFile::modeRead);//Открытиефайла 1.txt длячтения
CString s;
while(fOpen.ReadString(s))
if (s.Find(stroka)>=0)
{
p[i]="";
p[i] += s;
k=i;
i++;
}
m_result+=p[0];
fOpen.Close();
UpdateData(false);
i=0;
Ochistka();
}
void CFilesDlg::OnSetfocusStatus()
{
// Переводфокусанадругое "текстовоеполе"
m_ViewCtrl.SetFocus();
}
void CFilesDlg::OnClose()
{
CDialog::OnClose();
}
void CFilesDlg::OnOK()
{
CDialog::OnOK();
}
void CFilesDlg::OnButton1()
{ UpdateData();
m_result.Empty();
if(m_kod!="")
Poisk(m_kod);
else
if(m_firma!="")
Poisk(m_firma);
else
if(m_prod!="")
Poisk(m_prod);
else
if(m_kont!="")
Poisk(m_kont);
else
if(m_svoboda!="")
Poisk(m_svoboda);
else m_result="Введите строку для поиска в одно из полей расположенных выше";
UpdateData(false);
}
void CFilesDlg::OnButton2()
{ UpdateData();
m_result.Empty();
if (i<=k)
{
m_result.Empty();
i++;
m_result=p[i];
}
else m_result+=p[k];
UpdateData(false);
}
void CFilesDlg::OnButton3()
{ i--;
UpdateData();
m_result.Empty();
if (i>=1)
{
m_result.Empty();
m_result+=p[i-1];
}
else m_result+=p[0];
UpdateData(false);
}
void CFilesDlg::OnButton4()
{
// Обновлениепеременных
UpdateData(true);
CString str;
CStdioFile fSave("zapros.html", CFile::modeCreate |
CFile::modeWrite |
CFile::typeBinary);
str+="<HTML> \n <TITLE>Результатвыполнениязапроса</TITLE> \n";
str+="<BODY> \n <FONT size=15>";
for (i=0;i<=k;i++)
{
str+=p[i];
str+="<BR>";
}
str+="</FONT></BODY> \n </HTML>";
fSave.WriteString(str);
fSave.Close();
}
void CFilesDlg::OnButton5()
{ UpdateData();
m_FilePath="1.txt";//Инициализацияпеременнойдляхраненияпутикфайлу 1.txt
CStdioFile fOpen(m_FilePath,CFile::modeRead);//Открытиефайла 1.txt длячтения
CString s;
m_View.Empty();
text.Empty();// Очистка строк
// Организация построчного чтения текста, пока не будет достигнут конец файла
while(fOpen.ReadString(s))
{ if (s.Compare(m_result)!=0)
{
text += s;
text += "\r\n";
}
}
m_result.Empty();
m_result+="Запись удалена из базы данных";
UpdateData(false);
// Закрытие файла
fOpen.Close();
OnSaveFile();
}
void CFilesDlg::OnMenuitem32771()
{
if (MessageBox("Выуверены?", "Question",
MB_ICONQUESTION|MB_OKCANCEL)==IDOK)
EndDialog(0);
}
void CFilesDlg::OnMenuitem32772()
{
CAboutDlg dlgAbout;//создаемобъект
dlgAbout.DoModal();//показываем
}
Приложение ВРаспечатка результатов программы Рисунок В.1 Главная формаРисунок В.2 Оповещение после удаления записи
Рисунок В.3 Оповещение при нажатии поиска при незаполненных поля
Рисунок В.4 Поисковый запрос
Рисунок В.5 Результат поиска