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

     

     

     

     

     

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

     

    Інформатика, програмування
    Міністерство освіти
    Російської Федерації
    Хабаровський ГосударственнийТехніческій Університет
    Кафедра: «Програмне забезпечення»
    Курсова робота
    На тему «Розробка бази даних,
    що відбиває облік успішності студентів »
    Виконав студент
    гр. ПО-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. Ось ці дані,
    виведені за допомогою команди - «Сохр.в текст. файл »:
    Студенти
    +------------------------------------------------- -------------------------+< br /> | Студентський | Прізвище | Ім'я | По батькові | Стипендія |
    +--------------+--------------+--------------+---- ----------+--------------|< br /> | 3412 | Поляков | Анатолій | Олексійович | 54.50 |
    | 3413 | Старова | Любов | Михайлівна | 17.00 |
    | 3414 | Гриценко | Володимир | Миколайович | 0.00 |
    | 3415 | Котенко | Анатолій | Миколайович | 0.00 |
    | 3416 | Нагорний | Євген | Васильович | 25.50 |
    +------------------------------------------------- -------------------------+< br /> Предмети
    +------------------------------------------------- -------------------------+< br /> | Код предмета | Назва | Код викладач. | Час навчання | Курс |
    +--------------+--------------+--------------+---- ----------+--------------|< br /> | 2001 | Фізика | 4001 | 34 | 1 |
    | 2002 | Хімія | 4002 | 68 | 1 |
    | 2003 | Математика | 4003 | 68 | 1 |
    | 2004 | Філософія | 4005 | 17 | 2 |
    | 2005 | Економіка | 4004 | 17 | 3 |
    +------------------------------------------------- -------------------------+< br />    Викладачі
    +------------------------------------------------- -------------------------+< br /> | Код викладач. | Прізвище | Ім'я | По батькові | Початок роботи |
    +--------------+--------------+--------------+---- ----------+--------------|< br /> | 4001 | Викулина | Валентина | Іванівна | 01/04/1984 |
    | 4002 | Костыркин | Олег | Володимирович | 01/09/1997 |
    | 4003 | Казанка | Віталій | Володимирович | 01/09/1988 |
    | 4004 | Позднякова | Любов | Олексіївна | 01/09/1998 |
    | 4005 | Загарійчук | Ігор | Дмитрович | 10/05/1989 |
    +------------------------------------------------- -------------------------+< br /> Оцінки
    +------------------------------------------------- -------------------------+< br /> | Код здачі | Оцінка | Дата здачі | Студентський | Код предмета |
    +--------------+--------------+--------------+---- ----------+--------------|< br /> | 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 |
    +------------------------------------------------- -------------------------+< br /> Ці дані будуть використовуватися в прикладах.
    Інтерфейспрограмми
    Для того, щоб зрозуміти, що робить програма розглянемо її меню:




    На малюнку 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 :='-'< br />     else if kr = '-' then kr :=''< br />       else if kr =''then kr :=''< br />         else kr :='/';< br />   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 :='-'< br />     else if kr = '-' then kr :=''< br />       else if kr =''then kr :=''< br />         else kr :='/';< br />   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 ,'+-------------------------------------------- ------------------------------+');< br />    
    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 ,'|');< br />    
    writeln (ooutf ,'+--------------+--------------+-------------- +--------------+--------------|');< br />    tem: = rab;
       while temnil do
       begin
         
    writeln (ooutf ,'|', tem ^. tabl.t1: 14 ,'|', tem ^. tabl.t2: 14 ,'|', tem ^. tabl.t3: 14 ,'|', tem ^. tabl.t4: 14,
         '|', Tem ^. Tabl.t5: 14 ,'|');< br />      tem: = tem ^. sled;
       end;
       
    writeln (ooutf ,'+-------------------------------------------- ------------------------------+');< br />    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 ('+---------------------------------------------- ----------------------------+');< br />    
    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 ,'|');< br />    
    writeln ('+--------------+--------------+--------------+- -------------+--------------|');< br />    tem: = rab;
       while temnil do
       begin
         
    writeln ('|', tem ^. tabl.t1: 14 ,'|', tem ^. tabl.t2: 14 ,'|', tem ^. tabl.t3: 14 ,'|', tem ^. tabl. t4: 14,
         '|', Tem ^. Tabl.t5: 14 ,'|');< br />      tem: = tem ^. sled;
       end;
       
    writeln ('+---------------------------------------------- ----------------------------+');< br />    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 te1nil do begin
        te2: = te1 ^. sled;
        while te2nil 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 rabnil then begin
           tem: = rab;
           while tem ^. slednil 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 temsnil 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 temsnil 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 tem1nil do begin
          if tem1 ^. tabl.t2 = str1 then begin str1: = tem1 ^. tabl.t1; break; end;
          tem1: = tem1 ^. sled;
        end;
        tem1: = tt2;
        while tem1nil do begin
          if tem1 ^. tabl.t2 = str2 then begin str2: = tem1 ^. tabl.t1; break; end;
          tem1: = tem1 ^. sled;
        end;
        tem1: = tt4;
        while tem1nil 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 tem1nil do begin
          if tem1 ^. tabl.t2 = str1 then begin str1: = tem1 ^. tabl.t3; break; end;
          tem1: = tem1 ^. sled;
        end;
        tem1: = tt3;
        while tem1nil 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 tem1nil 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 tem1nil do begin
          if tem1 ^. tabl.t2 = str1 then begin
            str2: = tem1 ^. tabl.t4;
            while tem2nil 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 tem1nil do begin
          if tem1 ^. tabl.t2 = str1 then begin str1: = tem1 ^. tabl.t1; break; end;
          tem1: = tem1 ^. sled;
        end;
        tem1: = tt4;
        while tem1nil 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 temrnil 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 temrnil 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 temrnil then begin temr: = nil; end;
       if temsnil 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 temrnil 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 :='-';< br />    exist: = false;
    nast: = menu1; menus (nast, nast.m);
      while 1> 0 do begin
        if keypressed then key: = readkey;
        case key of
         # 80: ramka ('+');< br />      # 72: ramka ('-');< br />      # 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