Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка_2013_14_весна(1курс) / Лаб_ раб_ 8_структ

.doc
Скачиваний:
13
Добавлен:
03.03.2016
Размер:
59.39 Кб
Скачать

41

ЛАБОРАТОРНАЯ РАБОТА № 8

ОБРАБОТКА СТРУКТУР С ИСПОЛЬЗОВАНИЕМ ФАЙЛОВ И МЕНЮ

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

8.1 Требования к выполнению работы:

При выполнении данного задания должны быть реализованы следующие режимы работы программы:

  • Исходная информация должна быть занесена в исходный файл;

  • Результирующая информация должна быть занесена в один или несколько файлов согласно индивидуальному условию;

  • Должен быть предусмотрен режим редактирования уже существующих записей и внесения новых;

  • Должен быть предусмотрен вывод на экран содержимого исходного файла и результирующих файлов;

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

8.2 Теоретические положения

Описание структуры может быть осуществлено тремя способами:

  1. Описание шаблона:

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

struct <имя_структ>

{

<тип> <имя_поля1>;

<тип> <имя_поля2>;

. . . .

<тип> <имя_поляN>;

};

Далее в программе с использованием этого шаблона могут быть описаны данные, с которыми будет работать программа.

struct <имя_структ> <имя_пер>,<имя_массиваk[k]>;

  1. Описание структуры в виде нового типа данных.

Для этого используется ключевое слово 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Варианты индивидуальных заданий

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

  1. Сводки о выполнении плана содержат шифр продукции, наименование, единицы измерения, план, фактическое выполнение (последнее рассчитывается в программе). Составить список продукции, выпуск которой превысил план, и определить насколько.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. В памяти ЭВМ хранятся данные об абонентах АТС: номер телефона, фамилия, имя, отчество, домашний адрес, включавший номер почтового отделения. Составить списки абонентов по АТС, если считается, что первые три цифры телефона соответствуют названию (номеру) АТС.

  1. Сведения о студентах-иностранцах: фамилия, имя, страна, факультет, группа, оценки по предметам за два семестра обучения . Составить списки студентов-иностранцев по факультетам и по странам.

  1. Сведения о машинах включают следующие данные: марка, мощность, страна изготовитель, дата выпуска, первоначальная цена. Разделить машины на две группы - выпущенные до 2000 года и после. Распределить их по странам.

  1. Сведения о квартиросъемщиках содержат сведения: фамилия, имя, отчество, адрес(город, улица. номер дома), площадь квартиры. Распределить данные по городам. а в файле по улицам.

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

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

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

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

8.4 Контрольные вопросы :

  1. В каких случаях используются структуры?

  2. Какие существуют варианты описаний?

  3. Как осуществляется описание структуры с помощью шаблона?

  4. Как осуществляется описание структуры с помощью нового типа данных?

  5. В каких случаях можно использовать описание структуры с помощью шаблона и с помощью нового типа данных?

  6. Как выглядит прямое описание данных (переменных, массивов) в виде структуры?

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

  8. Как осуществляется доступ к элементам структур?

  9. Как осуществляется описание структуры с помощью указателей?

  10. Какие существуют варианты для доступа к элементам структуры, описанной с помощью указателя?

  11. Как осуществляется выделение элемента структуры через адрес, задаваемый указателем?

  12. Как осуществляется получение значения элемента структуры по адресу, заданному указателем?

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

  14. Как может передаваться в функцию вся структура ? Что в этом случае используется в качестве фактических переменных при вызове функции?

  15. Может ли в функцию передаваться адрес структуры? Как при этом должен быть описан один из аргументов функции?

  16. Как может функция возвращать структуру через свое имя? Какой тип функции при этом используется ?

Соседние файлы в папке Методичка_2013_14_весна(1курс)