Профессиональный модуль

ПМ.01Разработка программных модулей программного обеспечения для компьютерных систем

МДК.01.01 Системное программирование

Специальность 230115 Программирование в компьютерных системах

Учебная практика УП.01.01.

Профессиональные компетенции:

Таблица 1

Профессиональные и общие компетенции

Показатели оценки результата

ПК1.1. Выполнять разработку спецификаций отдельных компонент.

Создание отдельных компонент

Выполнение спецификаций компонент

ПК 1.2. Осуществлять разработку

кода программного продукта на основе готовых спецификаций на уровне модуля.

Выполнение создания кода программного продукта на уровне модуля в соответствии с требованиями к готовому программному продукту.

Разработка пользовательского интерфейса.

ПК 1.3. Выполнять отладку программных модулей с использованием специализированных программных средств.

Использование специализированных программных средств отладки программных модулей.

Разработка компонент программных модулей с использованием современных инструментальных средств и технологий.

ПК 1.4. Выполнять тестирование программных модулей.

Выполнение тестирования качества разработки программных модулей с помощью разработанных тестовых наборов и сценариев.

Определение ошибок в программном коде с использованием тестовых наборов.

ПК 1.5. Осуществлять

оптимизацию программного кода

модуля

Выявление избыточности кода программного продукта и его оптимизация.

Анализ оптимизации программного кода модуля.

ПК 1.6. Разрабатывать компоненты проектной и технической документации с использованием графических языков спецификаций.

Использование инструментальных средств и графических языков спецификаций для создания компонент проектной и технической документации.

Оформление проектной и технической документации в соответствии со стандартами.

Постановка задачи:

НЕ нашли? Не то? Что вы ищете?

Разработать оконное приложение для операционной системы Windows

с использованием низкоуровневых средств программирования - набора базовых интерфейсов программирования приложений для OS Windows Win32 API (Application programming interface) для ввода исходных данных с бланков, имеющих одинаковую форму, и сохранения их в файле.

Варианты форм бланков представлены в локальной сети в папке:

«Учебная практика УП.01.01» -> «Варианты заданий по учебной практике».

Цель: создать приложение, позволяющее вводить информацию с бланков, имеющих одинаковую форму, и сохранять её в заданном файле.

Назначение приложения:

Создание электронной базы информации, хранящейся на бланках, имеющих одинаковую форму.

Предъявляемые требования к приложению:

Приложение должно иметь удобный для пользователя интерфейс.

Ввод данных пользователем производится с экрана монитора. Данные сохраняются в файл, указанный пользователем.

Приложение должно быть разработано с использованием элементов управления и других необходимых элементов интерфейса.

Организация диалога для выбора файла должна осуществляться после нажатия кнопки «Сохранить как».

Сохранение введённых данных с одного бланка должно осуществляться после нажатия кнопки «Сохранить».

Удаление введённых данных с одного бланка должно осуществляться после нажатия кнопки «Очистить».

Выход из приложения должен осуществляться после нажатия кнопки «Выйти».

Образец бланка:

Этапы работы:

1. Постановка задачи.

2. Определение входных и выходных данных.

3. Разработка вариантов отладки.

4. Разработка алгоритма программы в виде блок-схемы.

5. Написание и отладка кода модуля программы.

6. Тестирование программы.

7 Разработка документации к приложению.

Документация должна разрабатываться поэтапно.

Требования к содержанию документации к приложению:

Пояснительная записка:

Алгоритм

Входные данные

Выходные данные

Варианты отладки

Блок-схема главной программы Win Main

Блок-схема оконной функции WndProc

Блок-схема решения квадратного уравнения

Описание программы.

Среда разработки Microsoft Visual C++ Express Edition

Основные компоненты приложения

Каркас Windows-приложения

Обрабатываемые сообщения

Используемые глобальные и статические переменные

Используемые дескрипторы

Используемые директивы препроцессора

Используемые контексты устройств

Ввод данных

Вывод данных

Описание графического интерфейса программы

Описание языка ГОСТ 19.506-78 ЕСПД

