Лабораторная работа №6

Программирование с использованием структур

Цель лабораторной работы: Написать программу с использованием данных типа “структура”.

6.1.        Программирование с использованием переменных типа “структура”

Структура - это тип данных, объединяющий элементы одикаковых или различных типов, называемых полями. Структуры удобны для создания баз данных с элементами разных типов, например:

typedef struct

{

            char FIO[40];    //Поле ф.и.о.

            Byte otc[3];      // Поле массива оценок

            double sball;    // Поле среднего балла

             } TStudent;

          TStudent Stud        //Объявление переменной типа структура         

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

например:

Stud.FIO= “Курбанов А.М.”;          //Внесение данных в поля записи

Stud.sball =5;

Организация доступа с использованием косвенной адресации выглядит следующим образом:

Stud->FIO= “ Курбанов А.М.”; //Внесение данных в поля записи Stud->sball =5;

6.2.Порядок выполнения задания

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

Форма приведена на рис. 6.1.

Текст программы:

#include <vcl.h>

#pragma hdrstop #include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*dfm"

TForm1 *Form1;

typedef  truct {                 

AnsiString   FIO;

int otc[3];

double srb;

} TStudent;

TStudent Stud[100], st; int nzap=-1;

 ___fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//-----------------------------------------------------------------------

void___fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text="";

Edit2->Text="";

Edit3->Text="";

Edit4->Text="";

Memo1->Clear();

}

//------------------------------------------------------------------------

void___fastcall TForm1::BitBtn1Click(TObject *Sender)

{

nzap++;

Stud[nzap].FIO = Edit1->Text;

Stud[nzap].otc[0]=StrToInt(Edit2->Text);

Stud[nzap].otc[1]=StrToInt(Edit3->Text);

Stud[nzap].otc[2]=StrToInt(Edit4->Text);

Stud[nzap].srb=(Stud[nzap].otc[0]+Stud[nzap].otc[1]+Stud[nzap].otc[2]) /3.0;

Memo1->Lines->Add(Stud[nzap].FIO+" "+IntToStr(Stud[nzap].otc[0])+" " +IntToStr(Stud[nzap].otc[1])+" "+IntToStr(Stud[nzap].otc[2]));

Edit1->Text="";

Edit2->Text="";

Edit3->Text="";

Edit4->Text="";

}

//--------------------------------------------------------------------------

void___fastcall TForm1::BitBtn2Click(TObject *Sender)

{

Memo1->Lines->Add("Result");

 for (int i=0; i<=nzap-1; i++)

for (int j=i+1; j<=nzap; j++)

if (Stud[i].srb>Stud[j].srb)

{

st=Stud[i];

Stud[i]=Stud[j];

Stud[j]=st;

}

for (int i=0; i<=nzap; i++)

if (Stud[i].srb>4.5)

Memo1->Lines->Add(Stud[i].FIO+" "+IntToStr(Stud[i].otc[0])+" " +IntToStr(Stud[i].otc[1])+" "+IntToStr(Stud[i].otc[2]));

}

 

6.3.Выполнение индивидуального задания

В программе предусмотреть сохранение вводимых данных в файле и возможность чтения из ранее сохраненного файла. Результаты выводить в окно просмотра и в текстовой файл.

1.     В магазине формируется список лиц, записавшихся на покупку товара повышенного спроса. Каждая запись этого списка содержит: порядковый номер, Ф.И.О., домашний адрес покупателя и дату постановки на учет. Удалить из списка все повторные записи, проверяя Ф.И.О. и домашний адрес.

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

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

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

5.    На междугородной АТС информация о разговорах содержит дату разговора, код и название города, время разговора, тариф, номер телефона в этом городе и номер телефона абонента. Вывести для каждого города общее время разговоров с ним и сумму.

6.    Информация о сотрудниках фирмы включает: Ф.И.О., табельный номер, количество проработанных часов за месяц, почасовой тариф. Рабочее время свыше 144 часов считается сверхурочным и оплачивается в двойном размере. Вывести размер заработной платы каждого сотрудника фирмы за вычетом подоходного налога, который составляет 12% от суммы заработка.

7.           Информация об участниках спортивных соревнований содержит: наименование страны, название команды, Ф.И.О. игрока, игровой номер, возраст, рост, вес. Вывести информацию о самой молодой, рослой и легкой команде.

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

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

10.      Информация о сотрудниках предприятия содержит: Ф.И.О., номер отдела, должность, дату начала работы. Вывести списки сотрудников по отделам в порядке убывания стажа.

11.      Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О., адрес, оценки. Определить количество абитуриентов, проживающих в г.Минске и сдавших экзамены со средним баллом не ниже 4.5, вывести их фамилии в алфавитном порядке.

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

13.      У администратора железнодорожных касс хранится информация о свободных местах в поездах дальнего следования на ближайшую неделю в следующем виде: дата выезда, пункт назначения, время отправления, число свободных мест. Оргкомитет международной конференции обращается к администратору с просьбой зарезервировать m мест до города N на k-й день недели с временем отправления поезда не позднее t часов вечера. Вывести время отправления или сообщение о невозможности выполнить заказ в полном объеме.

14.      Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О. абитуриента, оценки. Определить средний балл по университету и вывести список абитуриентов, средний балл которых выше среднего балла по университету. Первыми в списке должны идти студенты, сдавшие все экзамены на 5.

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

16.      Разработать программу формирования ведомости об успеваемости студентов. Каждая запись этой ведомости должна содержать: номер группы, Ф.И.О. студента, оценки за последнюю сессию. Вывести списки студентов по группам. В каждой группе Ф.И.О. студентов должны быть расположены в порядке убывания среднего балла.

17.      В исполкоме формируется список нуждающихся в улучшении жилищных условий. Каждая запись этого списка содержит: порядковый номер, Ф.И.О., величину жилплощади на одного члена семьи и дату постановки на учет. Исходя из заданного количества квартир, выделяемых ежегодно, вывести весь список с указанием ожидаемого года получения квартиры.

18.      Имеется список женихов и список невест. Каждая запись списка содержит пол, имя, возраст, рост, вес, а также требования к партнеру: наименьший и наибольший возраст, наименьший и наибольший вес, наименьший и наибольший рост. Объединить эти списки в список пар с учетом требований к партнерам без повторений.

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

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