Помощь - Поиск - Пользователи - Календарь
Полная версия: База данных
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Arei
Создать систему управления базой данных (СУБД) в которой предусмотреть следующие режимы: создание БД, вывод БД, добавление записей в БД, удаление записей из БД, корректировка сведений в БД, печать сведений из базы по запросу, выход из БД. Все режимы должны представлены в виде функционального меню. Режим печати по запросу должен предусматривать подменю выбора запросов. Тестирование СУБД осуществить на БД «Больница №4».
В приемном покое больницы №4 содержатся сведения о больных поступивших на лечение. Одна запись этого списка содержит: Ф.И.О. больного, номер палаты, пол, диагноз, дата поступления. СУБД должна выдавать следующие сведения:
- в какой палате лежит больной Х;
- список больных с указанным диагнозом;
- больного наиболее долго находящегося в больнице;
- сколько мужчин и сколько женщин находятся на лечении;
+ выдать все диагнозы, с которыми больные стоят на учете;
+ сортировка по отдельным полям



"Реализация концепции СУБД через массив записного типа языка Pascal"
Реализовать:
- Функциональное меню
- Ввод БД
- Выдод БД
- Не менее двух запросов




Помогите пожалуйста.Очень надо, если я это не сделаю до понедельника, то меня отчислят.Заранее спасибо.
volvo
Сам что-нибудь делать будешь, или как? Ну, к примеру, сможешь написать (и расположить правильно в программе) хотя бы "заглушки-пустышки" для процедур, которые будут образовывать твою СУБД? Чтоб потом заменить "пустышки" на реальные процедуры, и оно заработало. Меню можешь взять здесь...

Начни что-нибудь делать, а мы потом поможем, доработаем вместе до нормального состояния. До понедельника еще куча времени, можно Windows с нуля написать smile.gif

Поиск прошерсти, задач на базы данных было немало, они все похожи друг на друга как две капли воды. Заменить тип данных, и чуть-чуть изменить запрос - и из футбольной/хоккейной команды получили библиотеку. А уж из магазина (и такие реализации уже были здесь) - так еще проще.
Arei
Спасибо всё сейчас буду искать
Arei
                  
uses crt;
type
   TRec = record
       fName:string[31];
       secName:string[31];
       thName:string[31];
      nomer:string;
       Pol:string[20];
       Diag:string[20];
       baza  :string[20];
       Sam   :string[20];
       Daim   :string[20];
       Swam   :string[20];
       Qwert  :string[20];
       fme  :string[20];
   end;

var
   i,n:integer;
   BD:array[1..100] of TRec;
   PunktOfMenu: char;
   MainMenuTitle  : char;
   caseKey: char;

Begin

   clrscr;
   write('Кол-во ,больных в больнице = '); readln(n);
   for i:=1 to 1 do
    with BD[i] do
      begin

write('Открыть меню  : '); read(Sam);
            if Sam='Да'then



begin
    writeLn;
    writeLn('Выберите нужное действие:');
    writeLn('1 - Ввод Базы данных');
    writeLn('2 - Вывод Базы данных');
    writeLn('3 - Подменю запросов к Базе данных')   ;
    writeLn('5 - Выход');
    write('Ваш выбор:');
    readLn(PunktOfMenu);
    MainMenuTitle := PunktOfMenu;
end;

begin
   repeat

     PunktOfMenu:=MainMenuTitle;
     case PunktOfMenu of
       '1':    begin
       writeln;
        writeln   ('База данных перед изменения ');
       write('Имя : '); readln(fName);
       write('Фамилия : '); readln(secName);
       write('Отчество : '); readln(thName);
       write('Номер палаты: '); readln(nomer);
       write('Пол : '); readln(Pol);
       write('Диагноз: '); readln(Diag);

         writeLn('Для прекращения ввода нажмите "0"'); readln(caseKey);
              begin
                    if caseKey='0'then


                     begin
   for i:=1 to n do
    with BD[i] do
       writeln   ('База данных после изменения ');
    writeln('Имя : ',fname);
        writeln('Фамилия : ',secName);
        writeln('Отчество : ',thName);
        writeln('Номер палаты: ',nomer);
        writeln('Пол  : ',Pol);
        writeln('Диагноз : ',Diag);
          writeln;

        end;
     end;

 end;
'2':
begin
 writeln   ('База данных после изменения ');
        writeln('Имя : ',fname);
        writeln('Фамилия : ',secName);
        writeln('Отчество : ',thName);
        writeln('Номер палаты: ',nomer);
        writeln('Пол  : ',Pol);
        writeln('Диагноз : ',Diag);

        writeln;

        end;


     end;{case}


   until PunktOfMenu='2' ;

begin

end;




end;
end;
end.




Вот что умудрился сделать за ночь.Есть море ошибок я так думаю.Помогите мне и да же советом.

Вот нашёл на форуме реализацию нужной ме функции, но не могу её удачно приспособить вот она


Заранее спасибо а помощь.

