Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб №6 Структуры.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
99.33 Кб
Скачать

Задание к лабораторной работе № 6

Разработать программу, создающую структуру и ее экземпляры. Структура должна содержать поля (см. свой вариант). Кроме того, в структуру должна входить функция вывода значений полей и одна из перегруженных операций (+, >,< ,>=,<=). Программа должна демонстрировать оба способа доступа к полям структуры и работу функции и перегруженной операции.

Краткую теорию и пример можно рассмотреть по ссылке.

Вариант 1.

Данные для простой складской системы. Структура должна содержать

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

Вариант 2.

Сведения об участниках конкурса бальных танцев. Структура должна

содержать следующую информацию: фамилию, имя, отчество участника,

город, фамилию тренера, оценки за каждый из 3-х танцев.

Вариант 3.

Сведения об успеваемости студентов. Структура должна содержать

следующую информацию: фамилию, имя, отчество студента, номер группы,

в которой обучается студент, название учебной дисциплины,

, оценку данного студента по данной дисциплине за

данное задание от 0 до 100 (как % сделанной работы).

Вариант 4.

Сведения о рабочем. Структура должна содержать

следующую информацию: фамилию, имя, отчество рабочего, название цеха,

в котором он работает, его разряд и оклад.

Вариант 5.

Учет изделий, собранных в цехе за неделю. Структура должна содержать

следующую информацию: фамилию, имя, отчество сборщика, количество

изготовленных изделий, название цеха, а также тип изделия и его стоимость.

Вариант 6.

Учет изделий категорий А, В, С, собранных рабочим цеха за месяц. База

данных должна содержать следующую информацию: фамилию, имя,

отчество рабочего, название цеха, количество изделий по категориям

Вариант 7.

Сведения об абонентах АТС. Структура должна содержать следующую

информацию: фамилию, имя, отчество владельца телефона, год установки

телефона, номер телефона, тип установки телефона (спаренный или нет),

льготу (процентную скидку при оплате).

Вариант 8.

Сведения об ассортименте игрушек в магазине. Структура должна

содержать следующую информацию: название игрушки, ее цену, количество,

а также название фабрики и города, где изготовлена игрушка.

Вариант 9.

Результаты сессии на первом курсе. Структура должна

содержать следующую информацию: индекс группы, фамилию, имя,

отчество студента, пол студента и оценки по 3

экзаменам.

Вариант 10.

Учет рейтинга теннисистов за 5 лет. Каждая запись содержит поля: фамилия,

имя, отчество спортсмена, пол, год рождения, фамилия, имя, отчество

тренера, названия страны и пять полей с рейтингом.

Вариант 11.

Сведения о рейсах Аэрофлота. Структура должна содержать следующую

информацию: номер рейса, пункт назначения, время вылета, время прибытия,

тип самолета и его вместимость.

Вариант 12.

Сведения об ассортименте обуви в магазине. Структура должна содержать

следующую информацию: артикул, наименование обуви, количество пар,

стоимость одной пары, имеющиеся размеры, название фабрики

Вариант 13.

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

Вариант 14.

Сведения о выборе дисциплины студентом. Структура должна содержать

следующую информацию: фамилию, имя, отчество студента, номер зачетной

книжки и сведения о том, живет ли студент в общежитии, индекс группы, а

также пять дисциплин (1 – желает изучать, 0 – не желает).

Вариант 15.

Учет золотых изделий в ювелирном магазине. Структура должна содержать

следующую информацию: вид изделия, его вес, пробу, дату поступления и

стоимость, а также фамилию, имя, отчество мастера-изготовителя, стаж его

работы и разряд (1,2,3).

Вариант 16.

Учет оптовых продаж. Структура должна содержать следующую

информацию: наименование товара, цену единицы товара и дату его

поступления, номер партии, размер партии, названии фирмы-покупателя,

размер проданной партии, цену единицы товара и дату продажи.

Вариант 17.

Учет лекарств в аптеке. Структура должна содержать следующую

информацию: наименование лекарства, стоимость одной единицы,

количество единиц, дату изготовления, срок годности, а также название

фабрики, где производится данное лекарство, ее адрес.

Вариант 18.

Сведения о ветеранах спорта. Структура должна содержать следующую

информацию:фамилию, имя, отчество спортсмена, возрастную группа, название города и вид спорта.

Вариант 19.

Учет рождаемости в роддоме. Структура должна содержать следующую

информацию: фамилию, имя, отчество матери, пол ребенка, его вес, рост и

дату рождения ребенка.

Вариант 20.

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

слушателя, его пол и адрес, тип организации (коммерческая, государственная),

наименование организации, должность слушателя и оценки по

прослушанным дисциплинам (маркетинг, финансы и кредит) для каждого

слушателя.

Вариант 21.

Сведения о размере стипендии студента. Структура должна содержать

следующую информацию: фамилию, имя, отчество студента, группу, адрес,

по которому проживает студент, размер стипендии.

Вариант 22.

Учет поступления больных. Структура должна содержать следующую