Создание проекта в среде Microsoft Visual C++ 2008 Express Edition

Используемые типы переменных

Используемые функции библиотеки Win32 API

Используемые структуры языка С++

Используемые операторы языка С++

Тестирование программы

Текст программы.

Макет приложения для обработки информации на бланке и сохранения её в заданном файле:

// praktika. cpp : Defines the entry point for the application.

//

#include "stdafx. h"

#include "praktika. h"

#include "stdafx. h"

#include <math. h>

#include <sstream>

#include <iostream>

#include <string>

#include <windows. h>

#include <commdlg. h>

#include <stdio. h>

//Определить идентификатор кнопки «загрузить»:

#define IDB_Load 1

#define IDB_Load2 2

// --- Описание функции главного окна

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

// --- Глобальные переменные

HINSTANCE hInst; // Дескриптор экземпляра приложения

char ClassName[]="Window"; // Название класса окна

char AppTitle[]="Ввод данных"; // Заголовок главного окна

static UINT ID_button1=3;

static HWND hButton1;

static UINT ID_button2=4;

static HWND hButton2;

static UINT ID_edit1=5;

static HWND hedit1;

static int priznak = 0;

// --- Функция WinMain

int WINAPI WinMain(

HINSTANCE hInstance, // Дескриптор экземпляра приложения

HINSTANCE hPrevInstance, // В Win32 всегда равен NULL

LPSTR lpCmdLine, // Указатель на командную строку. Он позволяет

// приложению получать данные из командной строки.

int nCmdShow // Определяет, как приложение первоначально

// отображается на дисплее: пиктограммой

// (nCmdShow = SW_SHOWMINNOACTIVE)

// или в виде открытого окна

//(nCmdShow = SW_SHOWNORMAL).

)

{

WNDCLASS wc; // Структура для информации о класса окна

HWND hWnd; // Дескриптор главного окна приложения

MSG msg; // Структура для хранения сообщения

// Сохраняем дескриптор экземпляра приложения в глобальной переменной,

// чтобы при необходимости воспользоваться им в функции окна.

hInst=hInstance;

// --- Проверяем, было ли приложение запущено ранее.

// Воспользуемся функцией FindWindow, которая позволяет найти окно верхнего

// уровня по имени класса или по заголовку окна:

// HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName);

// Через параметр lpClassName передается указатель на текстовую строку, в которую

// необходимо записать имя класса искомого окна. На базе одного и того же класса

// можно создать несколько окон. Если необходимо найти окно с заданным заголовком,

// то имя заголовка следует передать через параметр lpWindowName. Если же подойдет

// любое окно, то параметр lpWindowName может иметь значение NULL.

if((hWnd=FindWindow(ClassName, NULL))!=NULL)

{

// Пользователь может не помнить, какие приложения уже запущены,

// а какие нет. Когда он запускает приложение, то ожидает, что на экране

// появится его главное окно. Поэтому, если приложение было запущено

// ранее, целесообразно активизировать и выдвинуть на передний план

// его главное окно. Это именно то, к чему приготовился пользователь.

if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);

SetForegroundWindow(hWnd);

// Найдена работающая копия - работа новой копии прекращается.

return FALSE;

}

// --- Работающая копия не найдена - функция WinMain приступает к инициализации.

// Заполнение структуры WNDCLASS для регистрации класса окна.

memset(&wc, 0, sizeof(wc));

wc. lpszClassName=ClassName; // Имя класса окон

wc. lpfnWndProc=(WNDPROC)WndProc; // Адрес оконной функции

wc. style=CS_HREDRAW|CS_VREDRAW; // Стиль класса окон

wc. hInstance=hInstance; // Экземпляр приложения

wc. hIcon=LoadIcon(NULL, IDI_APPLICATION); // Пиктограмма для окон

wc. hCursor=LoadCursor(NULL, IDC_ARROW); // Курсор мыши для окон

wc. hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // Кисть для окон

wc. lpszMenuName=NULL; // Ресурс меню окон

wc. cbClsExtra=0; // Дополнительная память

