Методичка_2013_14_весна(1курс) / Лаб_ раб_ 8_структ
.doc
ЛАБОРАТОРНАЯ РАБОТА № 8
ОБРАБОТКА СТРУКТУР С ИСПОЛЬЗОВАНИЕМ ФАЙЛОВ И МЕНЮ
Цель работы: Освоение методов и получение навыков програмирования структур, работы с файлами, разработки меню, организации диалогового режима.
8.1 Требования к выполнению работы:
При выполнении данного задания должны быть реализованы следующие режимы работы программы:
-
Исходная информация должна быть занесена в исходный файл;
-
Результирующая информация должна быть занесена в один или несколько файлов согласно индивидуальному условию;
-
Должен быть предусмотрен режим редактирования уже существующих записей и внесения новых;
-
Должен быть предусмотрен вывод на экран содержимого исходного файла и результирующих файлов;
-
Для организации работы всей программы необходимо разработать меню, позволяющее в удобном для пользователя режиме выбирать и осуществлять все выше перечисленные действия.
8.2 Теоретические положения
Описание структуры может быть осуществлено тремя способами:
-
Описание шаблона:
При этом способе вначале в общем виде записывают так называемый шаблон, т.е. структуру полей, а затем в различных местах программы могут объявляться данные, имеющие структуру заданного шаблона.
struct <имя_структ>
{
<тип> <имя_поля1>;
<тип> <имя_поля2>;
. . . .
<тип> <имя_поляN>;
};
Далее в программе с использованием этого шаблона могут быть описаны данные, с которыми будет работать программа.
struct <имя_структ> <имя_пер>,<имя_массиваk[k]>;
-
Описание структуры в виде нового типа данных.
Для этого используется ключевое слово typedef , которое позволяет создавать в программе новые нестандартные типы данных. Форма описания следующая:
typedef struct
{
<тип> <имя_поля1>;
<тип> <имя_поля2>;
. . .
<тип> <имя_поляN>;
} <имя типа>;
Объявление переменных, массивов:
<имя типа> <имя перем1>,<имя перем2>,. . .,
<имя массива>[k];
3.Прямое описание данных (переменных, массивов) в виде структуры.
При этом производится совмещение описания структуры с объявлением переменных и массивов.
struct
{
<тип> <имя_поля1>;
<тип> <имя_поля2>;
. . .
<тип> <имя_поляN>;
}< перем1>,< перем2>,…,< массив>,…;
Первый или второй способ описания структур применяют, когда с данной структурой необходимо работать в разных функциях программы, и она может передаваться как аргумент. Если же структура описывается и используется внутри функции, то можно применить третий способ.
Для получения доступа к элементам структур используется следующая форма записи:
<имя перем>.< имя поля>
С элементами структуры можно выполнять различные действия также, как и с простыми переменными аналогичного типа ( ввод, вывод, присваивание, сравнение т.д.).
Для описания структур можно использовать указатели.
<имя типа структуры> *<имя переменной>,;
Для доступа к элементам структуры, описанной с помощью указателя можно использовать следующие варианты:
1. с помощью операции - выделение элемента структуры через адрес, задаваемый указателем:
<имя переменной> < имя поля>
2. с помощью операции * - получение значения по адресу, заданному указателем:
(*<имя переменной>).< имя поля>
8.3 Пример использования меню
// Функция, реализующая меню и возвращающая номер позиции курсора
void menu( int *m)
{
char text [4][20]={
"rabota f1",
"rabota f2",
"rabota f3",
"exit" };
char sim; int n,k=4, xm=10,ym=10;
window(1,1,80,25);
textbackground(BLACK);
clrscr();
n=0;
while (n<k)
{
window(xm,ym+n,xm+15,ym+n);
textbackground(1); textcolor(15);
clrscr();
printf("%s",text[n]);
n++;
}
n=0;
while(sim!=13 && sim!=27)
{
textbackground(4); textcolor(15);
window(xm,ym+n,xm+15,ym+n);
clrscr();
printf("%s",text[n]);
sim=getche();
textbackground(1); textcolor(15);
clrscr();
window(xm,ym+n,xm+15,ym+n);
printf("%s",text[n]);
kbhit();
switch(sim)
{
case 72: if(n==0) n=k; else n--; break;
case 80: if(n==k) n=0; else n++; break;
}
*m=n; }
}
//Основная программа
void main()
{
int c;
float a;
menu(&c);
if (c==0) {ff1();menu(&c);}
if (c==1 ) {ff2();menu(&c);}
if (c==2 ) {ff3();menu(&c);}
if (c==3 ) exit(1);
}
8.4Варианты индивидуальных заданий
-
Каждая запись по штатному расписанию предприятия содержит следующие данные: номер цеха, фамилию и инициалы, профессию, разряд, стаж работы. Составить список слесарей и фрезеровщиков, работающих на данном предприятии более 10 лет и имеющих разряд выше четвертого.
-
Сводки о выполнении плана содержат шифр продукции, наименование, единицы измерения, план, фактическое выполнение (последнее рассчитывается в программе). Составить список продукции, выпуск которой превысил план, и определить насколько.
-
Экзаменационная сводная ведомость содержит номер зачетной книжки, фамилию и инициалы, оценку по 4 предметам. Составить список студентов, получивших неудовлетворительные оценки, указав их количество и определить процент таких студентов в группе.
-
Экзаменационная сводная ведомость содержит группу, номер зачетной книжки, фамилию и инициалы, оценку по 4 предметам. Составить списки неуспевающих студентов, распределив их по группам.
-
Сведения о наличии материалов на складе, включают следующие данные: наименование материала (могут повторяться), поставщик, единицы измерения, дата приобретения, количество, цена одной единицы, вся стоимость (рассчитывается по формуле). Выбрать материалы, приобретенные за предыдущий месяц у одного и того же поставщика и сосчитать всю стоимость материалов, приобретенных у этого поставщика.
-
Записи о работающих с почасовой формой оплаты содержат номер цеха, табельный номер, фамилию и инициалы, размер ставки за час, количество отработанных часов, сумму зарплаты (рассчитывается в программе), процент отчислений (13%), сумму к уплате (рассчитывается в программе). Составить список рабочих с разрядом выше четвертого и определить сумму их зарплаты.
-
Записи о работающих с почасовой формой оплаты содержат номер цеха, табельный номер, фамилию и инициалы, размер ставки за час, количество отработанных часов, сумму зарплаты (рассчитывается в программе), процент удержания, сумму к уплате (рассчитывается в программе). Составить список рабочих цеха №2 и определить сумму зарплаты.
-
Список сотрудником предприятия содержит следующие сведения: фамилия, имя, отчество, образование, занимаемая должность, год рождения, пол, домашний адрес, дата поступления на работу в данное предприятие, общий стаж работы в полных годах. Составить список сотрудников, уходящих на пенсию в этом году, если для этого необходимо достижение пенсионного возраста и общего стажа работы 25 лет дня мужчин и 20 лет для женщин.
-
Список сотрудников института содержит следующие сведения: фамилия, имя, отчество, образование, занимаемая должность, год рождения, пол, домашний адрес, дата поступления на работу в данное предприятие, общий стаж работы. Составить список сотрудников, имеющих 15 лет общего стажа, в алфавитном порядке.
-
Сведения о больных содержат данные: фамилия, имя, отчество, год рождения, дата поступления, диагноз, номер палаты, дата выписки (если больной выписался). Составить список больных, находящихся еще в больнице и распределить их по палатам.
-
Список сотрудников института содержит следующие сведения: фамилия, имя, отчество, факультет, кафедра, ученая степень, год рождения, домашний адрес. Разделить список на отдельные списки по факультетам, содержащие только сотрудников со степенью кандидата или доктора, исключив графу факультета из списка.
-
Сведения о квартиросъемщиках содержат сведения: фамилия, имя, отчество, адрес, площадь квартиры, количество комнат, количество проживающих в квартире человек. Получить сведения о квартиросъемщиках, поживающих в заданном доме, расположив номера квартир в порядке возрастания.
-
Список сотрудников предприятия содержит следующие сведения: фамилия, имя, отчество, образование, год рождения, домашний адрес, номер телефона. Выбрать сотрудников с высшим образованием, исключив эту графу из списка.
-
Список сотрудников предприятия содержит следующие сведения: фамилия, имя, отчество, номер отдела, образование, занимаемая должность, год рождения, номер домашнего телефона. Разделить список на отдельные списки по отделам, исключив номер отдела из списка.
-
Список сотрудников предприятия содержит следующие сведения: фамилия, имя, отчество, номер отдела, номер лаборатории, образование, занимаемая должность, год рождения. Составить список сотрудников заданного отдела, разделив сотрудников по лабораториям.
-
Сведения о студентах, проживающих в общежитии, содержат следующие данные: фамилия, имя, отчество, год рождения, пол, факультет, номер комнаты. Составить списки по факультетам и расположить номера комнат в порядке возрастания.
-
Сведения о квартиросъемщиках содержат сведения: фамилия, имя, отчество, адрес, площадь квартиры, плата за один квадратный метр, плата за всю площадь (рассчитывается в программе), количество комнат, количество проживающих в квартире человек. Получить сведения о квартиросъемщиках, проживающих в трехкомнатных квартирах.
-
В памяти ЭВМ хранятся данные об абонентах АТС: номер телефона, фамилия, имя, отчество, домашний адрес, включавший номер почтового отделения. Составить списки абонентов по АТС, если считается, что первые три цифры телефона соответствуют названию (номеру) АТС.
-
Сведения о студентах-иностранцах: фамилия, имя, страна, факультет, группа, оценки по предметам за два семестра обучения . Составить списки студентов-иностранцев по факультетам и по странам.
-
Сведения о машинах включают следующие данные: марка, мощность, страна изготовитель, дата выпуска, первоначальная цена. Разделить машины на две группы - выпущенные до 2000 года и после. Распределить их по странам.
-
Сведения о квартиросъемщиках содержат сведения: фамилия, имя, отчество, адрес(город, улица. номер дома), площадь квартиры. Распределить данные по городам. а в файле по улицам.
-
Сведения о студентах, проживающих в общежитии, содержат следующие данные: фамилия, имя, отчество, пол, факультет, номер комнаты, город из которого приехал студент. Составить списки по факультетам и расположить номера комнат в порядке возрастания и по городам.
-
Сведения о студентах-иностранцах, проживающих в общежитии: фамилия, имя, страна, факультет, номер общежития , номер комнаты . Составить списки студентов-иностранцев по общежитиям и по странам.
-
Каждая запись по штатному расписанию предприятия содержит следующие данные: номер цеха, фамилию и инициалы, профессию, разряд, стаж работы. Составить список слесарей и фрезеровщиков, работающих на данном предприятии более 10 лет и имеющих разряд выше четвертого.
-
Сведения о книгах в библиотеке содержат следующие данные: название книги, фамилия и инициалы авторов, год издания, название издательства, количество страниц. Распределить книги по издательствам, удалив их название из полей, и расположить книги по годам выпуска.
8.4 Контрольные вопросы :
-
В каких случаях используются структуры?
-
Какие существуют варианты описаний?
-
Как осуществляется описание структуры с помощью шаблона?
-
Как осуществляется описание структуры с помощью нового типа данных?
-
В каких случаях можно использовать описание структуры с помощью шаблона и с помощью нового типа данных?
-
Как выглядит прямое описание данных (переменных, массивов) в виде структуры?
-
В каких случаях можно использовать прямое описание данных в виде структуры?
-
Как осуществляется доступ к элементам структур?
-
Как осуществляется описание структуры с помощью указателей?
-
Какие существуют варианты для доступа к элементам структуры, описанной с помощью указателя?
-
Как осуществляется выделение элемента структуры через адрес, задаваемый указателем?
-
Как осуществляется получение значения элемента структуры по адресу, заданному указателем?
-
Могут ли структуры использоваться в функциях в качестве аргументов, а также в качестве возвращаемых ими значений?
-
Как может передаваться в функцию вся структура ? Что в этом случае используется в качестве фактических переменных при вызове функции?
-
Может ли в функцию передаваться адрес структуры? Как при этом должен быть описан один из аргументов функции?
-
Как может функция возвращать структуру через свое имя? Какой тип функции при этом используется ?