Содержание
Введение4
1. Теоретическая часть5
1.1.Понятие файла и его структуры5
1.2.Операции над файлами7
1.3. Потоки ввода/вывода7
1.4.Файловый дескриптор9
1.5.Стандартные функции ввода-вывода языка Си9
2.Практическая часть13
2.1. Постановка задачи13
2.2. Анализ задачи13
2.3. Анализ данных14
2.4. Руководство пользователя15
Заключение17
Список использованных источников18
Приложение19
Выдержка из текста работы
Язык Си — это универсальный язык программирования, для которого характерны экономичность выражения, современный набор операторов и типов данных. Язык Си не является ни языком «очень высокого уровня», ни «большим» языком, и не предназначается для некоторой специальной области применения, но отсутствие ограничений и общность языка делают его для многих задач более удобным и эффективным, чем языки, предположительно более мощные. Операционная система, компилятор с языка Си и по существу все прикладные программы системы «ДЕМОС» написаны на Си. Язык Си не связан с какими-либо определенными аппаратными средствами или системами, и на нем легко писать программы, которые можно пропускать без изменений на любой ЭВМ, имеющей Си-компилятор.
Язык Си является универсальным языком программирования. Он первоначально появился в операционной системе UNIX, и развивался как основной язык систем, совместимых с ОС UNIX. Сам язык, однако, не связан с какой-либо одной операционной системой или машиной; и хотя его называют языком системного программирования, так как он удобен для написания операционных систем, он может использоваться для написания любых больших вычислительных программ, программ для обработки текстов и баз данных.
Язык Си — это язык относительно «низкого уровня». Это означает, что Си имеет дело с объектами того же вида, что и большинство ЭВМ, а именно, с символами, числами и адресами. Они могут объединяться и пересылаться посредством обычных арифметических и логических операций, осуществляемых реальными ЭВМ.
В языке Си отсутствуют операции, имеющие дело непосредственно с составными объектами, такими как строки символов, множества, списки или с массивами, рассматриваемыми как целое. Здесь, например, нет никакого аналога операциям PL/1, оперирующим с массивами и строками. Язык не предоставляет никаких других возможностей распределения памяти, кроме статического определения и механизма стеков, обеспечиваемого локальными переменными функциями. Сам по себе язык Си не обеспечивает никаких возможностей ввода-вывода. Все эти механизмы высокого уровня должны обеспечиваться явно вызываемыми функциями.
Аналогично, язык Си предлагает только простые, последовательные конструкции управления: проверки, циклы, группирование и подпрограммы, но не мультипрограммирование, параллельные операции, синхронизацию или сопрограммы.
Удержание языка в скромных размерах дает реальные преимущества. Так как Си относительно мал, он не требует много места для своего описания и может быть быстро выучен.
Компилятор с Си может быть простым и компактным. Это обеспечивает высокую степень мобильности языка. Поскольку типы данных и структуры управления, имеющиеся в Си, непосредственно поддерживаются большинством существующих ЭВМ, библиотека, необходимая во время прогона изолированных программ, оказывается очень маленькой. На СМ-4, например, она содержит только программы для 32-битового умножения и деления и для упрятывания и восстановления регистров при входе в функцию. Конечно, каждая реализация обеспечивает исчерпывающую, совместимую библиотеку функций для выполнения операций ввода-вывода, обработки строк и распределения памяти, но так как обращение к ним осуществляется только явно, можно, если необходимо, избежать их вызова; эти функции могут быть компактно написаны на самом Си.
Опять же из-за того, что язык Си отражает возможности современных компьютеров, программы на Си оказываются достаточно эффективными, так что не возникает побуждения писать вместо этого программы на языке ассемблера. Хотя Си соответствует возможностям многих ЭВМ, он не зависит от какой-либо конкретной архитектуры машины и в силу этого без особых усилий позволяет писать «переносимые» программы, т.е. программы, которые можно пропускать без изменений на различных аппаратных средствах.
Язык Си не является языком со строгими типами данных в смысле Паскаля или Алгола-68. Он сравнительно снисходителен к преобразованию данных, хотя и не будет буйно преобразовывать типы данных подобно языку PL/1. Компилятор не предусматривает никакой проверки индексов массивов, типов аргументов и т.д. во время выполнения программы.
В тех ситуациях, когда желательна строгая проверка типов, используется специальная программа lint. Программа lint не генерирует машинного кода, а делает очень строгую проверку всех тех сторон программы, которые можно проконтролировать во время компиляции и загрузки. Она определяет несоответствие типов, несовместимость аргументов, неиспользованные или очевидным образом неинициализированные переменные, потенциальные трудности переносимости и т.д.
Из за того, что в языке отсутствуют средства ввода/вывода и т.п., при программировании на нем существенную роль играет библиотека стандартных программ, осуществляющих взаимодействие с системой. Во всех системах, совместимых с ОС UNIX, к которым относится и ДЕМОС, существует совместимый набор программ для ввода/вывода, управления памятью, преобразования данных и выполняющих другие функции, использование которых обеспечивает возможность переноса программ на другие ЭВМ.
1. Алгоритм решения
Основная часть программы реализует следующую последовательность действий:
1. Формирует на экране меню для выбора функций.
2. Ожидает выбора той или иной функции пользователем.
3. Выполняет соответствующий функциональный алгоритм.
4. После выполнения п.3 выполняется п.2 до тех пор, пока не будет совершен выход из программы.
Структурная схема алгоритма представлена ниже (рисунок 1).
Рисунок 1.
2. Описание программы
2.1 Элементы пользовательского интерфейса
Кнопки
При нажатии на кнопку «Полный перечень банков» в поле ListBox формируется список всех банков, для этого был написан цикл, который будет выполняться до тех пор, пока не закончится структура «Info».
При нажатии на кнопку «Накопительный вклад» в поле ListBox появляется банк, в котором для данного вида вклада наибольший процент в год, для определения этого банка был написан цикл, который ищет максимальное значение массива, созданного для записи числа, определяющего количество процентов для накопительного вклада.
При нажатии на кнопку «Сберегательный вклад» в поле ListBox появляется банк, в котором для данного вида вклада наибольший процент в год, для определения этого банка был написан цикл, который ищет максимальное значение массива, созданного для записи числа, определяющего количество процентов для сберегательного вклада.
При нажатии на кнопку «Депозит» в поле ListBox появляется банк, в котором для данного вида вклада наибольший процент за 3 года, для определения этого банка был написан цикл, который ищет максимальное значение массива, созданного для записи числа, определяющего количество процентов для депозита.
Поле Edit
При вводе в данное поле числа, определяющего количество лет, на которое будет сделан вклад и нажатии на кнопку «Выбрать» в поле ListBox появляется банк, соответствующий наиболее выгодным условиям для данного промежутка времени. Для определения этого банка было создано условие, связанное с количеством лет.
Если введено менее трех лет, то будет показан банк с наибольшим процентом среди двух видов вклада, а именно сберегательного и накопительного, если же введено 3 и более лет, то будет показан банк, в котором для вклада «Депозит» наибольший процент.
2.2 Описание функций
Функция WinMain предназначена для начала работы с WinApi, она имеет следующие параметры:
HINSTANCE hInstance — дескриптор экземпляра приложения. Этот дескриптор содержит адрес начала кода программы в ее адресном пространстве. Дескриптор hInstance чаще всего требуется функциям, работающим с ресурсами программы.
HINSTANCE hPrevInstance — дескриптор предыдущего экземпляра приложения.
LPSTR lpCmdLine — указатель на начало командной строки, введенной при запуске программы.
int nCmdShow — это значение содержит желаемый вид окна (например, свернутый или развернутый)
Функция GetMessage предназначена для «диалога с Windows», она имеет следующие параметры:
LPMSG lpMsg — указатель на структуру сообщения, в которую GetMessage вернет результат.
HWND hWnd — описатель окна, от которого GetMessage примет сообщение (NULL означает, что GetMessage принимает сообщения от всех окон, принадлежащих потоку).
UINT wMsgFilterMin — наименьший идентификатор сообщения, которое примет GetMessage.
UINT wMsgFilterMax — наибольший идентификатор сообщения, которое примет GetMessage (если в значениях параметров wMsgFilterMin и wMsgFilterMax передать 0, функция будет принимать ВСЕ сообщения).
Примечание: в Windows при каждом событии, произошедшем в системе, отсылается «сообщение Windows» («windows message»). Эти сообщения уведомляют программу о событиях в системе, а программа в свою очередь, может на них реагировать. Сообщения может отсылать не только Windows, но и сами приложения. Это является одним из способов организации связи между процессами в системе. Функция GetMessage не отдает управление программе, пока не придет какое-либо сообщение. Если пришедшее сообщение — WM_QUIT, функция GetMessage вернет 0. Тогда цикл прервется, и программа завершит свою работу. При любом другом сообщении функция GetMessage возвращает значение больше нуля, и начинатся выполнение тела цикла. При ошибкеGetMessage возвращает -1.
Функция RegisterClass предназначена для того, чтобы присвоить созданному окну класс, она имеет следующие параметры:
WNDPROC lpfnWndProc — адрес функции обработки сообщений.
HINSTANCE hInstance — уже знакомая переменная, описывающая экземпляр.
LPCTSTR lpszClassName — имя нового класса.
HICON hCursor — описатель курсора мыши.
HBRUSH hbrBackground — цвет рабочей области окна.
Функция CreateWindow предназначена для создания окна Windows, она имеет следующие параметры:
int x — позиция по горизонтали верхнего левого угла окна.
int y — позиция по вертикали.
2.3 Описание внутренних переменных, входных и выходных данных
Для создания списка коммерческих банков была создана структура под названием «Info», в которую включены 6 переменных для хранения названия, адреса, статуса (формы собственности) банка, а также накопительного, сберегательного и депозитного вклада.
Внутренние и глобальные переменные представлены в таблице 1, представленной ниже.
язык программирование функция интерфейс
Таблица 1.
Название |
Тип |
Назначение |
|
Глобальные переменные |
|||
Val |
Int |
Количество банков |
|
Структура Info |
|||
Title |
Char |
Название банка |
|
Adress |
Char |
Адрес |
|
Status |
Char |
Статус(форма собственности) |
|
Vklad1 |
Char |
Накопительный вклад |
|
Vklad2 |
Char |
Сберегательный вклад |
|
Vklad3 |
Char |
Депозит |
|
Функция main |
|||
Vklad1 |
Массив типа int |
Количество процентов для накопительного вклада |
|
Vklad2 |
Массив типа int |
Количество процентов для сберегательного вклада |
|
Vklad3 |
Массив типа int |
Количество процентов для депозита |
|
Year |
Int |
Запись введенного периода времени в переменную |
|
max, max2 |
Int |
Определение максимального процента для выбранного вклада |
|
imax, maxi |
Int |
Определение банка, в котором максимальный процент для выбранного вклада |
3. Инструкция пользователю
При открытии скомпилированного приложения «Spravochnik.exe» на экране появляется окно Windows под названием «Справочник коммерческих банков» (Рисунок 2). Программа ожидает выбора пользователем той или иной функции, предусмотренной данной программой. При нажатии на кнопку «Полный перечень банков» формируется список всех банков. При нажатии на кнопку «Накопительный вклад» появляется банк, в котором для данного вида вклада наибольший процент в год. При нажатии на кнопку «Сберегательный вклад» появляется банк, в котором для данного вида вклада наибольший процент в год. При нажатии на кнопку «Депозит» появляется банк, в котором для данного вида вклада наибольший процент за 3 года. При вводе количества лет, необходимо ввести число (целое или с отделением дробной части с помощью запятой), определяющего нужный Вам промежуток времени, после чего нажать на кнопку «Выбрать», при вводе чего-либо другого (какого-либо слова, буквы, символа) Вы не получите требуемого результата.
Внимание! Для обновления списка коммерческих банков Вам потребуются некоторые знания в программировании на языке Си.
Рисунок 2
4. Примеры работы программы
Полный перечень банков
Накопительный вклад
Вклад на 5 лет
Заключение
В ходе выполнения курсовой работы была создана программа «Список коммерческих банков», которая осуществляет подбор наиболее выгодных условиях для того или иного вида вклада, а также для того или иного промежутка времени.
Список литературы
При создании программы использовалась литература:
1. К. Поляков Программирование на языке Си 2012
2. Джесс Либерти — Освой самостоятельно С++ за 21 день, 2008.
3. Фролов А.В. Фролов Г.В. C++. Самоучитель, 2011.
Приложение (листинг программы)
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <winuser.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM RegMyWindowClass(HINSTANCE, LPCTSTR);
HWND hWnd;
HWND hButton1;
HWND hButton2;
HWND hButton3;
HWND hButton4;
HWND hButton5;
HWND hEdit1;
HWND hGroupBox;
HWND hListBox;
HWND hLabel1;
int Vklad1[5];
int Vklad2[5];
int Vklad3[5];
int year = 0;
int max, imax, max2, maxi = 0;
struct Info
char* Title;
char* Adress;
char* Status;
char* Vklad1;
char* Vklad2;
char* Vklad3;
char* Otstup;
const int val = 5;
Info inf[val];
LPCTSTR lpzClass = TEXT(«My Window Class!»);
LPCTSTR lpzButton = TEXT(«BUTTON»);
LPCTSTR lpzListBox = TEXT(«LISTBOX»);
LPCTSTR lpzLabel = TEXT(«STATIC»);
LPCTSTR lpzEdit = TEXT(«Edit»);
#define ID_Vklad1 1000
#define ID_Vklad2 1005
#define ID_Vklad3 1010
#define ID_Per 1020
#define ID_ListBox 1100
#define ID_Edit1 1001
#define ID_Year 3000
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
if (!RegMyWindowClass(hInstance, lpzClass))
return 1;
RECT screen_rect;
GetWindowRect(GetDesktopWindow(),&screen_rect);
int x = screen_rect.right / 2 — 275;
int y = screen_rect.bottom / 2 — 125;
hWnd = CreateWindow(lpzClass, TEXT(«Справочник коммерческих банков»),
WS_OVERLAPPEDWINDOW | WS_VISIBLE|WS_EX_APPWINDOW|LBS_NOTIFY, x, y, 900, 700, NULL, NULL, hInstance, NULL);
hGroupBox = CreateWindow(lpzButton,TEXT(«Выберите нужный Вам вклад»),WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|BS_GROUPBOX,10,10,860,100,hWnd,NULL,hInstance,NULL);
hButton1 = CreateWindow(lpzButton, TEXT(«Накопительный»),WS_CHILD|BS_PUSHBUTTON|BS_USERBUTTON|WS_VISIBLE, 20,40,130,20,hWnd,(HMENU)ID_Vklad1, hInstance,NULL);
hButton2 = CreateWindow(lpzButton, TEXT(«Сберегательный»),WS_CHILD|BS_PUSHBUTTON|BS_USERBUTTON|WS_VISIBLE, 20,70,130,20,hWnd,(HMENU)ID_Vklad2, hInstance,NULL);
hButton3 = CreateWindow(lpzButton, TEXT(«Полный перечень банков»),WS_CHILD|BS_PUSHBUTTON|BS_USERBUTTON|WS_VISIBLE, 200,70,200,20,hWnd,(HMENU)ID_Per, hInstance,NULL);
hButton4 = CreateWindow(lpzButton, TEXT(«Депозит»),WS_CHILD|BS_PUSHBUTTON|BS_USERBUTTON|WS_VISIBLE, 200,40,200,20,hWnd,(HMENU)ID_Vklad3, hInstance,NULL);
hButton5 = CreateWindow(lpzButton, TEXT(«Выбрать»),WS_CHILD|BS_PUSHBUTTON|BS_USERBUTTON|WS_VISIBLE, 640,70,200,20,hWnd,(HMENU)ID_Year, hInstance,NULL);
hLabel1 = CreateWindow(lpzLabel, TEXT(«Количество лет, на которое Вы хотите сделать вклад»),WS_VISIBLE|WS_CHILD, 470, 40, 370, 20, hWnd, NULL, hInstance, NULL);
hEdit1 = CreateWindow(lpzEdit, TEXT(«»),WS_VISIBLE | WS_CHILD | WS_BORDER| ES_LEFT,470,70,150,20,hWnd,(HMENU)ID_Edit1,hInstance,NULL);
hListBox = CreateWindow(lpzListBox, TEXT(«ListBox»),WS_VISIBLE|WS_CHILD|WS_BORDER|WS_VSCROLL|LBS_NOTIFY,10,120,860,540,hWnd,(HMENU)ID_ListBox,hInstance,NULL);
UpdateWindow(hWnd);
MSG msg = {0};
int iGetOk = 0;
while ((iGetOk = GetMessage(&msg, 0, 0, 0 )) > 0)
if (iGetOk == -1) return 3;
TranslateMessage(&msg);
DispatchMessage(&msg);
return msg.wParam;
ATOM RegMyWindowClass(HINSTANCE hInst, LPCTSTR lpzClassName)
WNDCLASS wcWindowClass = {0};
wcWindowClass.lpfnWndProc = (WNDPROC)WndProc;
wcWindowClass.style = CS_HREDRAW|CS_VREDRAW;
wcWindowClass.hInstance = hInst;
wcWindowClass.lpszClassName = lpzClassName;
wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wcWindowClass.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
return RegisterClass(&wcWindowClass);
LRESULT CALLBACK WndProc(
HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
switch (message)
case WM_CREATE:
inf[0].Title = «Сбербанк России»;
inf[0].Adress = «г. Новочеркасск, ул. Комитетская 45»;
inf[0].Status = «Открытое акционерное общество»;
inf[0].Vklad1 = «5 процентов в год»;
inf[0].Vklad2 = «10 процентов в год»;
inf[0].Vklad3 = «30 процентов в год»;
inf[0].Otstup = «»;
Vklad1[0] = 5;
Vklad2[0] = 10;
Vklad3[0] = 30;
inf[1].Title = «Банк ВТБ»;
inf[1].Adress = «г. Новочеркасск, ул. Комитетская, д. 56/64»;
inf[1].Status = «Открытое акционерное общество»;
inf[1].Vklad1 = «6 процентов в год»;
inf[1].Vklad2 = «11 процентов в год»;
inf[1].Vklad3 = «35 процентов в год»;
inf[1].Otstup = «»;
Vklad1[1] = 6;
Vklad2[1] = 11;
Vklad3[1] = 35;
inf[2].Title = «Банк Русский Стандарт»;
inf[2].Adress = «г. Новочеркасск, ул. Думенко 6»;
inf[2].Status = «Закрытое акционерное общество»;
inf[2].Vklad1 = «7 процентов в год»;
inf[2].Vklad2 = «12 процентов в год»;
inf[2].Vklad3 = «38 процентов в год»;
inf[2].Otstup = «»;
Vklad1[2] = 7;
Vklad2[2] = 12;
Vklad3[2] = 38;
inf[3].Title = «Банк Уралсиб»;
inf[3].Adress = «Ростов-на-Дону, ул. Красноармейская 188»;
inf[3].Status = «Открытое акционерное общество»;
inf[3].Vklad1 = «7 процентов в год»;
inf[3].Vklad2 = «13 процентов в год»;
inf[3].Vklad3 = «33 процента в год»;
inf[3].Otstup = «»;
Vklad1[3] = 7;
Vklad2[3] = 13;
Vklad3[3] = 33;
inf[4].Title = «Банк Петрокоммерц»;
inf[4].Adress = «г. Новочеркасск, ул. Московская, д. 1/90»;
inf[4].Status = «Открытое акционерное общество»;
inf[4].Vklad1 = «8 процентов в год»;
inf[4].Vklad2 = «14 процентов в год»;
inf[4].Vklad3 = «31 процент в год»;
inf[4].Otstup = «»;
Vklad1[4] = 8;
Vklad2[4] = 14;
Vklad3[4] = 31;
break;
case WM_COMMAND:
if((LOWORD(wParam) == ID_Per)){
SendMessage(hListBox, LB_RESETCONTENT,0,0);
for (int i=0;i<val;i++){
char string[255]={0};
strcpy(string, «Название: «);
strcat(string, inf[i].Title );
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Адрес: «);
strcat(string, inf[i].Adress);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Статус (форма собственности): «);
strcat(string, inf[i].Status);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Накопительный вклад: «);
strcat(string, inf[i].Vklad1);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Сберегательный вклад: «);
strcat(string, inf[i].Vklad2);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Депозит (без права возвращения денег в течении трёх лет): «);
strcat(string, inf[i].Vklad3);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «»);
strcat(string, inf[i].Otstup);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
if((LOWORD(wParam) == ID_Vklad1)){
SendMessage(hListBox, LB_RESETCONTENT,0,0);
max = Vklad1[0];
for(int i = 0; i < val; i++){
if (Vklad1[i] > max) {
max = Vklad1[i];
imax = i;
char string[255]={0};
strcpy(string, «Название: «);
strcat(string, inf[imax].Title );
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Адрес: «);
strcat(string, inf[imax].Adress);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Статус (форма собственности): «);
strcat(string, inf[imax].Status);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «—>Накопительный вклад: «);
strcat(string, inf[imax].Vklad1);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Сберегательный вклад: «);
strcat(string, inf[imax].Vklad2);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Депозит (без права возвращения денег в течении трёх лет): «);
strcat(string, inf[imax].Vklad3);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «»);
strcat(string, inf[imax].Otstup);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
if((LOWORD(wParam) == ID_Vklad2)){
SendMessage(hListBox, LB_RESETCONTENT,0,0);
max = Vklad2[0];
for(int i = 0; i < val; i++){
if (Vklad2[i] > max) {
max = Vklad2[i];
imax = i;
char string[255]={0};
strcpy(string, «Название: «);
strcat(string, inf[imax].Title );
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Адрес: «);
strcat(string, inf[imax].Adress);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Статус (форма собственности): «);
strcat(string, inf[imax].Status);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Накопительный вклад: «);
strcat(string, inf[imax].Vklad1);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «—>Сберегательный вклад: «);
strcat(string, inf[imax].Vklad2);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Депозит (без права возвращения денег в течении трёх лет): «);
strcat(string, inf[imax].Vklad3);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «»);
strcat(string, inf[imax].Otstup);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
if((LOWORD(wParam) == ID_Vklad3)){
SendMessage(hListBox, LB_RESETCONTENT,0,0);
max = Vklad3[0];
for(int i = 0; i < val; i++){
if (Vklad3[i] > max) {
max = Vklad3[i];
imax = i;
char string[255]={0};
strcpy(string, «Название: «);
strcat(string, inf[imax].Title );
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Адрес: «);
strcat(string, inf[imax].Adress);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Статус (форма собственности): «);
strcat(string, inf[imax].Status);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Накопительный вклад: «);
strcat(string, inf[imax].Vklad1);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Сберегательный вклад: «);
strcat(string, inf[imax].Vklad2);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «—>Депозит (без права возвращения денег в течении трёх лет): «);
strcat(string, inf[imax].Vklad3);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «»);
strcat(string, inf[imax].Otstup);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
if((LOWORD(wParam) == ID_Year)){
char in[255];
GetWindowText(hEdit1, in, GetWindowTextLength(hEdit1)+1);
year = atoi(in);
if(year>2 && year!=0){
SendMessage(hListBox, LB_RESETCONTENT,0,0);
max = Vklad3[0];
for(int i = 0; i < val; i++){
if (Vklad3[i] > max) {
max = Vklad3[i];
imax = i;
char string[255]={0};
strcpy(string, «Название: «);
strcat(string, inf[imax].Title );
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Адрес: «);
strcat(string, inf[imax].Adress);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Статус (форма собственности): «);
strcat(string, inf[imax].Status);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Накопительный вклад: «);
strcat(string, inf[imax].Vklad1);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Сберегательный вклад: «);
strcat(string, inf[imax].Vklad2);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «—>Депозит (без права возвращения денег в течении трёх лет): «);
strcat(string, inf[imax].Vklad3);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «»);
strcat(string, inf[imax].Otstup);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
else if(year<3 && year!=0 && year>0){
SendMessage(hListBox, LB_RESETCONTENT,0,0);
max = Vklad2[0];
for(int i = 0; i < val; i++){
if (Vklad2[i] > max) {
max = Vklad2[i];
imax = i;
max2 = Vklad1[0];
for(int i = 0; i < val; i++){
if (Vklad1[i] > max2) {
max2 = Vklad1[i];
maxi = i;
if(max>=max2){
char string[255]={0};
strcpy(string, «Название: «);
strcat(string, inf[imax].Title );
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Адрес: «);
strcat(string, inf[imax].Adress);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Статус (форма собственности): «);
strcat(string, inf[imax].Status);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Накопительный вклад: «);
strcat(string, inf[imax].Vklad1);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «—>Сберегательный вклад: «);
strcat(string, inf[imax].Vklad2);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Депозит (без права возвращения денег в течении трёх лет): «);
strcat(string, inf[imax].Vklad3);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «»);
strcat(string, inf[imax].Otstup);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
if(max2>=max){
char string[255]={0};
strcpy(string, «Название: «);
strcat(string, inf[maxi].Title );
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Адрес: «);
strcat(string, inf[maxi].Adress);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Статус (форма собственности): «);
strcat(string, inf[maxi].Status);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «—>Накопительный вклад: «);
strcat(string, inf[maxi].Vklad1);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Сберегательный вклад: «);
strcat(string, inf[maxi].Vklad2);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «Депозит (без права возвращения денег в течении трёх лет): «);
strcat(string, inf[maxi].Vklad3);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
strcpy(string, «»);
strcat(string, inf[maxi].Otstup);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(TCHAR*)string );
if((LOWORD(wParam) == ID_ListBox))
switch (HIWORD(wParam))
case LBN_SELCHANGE:
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
return 0;
Размещено на