wc. cbWndExtra=0; // Дополнительная память

// Pегистрация класса окна.

RegisterClass(&wc);

// Создаем главное окно приложения.

hWnd=CreateWindow(

ClassName, // Имя класса окон

AppTitle, // Заголовок окна

WS_OVERLAPPEDWINDOW, // Стиль окна

10, 10, 600, 600,

NULL, // Дескриптор окна-родителя

NULL, // Дескриптор меню окна

hInst, // Дескриптор экземпляра приложения

NULL); // Дополнительная информация

if(!hWnd)

{

// Окно не создано, выдаем предупреждение.

MessageBox(NULL,"Create: error",AppTitle, MB_OK|MB_ICONSTOP);

return FALSE;

}

// Отображаем окно.

ShowWindow(hWnd, nCmdShow);

// Обновляем содержимое клиентской области окна.

UpdateWindow(hWnd);

hButton1 = CreateWindow("button", "Сохранить как" , WS_CHILD|WS_VISIBLE| BS_PUSHBUTTON, 10, 520, 110, 20, hWnd, (HMENU)IDB_Load, hInstance, NULL);

hButton2 = CreateWindow("button", "Выйти" , WS_CHILD|WS_VISIBLE| BS_PUSHBUTTON, 130, 520, 50, 20, hWnd, (HMENU) IDB_Load2, hInstance, NULL);

hedit1 = CreateWindow("Edit", "" , WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS| WS_BORDER|ES_LEFT, 200, 20, 100, 20, hWnd, (HMENU)ID_edit1, hInstance, NULL);

// Запускаем цикл обработки очереди сообщений. Функция GetMessage получает

// сообщение из очереди, выдает false при выборке из очереди сообщения WM_QUIT

while(GetMessage(&msg, NULL, 0, 0))

{

// Преобразование некоторых сообщений, полученных с помощью клавиатуры

TranslateMessage(&msg);

// Отправляем сообщение оконной процедуре

DispatchMessage(&msg);

}

return msg. wParam;

}

// --- Функция окна

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{ int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

char file_name[100]="";// имя файла

char *str="Вывод текста в окне";

OPENFILENAME ofn;// структура, описывающая вид диалога

switch (message)

{

case WM_COMMAND:

wmId = LOWORD(wParam);

wmEvent = HIWORD(wParam);

// Разобрать выбор в меню:

switch (wmId)

{

case IDB_Load:

memset(&ofn, 0, sizeof(OPENFILENAME));// заполнить нулями структуру ofn

//заполним только основные поля

ofn. lStructSize=sizeof (OPENFILENAME);// размер структуры

ofn. Flags=OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY;// внешний вид

ofn. hwndOwner=hWnd;// идентификатор окна, создавшего диалоговое окно

ofn. lpstrDefExt="txt";

ofn. lpstrFile= file_name;// адрес строки, где будет содержаться имя выбранного файла, самое нужное поле

ofn. lpstrFilter="Text Files\0*.txt;Any Files\0*.*\0\0";

ofn. lpstrInitialDir="C:\\";// с какой папки начать просмотр

//ofn. lpstrTitle="Загрузить данные из файла:";//заголовок диалога

ofn. lpstrTitle="Сохранить как:";//заголовок диалога

ofn. nFilterIndex=1;

ofn. nMaxFile=100;// размер буфера для записи пути к файлу

//SetWindowText( hStatic, str); // выведем информацию в окно

if (GetSaveFileName(&ofn))// вызвать стандартный диалог

{

FILE* fw=fopen(ofn. lpstrFile,"w+");

priznak = 1;

// fprintf(fw,"%s",str);

}

// если была нажата кнопка «Отмена»

else {MessageBoxA(hWnd, "Не выбран файл! Нажмите кнопку «Сохранить как»"," Сообщение " , MB_OK);

priznak = 0;

}

case IDB_Load2:

DestroyWindow(hWnd);

break;

}

break;

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

TextOut(hdc,20,20,str, strlen(str)); // Нарисовать текст

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}