Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / курсач.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
616.16 Кб
Скачать

Список литературы

  1. Подбельский В.В. Язык Си++. - М: Финансы и статистика, 1996.

  2. Финогенов К.Г. Прикладное программирование для Windows на Borland

  1. С++. - Обнинск: Принтер, 1999

  2. T.Сван. Программирование для Windows в Borland C++.- М: Бином, 1995. Ю.А.Щупак - Win32 API. Разработка приложений для Windows. -

СПб.: Питер, 2008.

  1. Черкасова Н.И. Тексты лекций по дисциплине «Операционные системы»

для студентов специальности 220100 дневного обучения, часть 2,.- М.,

РИО МГТУ ГА, 2017.

  1. Язык программирования С++ http://cppstudio.com

  2. Форум программистов и сисадминов Киберфорум www.cyberforum.ru

  3. Е.А. Конова, Г.А. Поллак. Алгоритмы и программы. Язык С++: учебное пособие. – 4-е изд., стер. – Санкт-Петербург: Лань, 2019.

  4. ЯЗЫК C++ И ПРОГРАММИРОВАНИЕ НА НЁМ Учебное пособие Корректура Д.В. Заремба Компьютерная верстка Д.В. Сотникова Дизайн обложки Т.В. Буланова, 2021

Приложение 1

Листинг программы

#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>

#include <string>

#include <vector>

#include <map>

#include <fstream>

#include <iostream>

#include <sstream>

#include <algorithm>

#include <codecvt>

#include "commctrl.h"

#define OnYearChoose_Clicked 100

#define OnAboutProgram_Clicked 200

#define OnExitProgram_Clicked 201

#define IDC_COMBOBOX 300

struct operatorData {

std::string name;

int abonent;

COLORREF color;

};

// Функция для чтения данных абонентов из файла

std::map<int, std::vector<operatorData>> readabonentData(const std::string& filename);

// Обработчик сообщений окна

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

// Функция для рисования гистограммы

void DrawHistogram(HWND hwnd, const std::vector<operatorData>& data, int year);

// Функция для очистки окна

void ClearWindow(HWND hwnd);

// Главная функция приложения Win32

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

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

const wchar_t CLASS_NAME[] = L"operatorabonentHistogram";

// Структура, описывающая класс окна

WNDCLASS wc = {};

// Указываем функцию обработки сообщений окна

wc.lpfnWndProc = WindowProc;

// Указываем экземпляр приложения

wc.hInstance = hInstance;

// Указываем имя класса окна

wc.lpszClassName = CLASS_NAME;

std::getline(ss, color);

unsigned int r, g, b;

sscanf(color.c_str(), "#%02X%02X%02X", &r, &g, &b);

COLORREF operatorColor = RGB(r, g, b);

data[year].push_back({ operatorName, abonent, operatorColor });

}

file.close();

return data;

}

// Функция для рисования гистограммы

void DrawHistogram(HWND hwnd, const std::vector<operatorData>& data, int year) {

if (data.empty()) {

return;

}

PAINTSTRUCT ps;

HDC hdc = BeginPaint(hwnd, &ps);

RECT rect;

GetClientRect(hwnd, &rect);

int barWidth = rect.right / data.size();

int maxHeight = rect.bottom - 50;

std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;

int max_abonent = std::max_element(data.begin(), data.end(),

[](const operatorData& a, const operatorData& b) {

return a.abonent < b.abonent;

})->abonent;

for (size_t i = 0; i < data.size(); i++) {

const auto& operatorr = data[i];

HBRUSH brush = CreateSolidBrush(operatorr.color);

HBRUSH oldBrush = static_cast<HBRUSH>(SelectObject(hdc, brush));

int barHeight = static_cast<int>(operatorr.abonent * maxHeight / max_abonent);

Rectangle(hdc, i * barWidth, rect.bottom - barHeight, (i + 1) * barWidth, rect.bottom);

SelectObject(hdc, oldBrush);

DeleteObject(brush);

SetTextColor(hdc, RGB(0, 0, 0));

SetBkMode(hdc, TRANSPARENT);

std::wstring wide_operatorr_name = converter.from_bytes(operatorr.name);

TextOutW(hdc, i * barWidth, rect.bottom - barHeight - 20, wide_operatorr_name.c_str(), wide_operatorr_name.size());

}

// Вывод текущего отображаемого года

SetTextColor(hdc, RGB(0, 0, 0));

SetBkMode(hdc, TRANSPARENT);

std::wstring yearText = L"Year: " + std::to_wstring(year);

TextOutW(hdc, 240, rect.bottom - 440, yearText.c_str(), yearText.size());

EndPaint(hwnd, &ps);

}

// Функция создания меню

void CreateMenu(HWND hwnd)

{

HMENU hRootMenu = CreateMenu();

HMENU hSubMenu = CreateMenu();

AppendMenu(hSubMenu, MF_STRING, OnAboutProgram_Clicked, L"О программе");

AppendMenu(hSubMenu, MF_SEPARATOR, 0, NULL);

AppendMenu(hSubMenu, MF_STRING, OnExitProgram_Clicked, L"Выход");

AppendMenu(hRootMenu, MF_POPUP, (UINT_PTR)hSubMenu, L"Меню");

SetMenu(hwnd, hRootMenu);

}

Приложение 2. Алгоритм функция для рисования гистограммы

Рисунок 12. Алгоритм функция для рисования гистограммы

Рисунок 12.1. Продолжение алгоритма функция для рисования гистограммы

Соседние файлы в папке курсовая