Разработка программы анализа логических дисков

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

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

Выдержка из работы

Содержание

  • Введение
  • Глава I. Теоретический раздел
  • 1.1 Понятие жёсткого диска.
  • 1.2 Контролёр HDD
  • Глава II. Технологический раздел
  • 2.1 Заголовочные файлы
  • 2.2 Собственные подпрограммы
  • Заключение
  • Список литературы
  • Приложение

Введение

Программирование — процесс и искусство создания компьютерных программ с помощью языков программирования. Программирование сочетает в себе элементы искусства, науки, математики и инженерии.

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

Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования.

Различные языки программирования поддерживают различные стили программирования. Отчасти искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или между временем программиста и временем пользователя).

Единственный язык, напрямую выполняемый процессором — это машинный язык (также называемый машинным кодом). Изначально все программисты прорабатывали каждую мелочь в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого программисты пишут исходный код, и компьютер (используя компилятор, интерпретатор или ассемблер) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Даже если требуется полный низкоуровневый контроль над системой, программисты пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора.

В данной курсовой работе для разработки программы использовался язык С и среда программирования Borland C++ 3. 1

Задача курсовой работы состоит в разработке на языке программирования С++ программы анализа логических дисков, которая должна осуществлять следующие функции:

1) Графический интерфейс, диалог с пользователем.

2) Определение текущего диска.

3) Вывод всей информации о кластерах на диске.

4) Определение общего размера диска.

5) Определение занятого и свободного места на диске.

6) Изобразить диаграмму.

Работа программы должна быть организована с использованием меню.

Глава I. Теоретический раздел

1.1 Понятие жёсткого диска.

Жёсткий магнитный диск — это специальное устройство, предназначенное для хранения значительных объёмов информации. В отечественной литературе можно встретить различные термины и аббревиатуры для этого устройства: накопитель на магнитном диске (НМД), жёсткий диск, винчестер. Будем пользоваться аббревиатурой HDD, которая является общепринятой для зарубежной литературы. Эта аббревиатура произошла от названия Hard Disk Drive, что означает «дисковод для жесткого диска».

В первых компьютерах дисковая память состояла из двух устройств — дисковода и пакета магнитных дисков. Причём пакеты магнитных дисков были сменными. Это давало возможность устанавливать на один и тот же дисковод разные пакеты дисков.

Для персональных компьютеров обычно используется другая конструкция дисковой памяти. Пакет магнитных дисков и дисковод объединены в общем, герметично закрытом корпусе, на общей оси вращаются несколько дисков, покрытых с двух сторон слоем ферромагнитного материала. Назначение этого покрытия аналогично назначению магнитного покрытия ленты в обычном бытовом магнитофоне. Сверху и снизу к дискам почти вплотную подводятся магнитные головки, также напоминающие по принципу магнитные головки магнитофона. Такая конструкция получила название «винчестер». Головки «парят» на воздушной подушке очень близко к поверхности дисков, как бы прочерчивая окружности. С помощью специального шагового двигателя блок головок может перемещаться в направлении к центру дисков. Так как блок головок перемещается скачкообразно, головки при их перемещении прочерчивают концентрические окружности, называемые дорожками. Совокупность всех дорожек, образуемых всеми магнитными головками, называют цилиндром. Информация в жестких дисках записывается на дорожках. Каждая дорожка однозначно определяется своим порядковым номером на диске относительно внешнего края и номером головки (так как каждая головка соответствует определённой поверхности одного из дисков, вращающихся на общей оси). Эта информация записывается не сплошным потоком (как в бытовых магнитофонах), а блоками одинаковой длины. Каждый блок содержит некоторую служебную информацию и 512 байтов данных. Блоки обычно называются секторами дорожки. Эти секторы идентифицируются своим порядковым номером относительно начала дорожки. Начало дорожки отмечается специальной меткой — маркером дорожки.

1.2 Контролёр HDD

