Разработка электронного приложения "Инспектор процессов и потоков" - Программирование, компьютеры и кибернетика курсовая работа

Разработка электронного приложения "Инспектор процессов и потоков" - Программирование, компьютеры и кибернетика курсовая работа




































Главная

Программирование, компьютеры и кибернетика
Разработка электронного приложения "Инспектор процессов и потоков"

Разработка программного кода. Анализ набора функций, необходимых для реализации приложения. Создание компонента Timer. Получение списка имен процессов запущенных на локальном компьютере. Проверка правильности работы программы и соответствия требованиям.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Цель курсовой работы - разработать электронное приложение «инспектор процессов и потоков».
Исходя из цели курсовой работы, была освоена предметная область, соответствующая задаче, а так же язык программирования Си++. Интерфейс разработанной программы представлен в виде окна, состоящего из имен процессов локального компьютера, а также имен счётчиков производительности, в котором отображается результат их работы.
Разработанное электронное приложение может быть полезным для всех пользователей персонального компьютера, у которых есть необходимость в получении информации о том или ином процессе или о всех процессах в целом.
Была произведена апробация на нескольких учебных компьютерах, которая показала, что использование электронного приложения в среде С++Builder 6.0. позволяет получить информацию о всех процессах, которые были запущенны на этих компьютерах, что удовлетворяет требованиям задания.
Курсовая работа выполнена на 29 страницах и состоит из следующих этапов: анализ, проектирование, кодирование и тестирование, сопровождение программного обеспечения.
Пояснительная записка была оформлена в соответствии с методическими указаниями, регламентирующими общие положения выполнения, представления и защиты курсового проекта.
§ изучить и проанализировать учебно-методическую документацию, учебную литературу и интернет - источники по выбранной теме дисциплины;
§ выбрать наиболее оптимальный способ реализации поставленной цели;
§ определить набор функций, необходимых для реализации приложения;
-разработать и протестировать приложение «инспектор процессов и потоков». Конечным результатом данного проекта является программа «инспектор процессов и потоков».
Конструктивно курсовая работа состоит из 4 разделов.
В первом разделе работы проведён анализ предметной области, а также найдены существующие решения задачи. Описан способ его реализации с помощью библиотек Tool Help Library(THL) и Performance Data Helper (PDH).
Во втором разделе представлен план реализации приложения.
Третий раздел содержит функции и их параметры, по средствам которых производится решение задачи.
В последнем разделе тестирования приведен результат разработанной программы и оценена правильность его функционирования.
Сопровождение содержит описание работы приложения.
При написании было использовано 3 источника литературы. Основным был Таненбаум Э. «Современные Операционные системы».
Потоки и процессы -- это связанные понятия в вычислительной технике. Оба представляют из себя последовательность инструкций, которые должны выполняться в определенном порядке. Инструкции в отдельных потоках или процессах, однако, могут выполняться параллельно.
Процессы существуют в операционной системе и соответствуют тому, что пользователи видят как программы или приложения. Поток, с другой стороны, существует внутри процесса. По этой причине потоки иногда называются "облегченные процессы". Каждый процесс состоит из одного или более потоков.
Существование нескольких процессов позволяет компьютеру "одновременно" выполнять несколько задач. Существование нескольких потоков позволяет процессу разделять работу для параллельного выполнения. На многопроцессорном компьютере процессы или потоки могут работать на разных процессорах. Это позволяет выполнять реально параллельную работу.
Кроме этого, операционной системе для реализации планирования процессов требуется дополнительная информация: идентификатор процесса, состояние процесса, данные о степени привилегированности процесса, место нахождения кодового сегмента и другая информация. Информацию такого рода, используемую ОС для планирования процессов, называют дескриптором процесса.
Для получения информации о процессах в курсовом проекте были использованы две бибилиотеки: Tool Help Library(THL) и Performance Data Helper (PDH). С помощью библиотеки THL можно извлечь информацию о запущенных процессах: имя процесса, идентификатор процесса (PID), приоритет процесса, количество потоков, идентификатор процесса (PID) родителя. Этой информации не достаточно для решения поставленной задачи. Поэтому с помощью библиотеки THL будем извлекать только имя процесса, всю остальную информацию о процессах будем получать с помощью библиотеки PDH (информация извлекаемая с помощью библиотеки THL плюс загруженность процесса, виртуальная память, память подкачки). Для создания приложения будем использовать среду разработки С++Builder 6.0.
программный код локальный компьютер
Задача проектирования была разбита на несколько этапов:
1. Получение имени локального компьютера, на котором запущено приложение и создание запроса, который будет управлять собранными данными производительности процессов
2. Создание компонента Timer. В его обработчик события помещается основной код программы
3. Получение списка имен процессов запущенных на локальном компьютере
4. Удаление в имени процесса разрешения «exe»
5. Добавление порядкового номера к повторяющемуся имени процесса
6. Собрание необработанных значений данных для всех счетчиков в указанном запросе
После двух срабатываний таймера приложение заново составит список имен запушенных процессов и далее будет работать по вышеописанному алгоритму, но перед этим очистит список.
Для реализации выше описанного алгоритма необходимо создать на главной форме поле с использованием компонента StringGrid, которое представляет собой таблицу, содержащую строки. Это поле будет автоматически заполняться полученной информацией о счетчиках процессов и именами процессов локального компьютера. Также необходимо, чтобы эта информация постоянно обновлялась.
Так же на поле формы помещаем две кнопки с именами «Button1» и «Button2».
Кнопка «Button1» нужна для завершения выбранного пользователем процесса, а кнопка «Button2» для выхода и завершения работы приложения.
Помимо на форму помещается компонент класса TTimer с именем «Timer1»:
Этот компонент нужен для организации обновления значения счетчиков.
Рис.1.1 Главная форма приложения (Form1)
Целью данного этапа является программная реализация проектных решений, полученных на этапе проектирования, т.е. создание работоспособного программного продукта. Для реализации проекта выбран язык С++Builder 6.0, а так же воспользуемся функциями библиотек Tool Help Library (THL) и Performance Data Helper (PDH)
Для получения списка запущенных процессов необходимо инициализировать структуру PROCESSENTRY32:
DWORD dwSize; Размер струтуры в байтах
DWORD th32ProcessID; Идентификатор процесса
DWORD cntThreads; Число потоков в процессе
DWORD th32ParentProcessID; Идентификатор родительского процесса
LONG pcPriClassBase; Базовый приоритет какого-либо потока процесса
TCHAR szExeFile[MAX_PATH]; Имя исполняемого процесса
typedef PROCESSENTRY32* PPROCESSENTRY32;
Для использования данной функции необходимо подключить библиотеку tlhelp32.
HANDLE WINAPI CreateToolhelp32Snapshot (DWORD dwFlags,
Первый параметр dwFlags - определяет тип моментального снимка и указывает, какая именно информация интересует пользователя. В курсовом проекте используется значение TH32CS_SNAPPROCESS позволяющее получить список запущенных на локальном компьютере процессов.
Второй параметр th32ProcessID , указывает идентификатор процесса, для которого будет создаваться моментальный снимок Этот параметр в курсовом проекте устанавливаем NULL.
2. Извлечение информации о первом процессе, записанном в снимок
Будем использовать функцию Process32First
BOOL WINAPI Process32First (HANDLE hSnapshot, LPPROCESSENTRY32 lppe).
Данная функция возвращает TRUE, в случае успеха получения информации о первом процессе из снимка процессов и FALSE в обратном случае. Заполняет структуру lppe необходимой информацией о первом процессе из снимка, сделанного функцией CreateToolhelp32Snapshot.
3. Извлечение информации о других процессах, записанных в снимок
Будем использовать функцию Process32Next
BOOL WINAPI Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe).
Данная функция извлекает информацию о следующем процессе.
Первый параметр hSnapshot - дескриптор снимка, возвращаемый от предыдущего вызова функции СreateToolhelp32Snapshot.
Второй параметр lppe - адрес структуры PROCESSENTRY32.
Перед вызовом функции Process32First необходимо установить в поле dwSize структуры PROCESSENTRY32 значение, которое равно размеру самой структуры sizeof(PROCESSENTRY32), иначе функция возвращает ошибку.
На данном этапе отслеживается появление разрешения «exe» в имени процесса, а затем удаляется.
5. Получение порядкового номера для процессов с одинаковыми именами
В списке попадаются процессы с одинаковым именем, к повторяющемуся имени добавляется «#порядковый номер».
6. Получение имени локального компьютера
Используем функцию BOOL WINAPI GetComputerName( LPTSTR lpBuffer, LPDWORD lpnSize).
Первый параметр lpBuffer - указатель на буфер, который получает сетевое имя или кластерное виртуальное имя сервера.
Второй параметр lpnSize - определяет размер требуемого буфера, включая закончившийся нулевой символ.
Для создания нового запроса, который будет использоваться, чтобы управлять собранными данными производительности будем использовать функцию
PDH_STATUS PdhOpenQuery(LPCTSTR szDataSource,
Первый параметр szDataSource - строка, которая определяет имя файла журнала, из которого извлекаются данные о производительности. If NULL, performance data is collected from a real-time data source. Если NULL, данные о производительности собираются из источника данных в реальном времени.
Второй параметр dwUserData - определяемое пользователем значение, связанное с этим запросом. В нашем случае NULL.
При помощи функции PdhAddCounter добавляется счетчик к запросу, сделанному с помощью функции PdhOpenQuery.
PDH_STATUS PdhAddCounter ( PDH_HQUERY hQuery,
Первый параметр hQuery - Дескриптор запроса Этот дескриптор возвращен функцией PdhOpenQuery.
Второй параметр szFullCounterPath - строка с нулевым символом в конце, которая содержит путь счетчика.
Третий параметр dwUserData - определяемое пользователем значение. Это значение становится частью информацией счетчика. В нашем приложении NULL.
Четвертый параметр phCounter - дескриптор на счетчик, который был добавлен к запросу. Будем ссылаться на этот дескриптор в последующих запросах.
9. Собрание всех текущих необработанных значений данных для всех счетчиков в указанном запросе
PDH_STATUS PdhCollectQueryData(PDH_HQUERY hQuery).
Параметр hQuery - дескриптор запроса, для которого хотим собрать данные. Функция PdhOpenQuery возвращает этот дескриптор.
10. Получение информации для указанного счетчика
Получаем информацию для указанного счетчика с помощью
PDH_STATUS PdhGetFormattedCounterValue(PDH_HCOUNTER hCounter,
Первый параметр hCounter - дескриптор счетчика, для которого хотим получить информацию. Функция PdhAddCounter возвращает этот дескриптор.
Второй параметр dwFormat- определяет тип данных отформатированного значения. В приложении используем значение PDH_FMT_DOUBLE.
Третий параметр lpdwType- этот параметр является дополнительным. В нашем случае устанавливаем NULL.
Четвертый параметр pValue - структура PDH_FMT_COUNTERVALUE, которая получает значение счетчика.
11. Обновление списка запущенных процессов
Для этого надо сначала удалить счетчики из запроса это делаем функцией
PDH_STATUS PdhRemoveCounter (PDH_HCOUNTER hCounter).
Две следующие функции потребуются для завершения выделенного процесса в таблице. Это функция
HANDLE OpenProcess (DWORD dwDesiredAccess,
Функция возвращает дескриптор существующего процесса.
Первый параметр dwDesiredAccess - флаг определяющий доступ к процессу. В курсовой работе будем использовать флаг PROCESS_TERMINATE необходимый для завершения работы процесса с использованием функции TerminateProcess.
Второй параметр bIn-heritHandle - флаг, указывающий, является ли создаваемый дескриптор наследуемым. Он установлен в значение TRUE это означает, что дескриптор наследуемый.
Третий параметр dwProcessId - идентификатор процесса.
И вторая функция (строка 180) завершает работу заданного процесса и всех его потоков:
BOOL TerminateProcess(HANDLE hProcess,UINT uExitCode).
Первый параметр hProcess - дескриптор процесса.
Второй параметр uExitCode - код завершения процесса. Этот параметр в курсовом проекте устанавливаем NULL.
Функция используется для закрытия открытого дескриптора объекта
Параметр hObject - дескриптор объекта.
Для определения выделенной строки в данный момент времени воспользуемся обработчиком события таблицы OnSelectCell где переменная с получает номер выделенной строки.
Следующая переменная b получает идентификатор процесса (PID), но перед этим извлеченный идентификатор из таблицы переведем из типа AnsiString в тип int .
На данном этапе разработки необходимо проверить правильность работы программы и соответствие требованиям. При запуске приложение компилируется без ошибок и предупреждений. В поле отображаются имена запущенных процессов на данном локальном компьютере и все значения счетчиков. Таблица периодически обновляется.
Для тестирования данного приложения открывались программы «Блокнот» и «Word».В таблице отобразились запущенные процессы. При выделении пользователем одного из запущенных процессов после нажатия кнопки «Завершение процесса» процесс завершался.
Для проверки правильность отображения информации воспользуемся средствами ОС. Запустим диспетчер задач и откроем вкладку процессы, где хранится информация о процессах.
Как видно на рис 2.1-2.4 все имена процессов, их число, соответствующие идентификаторы и количество потоков в процессе полностью совпадают.
Проверим динамичность работы данного приложения. Для этого завершим несколько процессов. Для этого попробуем завершить процесс «Блокнот»
Как мы видим из рис 2.6 завершение процесса блокнот прошло успешно.
Для запуска приложения необходимо запустить исполняемый файл «Инспектор процессов». При запуске выводится список процессов, действующих в настоящий момент и информация о них. При нажатии кнопки «Завершение процесса» выделенный процесс в списке завершается, а при нажатии кнопки «Выход» приложение закрывается.
Но в процессе разработки приложения была выявлена одна проблема. Данное приложение не работает эффективно на компьютерах, у которых стоит англоязычная версия ОС Windows. Для устранения этой проблемы было создано два пакета программ как для русскоязычной версии Windows так и англоязычной. Для того, чтобы разработать приложение для англоязычной версии ОС была выбрана среда разработки Embarcadero C++Builder XE3.(Код программы представлен в приложении С). Но полностью решить возникшую проблему не удалось, так как функция PdhAddEnglishCounter, которая была использована для разработки приложения для англоязычных версий ОС, поддерживается лишь с версии ОС Vista и выше. На версиях ниже ОС Vista приложение с использованием этой функции работать не будет.
В рамках выполнения курсового проекта по дисциплине «Операционные системы» была изучена и проанализирована учебно-методическая документация, учебная литература и интернет - источники по выбранной теме дисциплины
Были рассмотрены различные методы решения этой задачи и выбран наиболее удобный вариант или алгоритм.
Был определен набор функций, необходимых для реализации поставленной цели.
Разработан программный код и произведена его отладка.
Итогом данного курсового проектирования является приложение «Инспектор процессов и потоков». Приложение позволяет получать подробную информацию о всех процесса, запущенных на локальном компьютере, при желании пользователя возможность завершения выбранного им процесса. Для проверки корректности работы программы было произведено несколько тестов, результаты которых не было выявлено явных ошибок в работе программы.
Для достижения цели были выполнены следующие задачи:
§ изучена и проанализирована учебно-методическая документация, учебная литература и интернет - источники по выбранной теме дисциплины;
§ выбран наиболее оптимальный способ реализации поставленной цели;
§ определен набор функций, необходимых для реализации поставленной цели;
§ разработано и протестировано приложение «Инспектор процессов и потоков»;
В результате выполнения курсового проекта цель достигнута, задачи полностью реализованы.
В качестве расширения возможностей приложения можно добавить новые функции или ряд счетчиков, а так же попробовать найти решение, которое поможет устранить проблему работы приложения на англоязычный версий ОС.
1. Пахомов Б.И. Самоучитель С\С++ и С++ Builder 2007. - СПб.: БХВ-Петербург, 2008. - 672 с.: ил. + Дистрибутив (на DVD)
2. П.В. Гришмановский, И.Н. Даниленко. - Курсовое проектирование. Разработка программного обеспечения. Методические указания к выполнению курсовых проектов для студентов специальностей 210100 «Управление и информатика в технических системах» и 220400 «Программное обеспечение вычислительной техники и автоматизированных систем». Сургут: Издательство СурГУ, 2004. - 23с
3. Таненбаум Э. «Современные Операционные системы»
Программный код заголовочного файла Unit 1. h :
__published:// IDE-managed Components
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall StringGrid1SelectCell(TObject *Sender, int ACol,
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
char computername[MAX_COMPUTERNAME_LENGTH];
__fastcall TForm1(TComponent* Owner);
char StrCounters[7][30]={"Идентификатор процесса",
__fastcall TForm1::TForm1(TComponent* Owner)
StringGrid1->Cells[1][0]="Имя образа";
StringGrid1->Cells[3][0]="Приоритет";
StringGrid1->Cells[4][0]="Кол-во потоков";
StringGrid1->Cells[5][0]="PID родителя";
StringGrid1->Cells[6][0]="Загр. процесса" ;
StringGrid1->Cells[7][0]="Вирт. память" ;
StringGrid1->Cells[8][0]="Память подк." ;
GetComputerName(computername,&size);
void __fastcall TForm1::Timer1Timer(TObject *Sender)
h=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
for (j=1;jRowCount);j++)
PdhRemoveCounter (*(HCOUNTER*)(StringGrid1->Objects[i][j]));
delete (HCOUNTER*)(StringGrid1->Objects[i][j]);
for(i=0; i < procnames->Count; i = j)
AnsiString name= procnames->Strings[i].SubString(procnames->Strings[i].Length()-2,3);
if (name == AnsiString("exe")||name == AnsiString("EXE"))
for(j = i+1;jCount&&procnames->Strings[i] == procnames->Strings[j]; j++ )
procnames->Strings[j]= procnames->Strings[j].SubString(1,procnames->Strings[j].Length()-4);
procnames->Strings[j]= procnames->Strings[j]+"#"+IntToStr(j-i);
procnames->Strings[i]= procnames->Strings[i].SubString(1,procnames->Strings[i].Length()-4);
for(j = i+1;jCount&&procnames->Strings[i] == procnames->Strings[j]; j++ )
procnames->Strings[j]= procnames->Strings[j]+"#"+IntToStr(j-i);
if (procnames->Strings[i]=="[System Process]")
for(i=0; i < procnames->Count; i++)
AnsiString pro = procnames->Strings[i];
AnsiString s=AnsiString("\\\\"+AnsiString(ComputerName)+"\\Процесс("+pro+")\\"+AnsiString(StrCounters[j]));
PdhAddCounter (hQuery, s.c_str(), 0, pCounter);
StringGrid1->Objects[2+j][i+1] = (TObject*)pCounter;
for(i=0; i < procnames->Count; i++)
StringGrid1->Cells[1][i+1]=procnames->Strings[i];
PdhGetFormattedCounterValue ( *(HCOUNTER*)(StringGrid1->Objects[j][i+1]), PDH_FMT_DOUBLE, 0, &fmtValue);
StringGrid1->Cells[j][i+1]=(unsigned long int)(fmtValue.doubleValue);
pdhStatus=PdhGetFormattedCounterValue ( *(HCOUNTER*)(StringGrid1->Objects[j][i+1]), PDH_FMT_DOUBLE, 0, &fmtValue);
PdhGetFormattedCounterValue ( *(HCOUNTER*)(StringGrid1->Objects[j][i+1]), PDH_FMT_DOUBLE, 0, &fmtValue);
StringGrid1->Cells[j][i+1]= fmtValue.doubleValue;
PdhGetFormattedCounterValue ( *(HCOUNTER*)(StringGrid1->Objects[j][i+1]), PDH_FMT_DOUBLE, 0, &fmtValue);
StringGrid1->Cells[j][i+1]= (unsigned long int)(fmtValue.doubleValue)/1024;
StringGrid1->RowCount=procnames->Count + 1;
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
void __fastcall TForm1::Button2Click(TObject *Sender)
void __fastcall TForm1::Button1Click(TObject *Sender)
b=StrToInt(StringGrid1->Cells[2][c]);
l=OpenProcess (PROCESS_TERMINATE,true,b);
char StrCounters[7][30]={"ID Process",
__fastcall TForm1::TForm1(TComponent* Owner)
StringGrid1->Cells[1][0]="Имя образа";
StringGrid1->Cells[3][0]="Приоритет";
StringGrid1->Cells[4][0]="Кол-во потоков";
StringGrid1->Cells[5][0]="PID родителя";
StringGrid1->Cells[6][0]="Загр. процесса" ;
StringGrid1->Cells[7][0]="Вирт. память" ;
StringGrid1->Cells[8][0]="Память подк." ;
GetComputerName(computername,&size);
void __fastcall TForm1::Timer1Timer(TObject *Sender)
h=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
for (j=1;jRowCount);j++)
PdhRemoveCounter (*(HCOUNTER*)(StringGrid1->Objects[i][j]));
delete (HCOUNTER*)(StringGrid1->Objects[i][j]);
for(i=0; i < procnames->Count; i = j)
AnsiString name= procnames->Strings[i].SubString(procnames->Strings[i].Length()-2,3);
if (name == AnsiString("exe")||name == AnsiString("EXE"))
for(j = i+1;jCount&&procnames->Strings[i] == procnames->Strings[j]; j++ )
procnames->Strings[j]= procnames->Strings[j].SubString(1,procnames->Strings[j].Length()-4);
procnames->Strings[j]= procnames->Strings[j]+"#"+IntToStr(j-i);
procnames->Strings[i]= procnames->Strings[i].SubString(1,procnames->Strings[i].Length()-4);
for(j = i+1;jCount&&procnames->Strings[i] == procnames->Strings[j]; j++ )
procnames->Strings[j]= procnames->Strings[j]+"#"+IntToStr(j-i);
if (procnames->Strings[i]=="[System Process]")
for(i=0; i < procnames->Count; i++)
AnsiString pro = procnames->Strings[i];
AnsiString s=AnsiString("\\\\"+AnsiString(ComputerName)+"\\Process("+pro+")\\"+AnsiString(StrCounters[j]));
PdhAddEnglishCounter (hQuery, s.c_str(), 0, pCounter);
StringGrid1->Objects[2+j][i+1] = (TObject*)pCounter;
for(i=0; i < procnames->Count; i++)
StringGrid1->Cells[1][i+1]=procnames->Strings[i];
PdhGetFormattedCounterValue ( *(HCOUNTER*)(StringGrid1->Objects[j][i+1]), PDH_FMT_DOUBLE, 0, &fmtValue);
StringGrid1->Cells[j][i+1]=(unsigned long int)(fmtValue.doubleValue);
pdhStatus=PdhGetFormattedCounterValue ( *(HCOUNTER*)(StringGrid1->Objects[j][i+1]), PDH_FMT_DOUBLE, 0, &fmtValue);
PdhGetFormattedCounterValue ( *(HCOUNTER*)(StringGrid1->Objects[j][i+1]), PDH_FMT_DOUBLE, 0, &fmtValue);
StringGrid1->Cells[j][i+1]= fmtValue.doubleValue;
PdhGetFormattedCounterValue ( *(HCOUNTER*)(StringGrid1->Objects[j][i+1]), PDH_FMT_DOUBLE, 0, &fmtValue);
StringGrid1->Cells[j][i+1]= (unsigned long int)(fmtValue.doubleValue)/1024;
StringGrid1->RowCount=procnames->Count + 1;
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
void __fastcall TForm1::Button2Click(TObject *Sender)
void __fastcall TForm1::Button1Click(TObject *Sender)
b=StrToInt(StringGrid1->Cells[2][c]);
l=OpenProcess (PROCESS_TERMINATE,true,b);
Разработка программного кода и алгоритма действий приложения "калькулятор". Использование функций в программе Matlab. Разработка кнопок, опций, интерфейса, оформление. Части кода Matlab и тестовый набор. Инструкция пользователя по работе программы. курсовая работа [527,1 K], добавлен 27.09.2014
Создание программного приложения для осуществления основных функций по заказу мебели, регистрации клиентов, сотрудничеству с поставщиками. Разработка интерфейса прикладной программы. Логическое проектирование базы данных и SQL-скрипт генерации таблиц. курсовая работа [2,4 M], добавлен 11.02.2013
Общее определение JavaScript-библиотеки, виды библиотек. Создание клиентского приложения с использованием одного из существующий JS-фреймворков. Значение, виды и выбор фреймворка. Выбор приложения и его тематики. Написание программного кода, итоги работы. курсовая работа [545,8 K], добавлен 21.12.2013
Разработка приложения, которое будет выполнять функции показа точного времени и точной даты. Определение дополнительных функций разработанного приложения. Рассмотрение основных этапов создания программного продукта. Результаты тестирования приложения. курсовая работа [2,2 M], добавлен 14.04.2019
Анализ технических средств и современных технологий разработки программного обеспечения. Разработка программы для упрощения поиска студентов. Создание учетных записей администратора и обычного пользователя. Изучение правил построения программного кода. курсовая работа [1,9 M], добавлен 30.09.2016
Анализ целевой аудитории. Функциональные характеристики пользовательского приложения. Разработка алгоритмов и интерфейса программного продукта, функций рабочей области. Написание скриптов на языке C#. Тестирование программы методом чёрного ящика. дипломная работа [1,5 M], добавлен 09.11.2016
Структура программы в среде Delphi в процессе проектирования приложения, ее модульный принцип. Объявление списка используемых модулей и нескольких операторов. Размещение на форме компонентов и изменение их свойств. Создание кода - обработчика события. лабораторная работа [19,1 K], добавлен 15.07.2009
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



Разработка электронного приложения "Инспектор процессов и потоков" курсовая работа. Программирование, компьютеры и кибернетика.
Яичные куры - Леггорн
Контрольные Работы По Математике 4 Перспектива
Курсовая работа: Процессуальное соучастие как с российской, так и с зарубежной точек зрения
Утренняя Гимнастика Реферат
Реферат по теме Ценности как основа типологии культур (П.А. Сорокин)
Книга: Толстой Л.Н. - Карма
Доклад по теме Культурная революция в Китае
Дипломная работа по теме Проект цеха по производству сырокопченых колбас
Реферат по теме Экологические проблемы атмосферы. Кислые осадки. Проблема озонового слоя в атмосфере. Понятие о парн...
Курсовая работа: Економічно статистичні методи в аналізі економічних явищ і процесів
Пресинаптическое Торможение Виды Механизм Реферат
Оптимизация Организации Курсовая
Реферат по теме Исламская политическая и правовая культура и проблемы региональной безопасности в странах Северной Африки и Ближнего Востока
Дипломная работа по теме Роль наглядных пособий в изучении грамматических понятий на уроках русского языка в условиях начальной школы
Виды Девиантного Поведения Реферат
Частные Школы Реферат
Лабораторная Работа Определение Преломления
Реферат: Иконопись и ее особенности. Иконописные школы Древней Руси. Скачать бесплатно и без регистрации
Дипломная Территориальные Основы Местного Самоуправления Казахстана
Реферат: Основи організації та роботи фондової біржі в Україні
Оптимизация распределения работ и загруженности службы управления персоналом на основе матрицы РАЗУ - Менеджмент и трудовые отношения курсовая работа
Ожоги глаз - Медицина презентация
Основания административной ответственности - Государство и право дипломная работа


Report Page