ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Розробка бази даних, що відбиває облік успішності студентів
         

     

    Інформатика, програмування
    Міністерство освіти

    Російської Федерації Хабаровський Державний Технічний Університет

    Кафедра: «Програмне забезпечення» Курсова робота

    На тему «Розробка бази даних,

    що відбиває облік успішності студентів » Виконав студент

    гр. ПО-02 Самойленко П. Р.

    Перевірив викладач

    Белоусова Людмила

    Василівна

    Хабаровськ 2001
    Зміст:

    1. Завдання на розробку, постановка задачі.

    2. Опис бази даних.

    3. Опис засобів, що використовуються при створенні програми.

    4. Початкові дані.

    5. Інтерфейс програми.

    6. Опис використовуваних змінних і процедур.

    7. Можливості отриманого програмного продукту.

    Постановка завдання.

    Побудувати систему управління базою даних (надалі-СУБД), що відображає облік успішності студентів вузу. При цьому треба передбачити, що дані можуть вноситися різними людьми. Побудувати базу даних, яка була б максимально гнучкою. У базі даних мають міститися дані про студентів, оцінках, викладачів та предмети.

    Опис бази даних.

    База даних нормалізована і складається з чотирьох таблиць. Вона розбита на чотири таблиці, щоб бути максимально гнучкою. При цьому різні таблиці можуть заповнюватись різними людьми, а потім об'єднуватися в одну загальну базу даних. Наприклад, таблицю про студентів заповнюють на кафедрі, на якій вчитися студент, таблицю про викладача та предмети - на кафедрі цих викладачів, а оцінки ставить викладач.

    Структура таблиць         Назва стовпця         Опис             Таблиця студентів (tt1)             T1         Номер студентського квитка             T2         Прізвище студента             T3         Назва             T4         По-батькові             T5         Стипендія             Таблиця предметів (tt2)             T1         Номер предмета             T2         Назва предмета             T3         Номер викладача             T4         Годинники             T5         Курс             Таблиця викладачів (tt3)             T1         Номер вчителя             T2         Прізвище вчителя             T3         Його ім'я             T4         По-батькові             T5         Дата прийняття викладача на роботу             Таблиця успішності (tt4)             T1         Код факту здачі навчальної дисципліни             T2         Оцінка             T3         Дата здачі             T4         Номер студентського квитка             T5         Код навчального предмета     

    Усі атрибути мають рядковий тип даних. Причому стовпець T1 у кожної з таблиць є первинним ключем, то є дані в ньому унікальні.

    Зобразимо зв'язок між таблицями:

    Зв'язок цей здійснюється через унікальні поля кожної з таблиць. Зі схеми видно, що зв'язок між викладачами і наприклад, студентами, здійснюється тільки через таблицю предметів. Така організація бази даних дозволяє уникнути дублювання даних. Наприклад, якщо б у нас таблиця предметів була об'єднана з таблицею викладачів, то міг виповзти такий випадок - один викладач веде два предмети, отже його прізвище, ім'я та по батькові будуть повторяться в таблиці двічі. А це вже називається надмірністю даних. Опис засобів, що використовуються при створенні програми

    Даний програмний продукт працює в текстовому режимі, періодично міняючи колір символів, що виводяться за допомогою процедури textcolor (). Ця процедура належить модуля crt. Крім неї з цього модуля використовується ще два процедури: clrscr - для отчистки екрану, та gotoxy - для переходу на задані координати екрану.

    У програмі використовуються списки, записи, власні модулі. Які ж переваги дають використані кошти?

    Списки дозволяють раціонально використовувати пам'ять комп'ютера і виділяти її динамічно, не займаючи її даремно. Правда при використанні списків я помітив значне збільшення коду програми у порівнянні з випадком, коли б ми використовували масиви і запису. Але працювати з записами набагато ефективніше, особливо при створенні баз даних. При роботі над даною СУБД я використав стандартні процедури для роботи з вказівниками:

    New () - виділення пам'яті для змінної

    Dispose () - Повернення пам'яті в купу.

    Покажчик в моєму випадку вказує на наступний кортеж в даній таблиці.

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

    Записи допомагають структурувати дані, уникнути надмірності.

    Модуль я використовую для передбачення в ньому типів і заповнення записів, значення яких будуть потім використані в основний програмі. У цих записах я зберігаю масиви строк - строк меню. Таким чином, цей код не «захаращують» код основної програми. І додавати нові елементи в меню набагато простіше - не треба переробляти всю програму.

    Початкові дані

    Для прикладу я ввів деякі дані і зберіг у файлі pasha. Ось ці дані, виведені за допомогою команди - « Зберегти. в текст. файл »:

    Студенти

    +---------------------------------------------- ----------------------------+

    | Студентський | Прізвище | Ім'я | По батькові | Стипендія |

    +--------------+--------------+--------------+- -------------+--------------|

    | 3412 | Поляков | Анатолій | Олексійович | 54.50 |

    | 3413 | Старова | Любов | Михайлівна | 17.00 |

    | 3414 | Гриценко | Володимир | Миколайович | 0.00 |

    | 3415 | Котенко | Анатолій | Миколайович | 0.00 |

    | 3416 | Нагорний | Євген | Васильович | 25.50 |

    +---------------------------------------------- ----------------------------+

    Предмети

    +---------------------------------------------- ----------------------------+

    | Код предмета | Назва | Код викладач. | Час навчання | Курс |

    +--------------+--------------+--------------+- -------------+--------------|

    | 2001 | Фізика | 4001 | 34 | 1 |

    | 2002 | Хімія | 4002 | 68 | 1 |

    | 2003 | Математика | 4003 | 68 | 1 |

    | 2004 | Філософія | 4005 | 17 | 2 |

    | 2005 | Економіка | 4004 | 17 | 3 |

    +---------------------------------------------- ----------------------------+

    Викладачі

    +---------------------------------------------- ----------------------------+

    | Код викладач. | Прізвище | Ім'я | По батькові | Початок роботи |

    +--------------+--------------+--------------+- -------------+--------------|

    | 4001 | Викулина | Валентина | Іванівна | 01/04/1984 |

    | 4002 | Костыркин | Олег | Володимирович | 01/09/1997 |

    | 4003 | Казанка | Віталій | Володимирович | 01/09/1988 |

    | 4004 | Позднякова | Любов | Олексіївна | 01/09/1998 |

    | 4005 | Загарійчук | Ігор | Дмитрович | 10/05/1989 |

    +---------------------------------------------- ----------------------------+

    Оцінки

    +---------------------------------------------- ----------------------------+

    | Код здачі | Оцінка | Дата здачі | Студентський | Код предмета |

    +--------------+--------------+--------------+- -------------+--------------|

    | 1001 | 5 | 10/06/1999 | 3412 | 2001 |

    | 1002 | 4 | 10/06/1999 | 3413 | 2003 |

    | 1003 | 3 | 11/06/1999 | 3414 | 2005 |

    | 1004 | 4 | 12/06/1999 | 3412 | 2003 |

    | 1005 | 5 | 12/06/1999 | 3416 | 2004 |

    +---------------------------------------------- ----------------------------+

    Ці дані будуть використовуватися в прикладах. Інтерфейс програми

    Для того, щоб зрозуміти, що робить програма розглянемо її меню:

      

    На малюнку 1 представлено головне меню програми, яке з'являється при її запуску. Тут:

    « Завантаження » - введення бази даних з типізований файлу.

    « Зберегти. в тип. файл »- збереження бази даних у типізований файлі.

    « Зберегти. в текст. файл »- збереження вибраної таблиці в текстовий файл.

    « Перегляд » - перегляд даних таблиць.

    « Коригування » - зміна записів таблиць.

    « Сортування » - сортування записів за певним полю.

    « Запити » - пошук даних в чотирьох таблицях, що відповідають заданій умові.

    « Вихід » - вихід з програми.

          
    Головне меню містить вкладені. Наприклад на 2 малюнку показано меню, що служить для вибору таблиці (однієї з чотирьох). Вхід до нього може бути здійснений по різному. Тобто це меню ви будете проходити при перегляді даних, за коригування та при збереженні в текстовий файл. Це меню коментарів не потребує.

          
    При виборі «Коригування» ви перейдете до меню, показаному на малюнку 3.

    « Додавання » - додавання нового кортежу в задану за допомогою попереднього меню таблицю.

    « Видалення » - видалення рядки з таблиці, причому запис в таблиці шукається за одну колонку.

    « Зміна » - зміна властивостей існуючої в базі даних рядка.

    Остання підменю - це підменю запитів, на якому треба зупинитися детальніше. Розглянемо малюнок:

          
    «Знайти оцінку» - знайти оцінку студента за його прізвища і предмету, який він здавав.

    «Хто приймав іспит» - прізвище викладача, який брав даний предмет.

    «Знайти розмір стипендії» - розмір стипендії обраного студента.

    «Висновок з оцінки» - показати всіх студентів, які отримали дану оцінку.

    «Дата здачі іспиту» - знайти дати, коли приймався даний предмет.

    У запитах використовуються реальні назви предметів, прізвища студентів, а не їх номери (для студентів наприклад номер відповідає номеру студентського квитка).

          
    Більше в програмі меню такого типу немає, але є багато рядкового введення, наприклад виконаємо запит з пошуком оцінок. Після запиту екран буде виглядати так (шукали четверочніков):

    Результат запиту відображається червоним кольором.

    Опис використовуваних процедур. У додатку використовуються як глобальні, так і локальні змінні. До глобальним змінним відносяться:

    1) names, namer: string [10] - рядкові змінні, які винесені в глобальні, щоб зробити програму більш компактною. Інакше б у різних процедурах треба було вводити аналогічні типи даних, а так можна обійтися лише парою глобальних змінних.

    2) key, kr: char - символьні змінні. У змінної key зберігається код натиснутою клавіші. А в змінної kr знаходиться поточний стан зірочки. Зірочка буде розглянута нижче.

    3) tek, i, j, izm: integer - цілочисельні змінні. З них i і j-циклічні, тимчасові змінні. Tek та izm показують, яке меню активно у поточний момент. Вони допомагають зрозуміти програмі від якого меню до якого перейшли, тобто допомагає відновити послідовність дій.

    4) exist, vfile, issor: boolean - Логічні змінні. Exist - служить для виходу з програми. Vfile - дозволяє пускати одну процедуру двома шляхами - або виводити дані на екран, або у файл. Issor - показує меню вибору таблиць, що наступним кроком повинна бути сортування даної таблиці.

    5) nast: pered - типізований змінна, в якій зберігаються рядка поточного меню. Опис типу pered мається на модулі:

    pered = record

    st: array [1 .. 12] of string;

    m: byte; (кількість рядків у меню)

    end;

    temr, tt1, tt2, tt3, tt4: cc - Таблиці бази даних. Тут tt1 - таблиця з даними про студентів, tt2 - предмети, tt3 - викладачі, tt4 - оцінки (успішність). Temr - тимчасова таблиця. Усі ці змінні є динамічними списками. Вони описані у файлі tips.pas:

    tabl2 = record (Сама таблиця)

    t1, t2, t3, t4, t5: string [12]; (Складається з рядків)

    end;

    cc = ^ tab;

    tab = record (Створення динамічного списку)

    tabl: tabl2;

    sled: cc;

    end;

    Програма відповідає на те, яку клавішу натиснув користувач і передає управління процедурі main. Процедура readkey використовується в основному блоці програми. Для роботи з керуючими клавішами використовуються їх коди в таблиці ISCII. Тут:

    80 - курсор вгору

    72 - курсор вниз

    27 - ESC

    13 - Enter

    При натисканні на клавішу «Введення» управління передається продцедуре main. При цьому використовуються глобальні змінні.

    У процедурі main управління переходить до підпрограмі, згідно поточному меню, але деколи треба знати звідки був здійснено вхід. Як я вже говорив, зайти в меню вибору таблиць можна по різному. Все меню мають різні заголовки, які і використовуються для їх ідентифікації. При натисканні на кнопку « Вихід », цього стає початкове меню.

    Інтерфейсна частина програми складається з трьох процедур:

    procedure menus (m: pered; max: byte); (Висновок меню)

    begin

    clrscr; For i: = 1 to max do begin

    if i = 1 then begin

    textcolor (1); gotoxy (9,2); write (m.st [i ]);

    end

    else begin

    if i = 2 then textcolor (9)

    else textcolor (3);

    gotoxy (8, i +3); write (m.st [i ]);

    end;

    end;

    end;

    За допомогою цієї процедури на екрані змінюються меню. Потрібно врахувати, що спочатку ми знаємо, з склоку рядків складається кожне меню, що спрощує завдання. Заголовок і зміст меню пишуться різними кольорами. Зміна кольору символів, що виводяться йде за допомогою команди textcolor, параметром якому є зумовлена константа.

    Наступна процедура:

    procedure krutis; (Зірочка поруч з активним елементом)

    begin

    textcolor (14);

    if kr = '/' then kr :='-'

    else if kr = '-' then kr :=''

    else if kr =''then kr :='|'

    else kr :='/';

    gotoxy (6, tek 3); write (kr);

    textcolor (3);

    end;

    Ця процедура працює таким чином - звернення до неї йде з основного блоку програми, в якому стоїть нескінченний цикл. На екрані відображається щось схоже на бенгальська вогонь. Це досягається шляхом послідовного виводу на одному і тому ж місці символів:, |, /, -. У змінної tek у нас міститься номер активної рядки, а щодо неї ми і повинні поставити зірочку.

    Наступна процедура:

    procedure ramka (ch: char); (переміщення покажчика)

    begin

    gotoxy (6, tek 3); Writeln ( '');

    textcolor (3); gotoxy (8, tek 3); write (nast.st [tek ]);

    if ch = '+' then tek: = tek 1

    else tek: = tek-1;

    if tek = 1 then tek: = nast.m

    else if tek = nast.m 1 then tek: = 2;

    key: = # 0;

    textcolor (9); gotoxy (8, tek 3); write (nast.st [tek ]);

    krutis;

    end;

    Дана процедура має параметр символьного типу. За змістом ch визначається - вгору або вниз зрушила активна рядок. Звернення до цієї процедурі йде з основного блоку програми. Більше процедур такого роду немає (до всіх інших процедур звернення йде з процедури main).

    Ця процедура затирає елемент, який був активний перед цим кольором за замовчуванням (блакитним) і пере попереднє положення зірочки. Після цього виходячи зі значення ch змінюється значення tek і виділяється елемент, на який було здійснено перехід. У підпрограмі вставлені дві умови:

    if tek = 1 then tek: = nast.m

    else if tek = nast.m 1 then tek: = 2;

    Вони спрацьовують коли активним є верхній елемент меню і користувач натиснув кнопку вгору, тоді поточної стає останній рядок, і навпаки - поточний рядок є останньою, а користувач натиснув кнопку вниз, тоді активної стане перший рядок активного меню.

    Процедури наступного типу здійснюють завантаження і вивантаження даних з файлу. Я не буду тут наводити повний текст процедур, тому що його можна подивитися у додатку. Читання здійснюється за допомогою readetip, а запис - writetip. В цих процедурах використовуються глобальні змінні. Завантаження йде за допомогою таблиць tt1, tt2, tt3, tt4. Під час роботи користувач працює як би з одним файлом, хоча реально кожна з таблиць зберігається в свій файл. При запиті користувач вводить назва файлу, а потім на цей титул додається ліворуч цифра - 1, 2, 3 або 4. Наприклад, якщо при збереженні в типізований файл імені зберігається файлу присвоїти значення pasha, то таблиця tt1 буде збережена у файлі 1pasha, tt2 - 2pasha, tt3 - 3pasha, tt4 - 4pasha. У разі вивантаження з файлу присвоєння імен йде таким же чином. Для збереження в текстовий файл використовується процедура tabl11 (t: integer; rab: cc), де rab - зберігається таблиця, а t - допомагає знайти заголовки?? толбцов поточної таблиці. Результат виконання цієї процедури можна подивитися вище, де показані таблиці первинних даних. Для виведення вмісту таблиці на екран використовується процедура tabl1 (t: integer; rab: cc; yd: boolean), дія якої аналогічно попередньої, тільки додається параметр yd, від якого залежить, чи потрібно затирати таблицю відразу або вона повинна повисіти на екрані, поки користувач не ввів будь-які дані. Наприклад при видаленні записів з таблиці, користувачеві буде зручніше, якщо він буде зміст таблиці перед очима. Наприклад покажемо зміст таблиці студентів, які будуть
    виведені після натискання на кнопку «Перегляд»:

    Наступна процедура - obrabotka (iz, t: integer; var rab: cc). Ця процедура викликається при коригуванні записів. Через параметр iz процедура вибирає шлях подальшого ходу. Тобто чи треба додати запис, змінити або видалити. Параметр rab - це таблиця, яка передається в процедуру, і параметр var показує, що дану таблицю можна змінювати безпосередньо з процедури.

    У ній використовуються локальні змінні -

    dlud: string;

    bis: boolean;

    tems, temr, tem: cc;

    Тут всі змінні типу cc - тимчасові, dlud служить для введення даних, а bis показує, здійснимо чи обрану дію чи ні.

    Продцедура sort (iz, t: integer; var rab: cc) здійснює сортування записів в обраній таблиці по обраному полю. Її робота і параметри з змінними аналогічні попередньої процедури.

    При запитах виконується процедура zapros (num: integer), де через параметр num передається, який саме запит повинен виконуватися. Потім через умова case йде обробка запитів. Як показано на схемі взаємодії таблиць, щоб перейти від студентів до викладачів треба пройти через таблицю оцінок. Зв'язок між таблицями здійснюється за унікальним полях. Наприклад для знаходження оцінки студента треба спочатку з таблиці студентів знайти номер його студентського, а потім знайти номер здаваного предмета з таблиці, а вже після цього, використовуючи отримані номери, знайти з таблиці успішності отриману студентом оцінку. Тобто зв'язок йде за трьома таблиць. У запитах я намагався якомога більше показати можливості моєї бази даних. На останньому малюнку показаний один із запитів і результат його виконання. Можливість створення гнучких запитів є найважливішим завданням програмування баз даних. Можливості отриманого

    програмного продукту

    Таким чином ми побудували гнучку модель бази даних, в якій легко створити потрібний запит, дані представлені в зручному для користувача вигляді. Інтерфейс програми побудований без надлишків і налаштований на максимальну зручність користувача. Програма дозволяє заповнювати базу даних одночасно декількома користувачами, кожен з яких буде заповнювати свою таблицю. Так як програма працює з динамічними списками, то вона швидка і дозволяє уникнути надмірності даних у таблицях.

    Текст програми Kurs.pas

    program Delphins;

    uses crt, tips;

    var names, namer: string [10];

    key, kr: char;

    tek, i, j, izm: integer;

    exist, vfile, issor: boolean;

    nast: pered;

    temr, tt1, tt2, tt3, tt4: cc;

    outf: file of tabl2;

    procedure menus (m: pered; max: byte); (Висновок меню)

    begin

    clrscr;

    For i: = 1 to max do begin

    if i = 1 then begin

    textcolor (1); gotoxy (9,2); write (m.st [i ]);

    end

    else begin

    if i = 2 then textcolor (9)

    else textcolor (3);

    gotoxy (8, i +3); write (m.st [i ]);

    end;

    end;

    end;

    procedure krutis; (Зірочка поруч з активним елементом)

    begin

    textcolor (14);

    if kr = '/' then kr :='-'

    else if kr = '-' then kr :=''

    else if kr =''then kr :='|'

    else kr :='/';

    gotoxy (6, tek 3); write (kr);

    textcolor (3);

    end;

    procedure ramka (ch: char); (переміщення покажчика)

    begin

    gotoxy (6, tek 3); Writeln ( '');

    textcolor (3); gotoxy (8, tek 3); write (nast.st [tek ]);

    if ch = '+' then tek: = tek 1

    else tek: = tek-1;

    if tek = 1 then tek: = nast.m

    else if tek = nast.m 1 then tek: = 2;

    key: = # 0;

    textcolor (9); gotoxy (8, tek 3); write (nast.st [tek ]);

    krutis;

    end;

    procedure tabl11 (t: integer; rab: cc); (Вивід таблиці у файл)

    var ooutf: text;

    tem: cc;

    begin

    clrscr;

    writeln ( 'Введіть ім'я файлу');

    readln (names);

    assign (ooutf, names);

    rewrite (ooutf);

    writeln (ooutf, menu2.st [t ]);

    writeln (ooutf ,'+----------------------------------------- ---------------------------------+');

    writeln (ooutf ,'|', mm [t-1, 1]: 14 ,'|', mm [t-1, 2]: 14 ,'|', mm [t-1, 3]: 14 ,'|', mm [t-1, 4]: 14 ,'|', mm [t-1, 5]: 14 ,'|');

    writeln (ooutf ,'+--------------+--------------+----------- ---+--------------+--------------|');

    tem: = rab;

    while tem <> nil do

    begin

    writeln (ooutf ,'|', tem ^. tabl.t1: 14 ,'|', tem ^. tabl.t2: 14 ,'|', tem ^. tabl.t3: 14 ,'|', tem ^. tabl.t4: 14,

    '|', tem ^. tabl.t5: 14 ,'|');

    tem: = tem ^. sled;

    end;

    writeln (ooutf ,'+----------------------------------------- ---------------------------------+');

    close (ooutf);

    nast: = menu1;

    menus (nast, nast.m);

    tek: = 2;

    end;

    procedure tabl1 (t: integer; rab: cc; yd: boolean); (Вивід таблиці на екран)

    var tem: cc;

    begin

    clrscr;

    writeln (menu2.st [t ]);

    writeln ('+------------------------------------------- -------------------------------+');

    writeln ('|', mm [t-1, 1]: 14 ,'|', mm [t-1, 2]: 14 ,'|', mm [t-1, 3]: 14, '|', mm [t-1, 4]: 14 ,'|', mm [t-1, 5]: 14 ,'|');

    writeln ('+--------------+--------------+------------- -+--------------+--------------|');

    tem: = rab;

    while tem <> nil do

    begin

    writeln ('|', tem ^. tabl.t1: 14 ,'|', tem ^. tabl.t2: 14 ,'|', tem ^. tabl.t3: 14 ,'|', tem ^ . tabl.t4: 14,

    '|', tem ^. tabl.t5: 14 ,'|');

    tem: = tem ^. sled;

    end;

    writeln ('+------------------------------------------- -------------------------------+');

    if not yd then begin

    readln;

    nast: = menu1;

    menus (nast, nast.m);

    tek: = 2;

    end;

    yd: = false;

    end;

    procedure sort (iz, t: integer; var rab: cc); (Сортування по полю)

    var po: integer;

    te1, te2, tem: cc;

    str1, str2: string;

    ttrtt: tabl2;

    begin

    tabl1 (tek, rab, true);

    writeln ( 'Введіть номер стовпчика по якому треба відсортувати дані');

    readln (po);

    te1: = rab;

    while te1 <> nil do begin

    te2: = te1 ^. sled;

    while te2 <> nil do begin

    case po of

    1: begin str1: = te1 ^. tabl.t1; str2: = te2 ^. tabl.t1; end;

    2: begin str1: = te1 ^. tabl.t2; str2: = te2 ^. tabl.t2; end;

    3: begin str1: = te1 ^. tabl.t3; str2: = te2 ^. tabl.t3; end;

    4: begin str1: = te1 ^. tabl.t4; str2: = te2 ^. tabl.t4; end;

    5: begin str1: = te1 ^. tabl.t5; str2: = te2 ^. tabl.t5; end;

    end;

    if str1> str2 then begin

    ttrtt: = te1 ^. tabl;

    te1 ^. tabl: = te2 ^. tabl;

    te2 ^. tabl: = ttrtt;

    end;

    te2: = te2 ^. sled;

    end;

    te1: = te1 ^. sled;

    end;

    tabl1 (tek, rab, false);

    end;

    procedure obrabotka (iz, t: integer; var rab: cc); (Обробка записів)

    var dlud: string;

    bis: boolean;

    tems, temr, tem: cc;

    begin

    clrscr;

    if iz = 1 then begin (додавання запису)

    if rab <> nil then begin

    tem: = rab;

    while tem ^. sled <> nil do tem: = tem ^. sled;

    new (tem ^. sled);

    tem: = tem ^. sled;

    end

    else begin

    new (rab);

    tem: = rab;

    end;

    writeln (mm [t, 1]); readln (tem ^. tabl.t1);

    writeln (mm [t, 2]); readln (tem ^. tabl.t2);

    writeln (mm [t, 3]); readln (tem ^. tabl.t3);

    writeln (mm [t, 4]); readln (tem ^. tabl.t4);

    writeln (mm [t, 5]); readln (tem ^. tabl.t5);

    tem ^. sled: = nil;

    tem: = rab;

    izm: = 0;

    nast: = menu1;

    menus (nast, nast.m);

    tek: = 2; iz: = 0;

    end

    else if iz = 2 then begin (Видалення запису)

    tems: = rab;

    tabl1 (tek, rab, true);

    writeln ( 'Введіть унікальний номер'); readln (dlud);

    bis: = true;

    if rab ^. tabl.t1 = dlud then begin

    rab: = rab ^. sled;

    bis: = false;

    end

    else begin

    while tems <> nil do begin

    if tems ^. sled ^. tabl.t1 = dlud then begin

    tem: = tems ^. sled;

    tems ^. sled: = tems ^. sled ^. sled;

    dispose (tem);

    bis: = false;

    break;

    end;

    tems: = tems ^. sled;

    end;

    end;

    if bis then writeln ( 'Даною запису не виявлений');

    nast: = menu1;

    menus (nast, nast.m);

    tabl1 (tek, rab, false);

    izm: = 0;

    tek: = 2;

    end

    else if iz = 3 then begin (зміна даних)

    tems: = rab;

    tabl1 (tek, rab, true);

    writeln ( 'Введіть унікальний номер'); readln (dlud);

    bis: = true;

    while tems <> nil do begin

    if tems ^. tabl.t1 = dlud then begin

    writeln (mm [t, 1]); readln (tems ^. tabl.t1);

    writeln (mm [t, 2]); readln (tems ^. tabl.t2);

    writeln (mm [t, 3]); readln (tems ^. tabl.t3);

    writeln (mm [t, 4]); readln (tems ^. tabl.t4);

    writeln (mm [t, 5]); readln (tems ^. tabl.t5);

    break;

    end;

    tems: = tems ^. sled;

    end;

    if bis then writeln ( 'Даною запису не виявлений');

    nast: = menu1;

    menus (nast, nast.m);

    tabl1 (tek, rab, false);

    izm: = 0; tek: = 2;

    end;

    end;

    procedure zapros (num: integer); (Запити)

    var str1, str2, str3: string;

    tem1, tem2: cc;

    nay: boolean;

    zz: tabl2;

    begin

    clrscr;

    nay: = false;

    case num of

    2: begin (Знайти оцінку)

    tem1: = tt1;

    writeln ( 'Введіть прізвище'); readln (str1);

    writeln ( 'Введіть назву предмета'); readln (str2);

    while tem1 <> nil do begin

    if tem1 ^. tabl.t2 = str1 then begin str1: = tem1 ^. tabl.t1; break; end;

    tem1: = tem1 ^. sled;

    end;

    tem1: = tt2;

    while tem1 <> nil do begin

    if tem1 ^. tabl.t2 = str2 then begin str2: = tem1 ^. tabl.t1; break; end;

    tem1: = tem1 ^. sled;

    end;

    tem1: = tt4;

    while tem1 <> nil do begin

    if ((tem1 ^. tabl.t5 = str2) and (tem1 ^. tabl.t4 = str1)) then begin

    textcolor (red);

    writeln ( 'Оцінка цього студента-', tem1 ^. tabl.t2);

    nay: = true; break;

    end;

    tem1: = tem1 ^. sled;

    end;

    end;

    3: begin (Викладач)

    writeln ( 'Виїдемо назва предмету');

    readln (str1);

    tem1: = tt2;

    while tem1 <> nil do begin

    if tem1 ^. tabl.t2 = str1 then begin str1: = tem1 ^. tabl.t3; break; end;

    tem1: = tem1 ^. sled;

    end;

    tem1: = tt3;

    while tem1 <> nil do begin

    if tem1 ^. tabl.t1 = str1 then begin

    textcolor (red);

    writeln ( 'Викладач-');

    with tem1 ^. tabl do write ( '', t2, ',', t3, ',', t4);

    nay: = true; break;

    end;

    tem1: = tem1 ^. sled;

    end;

    end;

    4: begin (Знайти розмір стипендії)

    writeln ( 'Введіть прізвище студента');

    readln (str1);

    tem1: = tt1;

    while tem1 <> nil do begin

    if tem1 ^. tabl.t2 = str1 then begin

    textcolor (red);

    writeln ( 'Стипендія-', tem1 ^. tabl.t5);

    nay: = true; break;

    end;

    tem1: = tem1 ^. sled;

    end;

    end;

    5: begin (Виведення всіх студентів з обраною оцінкою)

    writeln ( 'Введіть оцінку');

    readln (str1);

    tem1: = tt4; tem2: = tt1;

    textcolor (red);

    while tem1 <> nil do begin

    if tem1 ^. tabl.t2 = str1 then begin

    str2: = tem1 ^. tabl.t4;

    while tem2 <> nil do begin

    if tem2 ^. tabl.t1 = str2 then begin

    with tem2 ^. tabl do

    writeln ( 'Студент-', t3, '', t4, '', t2);

    nay: = true;

    end;

    tem2: = tem2 ^. sled;

    end;

    end;

    tem2: = tt1; tem1: = tem1 ^. sled;

    end;

    end;

    6: begin (Знайти дату здачі предмета)

    writeln ( 'Введіть назву предмета');

    readln (str1);

    tem1: = tt2;

    while tem1 <> nil do begin

    if tem1 ^. tabl.t2 = str1 then begin str1: = tem1 ^. tabl.t1; break; end;

    tem1: = tem1 ^. sled;

    end;

    tem1: = tt4;

    while tem1 <> nil do begin

    if tem1 ^. tabl.t5 = str1 then begin

    textcolor (red);

    writeln ( 'Дата здачі-', tem1 ^. tabl.t3);

    nay: = true;

    end;

    tem1: = tem1 ^. sled;

    end;

    end;

    end;

    textcolor (red);

    if not nay then writeln ( 'Запит нездійсненний');

    textcolor (3); readln;

    nast: = menu1; menus (nast, nast.m);

    tek: = 2;

    end;

    procedure writetip (temr: cc);

    begin

    clrscr;

    write ( 'Введіть ім'я файлу');

    writeln ( 'в якому хочете зберегти дані');

    readln (names);

    for i: = 1 to 4 do begin

    if temr <> nil then begin temr: = nil; end;

    case i of

    1: begin temr: = tt1; namer: = '1 '+ names; end;

    2: begin temr: = tt2; namer: = '2 '+ names; end;

    3: begin temr: = tt3; namer: = '3 '+ names; end;

    4: begin temr: = tt4; namer: = '4 '+ names; end;

    end;

    assign (outf, namer); rewrite (outf);

    while temr <> nil do begin

    write (outf, temr ^. tabl);

    temr: = temr ^. sled;

    end;

    CLOSE (outf);

    end;

    nast: = menu1; menus (nast, nast.m); tek: = 2;

    end;

    procedure readtip (temr: cc);

    var tems: cc;

    begin

    clrscr;

    write ( 'Введіть ім'я файлу');

    writeln ( 'з якого треба взяти дані'); readln (names);

    for i: = 1 to 4 do begin

    if temr <> nil then begin temr: = nil; end;

    if tems <> nil then begin tems: = nil; end;

    case i of

    1: begin new (tt1); temr: = tt1; namer: = '1 '+ names; end;

    2: begin new (tt2); temr: = tt2; namer: = '2 '+ names; end;

    3: begin new (tt3); temr: = tt3; namer: = '3 '+ names; end;

    4: begin new (tt4); temr: = tt4; namer: = '4 '+ names; end;

    end;

    assign (outf, namer); reset (outf);

    if eof (outf) then begin

    case i of

    1: begin dispose (tt1); tt1: = nil; end;

    2: begin dispose (tt2); tt2: = nil; end;

    3: begin dispose (tt3); tt3: = nil; end;

    4: begin dispose (tt4); tt4: = nil; end;

    end;

    end

    else begin

    tems: = temr;

    while temr <> nil do begin

    if eof (outf) then break;

    read (outf, temr ^. tabl);

    if eof (outf) then break;

    new (temr ^. sled);

    temr: = temr ^. sled;

    end;

    temr ^. sled: = nil;

    case i of

    1: tt1: = tems;

    2: tt2: = tems;

    3: tt3: = tems;

    4: tt4: = tems;

    end;

    end;

    CLOSE (outf);

    end;

    nast: = menu1; menus (nast, nast.m); tek: = 2;

    end;

    procedure main;

    begin

    key: = # 0;

    if nast.st [1] = menu1.st [1] then begin (Якщо меню - основне)

    case tek of

    2: readtip (temr);

    3: writetip (temr);

    4,5,7: begin

    nast: = menu2; menus (nast, nast.m);

    if tek = 7 then issor: = true;

    if tek = 4 then vfile: = true

    else if tek = 5 then vfile: = false;

    tek: = 2;

    end;

    6: begin

    nast: = menu3; menus (nast, nast.m); tek: = 2;

    end;

    8: begin

    nast: = menu4; menus (nast, nast.m); tek: = 2;

    end;

    9: begin

    exist: = true;

    end;

    end;

    end

    else if nast.st [1] = menu3.st [1] then begin (Якщо поточне меню-menu3)

    case tek of

    2,3,4: begin

    izm: = tek-1;

    nast: = menu2; menus (nast, nast.m); tek: = 2;

    end;

    5: begin

    nast: = menu1;

    menus (nast, nast.m); tek: = 2;

    end;

    end;

    end

    else if nast.st [1] = menu4.st [1] then begin (Якщо поточне меню-menu4)

    case tek of

    2,3,4,5,6: zapros (tek);

    7: begin

    nast: = menu1;

    menus (nast, nast.m); tek: = 2;

    end;

    end;

    end

    else if nast.st [1] = menu2.st [1] then begin (Якщо поточне меню-menu2)

    if izm> 0 then begin

    case tek of

    2: obrabotka (izm, tek-1, tt1);

    3: obrabotka (izm, tek-1, tt2);

    4: obrabotka (izm, tek-1, tt3);

    5: obrabotka (izm, tek-1, tt4);

    6: begin

    nast: = menu1; menus (nast, nast.m); izm: = 0; tek: = 2;

    end;

    end;

    end

    else if issor = true then begin

    issor: = false;

    case tek of

    2: sort (izm, tek-1, tt1);

    3: sort (izm, tek-1, tt2);

    4: sort (izm, tek-1, tt3);

    5: sort (izm, tek-1, tt4);

    6: begin

    nast: = menu1; menus (nast, nast.m); izm: = 0; tek: = 2;

    end;

    end;

    end

    else begin

    case tek of

    2: if vfile then tabl11 (tek, tt1)

    else tabl1 (tek, tt1, false);

    3: if vfile then tabl11 (tek, tt2)

    else tabl1 (tek, tt2, false);

    4: if vfile then tabl11 (tek, tt3)

    else tabl1 (tek, tt3, false);

    5: if vfile then tabl11 (tek, tt4)

    else tabl1 (tek, tt4, false);

    6: begin

    nast: = menu1; menus (nast, nast.m); izm: = 0; tek: = 2;

    end;

    end;

    end;

    end;

    end;

    begin

    clrscr;

    textBackground (black);

    tek: = 2; kr :='-';

    exist: = false;

    nast: = menu1; menus (nast, nast.m);

    while 1> 0 do begin

    if keypressed then key: = readkey;

    case key of

    # 80: ramka ('+');

    # 72: ramka ('-');

    # 27: exist: = true;

    # 13: main;

    end;

    if exist then exit;

    krutis;

    end;

    end.

    Текст модуля Tips.pas

    Unit tips;

    interface

    type

    pered = record

    st: array [1 .. 12] of string;

    m: byte;

    end;

    tabl2 = record

    t1, t2, t3, t4, t5: string [12];

    end;

    cc = ^ tab;

    tab = record

    tabl: tabl2;

    sled: cc;

    end;

    var

    menu1, menu2, menu3, menu4: pered;

    mm: array [1 .. 5,1 .. 5] of string [50];

    implementation

    begin

    with menu1 do begin

    st [1]: = 'БАЗА ДАНИХ';

    st [2]: = "ЗАВАНТАЖЕННЯ";

    st [3]: = 'Зберегти. в тип. файл ';

    st [4]: = 'Зберегти. в текст. файл ';

    st [5]: = 'Перегляд';

    st [6]: = 'Коректування';

    st [7]: = 'Сортування';

    st [8]: = 'Запити';

    st [9]: = 'Вихід';

    m: = 9;

    end;

    mm [1,1]: = 'Студентський';

    mm [1,2]: = 'Прізвище';

    mm [1,3]: = 'Назва';

    mm [1,4]: = 'По батькові';

    mm [1,5]: = 'Стипендія';

    mm [2,1]: = 'Код предмета';

    mm [2,2]: = 'Назва';

    mm [2,3]: = 'Код викладач .';

    mm [2,4]: = 'Час навчання';

    mm [2,5]: = 'Курс';

    mm [3,1]: = 'Код викладач .';

    mm [3,2]: = 'Прізвище';

    mm [3,3]: = 'Назва';

    mm [3,4]: = 'По батькові';

    mm [3,5]: = 'Початок роботи';

    mm [4,1]: = 'Код здачі';

    mm [4,2]: = 'Оцінка';

    mm [4,3]: = 'Дата здачі';

    mm [4,4]: = 'Студентський';

    mm [4,5]: = 'Код предмета';

    with menu2 do begin

    st [1]: = 'ПЕРЕГЛЯД';

    st [2]: = 'Студенти';

    st [3]: = 'Предмети';

    st [4]: = 'Викладачі';

    st [5]: = 'Оцінки';

    st [6]: = 'Вихід';

    m: = 6;

    end;

    with menu3 do begin

    st [1]: = 'Коректування';

    st [2]: = 'Додавання';

    st [3]: = 'Видалення';

    st [4]: = 'Зміна';

    st [5]: = 'Вихід';

    m: = 5;

    end;

    with menu4 do begin

    st [1]: = 'ЗАПИТИ';

    st [2]: = 'Знайти оцінку';

    st [3]: = 'Хто приймав іспит';

    st [4]: = 'Знайти розмір стипендії';

    st [5]: = 'Висновок з оцінки';

    st [6]: = 'Дата здачі іспиту';

    st [7]: = 'Вихід';

    m: = 7;

    end;

    end.

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status