Контроллер HDD-это специальное устройство, предназначенное для подключения HDD к компьютеру. На контроллер возложена вся работа по обмену данными между компьютером и HDD. Физически контроллер HDD может быть выполнен в виде отдельной платы, вставляемой в слот расширения материнской платы компьютера, или же расположен непосредственно на материнской плате. Обычно контроллер HDD используется еще и для управления FDD — к одному контроллеру подключаются дисководы для жёстких дисков и дисководы для флоппи-дисков.

логический диск программа анализ

Рис. 1.

Любой жёсткий диск (рис. 1.) в можно представить как огромный «чистый лист», на который можно записывать данные и от туда потом их можно считать. Чтобы ориентироваться на диске, всё его пространство разбивают на небольшие «клеточки» — сектора. Сектор — это минимальная единица хранения данных на диске, обычно его размер составляет 512 байт. Все сектора на диске нумеруются: каждый из n секторов получает номер от 0 до n-1. Благодаря этому любая информация, записанная на диск, получает точный адрес — номера соответствующих секторов. Так что диск ещё можно представить как очень длинную строчку (ленточку) из секторов.

Кластер — состоит из одного или более секторов. Количество секторов зависит от типа диска. Многие жесткие диски имеют кластеры из четырех секторов 2048 байтов. Поиск кластеров вместо отдельных секторов сокращает издержки по времени.

Крупные кластеры обеспечивают более быструю работу накопителя, поскольку количество кластеров в таком случае меньше, но при этом хуже используется пространство (место) на диске, так как многие файлы могут оказаться меньше кластера и оставшиеся байты кластера не используются.

Рис. 2.

Глава II. Технологический раздел

В данной курсовой работе используются следующие заголовочные файлы.

2.1 Заголовочные файлы

< dir. h> -используется структурой struct dfree free, для получения информации о дисках;

< iostream. h> -используется для вводавывода информации на экран;

< graphics. h> -используется для подключения графики;

< bios. h> -используется для получения информации о нажатии клавиш;

< conio. h> -используется для вывода форматированного текста, цвета, фона, чистки и задержки экрана;

< stdio. h> -используется для вывода информации;

< dos. h> -получение информации о кластерах;

2.2 Собственные подпрограммы

getdisk () — используется для получения информации о диске, файл dos. h содержит такое описание этой функции:

unsigned _dos_getdiskfree (unsigned drive,

struct diskfree_t *diskspace);.

Параметр drive задает номер используемого устройства: 0 — текущий, 1 — А:, 2-В, 3-С: и т. д. Информация возвращается в структуре dfree free, которая определена также в файле dos. h

struct dfree free;

