Профессиональный модуль
ПМ.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;
}


