Файл: Разработка объектной программы для задачи учета компьютерной техники в организации.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 79
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ «КУРУШСКАЯ СРЕДНЯЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА №2 ИМ. Я.С. АСКАНДАРОВА»
Конкурс
проектов обучающихся центров образования «Точка роста»
«Научился сам - научи другого»
ПРОЕКТ
Тема: Разработка объектной программы для задачи учета компьютерной техники в организации
Выполнил: ученик 11 «А» класса Алиханов Сейфуллах Агифович
Научный руководитель:
Азадова Назлу Амировна
Куруш 2023
Содержание
Введение …………………………………………………………………..…..3.
-
Теоретическое описание используемых структур, данных с алгоритмами реализации основных операций………………………….………………….......5.-
Адресный замкнутый кольцевой неупорядоченный однонаправленный список с заголовком………………………………..………5. -
Очередь на основе обычного массива со сдвигом элементов ….….7.
-
-
Описание разработанных классов (объектная модель) ………..…..…9. -
Описание демонстрационного модуля с характеристикой
компонентов……………………………………………………………….….15.
-
Описание структуры проекта …………………..………………….….21. -
Листинг программного кода с комментариями …………………..….22.
Список использованной литературы ………………………………………..32.
Введение 4
Требования к реализации: 5
1. Теоретическое описание используемых структур, данных с алгоритмами реализации основных операций 6
1.1. Адресный замкнутый кольцевой неупорядоченный однонаправленный список с заголовком 6
1.2. Очередь на основе обычного массива со сдвигом элементов 8
2. Описание разработанных классов (объектная модель) 10
3. Описание демонстрационного модуля с характеристикой компонентов 16
4. Описание структуры проекта 22
5. Листинг программного кода с комментариями 23
Список использованной литературы 33
Введение
Актуальностью нашего проекта является то, что многие стандартные типы данных, такие, как классы, интерфейсы, строки, динамические массивы, неявно работают с динамической памятью.
Размеры объектов в динамической памяти могут колебаться от нескольких байт (строки) до многих мегабайт (пользовательские вызовы функций распределения памяти, а также создание динамических массивов).
Цель – разработка объектной программы для задачи учета компьютерной техники в организации.
Общая цель выполнения работы – получение навыков разработки объектных программ, включая создание собственного набора взаимосвязанных классов для объектной реализации специализированного контейнера.
Организация располагает некоторым количеством помещений (комнат, офисов), каждое из которых имеет уникальный номер.
В каждом помещении находится несколько компьютеров и каждый из них имеет свой инвентарный номер и балансовую стоимость.
Постановка задачи: прикладная информационная задача - «Организация»:
-
Информационный объект «Компьютеры». Свойства: Инвентарный номер (без повторения в пределах помещения); Балансовая стоимость. -
Информационный объект «Помещения». Свойства: Номер помещения (без повторения в пределах организации); -
Информационный объект «Организация». Свойства: Количество помещений;
Разработка включает в себя определение необходимых объектов и описание их в виде классов, программную реализацию методов добавления и удаления помещений и компьютеров с подсчетом суммарной стоимости, всестороннее тестирование методов с помощью консольного (при разработке) и оконного (в окончательном варианте) приложения.
Для объединения помещений используется структура данных в виде очереди на основе обычного массива со сдвигом элементов. Для объединения компьютеров в каждом помещении используется структура данных в виде адресного замкнутого (кольцевого) неупорядоченного однонаправленного списка с заголовком.
Требования к реализации:
1. Полная объектная реализация с определением классов для всех элементов реализуемой структуры: информационные объекты, объекты-элементы списка (динамическая реализация), объекты-списки, объект-контейнер.
2. Соблюдение принципа инкапсуляции – использование в классах только закрытых свойств и реализация необходимого набора методов доступа.
3. Реализация в классах всех необходимых методов: конструкторы, методы доступа к свойствам, методы добавления и удаления на каждом из двух уровней, при необходимости - метод поиска.
4. Возможность сохранения всей структуры во внешнем файле с обратной загрузкой.
5. Наличие модуля, демонстрирующего все возможности созданной библиотеки классов и обладающего удобным оконным пользовательским интерфейсом.
Работа выполняется на языке C# в среде программирования Visual Studio (приложен листинг).
1.Теоретическое описание используемых структур, данных с алгоритмами реализации основных операций
Опишем основные понятия, лежащие в основе темы настоящего проекта.
Контейнер – это структура данных, предназначенная для хранения разнородной информации. В основе реализации контейнера лежит механизм полиморфных указателей, поэтому контейнер является хорошей иллюстрацией этого механизма.
Объектный принцип создания программ требует реализовывать контейнер в виде некоторого специального класса, инкапсулирующего в себе все необходимые методы.
Подобный контейнер представляет собой двухуровневую структуру данных, в которой уровни реализуются разными способами – один виде адресного замкнутого (кольцевого) неупорядоченного однонаправленного списка с заголовком, другой – очередь на основе обычного массива со сдвигом элементов.
1.1. Адресный замкнутый кольцевой неупорядоченный однонаправленный список с заголовком
Линейный однонаправленный список — это структура данных, состоящая из элементов одного типа, связанных между собой последовательно посредством указателей.
Каждый элемент списка имеет указатель на следующий элемент. Последний элемент списка указывает на NULL.
Элемент, на который нет указателя, является первым (головным) элементом списка. Здесь ссылка в каждом узле указывает на следующий узел в списке. В односвязном списке можно передвигаться только в сторону конца списка. Узнать адрес предыдущего элемента, опираясь на содержимое текущего узла, невозможно.
Разновидностью связных списков является кольцевой (циклический, замкнутый) список. Он тоже может быть односвязным или двусвязным. Последний элемент кольцевого списка содержит указатель на первый, а первый (в случае двусвязного списка) — на последний.
Как правило, такая структура реализуется на базе линейного списка. С каждым кольцевым списком дополнительно хранится указатель на первый элемент. В этом списке ссылки на NULL не встречается.
Также существуют циклические списки с выделенным головным элементом, облегчающие полный проход через список.
Рассмотрим способ построения кольцевого списка. Построение выполняется так же, как и в случае линейного однонаправленного списка с заглавным звеном, только после окончания ввода элементов кольцевого списка, в поле указателя последнего звена списка помещается адрес звена, следующего за «заглавным» элементом.
void KolSpisok (node **phead)
//Построение кольцевого списка с заглавным звеном.
//*phead - указатель на заглавное звено.
{
int el;
struct node *t;
// Вначале сформируем заглавное звено.
*phead = new (node);
t = *phead; (*t).sled = NULL;
cout<<"Вводите элементы кольца: "; cin>>el;
while (el!=0)
{ (*t).sled = new (node); t = (*t).sled; (*t).elem = el;
cin>>el;
}
(*t).sled = (*(*phead)).sled;
}
Вывод на экран дисплея содержимого информационных полей кольцевого списка производится до тех пор, пока рабочий указатель, перемещающийся по кольцу, не совпадет с указателем на звено, расположенное после заглавного:
void ListSpisok (node **phead)
//Вывод содержимого кольцевого списка с удаленным
// заглавным звеном.
//*phead - указатель на заглавное звено.
{
struct node *t;
t = (**phead).sled; cout<< "Кольцо: ";
if (t!=NULL)
{ cout<<(*t).elem; t = (*t).sled;
while (t!=(**phead).sled)
{
cout<<(*t).elem;
t = (*t).sled; }
}
else cout<<"пусто!\n";
}.
1.2. Очередь на основе обычного массива со сдвигом элементов
Очередь (Queue) – это последовательность однотипных элементов, характерная тем, что новые элементы в нее добавляются с одного конца, а удаляются с другого.
Рассмотрим пример очереди на основе обычного массива со сдвигом элементов.
Сначала предопределяем размер используемого массива:
MassivSize = 10;
Далее предусматриваем переменную, которая хранит данный массив
_MyArray = array[1..MassivSize] of Integer;
Для работы с массивом определяем переменную, которая хранит в себе индекс его последнего элемента:
LastElement := 0;
Определяем процедуру добавления элемента в очередь. При этом может возникать следующая.
Размер массива ограничен, следовательно, если номер (индекс) его последнего элемента равен данному размеру – необходимо обработать невозможность добавления нового элемента:
if LastElement = MassivSize then Exit;
В противном случае (LastElement < MassivSize) добавление нового элемента в массив возможно:
Увеличиваем число элементов в массиве
LastElement := LastElement + 1;
//Добавляем элемент (допустим его в виде числа 4 ввел пользователь) в массив
_MyArray[LastElement] := 4;
Далее рассмотрим процесс удаления элемента из очереди на основе массива со сдвигом элементов.
Вначале необходимо проверить, не «пустая» ли очередь – имеет ли смысл удалять элементы при их отсутствии.
if LastElement = 0 then Exit;
По условию удаляется всегда первый элемент очереди, для чего сдвигаем все элементы массива на одну позицию «влево»:
_MyArray[0] := _MyArray[1];
_MyArray[1] := _MyArray[2];
…
_MyArray[LastElement - 1] := _MyArray[LastElement];
Уменьшаем число элементов в массиве
LastElement := LastElement - 1;
Также могут быть осуществлены дополнительные операции с очередью:
-
полная очистка очереди; -
запрос первого, последнего и произвольного элемента; -
вывод элементов очереди.
2.Описание разработанных классов (объектная модель)
Для выполнения работы вначале необходимо определиться с конкретной темой информационной задачи, структура которой будет описана при помощи контейнера, содержащего упорядоченный массив динамических очередей.
В качестве указанной задачи принимается описание информационной сущности: «Организация». В рамках данной информационной сущности предполагается описание следующих информационных объектов:
-
Компьютеры:
-
Инвентарный номер (уникален в пределах помещения); -
Балансовая стоимость;
-
Помещения:
-
Номер помещения (уникален в пределах организации);
-
Организация:
-
Количество помещений.
Опишем структуру данных объектов:
Класс: Computer
namespace TestProgramm.Models
{
///
/// Класс Компьютер.
///
public class Computer
{
///
/// Конструктор класса Компьютер.
///
///
Инвентарный номер.
///
Балансовая стоимость.
public Computer(uint inventoryN, uint inventoryCost)
{
InventoryN = inventoryN;
InventoryCost = inventoryCost;
}
///
/// Конструктор класса Компьютер.
///
///
Инвентарный номер.
public Computer(uint inventoryN) : this(inventoryN, 0)
{
}
///
/// Инвентарный номер.
///
private uint InventoryN { get; set; }
///
/// Балансовая стоимость.
///
private uint InventoryCost { get; set; }
///
/// Выдаем инветарный номер.
///
///
public uint GetInventoryN()
{
throw new NotImplementedException();
}
///
/// Выдаем балансовую стоимость компьютера.
///
///
public uint GetInventoryCost()
{
throw new NotImplementedException();
}
///
/// Задать балансовую стоимость компьютера.
///