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

Завдання

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

Хід роботи

  1. Завантажити систему програмування.

Розробити програму з використанням структури. Для цього потрібно:

  • Визначити шаблон структури для об’єкту згідно варіанту.

  • Визначити область пам’яті ( як масив) для розташування значень полів структури.

  • Внести дані в поля структури.

  • Для кожній структури вивести на екран монітору вхідні дані.

  1. Якщо є помилки, відредагуйте програму.

  2. Покажіть одержані результати викладачу.

  3. Складіть звіт.

Варіанти

  1. Співробітники (Код співробітника, ПІП, Вік, Стать, Адреса, Телефон, Паспортні дані, Посада (Код посади, Найменування, Оклад, Обов’язки, Вимоги).

  2. Читачі (Код читача, ПІП, Дата народження, Стать, Адреса, Телефон, Паспортні дані, Видані книги (Код книги, Код читача, Дата видачі, Дата повернення ) .

  3. Аптека ( Назва ліків, Країна виробник, Ціна, Призначення, Дата випуску( День, Місяць, Рік).

  4. Залізничні каси(Номер квітку, Прізвище пасажира, № потягу, № вагону, Дата виїзду ( День, Місяць, Рік).

  5. Прокат автомобілів(Номером машини , Тип( Форма кузову, Кількість дверей), Рік випуску, Марка.

  6. Ломбард ( Номером квитанції, Власника закладної, Адресу( Країна, місто, Вулиця, будинок), Сума залогу Дата повернення залогу.

  7. Успішність студентів. Прізвищем студента Адресу, № телефону, Дата атестації (Назва місяцю, Середній бал).

  8. Готель (Прізвищем гостя, № кімнати, Вартість заселення кімнати за добу, Дата ( День, Місяць, Рік)

  9. Видавництво( Прізвище автора, Назва книги, Вартість, Тираж, Видавництво (Назва, Країна, Власник)

  10. Технічне обслуговування автомобілів (Номер автомобіля, Марка, № двигуна, Вид Ремонту (Вартість ремонту , Дата технічного обслуговування).

Контрольні запитання

  1. Як визначається область пам’яті під вкладену структуру?

  2. Що описує структура?

  3. Як звертатися до поля вкладеній структури?

Лабораторна робота №17

Тема : Застосування в програмах однозв’язного списку.

Мета : Набуття практичних навичок з використання динамічних даних системи програмування С.

Завдання

Написати програму роботи з базою даних. База зберігається в оперативній пам’яті у вигляді структури. Структура містить набір змінних різного типу, які описують сутність згідно варіанту. Програма має забезпечити введення даних, пошук, корегування , додавання та виведення даних. Нижчі наведений приклад програми, який можна взяти за зразок.

Варіанти

  1. Книги.

  2. Машини.

  3. Меблі.

  4. Хижаки.

  5. Квіти.

  6. Одяг.

  7. Взуття.

Хід роботи

  1. Завантажити систему програмування.

  2. Розробити алгоритм програми.

  3. Розробити програму мовою С.

  4. Якщо є помилки, відредагуйте програму.

  5. Покажіть одержані результати викладачу.

  6. Складіть звіт.

Приклад програми з однозв’язним списком, який можна взяти за зразок:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

const int l_name=31;

struct Man

{

char name[l_name];

int birth_day;

float pay;

Man *next;

};

Man* add(Man *bag, const Man &man);

int edit(Man *bag);

Man* find(Man *bag, char *name, Man *& prev);

void find(Man *bag, int birth_day);

void find(Man *bag, float pay);

void find(Man *bag);

void get_name(char *name);

int menu();

void print_dbase();

//Man* read_dbase(char *file_name);

Man read_man();

Man* remove(Man *bag);

int write_dbase(char *file_name,Man *beg);

int main()

{

Man *beg = read_dbase(“dbase.txt”);

if (!beg)

return 1;

while (true)

{

switch (menu())

{

case 1: add(beg.read_man()); break;

case 2: beg=remove(beg); break;

case 3: fine_man(beg); break;

case 4: edit(beg); break;

case 5: print_dbase(beg); break;

case 6: write_dbase(“dbase.txt”,beg); break;

case 7: return 0;

default: puts( “Введіть число від 1 до 7”); break;

}}}

// додавання співробітника, формування нового елементу

Man* add(Man *beg, Man & man)

{

Man* pv=new Man;

*pv=Man;

pv->next=0;

if (beg) //Список не порожній

{

Man* temp=beg;

while(temp->next) temp=temp->next; // Пошук кінця списку

temp->next=pv; // Прив’язування нового елементу

}

else beg=pv; // Список порожній

return beg;

}

//Корегування відомостей

int edit(Man *beg)

{

char name[l_name], buf[80];

get_name(name); //Кого шукаємо

Man* prev;

Man* pv=find(beg,name,prev);

if (!pv) return 1; // Не знайшли

do

{

puts(“Введіть новий оклад”);

gets(buf);

}

while(!(pv->pay=(float)atof(buf)));

return 0;

//Пошук співробітника за прізвищем

Man* find(Man* pv, char* name, Man *& prev)

{prev=0;

while(pv)

{

if (strstr(pv->name, name))

if(pv->name[strlen(name)]==’ ‘)

{

printf(“%30s%5i10/2f\n, pv->name, pv->birth_day, pv->pay);

return pv;

}

puts(“ Такого співробітника немає’”);

return 0;

//Пошук та вивід співробітника по року народження

void find(Man* pv,int birth_day)

{

while (pv)

{

if (pv-> birth_day< birth_day )

{

printf(“%30s%5i10/2f\n, pv->name, pv->birth_day, pv->pay);

pv=pv->next;

}}

//Пошук та вивід співробітника окладом

void find(Man* pv,float pay)

{

while (pv)

{

if (pv->pay>=pay)

{

printf(“%30s%5i10/2f\n, pv->name, pv->birth_day, pv->pay);

pv=pv->next;

}

// Пошук

void find_man(Man* beg)

{char buf[l_name];

int bith_day, option;

float pay;

Man*prev=0, *pv=0;

do{

puts(“1- пошук за прізвищем, 2 – за роком народження,\n\

3 – за окладом, 4 – відміна);

gets(buf);

}

while(!(option=atoi(buf)));

switch (option)

{

case 1: get_name(buf);

pv=find(beg,buf,prev); break;

case 2: do

{puts(“Введіть рік народження\n”); gets(buf);}

while(!(birth_day=atoi(buf)));

find(beg.bithday); break;

case 3: do

{puts(“Введіть оклад\n”); gets(buf);}

while(!(pay=(float)atoi(buf)));

find(beg.pay); break;

case 4: return;

default: puts( “не вірний режим”);

}}

// Запит прізвища

void get_name(char *name)

{puts(“Введіть прізвище, ім’я, по батькові”);

gets(name);

}

// Вивід меню

int menu()

{

char buf[10];int option;

do

{

puts(“=========================================”);

puts(“1- додавання співробітника \t 4 – коригування відомостей”);

puts(“2- вилучення співробітника \t 5 – вивід бази на екран ”);

puts(“3- пошук співробітника/t 6- вивід бази в файл\t\t\t 7- вихід”);

gets(buf);

option=atoi(buf);

}

while(!option);

return option;

}

//Вивід бази на екран

void print_dbase(Man *beg)

{Man* pv=beg;

while(pv)

{m

printf(“%s%5i%10.2f\n”,pv->birth_day, pv->pay);

pv=pv->next;

}}

//Вивід інформації про нового співробітника

Man read_man()\

{

Man man; char buf[80];

get_name(man.name);

for(int i-strlen(man.name); i< l_name; i++)

man.name[i]=’ ‘;

man.name[l_name]=’\0 ‘;

do

{

puts(“Введіть рік народження”);

//Видалення співробітника

Man *remove(Man* bag)

{ char name(l_name);

get_name(name); //Кого вилучаємо

Man* prev;

Man*pv=find((beg, name, prev);

if (pv) //Якщо знайшли

{if(pv==beg) beg= beg->next; //Вилучення з початку списку

else //Вилучення з середини або кінця списку

prev->next=pv->next;

delete pv; //Звільнення пам’яті з під елементу.

}

return beg;

}