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

     

     

     

     

     

         
     
    Розробити програму на алгоритмічній мові програмування С + +, що реалізовує навчальну систему управління базою даних
         

     

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

    Розробити програму на алгоритмічній мові програмування С + +, що реалізовує навчальну систему управління базою даних (СУБД).

    Звіт до роботи по курсу "Системне програмування"

    Розробив Чепасов І.О.

    Пензенський Державний Технічний Університет, Кафедра: "Інформаційно-обчислювальні системи"

    1998

    1 Формулювання завдання

    Розробити програму на алгоритмічній мові програмування С + +, що реалізовує навчальну систему управління базою даних (СУБД).

    2 Технічне завдання

    2.1 Підстава для розробки

    Підставою для розробки є завдання з дисципліни "Системне програмування", видане на кафедрі ІТТ ПДТУ.

    2.2 Вимоги до програми

    2.2.1 Вимоги до функціональних характеістікам

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

    Інформація про студентів повинна містити наступні дані:

    ПІБ

    Рік народження:

    Адреса

    Навчальна група.

    Вхідними даними програми являеются: вихідна база даних, що зберігається на диску під ім'ям base_o.dat і дані, що вводяться чи що змінюються користувачем у процесі роботи програми.

    Вихідними даними в програмі є база даних, яка записується на диск під ім'ям base_o.dat по завершенні роботи програми.

    2.2.2 Вимоги до складу і параметрів технічних коштів

    Програма повинна працювати на стандартному комплексі технічних засобів зі складу персональних комп'ютерів IBM PC із процесором i386 або вище.

    2.2.3 Вимоги до програмної та інформаційної сумісності

    Програма повинна працювати з операційною системою MS-DOS 6.0 або вище.

    Програма повинна бути написана на мові програмування С + + l v.3.1.

    2.3 Порядок контролю та приймання

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

    3 Проектування

    Проектування проводиться окремо для частини програми, що організує роботу з базою даних, і для інтерфейсній частини програми, оскільки кожна з цих частин може бути використана окремо. Фактично кожна частина програми будується на основі різних об'єктів. Основою інтерфейсу є абстрактний клас wind, нащадками якого є власне елементи інтерфейсу, а база даних заснована на класі One_Record, виконує основні функції роботи з базами даних.

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

    Конкретно кажждий клас містить наступні поля і методи:

    Клас wind - абстрактний клас, при використанні видає рамку

    Поля:

    x, y, dx, dy - розташування і розміри вікна

    pap, ink, apap - кольори вікна

    ts - можливість активізації

    next - покажчик на наступне вікно.

    Методи:

    add - додати нового вікна в список.

    Клас ed_win - клас строк редагування, при ts = 0 використовується як рядок виводу без можливості редагування.

    Власні поля:

    capt - вміст

    pcapt - старе вміст

    maxlen - максимальна довжина рядка.

    Віртуальні методи:

    redr, active.

    Клас bt_win - клас кнопок

    Власні поля:

    fun - покажчик на викликається при активізації функцію

    capt - вміст кнопки.

    Віртуальні методи:

    redr, active.

    Клас sc_win - клас скроллером, залежить від конкретного застосування

    Власні поля:

    m_fio, m_addr, m_yy, m_grp - маски полів класу One_Record

    pnt - перший елемент списку.

    Віртуальні методи:

    redr, active.

    База даних представлена класом One_Record, що містить всі необхідні поля даних і методи. Для організації бази використовуються покажчики на початковий і на поточний елементи бази.

    Поля класу:

    fio, yy, addr, grp - дані про студента

    next - наступний елемент

    last - попередній елемент.

    Методи класу:

    save - запис у файл поточного і всіх наступних елементів

    FindUp - пошук вгору за списком

    FindDown - пошук вниз за списком.

    Ці методи повертають покажчик на знайдений елемент списку:

    add - додавання елемента в список.

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

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

    4 Аналіз результатів тестування

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

    У ході проведення тестування з'ясувалося, що програма повністю працездатна.

    Висновок

    В процесі роботи була визначена структура даних програми, розроблено алгоритм розв'язання задачі, була розроблена структура програми.

    Реалізація програми була проведена на алгоритмічній мові С + + l v.3.10.

    Результати тестування показали, що програма працює правильно.

    # include

    # include

    # include

    # include

    # include

    # include

    # include

    # include

    # include

    // ОПИСУ КЛАСІВ -------------------------------------------

    // Клас, що визначає один елемент бази даних

    class One_Record (

    public:

    char fio [60]

    // ПІБ

    char yy [5]

    // Рік народження

    char addr [60]

    // Адреса

    char grp [10]

    // Група

    One_Record * next

    // Наступний

    One_Record * last

    // Попередній

    One_Record (int, One_Record *)

    // Конструктор - читає елемент з файлу

    // Конструктор - створює новий елемент

    One_Record (char * m_fio, char * m_yy, char * m_addr, char * m_grp)

    // Деструктор

    ~ One_Record () ()

    // Запис у файл

    void save (int)

    // Пошук вперед

    One_Record * FindUp (char * m_fio, char * m_yy, char * m_addr, char * m_grp)

    // Пошук тому

    One_Record * FindDown (char * m_fio, char * m_yy, char * m_addr, char * m_grp)

    // Додавання

    void add (One_Record *)

    )

    // Клас вікон

    class wind (

    public:

    int x, y, dx, dy

    // Координати і розміри вікна

    int pap, ink, apap

    // Кольори вікна

    char ts

    // Активізується чи ні при натисканні TAB

    wind * next

    // Наступне

    wind (int, int, int, int)

    // Конструктор

    ~ wind () ()

    // Деструктор

    void add (void * p)

    // Додати у список

    void setact (char)

    // Змінити значення прапора TS

    virtual void redr ()

    // Перемальовування

    virtual void * active ()

    // Актівізіроать - повертає вказівник на

    // наступне активну

    )

    // Нащадок класу WIND - рядок редагування

    class ed_win: public wind (

    public:

    char capt [100]

    // Вміст

    char pcapt [100]

    // Попереднє вміст

    int maxlen

    // Максимальна довжина

    public:

    // Конструктор

    ed_win (int, int, int, int, char *, int)

    // Перемальовування

    virtual void redr ()

    // Активізація

    virtual void * active ()

    )

    // Нащадок WIND - кнопка

    class bt_win: public wind (

    void (* fun) ()

    // її викликає при натисканні функція

    char capt [50]

    // Назва

    public:

    // Конструктор

    bt_win (int, int, int, int, char *, void (*)())

    // Перемальовування

    virtual void redr ()

    // Активізація

    virtual void * active ()

    )

    // Скроллер

    class sc_win: public wind (

    public:

    // Маска вибору

    char * m_fio

    char * m_addr

    char * m_yy

    char * m_grp

    // Початковий елемент

    One_Record * pnt

    // Конструктор

    sc_win (int, int, int, int, One_Record *, char *, char *, char *, char *)

    // Перемальовування

    virtual void redr ()

    // Активізація

    virtual void * active ()

    )

    // прототип функції КНОПОК -----------------------------------

    void fun_add ()

    void fun_del ()

    void up ()

    void down ()

    void find ()

    void edit ()

    void fun_exit ()

    void about ()

    // ГЛОБАЛЬНІ ЗМІННІ --------------------------------------

    // Покажчик на активне вікно

    wind * act

    // Прапор, який встановлюється для виходу

    int f_exit = 0

    // Список вікон оснвного меню

    wind * stwin

    // Список вікон меню введення даних

    wind * edwin

    // Перший і поточний елементи бази даних

    One_Record * ndb = NULL

    One_Record * ctb = NULL

    // Дані про вікнах меню

    // Основне меню

    bt_win add_w (10,10,60,30, "New", fun_add)

    bt_win del_w (80,10,60,30, "Del", fun_del)

    bt_win edt_w (150,10,60,30, "Edit", edit)

    bt_win fin_w (220,10,60,30, "Find", find)

    bt_win ext_w (290,10,60,30, "Exit", fun_exit)

    bt_win abt_w (360,10,60,30, "About", about)

    bt_win up_w (430,10,30,14, "Up", up)

    bt_win down_w (430,26,30,14, "Dn", down)

    // Введення/редагування даних про студента/введення маски пошуку

    ed_win ifio (100,100,400,30, "FIO", 55)

    ed_win iyy (100,140,400,30, "Year", 4)

    ed_win iaddr (100,180,400,30, "Addres", 55)

    ed_win igrp (100,220,400,30, "Group", 9)

    // ГЛОБАЛЬНІ ФУНКЦІЇ -----------------------------------------

    // Функція порівняння рядка A з маскою B

    int stc (char * a, char * b) (

    int n

    if (strlen (a)

    for (n = 0

    n

    n + +) if (a [n]! = b [n]) return 0

    return 1

    )

    // опису МЕТОДІВ КЛАСІВ -----------------------------------

    // Об'єкт ЗАПИС ------------------------------------------

    // Конструктор

    One_Record:: One_Record (char * M_fio, char * m_yy, char * m_addr, char * m_grp) (

    strcpy (fio, m_fio)

    strcpy (yy, m_yy)

    strcpy (addr, m_addr)

    strcpy (grp, m_grp)

    next = NULL

    last = NULL

    )

    // Коснтруктор для випадку читання з файлу

    One_Record:: One_Record (int handle, One_Record * lst) (

    char rs [140]

    // Читання в тимчасову рядок

    read (handle, rs, 140)

    strcpy (fio, rs)

    strcpy (yy, rs 60)

    strcpy (addr, rs +65)

    strcpy (grp, rs 125)

    next = NULL

    last = lst

    if (! eof (handle))

    next = new One_Record (handle, this)

    )

    // Запис даних файл

    void One_Record:: save (int handle) (

    char rs [140]

    strcpy (rs, fio)

    strcpy (rs 60, yy)

    strcpy (rs 65, addr)

    strcpy (rs 125, grp)

    _write (handle, rs, 140)

    if (next! = NULL) next-> save (handle)

    )

    // Додавання запису до списку

    void One_Record:: add (One_Record * a) (

    // Перевірка, далі чи запис за алфавітом

    if (strcmp (a-> fio, fio) <0) (

    // Вставка перед цим елементом

    if (last! = NULL) (

    a-> last = last

    a-> next = this

    last-> next = a

    last = a

    ) else (

    a-> next = this

    a-> last = NULL

    last = a

    )

    // Далі - або додавання в кінець, або перехід до наступного

    ) else if (next! = NULL) next-> add (a)

    else (

    next = a

    a-> last = this

    a-> next = NULL

    )

    )

    // Знайти вгору за списком елемент, що потрапляє під маску

    One_Record * One_Record:: FindUp (char * m_fio, char * m_yy, char * m_addr, char * m_grp) (

    if (stc (fio, m_fio )&&

    stc (fio, m_fio )&&

    stc (fio, m_fio )&&

    stc (fio, m_fio)) return this

    if (last! = NULL) return last-> FindUp (m_fio, m_yy, m_addr, m_grp)

    else return NULL

    )

    // Знайти вниз за списком елемент, що потрапляє під маску

    One_Record * One_Record:: FindDown (char * m_fio, char * m_yy, char * m_addr, char * m_grp) (

    if (stc (fio, m_fio )&&

    stc (yy, m_yy )&&

    stc (addr, m_addr )&&

    stc (grp, m_grp)) return this

    if (next! = NULL) return next-> FindDown (m_fio, m_yy, m_addr, m_grp)

    else return NULL

    )

    // Клас вікон ---------------------------------------------

    // Конструктор

    wind:: wind (int ix, int iy, int idx, int idy) (

    x = ix

    y = iy

    dx = idx

    dy = idy

    pap = 8

    ink = 15

    apap = 1

    ts = 1

    next = NULL

    )

    // Перемальовування

    void wind:: redr () (

    setfillstyle (1, pap)

    setcolor (ink)

    bar (x, y, x + dx, y + dy)

    rectangle (x +3, y +3, x + dx-3, y + dy-3)

    if (next! = NULL) next-> redr ()

    )

    // Додавання до списку

    void wind:: add (void * p) (

    if (next! = NULL) next-> add (p)

    else next = (wind *) p

    )

    // Активізація

    void * wind:: active () (

    // Перевірка, активізувати чи

    if (ts) (

    // Промальовування активного стану

    setfillstyle (1, apap)

    setcolor (ink)

    bar (x, y, x + dx, y + dy)

    rectangle (x +3, y +3, x + dx-3, y + dy-3)

    char c

    // Обробка клавіатури - TAB - наступне, ESC - вихід

    do (

    c = getch ()

    ) while ((c! = 9) & & (c! = 27))

    if (c == 27) f_exit = 1

    return next

    ) else return next

    // Ні -- повернути вказівник на наступне

    )

    // Зміна прапора TS

    void wind:: setact (char a) (

    ts = a

    )

    // Клас рядків редагування -----------------------------

    // Конструктор

    ed_win:: ed_win (int ix, int iy, int idx, int idy, char * p, int mln):

    wind (ix, iy, idx, idy) (

    maxlen = mln

    strcpy (capt, p)

    strcpy (pcapt, p)

    )

    // Перемальовування

    void ed_win:: redr (){

    setfillstyle (1, pap)

    setcolor (ink)

    bar (x, y, x + dx, y + dy)

    rectangle (x +3, y +3, x + dx-3, y + dy-3)

    settextjustify (1,1)

    outtextxy (x + dx/2, y + dy/2, capt)

    if (next! = NULL) next-> redr ()

    )

    // Активізація

    void * ed_win:: active (){

    unsigned char c

    char ps [200]

    if (! ts) return next

    // Перевірка, активізувати або пропустити

    // Перемальовування

    setfillstyle (1, apap)

    setcolor (ink)

    bar (x, y, x + dx, y + dy)

    rectangle (x +3, y +3, x + dx-3, y + dy-3)

    settextjustify (1,1)

    do (

    // Висновок рядки із символом "_" в якості курсору

    strcpy (ps, capt)

    strcat (ps ,"_")

    bar (x 4, y 4, x + dx-4, y + dy-4)

    outtextxy (x + dx/2, y + dy/2, ps)

    // Опитування клавіатури

    c = getch ()

    if (c == 0) c = getch ()

    else (

    if (c == 8) (

    // Видалити -- перемістити кінець рядка 0 на одиницю лівіше

    if (strlen (capt)> 0) capt [strlen (capt) -1] = 0

    )

    if (c == 13) strcpy (pcapt, capt)

    // ENTER - запам'ятати вміст

    if (c == 27) strcpy (capt, pcapt)

    // ESC - відновити вміст

    if ((c> 32) & & (strlen (capt)

    // Інакше - Додати символ

    capt [strlen (capt) +1] = 0

    capt [strlen (capt)] = c

    )

    )

    ) while (c! = 9)

    return next

    )

    // Клас кнопок -------------------------------------------

    // Конструктор

    bt_win:: bt_win (int ix, int iy, int idx, int idy, char * p, void (* ifun )()):

    wind (ix, iy, idx, idy) (

    apap = 12

    pap = 3

    strcpy (capt, p)

    fun = ifun

    )

    // Перемальовування

    void bt_win:: redr (){

    setfillstyle (1, pap)

    setcolor (ink)

    bar (x, y, x + dx, y + dy)

    rectangle (x +3, y +3, x + dx-3, y + dy-3)

    settextjustify (1,1)

    outtextxy (x + dx/2, y + dy/2, capt)

    if (next! = NULL) next-> redr ()

    )

    // Активізація

    void * bt_win:: active (){

    char c

    if (ts) (

    // Перемальовування активної кнопки

    setfillstyle (1, apap)

    setcolor (ink)

    bar (x, y, x + dx, y + dy)

    rectangle (x +3, y +3, x + dx-3, y + dy-3)

    settextjustify (1,1)

    outtextxy (x + dx/2, y + dy/2, capt)

    // Обробка подій

    do (

    c = getch ()

    if (c == 13) fun ()

    // ENTER - виконання функції

    ) while ((c! = 13) & & (c! = 9) & & (c! = 27 )&&(! f_exit))

    // Перевірка умови завершення

    if (c == 27) f_exit = 1

    // Якщо ESC - вихід з програми

    )

    return next

    )

    // Клас скроллером ---------------------------------------

    // Конструктор

    sc_win:: sc_win (int ix, int iy, int idx, int idy, One_Record * ipnt, char * ifio, char * iyy, char * iaddr, char * igrp):

    wind (ix, iy, idx, idy) (

    apap = 1

    pap = 1

    strcpy (m_fio, ifio)

    strcpy (m_addr, iaddr)

    strcpy (m_yy, iyy)

    strcpy (m_grp, igrp)

    pnt = ipnt-> FindDown (ifio, iyy, iaddr, igrp)

    )

    // Перемальовування

    void sc_win:: redr () (

    int n

    int dlt = dx/5

    One_Record * p

    // Перемальовування

    setfillstyle (1, apap)

    setcolor (ink)

    bar (x, y, x + dx, y + dy)

    rectangle (x +3, y +3, x + dx-3, y + dy-3)

    settextjustify (1,1)

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

    p = pnt

    n = 20

    while ((p! = NULL) & & (n

    outtextxy (x + dlt, y + n, p-> fio)

    outtextxy (x + dlt * 2, y + n, p-> yy)

    outtextxy (x + dlt * 3, y + n, p-> addr)

    outtextxy (x + dlt * 4, y + n, p-> grp)

    // Спроба знайти наступний елемент

    if (p-> next! = NULL) p = p-> next-> FindDown (m_fio, m_yy, m_addr, m_grp)

    else p = NULL

    n + = 20

    )

    )

    // Активізація

    void * sc_win:: active () (

    char c

    One_Record * p

    do (

    redr ()

    c = getch ()

    if (! c) c = getch ()

    if (c == 72) if (pnt! = NULL) (

    // На початок

    p = pnt-> FindUp (m_fio, m_yy, m_addr, m_grp)

    if (p! = NULL) pnt = p

    )

    if (c == 80) if (pnt! = NULL) (

    // Вниз

    p = pnt-> FindDown (m_fio, m_yy, m_addr, m_grp)

    if (p! = NULL) pnt = p

    )

    ) while (c! = 27)

    setfillstyle (3,4)

    bar (0,0,639,479)

    return next

    )

    // ТІЛА ФУНКЦІЙ КНОПОК ----------------------------------------

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

    void fun_exit () (

    f_exit = 2

    )

    // На початок - переміщення покажчика та перемальовування полів редагування

    void up () (

    if (ctb! = NULL) if (ctb-> next! = NULL) (

    ctb = ctb-> next

    strcpy (ifio.capt, ctb-> fio)

    strcpy (iyy.capt, ctb-> yy)

    strcpy (iaddr.capt, ctb-> addr)

    strcpy (igrp.capt, ctb-> grp)

    edwin-> redr ()

    )

    )

    // Вниз - переміщення покажчика та перемальовування полів редагування

    void down () (

    if (ctb! = NULL) if (ctb-> last! = NULL) (

    ctb = ctb-> last

    strcpy (ifio.capt, ctb-> fio)

    strcpy (iyy.capt, ctb-> yy)

    strcpy (iaddr.capt, ctb-> addr)

    strcpy (igrp.capt, ctb-> grp)

    edwin-> redr ()

    )

    )

    // Видалення

    void fun_del () (

    if (ctb! = NULL) (

    if (ctb-> last == NULL) (

    ndb = ctb-> next

    ctb-> next-> last = NULL

    delete ctb

    ctb = NULL

    if (ndb == NULL) setfillstyle (3,4)

    bar (0,0,639,479)

    ) else (

    ctb-> last-> next = ctb-> next

    ctb-> next-> last = ctb-> last

    delete ctb

    ctb = NULL

    )

    )

    )

    // Додавання

    void fun_add () (

    wind * act

    act = edwin

    One_Record * a

    do (

    edwin-> redr ()

    act = (wind *) act-> active ()

    if (act == NULL) act = edwin

    ) while (! f_exit)

    if (f_exit == 2) (

    a = new One_Record (ifio.capt, iyy.capt, iaddr.capt, igrp.capt)

    if (ndb == NULL) ndb = a

    else (

    ndb-> add (a)

    if (ndb-> last! = NULL) ndb = ndb-> last

    )

    )

    f_exit = 0

    )

    // Пошук

    void find () (

    act = edwin

    if (ctb == NULL) return

    do (

    edwin-> redr ()

    act = (wind *) act-> active ()

    if (act == NULL) act = edwin

    ) while (! f_exit)

    if (f_exit == 2) (

    sc_win a (10,100,500,300, ndb, ifio.capt, iyy.capt, iaddr.capt, igrp.capt)

    a.active ()

    )

    f_exit = 0

    )

    // Редагування

    void edit () (

    act = edwin

    if (ctb == NULL) return

    do (

    edwin-> redr ()

    act = (wind *) act-> active ()

    if (act == NULL) act = edwin

    ) while (! f_exit)

    if (f_exit == 2) (

    strcpy (ctb-> fio, ifio.capt)

    strcpy (ctb-> yy, iyy.capt)

    strcpy (ctb-> addr, iaddr.capt)

    strcpy (ctb-> grp, igrp.capt)

    )

    f_exit = 0

    )

    void about () (

    cleardevice ()

    setfillstyle (6,5)

    bar (0,0,639,479)

    setfillstyle (1,0)

    bar (100,100,539,379)

    rectangle (100,100,539,379)

    outtextxy (320,130, " Про ПРОГРАМІ ")

    getch ()

    setfillstyle (3,4)

    bar (0,0,639,479)

    )

    // Основна програма

    void main () (

    int drv, mode

    int handle

    drv = DETECT

    initgraph (& drv, & mode, "")

    setfillstyle (3,4)

    bar (0,0,639,479)

    ed_win hlp (10,440,620,40,

    "Вибір пункту - TAB, Активізація - ENTER, Вихід - ESC", 0)

    hlp.setact (0)

    // спроба вважати базу даних

    handle = open ( "base_o.dat", O_RDONLY | O_BINARY)

    if (handle> = 0) (

    ndb = new One_Record (handle, NULL)

    )

    // Додавання до списків відповідних вікон

    wind * stwin

    stwin = (wind *) new ed_win (10,50,590,20, "Student database", 5)

    stwin-> setact (0)

    stwin-> add (& hlp)

    stwin-> add (& add_w)

    stwin-> add (& del_w)

    stwin-> add (& edt_w)

    stwin-> add (& fin_w)

    stwin-> add (& ext_w)

    stwin-> add (& abt_w)

    stwin-> add (& up_w)

    stwin-> add (& down_w)

    act = stwin

    edwin = (wind *) new bt_win (250,300,100,20, "OK", fun_exit)

    edwin-> add (& ifio)

    edwin-> add (& iyy)

    edwin-> add (& iaddr)

    edwin-> add (& igrp)

    // Обробка подій

    do (

    // Перевірка, щоб вказівник на поточний при непорожній списку завжди

    // показував на один з елементів

    if (ctb == NULL) ctb = ndb

    if (ctb! = NULL) (

    strcpy (ifio.capt, ctb-> fio)

    strcpy (iyy.capt, ctb-> yy)

    strcpy (iaddr.capt, ctb-> addr)

    strcpy (igrp.capt, ctb-> grp)

    edwin-> redr ()

    )

    // Перемальовування

    stwin-> redr ()

    // Активізація чергового вікна

    act = (wind *) act-> active ()

    if (act == NULL) act = stwin

    ) while (! f_exit)

    closegraph ()

    // Запис у файл або його видалення при порожній базі

    if (ndb! = NULL) (

    handle = open ( "base_o.dat", O_WRONLY | O_TRUNC | O_CREAT | O_BINARY)

    if (handle> = 0) (

    while (ndb-> last! = NULL) ndb = ndb-> last

    ndb-> save (handle)

    ) else perror ( "Error:")

    ) else (

    remove ( "base_o.dat")

    )

    close (handle)

    )

    Список літератури

    Для підготовки даної роботи були використані матеріали з сайту http://kurslab.chat.ru/

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

     

     

     

     

     

     

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