Лабораторная работа №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 км, надежность (число лет безотказной работы), комфортность (отличная, хорошая, удовлетворительная). Вывести перечень автомобилей, удовлетворяющих требованиям покупателя, которые вводятся с клавиатуры в виде некоторого интервала допустимых значений.