Добавлено через 2 мин.
http://forum.pascal.net.ru/index.php?showtopic=25694&hl вот ссылка на тему нужную мне
volvo
Цитата
Вот что умудрился сделать за ночь.Есть море ошибок я так думаю.
Ошибки действительно есть... Первая, и самая главная - это то, что ты код не форматируешь как положено. Было бы написано правильной "лесенкой" - ты б увидел, что у тебя в строке №30 начинается цикл for i := 1 to 1 (Кстати, какой смысл делать от 1 до 1 - это отдельный разговор, но допустим, что ты хочешь протестировать с одной записью. Хотя даже в этом случае лучше задать количество записей константой), а в строке №72 ты открываешь еще один цикл по i. В результате программа ведет себя как попало под Турбо Паскалем, и вообще не компилируется другими компиляторами.

Дальше: насколько я помню, изначально была библиотека? Что случилось, теперь БД больницы?

В общем, каркас я бы написал вот так:
uses crt;
type
  TRec = record
    fName:string[31];
    secName:string[31];
    thName:string[31];
    nomer:string;
    Pol:string[20];
    Diag:string[20];
  end;

function MainMenu: integer;
var PunktOfMenu: integer;
begin
    writeLn;
    writeLn('Выберите нужное действие:');
    writeLn('1 - Ввод Базы данных');
    writeLn('2 - Вывод Базы данных');
    writeLn('3 - Подменю запросов к Базе данных');
    writeln('4 - Корректировка БД');
    writeLn('5 - Выход');
    write('Ваш выбор:');
    readLn(PunktOfMenu);
    MainMenu := PunktOfMenu;
end;

var
  i, n: integer;
  BD: array[1..100] of TRec;
 
  menu, curr: integer;
  R: TRec;
Begin
  n := 0;
  clrscr;
  repeat
    menu := MainMenu;
    case menu of
      1: { Ввод базы }
      begin
        write('Кол-во больных в больнице = '); readln(n);
        for i := 1 to n do 
        begin
          writeln('Информация о большом №', i);
          with R do
          begin
            writeln('Имя : '); readln(fname);
            writeln('Фамилия : '); readln(secName);
            writeln('Отчество : '); readln(thName);
            writeln('Номер палаты: '); readln(nomer);
            writeln('Пол  : '); readln(Pol);
            writeln('Диагноз : '); readln(Diag);
            writeln;
          end;
          BD[i] := R;
        end;
      end;
      
      2: { Вывод базы на экран }
      begin
        if n = 0 then writeln('<База пуста>')
        else
          for i := 1 to n do with BD[i] do
          begin
            writeln('Имя : ', fname);
            writeln('Фамилия : ', secName);
            writeln('Отчество : ', thName);
            writeln('Номер палаты: ', nomer);
            writeln('Пол  : ', Pol);
            writeln('Диагноз : ', Diag);
            writeln;      
          end;
      end;
      
      3: { Здесь будут запросы }
      begin
      end;
      
      4: { Корректировка базы }
      begin
        write('Какую запись будем корректировать?');
        readln(curr);
        if (curr > 0) and (curr <= n) then
        with BD[curr] do
        begin
          writeln('До корректировки:');
          writeln('Имя : ', fname);
          writeln('Фамилия : ', secName);
          writeln('Отчество : ', thName);
          writeln('Номер палаты: ', nomer);
          writeln('Пол  : ', Pol);
          writeln('Диагноз : ', Diag);
          writeln;

          writeln('Введите новые данные:');

          writeln('Имя : '); readln(fname);
          writeln('Фамилия : '); readln(secName);
          writeln('Отчество : '); readln(thName);
          writeln('Номер палаты: '); readln(nomer);
          writeln('Пол  : '); readln(Pol);
          writeln('Диагноз : '); readln(Diag);
          writeln;
        end
        else 
          writeln('<Несуществующая запись>');
      end;
    end;
  until menu = 5;
end.


Чувствуешь разницу?

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

И еще одно: ты уверен, что с файлами твоя БД не должна работать? У тебя об этом ничего не сказано. Или все-таки
Цитата
Тестирование СУБД осуществить на БД «Больница №4».
говорит об использовании файлов?
мисс_граффити
"Реализация концепции СУБД через массив записного типа языка Pascal" подразумевает работу с динамическим массивом? Или просто создать массив на заведомо большее реального количества количество пациентов?
Arei
Спасибо volvo нет с файлами в этом работе работать не надо, а вот вы виделия ссылку давал у меня не получается что то разобраться с тем кодом, но всё равно спасибо вам.

Добавлено через 6 мин.
Извини просто я не ту работу думал делать (перепутал вариант).Теперь подскажи что мне делать.
volvo
Цитата
Теперь подскажи что мне делать.
Я подсказал, что делать: перечитай мой пост, и сделай то, о чем я говорил. Если ты надеешься, что ты будешь давать ничего не значащие ответы, а тебе тут будут выкладывать более и более полные решения - это ты ошибаешься. Нужна эта БД в первую очередь тебе. Вот и прилагай усилия к тому, чтоб ее написать.
Arei
Спасибо что напомнил про твой пост сверху , а то я его не заметил сейчас буду делать.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.