информацию: фамилию, имя, отчество больного, его пол, дату рождения,

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

Вариант 23.

Учет призывников. Структура должна содержать следующую

информацию: фамилию, имя, отчество призывника, год его рождения, адрес,

семейное положение, заключение о пригодности к службе.

Структуры в языке С++.

Проф. кафедры ИТ и ВТ МГТУ им. А.Н. Косыгина Ю.М. Винтер.

Структура - это составной объект, объединяющих одну, чаще несколько переменных одного или разных типов под одним именем. В отличие от массива, который является совокупностью переменных одного типа, структура может содержать данные различных типов. Каждая переменная, включенная в структуру, называется членом структуры (полем, компонентом, элементом). Структура является новым типом данных, описание которого начинается с служебного слова struct , затем следует выбранное программистом имя (идентификатор ) нового типа данных, далее в фигурных скобках помещается список описаний членов структуры вида тип идентификатор; . После фигурных скобок ставится точка с запятой. Список описаний не может быть пустым.

В приведенном ниже примере идентификатор student является именем нового типа данных.

struct student { char name[70];

Int YearOfTheBirth; //год рождения

char grupp[6];

};

Это имя может быть использовано для последующего объявления экземпляров структур

данного типа.

student stud1, stud2, fitae[500];

Здесь выделяется память под 2 переменные и массив типа student.

Члены(поля) структуры могут иметь не только базовый, но и производные типы данных: массивы, классы, объединения и структуры. Член структуры не может быть структурой того же типа, что и содержащая его структура. Зато он может иметь тип указателя на структуру того же типа, что и содержащая его структура. Это позволяет создавать весьма полезные объекты - динамические списки и деревья

Доступ к членам (полям) структуры осуществляется с помощью указания имени(идентификатора) экземпляра структуры и следующего через точку имени члена (поля) структуры , например:

stud1.name="Деев Лев Иванович";

stud1. YearOfTheBirth =1987;

stud1.grupp = "40/05" ;

stud2.name = "Главашки Ия Робертовна";

Таким образом, имя переменной типа структура может быть произвольным, но имена полей должны быть такими, как в описании типа структуры. Инициализацию переменной stud1 можно было выполнить при ее объявлении и следующем образом

student stud1 ={"Деев Лев Иванович",1987, "40/05"};

Если в фигурных скобках не будет указано значение некоторых (последних в порядке следования полей ) , то значениями числовых полей будет 0 , полей – указателей NULL, полей типа char -. ‘\0’.

Второй вариант доступа к полям структуры – по указателю на структуру. Напоминаю, указателем называется переменная (или константа), содержащая адрес другой переменной (или константы). Доступ к членам структуры по указателю осуществляется с помощью имени (индентификатора) указателя на структуру и следующего после ─> имени(идентификатора) члена структуры (поля), например:

student stud1 ={"Деев Лев Иванович",1987, "40/05"};

student * ptr = &stud1; //объявляется указатель на структуру типа student, он

//инициализируется адресом переменной типа student

cout << ptr ─> grupp; // будет выведено на дисплей 40/05

Выражение stud2 = stud1 означает копирование значений полей структуры stud1 в соответствующие поля структуры stud2. Функции С и С++ могут использовать структуры в качестве своих аргументов и возвращаемого значения.

Структура (только в С++, но не в С) может содержать функции, как члены структуры. Эти функции не занимают места в памяти, выделенной под конкретные экземпляры и имеют непосредственный доступ к данным, являющимся членами (полями) структуры (т.е. не требуется передача этих данных, как аргументов функции). Включим для примера в состав структуры student функцию prn, выводящую на дисплей значения полей.

struct student { char name[70];

Int YearOfTheBirth;

char* grupp;

Void prn () const

{ cout<< "ФИО "<< name << endl;

cout<< "Год рождения "<< YearOfTheBirth <<endl;

cout<< "Группа "<< grupp << endl;

};

};

Здесь необязательное const после prn () означает, что функция не изменяет значения полей структуры. Пример применения функции – члена структуры:

student stud1 ={"Деев Лев Иванович",1987, "40/05"};

stud1.prn();

Будет выведено на дисплей:

ФИО Деев Лев Иванович

Год рождения 1987

Группа 40/05

В этом случае принято говорить о членах- данных и членах – функциях. В современных языках с видеокомпонентами принято члены- данные называть свойствами, а члены – функции – методами.

Если тело функции присутствует в описании структуры, то это означает , что вы предлагаете компилятору (инструкция inline) не хранить переведенный на машинный язык код функции в определенном месте памяти, а вставлять этот код в программу столько раз, сколько встречается вызов этой функции. При этом увеличивается быстродействие, но растет объем exe – файла. Компилятор не обязан выполнять это ваше указание, и не будет этого делать, если в теле функции есть цикл или сложные, вложенные операторы if . Если структура содержит много функций, или функция не может быть inline, или вас больше волнует объем exe – файла, то в описании структуры должны присутствовать только прототипы функций, а заголовки функций и их тела должны располагаться вне описания структуры. Пример:

struct student { char name[70];