Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ База данных

Автор: Arei 16.09.2010 23:54

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



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




Помогите пожалуйста.Очень надо, если я это не сделаю до понедельника, то меня отчислят.Заранее спасибо.

Автор: volvo 17.09.2010 1:31

Сам что-нибудь делать будешь, или как? Ну, к примеру, сможешь написать (и расположить правильно в программе) хотя бы "заглушки-пустышки" для процедур, которые будут образовывать твою СУБД? Чтоб потом заменить "пустышки" на реальные процедуры, и оно заработало. Меню можешь взять http://volvo71.narod.ru/menus.htm#menu_text_mode...

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

Поиск прошерсти, задач на базы данных было немало, они все похожи друг на друга как две капли воды. Заменить тип данных, и чуть-чуть изменить запрос - и из футбольной/хоккейной команды получили библиотеку. А уж из магазина (и такие реализации уже были здесь) - так еще проще.

Автор: Arei 17.09.2010 1:35

Спасибо всё сейчас буду искать

Автор: Arei 17.09.2010 7:40

                  
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 17.09.2010 17:20

Цитата
Вот что умудрился сделать за ночь.Есть море ошибок я так думаю.
Ошибки действительно есть... Первая, и самая главная - это то, что ты код не форматируешь как положено. Было бы написано правильной "лесенкой" - ты б увидел, что у тебя в строке №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».
говорит об использовании файлов?

Автор: мисс_граффити 17.09.2010 19:11

"Реализация концепции СУБД через массив записного типа языка Pascal" подразумевает работу с динамическим массивом? Или просто создать массив на заведомо большее реального количества количество пациентов?

Автор: Arei 17.09.2010 21:49

Спасибо volvo нет с файлами в этом работе работать не надо, а вот вы виделия ссылку давал у меня не получается что то разобраться с тем кодом, но всё равно спасибо вам.

Добавлено через 6 мин.
Извини просто я не ту работу думал делать (перепутал вариант).Теперь подскажи что мне делать.

Автор: volvo 18.09.2010 13:24

Цитата
Теперь подскажи что мне делать.
Я подсказал, что делать: перечитай мой пост, и сделай то, о чем я говорил. Если ты надеешься, что ты будешь давать ничего не значащие ответы, а тебе тут будут выкладывать более и более полные решения - это ты ошибаешься. Нужна эта БД в первую очередь тебе. Вот и прилагай усилия к тому, чтоб ее написать.

Автор: Arei 18.09.2010 17:00

Спасибо что напомнил про твой пост сверху , а то я его не заметил сейчас буду делать.