{

unsigned df_avail — количество свободных кластеров на диске

unsigned df_total — общее количество кластеров на диске unsigned df_bsec-размер сектора в байтах

unsigned df_sclus-количество секторов, занимаемых одним кластером.

Для получения общего размера диска, перемножаем значения

total= (long) free. df_total

* (long) free. df_bsec

* (long) free. df_sclus;

long total-переменная хранящая общий размер диска;

Для получения свободного размера диска, перемножаем значения

avail= (long) free. df_avail

* (long) free. df_bsec

* (long) free. df_sclus;

long avail-переменная хранящая свободное место на диске;

struct text_info ti-отвечает за цвет фона, координатное

расположение окна и стиль текста выводимого на экран;

_setcursortype (_NOCURSOR) — выключает курсор;

gotoxy (10, 20) — задаёт кордиты окна по х и у;

textattr (0×04f) — определяет цвет текста;

Указанная ниже подпрограмма осуществляет вычисления и подсчёты для диаграммы и её вывод на экраню

void krdiagr (char* *name, float *procent) — Переменная *name — отвечает за вывод на экран надписей «свободно» и «занято». Переменная *procent — хранит в себе информацию о процентном соотношении свободного и занятого размера на диске. В начале находим сумму занятого и свободного места на диске. Далее находим отдельно процент занятого и свободного размера диска, для этого нужно размер занятого пространства поделить на сумму занятого и свободного размера диска, потом умножить на 100 (сто), такую же процедуру повторяем с размером диска свободного пространства и получаем процентное соотношение. Далее нужно вычислить градусное соотношение, которое будет применяться для круговой диаграммы. Для этого необходимо 3.6 (три целых шесть десятых) умножить на процент занятого пространства диска и тогда получим градусы занятого размера диска. Такую же операцию проделываем со свободным пространством диска. Нашли градусы обеих размеров диска:

pieslice (x, y, a1,a2,100) — осуществляет вывод круговой диаграммы,

где x, y — координаты диаграммы; а1, а2 — переменные хранящие градусы, где а1 — начало, а2-конец; 100 — радиус диаграммы.

Setfillstyle (SOLID_FILL, color [i]) — определяет стиль диаграммы, где SOLID_FILL — стиль заливки, стандартный, color — цвет заливки, i — счетчик.

void CLEAR () — чистит монитор;

{ window (10,6,70, 20); - координаты окна;

textattr (0x0f); - задаёт чёрный цвет;

clrscr (); - чистит;

}

int SOUND () — нажатие клавиш вверх/вниз сопровождает звуковым сигналом;

{

sound (100); - звук;

delay (100); - его длительность 1 секунда;

nosound (); - останавливает звук;

}

void OUTPUT (int p1, int p2, int p3, int p4) — выводит меню на экран, делает опрос клавиатуры, при нажатии клавиш управления курсором (вверх, вниз) перемещает цветовой курсор по пунктам меню, выбирает определённый пункт меню при нажатии клавиши, где р1, р2,р3,р4-меняют цвет текста в меню, по нажатию необходимых клавиш;

сprintf — выводит текст;

window (10, 20,70, 20); - координаты окна в меню;

Меню сделано через цикл switch (), ниже приведен отрывок испол4ьзования switch ();

switch (count)

{ case 1: OUTPUT (0x4f, 0x1f, 0x1f, 0x1f);

gotoxy (10, 20);

cprintf («Informacia ob aftore programmi»);

if (key==0x1c0d) — если нажата клавиша «Enter»

{ CLEAR (); - чистит экран;

cprintf («Babii Alexandr 11. 05. 1993»); - выводит на экран;

}

break;

Заключение

В ходе выполнения данной курсовой работы были освоены и закреплены навыки разработки программного обеспечения на языке С++, в среде разработки Borland C++ 3.1 Цель курсовой была частично достигнута, так как среда разработки Borland C++ 3.1 была разработана в 1992 году. На тот момент не существовало жёстких дисков с такими огромными объёмами вмещавших в себя столько информации, сколько вмещают нынешние жёсткие диски. Поэтому разработанная в курсовой работе программа с помощью Borland C++ 3.1 не способна определить размер жёсткого диска обладающим объёмом более 4-х гигабайт, следовательно не реально получить точную информацию о кластерах и секторах на жёстком диске объёмом более 4-х гигабайт. Программа с точностью выводит всю информацию о флоппи-дисках, но с каждым днём флоппи-диски теряют свою актуальность, они уже редко встречаются в магазинах, возможно в дальнейшем будущем они станут дефицитными. На замену флоппи-дискам пришли флешки. Флешки обладают большими объёмами, и они удобные. Остальные цели данного курсового проекта были полностью достигнуты, разработано удобное меню с помощью которого упростился диалог пользователя с машиной. Выводится круговая диаграмма, основанная на вычислениях из чисел, свободного и занятого пространства на диске. Освоена работа с процентным соотношением этих величин.

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

1. Методичка С++

Приложение

#include< dir. h>

#include< iostream. h>

#include< graphics. h>

#include< bios. h>

#include< conio. h>

#include< stdio. h>

#include< process. h>

#include< dos. h>

#include< stdlib. h>

#include < math. h>

#define N 2

void krdiagr (char* *name, float *procent); // диаграмма

int out (); // справка о программе

int SOUND (); // звук

void OUTPUT (int p1, int p2, int p3, int p4); // цвета и текст меню

void CLEAR (); // очистка экрана

int main () /

{

clrscr ();

int count=1; // счётчик

int key; // переменная хранит нажатие клавиш

_setcursortype (_NOCURSOR); // выключаем курсор

while (count< =4) // цикл

{ if (bioskey (1)! =0) key=bioskey (0);

window (10,6,70, 20); // формат окна

textbackground (BLUE); // цвет окна

clrscr (); // очистка экрана

switch (count) // цикл для меню

{ case 1: OUTPUT (0x4f, 0x1f, 0x1f, 0x1f); // вызывает подпрограмму OUTPUT

gotoxy (10, 20); // координаты текста

cprintf («Informacia ob aftore programmi»); // выводит текст по координатам

if (key==0x1c0d) // если нажали «Enter»

{ CLEAR (); // вызывает подпрограмму чистки экрана

cprintf («Babii Alexandr 11. 05. 1993»); // выводим текст

}

break; // обрываем цикл

case 2: OUTPUT (0x1f, 0x4f, 0x1f, 0x1f); // вызывает подпрограмму OUTPUT

gotoxy (10, 20); // координаты текста

cprintf («Informacia o tekuwem diske «); // выводит текст ниже окна

if (key==0x1c0d) // если «Enter»

{ CLEAR (); // вызывает подпрограмму чистки экрана

int gdriver = DETECT, gmode, errorcode; // инициализация графики

int midx, midy;

initgraph (& gdriver, & gmode, ««);

errorcode=graphresult ();

if (errorcode! = grOk)

{

printf («Graphics error: %sn», grapherrormsg (errorcode));

printf («Press any key to halt: «);

getch ();

exit (1);

}

struct dfree free; // структура содержит информацию о дисках

long avail; // переменная хранящая число свободного места

int drive; // переменная хранящая текущий диск

drive=getdisk ();

getdfree (drive+1, & free);

if (free. df_sclus == 0xFFFF)

{

printf («Error in getdfree () calln»);

exit (1);

}

avail= (long) free. df_avail // свободные кластеры

* (long) free. df_bsec // байты в секторе

* (long) free. df_sclus; // секторы в кластере

printf («Tekuwii disk----------------------------| %c: n», 'A' + drive, avail);

long total; // переменная хранящая общий размер диска

drive=getdisk (); // получаем букву текущего диска

getdfree (drive+1,& free);

if (free. df_sclus==0xFFFF)

{

printf («Error in getdfree () calln»);

exit (1);

}

total= (long) free. df_total // общие кластеры

* (long) free. df_bsec // байты в секторе

* (long) free. df_sclus; // секторы в кластере

printf («Obwee koli4estvo klasterov na diske: — ---|%u»

«nKoli4estvo svobodnix klasterov: — --------|%u»

«nKoli4estvo sektorov v klastere: — --------|%u»

«nKoli4estvo bait v sektore: — -------------|%u»

«n»,

free. df_total, free. df_avail, free. df_sclus, free. df_bsec);

printf («Obwii razmer disca %c: %lu mbn»,'A'+drive, total/1024/1024);

printf («Svobodnoe mesto disca %c: %lu mbn»,'A'+drive, avail/1024/1024);

long zaniato=total-avail;

printf («Zaniatoe mesto disca %c: %lu mbn»,'A'+drive, zaniato/1024/1024);

char *name [N] ={"Zaniato","Svobodno"}; // символьная строка хранит названия мест

float razmer [N]; // размеры

float procent [N]; // проценты

float sum=0; // сумма

int i; // временная используется в цикле как счетчик для нахождения сумм

razmer [0] =zaniato; // размер занятого места

razmer [1] =avail; // размер свободного места

for (i=0; i< N; i++)

{

sum+=razmer [i]; // сумма обеих размеров (величин)

}

for (i=0; i< N; i++) // цикл

procent [i] =razmer [i] /sum*100; // находит проценты

krdiagr (name, procent); // вызывает подпрограмму вывода диаграммы

getch (); // задержка экрана

closegraph (); // закрываем графику

}

break; // обрываем цикл

case 3: OUTPUT (0x1f, 0x1f, 0x4f, 0x1f);

gotoxy (10, 20); // координаты начала расположения окна и текста

cprintf («Spravka o programme»); // вывод на экран

if (key==0x1c0d) // если нажата клавиша «Enter» выходим из программы

{

CLEAR (); // вызываем подпрограмму чистки экрана

out (); // вызываем подпрограмму вывода текста

}

break; // обрываем цикл

case 4: OUTPUT (0x1f, 0x1f, 0x1f, 0x4f);

gotoxy (10, 20); // координаты начала расположения окна и текста

cprintf («Vixod»); // выводим на экран

if (key==0x1c0d) return 0; // если нажата клавиша «Enter» выходим из программы

break; // обрываем цикл

default: break;

}

key=bioskey (0);

if (key ==0×5000) // если нажата клавиша вниз

{ SOUND (); // вызываем подпрограмму звука

if (count==4) count = 1; // если счетчик равен 4, придаем ему значение 1

else count++; // иначе сдвигаем вперед (вправо)

}

if (key ==0×4800) // если нажата клавиша вверх

{ SOUND (); // вызываем подпрограмму звука

if (count==1) count = 4; // если счетчик равен 1, придаем ему значение 4

else count--; // иначе сдвигаем его назад (влево)

}

if (key==0×11b) return 0; // если нажата клавиша «Esc» выходим из программы

}

return 0;

}

int SOUND () // звук

{

sound (100); // частота

delay (100); // длительность 1 секунда

nosound (); // выключает звук

return 0; // возвращает ноль

}

void OUTPUT (int p1, int p2, int p3, int p4)

{ clrscr ();

textattr (p1);

cprintf («Aftor programminr»);

textattr (p2);

cprintf («Disknr»);

textattr (p3);

cprintf («HELPnr»);

textattr (p4);

cprintf («Vixod»);

window (10, 20,70, 20); // координаты окна

textattr (0×04f); // фон синий, текст белый

clrscr (); // чистит экран

}

void CLEAR ()

{ window (10,6,70, 20); // координаты окна

textattr (0x0f); // цвет текста (фон чёрный, текст белый)

clrscr (); // чистит экран

}

int out ()

{

cprintf («Dlia upravlinia programmoi ispolzuite klaviwi '%c' i '%c', dlia vibora 'Enter'. Dlia vixoda ispolzuite 'Esc'. «, 24, 25); // выводит текст на экран

return 0; // возвращает ноль

}

void krdiagr (char* *name, float* procent)

{

int a1, a2; // начало и конец диаграммы в градусах

int color [2] ={RED, BLUE}; // цвета для диаграммы и квадратиков

int x, y; // переменные хранящие координаты квадратиков

int i; // переменная используется в цикле для определения соответствующих цветов

a1=0; // начало диаграммы равно нулю

x=10; y=130; // координаты размещения квадратиков

for (i=0; i< N; i++) // цикл

{

a2=a1+3. 6*procent [i]; // вычисляет градусы

if (i==N-1) // условие

a2=360; // конец диаграммы

setfillstyle (SOLID_FILL, color [i]); // стиль диаграммы

// sector (200, 200, a1,a2,100,100);

pieslice (280,280,a1,a2,100); // вывод диаграммы

a1=a2;

printf («%s-%f %n», name [i], procent [i]);

bar (x, y, x+30,y+10); // вывод квадратиков

y+=16; // промежуток между квадратиками

}

}

ПоказатьСвернуть
Заполнить форму текущей работой