Проектирование программного приложения
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ
КАФЕДРА
ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И ПРОГРАММИРОВАНИЯ
Курсовая работа
По теме:
«проектирование
программного приложения»
Для
Железнодорожное
управление вокзала города Энска
Специальность:
071900 –
Информационные системы в
Факультет ОТФ–2, курс 1, семестр 2
Выполнила: Сушевская И.С..
Группа: ИТ0901
Вариант: 20
Руководитель:
Загвоздкина А.В.
Задание на курсовую работу:
Железнодорожное
управление вокзала города Энска
заказало логотип, рекламный ролик
и программу обслуживания железнодорожных
касс. Программа накапливает
Пояснительная записка:
- File Dialogs CALLBACK.cpp
- INT_PTR CALLBACK InfoDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
INT_PTR CALLBACK ViewDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) Основное окно. Считывает из файла записи и помещает названия городов в список городов. Взаимодействует с элементами окна, со списком городов, получает номер выбранной записи и вызывает функцию, заполняющую окошки. У функции есть кнопки «добавить запись» (вызывает диалоговое окно и после работы с ним заново заполняет список городов), «изменение записи» (получает номер записи, осуществляет проверку на выбор записи, вызывает диалоговое окно заполняет список фамилий заново, иначе выдает сообщение об ошибке). Кнопка «Изменение пометки на удаление» получает номер записи, читает с файла информацию, помечает запись и заполняет окошки диалогового окна заного, также осуществляет проверку на правильность выбора записи. Кнопка удаления записей с пометкой вызывает функцию удаления и перезаполняет список. Кнопка основной задачи обработки информации вызывает диалоговое окно /*и заполняет список*/. Стандартная кнопка закрытия диалогового окна выходит из диалоговой процедуры.
INT_PTR CALLBACK AddDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) Функция обратного вызова для добавления записи в файл. Читает из окон ввода информацию, и если условия ввода не нарушены, функция ставит начальные условия и записывает информацию в файл.
INT_PTR CALLBACK ChangeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) Функция для изменения записи. Вызывает диалоговое окно для изменения записи, и , если условия ввода измененной информации не нарушены, изменяет запись.
INT_PTR CALLBACK DoDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) Функция обратного вызова для пересчета недогруженных маршрутов и выводит измененную информацию.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) Функция инициализирует диалоговое окно, имеет одну кнопку, закрывающую диалог.
- File Files.cpp
fstream& ReadInfo(fstream& File, Record& Info, int N) Функцияя считывает информацию из файла с определенной позиции
fstream& WriteInfo(fstream& File, Record& Info, int N) Записывает в файл в определённую позицию
void DeleteInfo(fstream& File) удаление помеченных на удаление записей. Функция задаёт имя временного файла, создаёт для него поток. Пока возможно чтение с файла, если пометка на удаление отсутствует, помещает запись во временный файл. Удаляет исходный файл, а временный файл переименовывает в исходный.
- File Dialogs Func.cpp
void ClearAll(HWND hDlg) Очистка списка и полей
void FillList(HWND hDlg, fstream& File)Заполнение списка названий городов.
void ClearEdits(HWND hDlg) Очистка записей в окошках и установление пометки с положение «не отмечено».
void FillEdits(HWND hDlg, Record& Info)Заполнение полей информацией,которую передаем
bool GetInfo(HWND hDlg, Record& Info)Получаем информацию из полей
bool ChangeInfo(HWND hDlg, Record& Info)Изменяем запись в поле
- File paint.cpp
void paint(HWND hWnd,HDC hdc,int colour,ShapeSize shapeSize)
рисует логотип
относительно полученных данных, выбранных
пользователем, либо установленных
по умолчанию (набор цветов и размер).Высчитывает
область для рисования. При минимальном
размере вызывает функцию, рисующую
рекламу.
void reclama(HWND hWnd, HDC hdc ) Использует
массив из строчек типа TCHAR и в двух циклах
прорисовывает два столбца рекламного
текста.
- File kursovaya.cpp
int APIENTRY _tWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
ATOM MyRegisterClass(HINSTANCE hInstance)
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- File kursovaya.h
В этом файле прописаны прототипы функций, определены структуры, подключены нужные файлы.
- File Resource.h
Здесь определены «дефайны» (наборов цветов. кнопок, листбоксов, диалоговых окон, элементов меню и т.д.)
Эскизы
рекламной заставки
и логотипа:
File Files.cpp
#include "stdafx.h"
#include "kursovaya.h"
fstream& ReadInfo(fstream& File, Record& Info, int N)// функцияя считывания информации из файла
{
File.clear();
switch(N)//переход к нужной записи
{
case -1:
case 0:
break;
default:
File.seekp( (N-1)*( ALLLEN*sizeof(char)) , ios::beg);
}
File >> Info.Delete
>>Info.City
>>Info.Count
>>Info.Places
>>Info.Passengers;
if(!File && !File.eof())
{
MessageBox(NULL, "O", "O", MB_OK);
}
return File;
}
fstream& WriteInfo(fstream& File, Record& Info, int N)//функция записи в файл
{
File.clear();
switch(N)//переход в нужное место файла
{
case -1:
break;
case 0:
File.seekp(0, ios::end);
break;
default:
File.seekp( (N-1)*( ALLLEN*sizeof(char)) , ios::beg);
}
File << setw(INTLEN+1) << Info.Delete;
File << setw(STRLEN+1) <<Info.City;
File << setw(INTLEN+1) <<Info.Count;
File << setw(INTLEN+1) <<Info.Places;
File
<< setw(INTLEN+1) <<Info.Passengers;
return File;
}
void DeleteInfo(fstream& File)//функция удаления помеченных записей
{
Record Info;
File.clear();
File.seekp(0,
ios::beg);
TCHAR BufferFile[] = "BUF.txt";
//создание временного файла. помещение в него записей,непомеченных на удаление.
//удаление
настоящего файла и
fstream
File1(BufferFile, ios::in|ios::out|ios::trunc);
while(ReadInfo(File, Info) )
{
if(!Info.Delete)
{
WriteInfo(
}
}
File.close();
File1.close();
remove(FileName );//удаление настоящего фйла
rename(BufferFile,
}
File paint.cpp
#include "stdafx.h"
#include "kursovaya.h"
void paint(HWND hWnd,HDC hdc,int colour,ShapeSize shapeSize)
{
POINT pt={0,0};
RECT rect;
GetClientRect(hWnd,&
int yCl=(rect.bottom - rect.top);
int xCl=(rect.right - rect.left);
double x1 = xCl/15;//одна клеточка по горизонтали
double y1 = yCl/7;//по
вертикали
if(shapeSize==MIN) // привязка к клиентскому окну для рекламы
{
y1=y1*0.5;
x1=x1*0.5;
yCl=yCl*0.5;
xCl=xCl*0.5;
pt.x=30;
pt.y=-45;
reclama(hWnd,hdc);
}
SetMapMode(hdc,MM_ISOTROPIC);
SetWindowExtEx(hdc,xCl,
SetViewportExtEx(hdc,
SetViewportOrgEx(hdc,pt.
COLORREF
col[4][3]={{RGB(205,133,63),
{RGB(10,255,22),RGB(87,186,47)
HBRUSH
hBrush=CreateSolidBrush(col[
HBRUSH
oldBrush=(HBRUSH)SelectObject(
for (int i=0; i<3;i++)
Rectangle(hdc,x1+
DeleteObject((HBRUSH)hBrush);
HBRUSH hBrush1 = CreateSolidBrush(col[colour][
SelectObject(hdc,(
for (int i=0; i<2; i++)
Rectangle(hdc,0,
DeleteObject(
HPEN
hpen = CreatePen(PS_SOLID,7,col[
HPEN
oldPen=(HPEN)SelectObject(hdc,
POINT N[4]={{x1*1.5,y1*2.5},
{x1*2.0, y1*4.5},
{x1*3.0,y1*2.5},
{x1*3.5,y1*4.5}};
Polyline(hdc,N,4);
POINT S[6]={{x1*6.5,y1*3},
{x1*7.5, y1*2.5},
{x1*8.5,y1*3},
{x1*6.5,y1*4},
{x1*7.5,y1*4.5},
{x1*8.5,y1*4}};
Polyline(hdc,S,6);
POINT K[3]={{x1*13.5,y1*4.5},
{x1*11.5,y1*3.5},
{x1*13.5,y1*2.5}};
Polyline(hdc,K,3);
MoveToEx(hdc,K[1].x,K[0]
LineTo(hdc,K[1].x,K[2].
DeleteObject(
}
void reclama(HWND hWnd, HDC hdc )
{
TCHAR* line[7] ={ "\tЖД г.Энск",
// макрос RGB задает палитру цветов от RGB(255,255,255)белый,
// до RGB(0,0,0) черный
HPEN hPen0 =
CreatePen(PS_SOLID,1,RGB(250,
HPEN
hOldPen= (HPEN)SelectObject(hdc,hPen0);
static LOGFONT lf;
lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
// Шаг шрифта DEFAULT_PITCH по умолчанию
lf.lfItalic = TRUE;
// запрашивается курсивный шрифт, если TRUE
lf.lfWeight = FW_BOLD;
// жирность шрифта 0(FW_DONTCARE),100,200,... 700,..,900
// значение 0 предписывает выбрать вес по умолчанию
lf.lfHeight = 70;
lf.lfCharSet = DEFAULT_CHARSET;
// код используемого
набора символов
HFONT hFont0 = CreateFontIndirect(&lf);
HFONT
hOldFont = (HFONT)SelectObject(hdc,
SetTextColor(hdc,RGB(0,
RECT rect;
GetClientRect(hWnd,&
int x=rect.right/2+50, y=30;
const int xVE = rect.right - rect.left; // 760
const int yVE = rect.bottom - rect.top;// 485
int tabStop[] ={ xVE/80, xVE/5, -xVE/2,-(xVE-2*x)};
int dY=0;
LONG w=TabbedTextOut (hdc,x,y,line[0],wcslen(line[
tabStop,x);
dY=HIWORD(w)- 5;
y=y+1*dY/4;
int cv=50;
int h[]={50,50,50};
for( int i=1; i<4; ++i)
{ y=y+dY;
lf.lfHeight = h[i-1];
hFont0 = CreateFontIndirect(&lf);
DeleteObject(SelectObject(hdc,
SetTextColor(hdc,RGB(150,150,
TabbedTextOut (hdc,x,y,line[i],wcslen(line[
tabStop,x);
}
SetTextColor(hdc,RGB(0,0,0));
lf.
lf.lfHeight=30;
lf.lfWidth =23 ;
lf.lfWeight=500;
lf.lfUnderline=
hFont0 = CreateFontIndirect(&lf);
SelectObject(hdc,
for(int i=4; i<7; i++)
{
static int uu = 45,vv=200;
TextOut(hdc,
}
DeleteObject(SelectObject(hdc,
DeleteObject(
GetClientRect(hWnd,&
}
File Dialogs Func.cpp
#include "stdafx.h"
#include "kursovaya.h"
void ClearAll(HWND hDlg)//очистка списка и полей
{
SendMessage(
GetDlgItem(hDlg, IDC_LIST_CITY), LB_RESETCONTENT, 0, 0);
ClearEdits(hDlg);
}
void FillList(HWND hDlg, fstream& File)//заполнение списка названий городов.
{
File.clear();
File.seekp(0,
ios::beg);
Record
Info;
for(int i = 0; ReadInfo(File, Info, i+1); i++)
{
SendMessage( GetDlgItem(hDlg, IDC_LIST_CITY), LB_ADDSTRING, 0, (LPARAM)Info.City);
}
}
void ClearEdits(HWND hDlg)
{
SetDlgItemText(hDlg, IDC_EDIT_COUNT, "");
SetDlgItemText(hDlg, IDC_EDIT_PLACES, "");
SetDlgItemText(hDlg,
IDC_EDIT_PASSENGERS, "");
SendMessage( GetDlgItem(hDlg, IDC_CHECK_DELETE), BM_SETCHECK, BST_UNCHECKED, 0);
}
void FillEdits(HWND hDlg, Record& Info)//заполнение полей информацией,которую передаем
{
SetDlgItemInt(hDlg, IDC_EDIT_COUNT, Info.Count, FALSE);
SetDlgItemInt(hDlg, IDC_EDIT_PLACES, Info.Places, FALSE);
SetDlgItemInt(hDlg,
IDC_EDIT_PASSENGERS, Info.Passengers, FALSE);
SendMessage( GetDlgItem(hDlg, IDC_CHECK_DELETE), BM_SETCHECK, (Info.Delete == false) ? BST_UNCHECKED : BST_CHECKED, 0);
}
bool GetInfo(HWND hDlg, Record& Info)//получаем информацию из полей
{
BOOL CopyCount, CopyPlaces, CopyPassengers;
GetDlgItemText(hDlg, IDC_EDIT_CITY, Info.City, STRLEN);
Info.Count = GetDlgItemInt(hDlg, IDC_EDIT_COUNT, &CopyCount, FALSE);
Info.Places = GetDlgItemInt(hDlg, IDC_EDIT_PLACES, &CopyPlaces, FALSE);
Info.Passengers
= GetDlgItemInt(hDlg, IDC_EDIT_PASSENGERS, &CopyPassengers, FALSE);
if(!CopyCount || !CopyPlaces || !CopyPassengers || !*Info.City)
{
return false;
}
return true;
}
bool ChangeInfo(HWND hDlg, Record& Info)//изменяем запись в поле
{
BOOL CopyCount, CopyPlaces, CopyPassengers;
TCHAR City[STRLEN];
GetDlgItemText(hDlg, IDC_EDIT_CITY, City, STRLEN);
int Count = GetDlgItemInt(hDlg, IDC_EDIT_COUNT, &CopyCount, FALSE);
int Places = GetDlgItemInt(hDlg, IDC_EDIT_PLACES, &CopyPlaces, FALSE);
int Passengers = GetDlgItemInt(hDlg, IDC_EDIT_PASSENGERS,
&CopyPassengers, FALSE);
if(CopyCount)
{
Info.Count = Count;
}
if(CopyPlaces)
{
Info.Places = Places;
}
if(CopyPassengers)
{
Info.Passengers = Passengers;
}
if(*City)
{
wcscpy(Info.City, City);
}
return true;
}
File Dialogs.cpp
#include "stdafx.h"
#include "kursovaya.h"
int N;
INT_PTR CALLBACK InfoDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(