1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Базы данных, операции с ними..., Помогите доделать курсовик
Почти написала ,но не получается реализовать некоторые функции: Вывод всей базы пользователей в виде таблицы(ФИО, дата рожд., телефон) и упорядочивание пользователей по алфавиту(по фамилии), добавление пользователя в базу.Файл базы обычный текстовый, вида: ----------------------------------------------- Petrov Petr Petrovich 21.04.07 Romanov Roman Romanovich 12.12.90 123456 Sergeev Sergey Sergeevich 17.12.87 998222 ----------------------------------------------- Заранее спасибо.
Исходник(Показать/Скрыть)
uses crt;
label l1;
const
menu:array[1..5] ofstring=('Найти номер телефона', {Массив описывающий меню}'Найти фамилию по номеру',
'Найти дни рождения',
'Сведения об авторе',
'ESC - Exit.');
autor:array[1..5] ofstring[50]=('Курсовая работа по программированию.',
'База Данных "Записная Книжка"',
'Выполнила: Гельдт Анна', {Заставка}'Группа: В-123',
'Нажмите любую клавишу для продолжения...');
VAR
y:byte;
klav:char;
{============================= Выводит меню =================================}Procedure DisplayMenu;
var
i1:Byte;
begin
clrscr;
for i1:=1to5dobegin
gotoXY (20,i1*2);
write (menu[i1]);
end;
end;
{=========================== Выводит сведения об авторе =====================}procedure DisplayAutor;
var
i2:byte;
begin
textcolor(0);
DisplayMenu;
textcolor(11);
for i2:=1to5dobegin
gotoxy(trunc((80-length(autor[i2]))/2),i2*3);
write(autor[i2]);
end;
end;
{============================================================================}Procedure Search(param:String); {Читает записи из файла и осуществляет поиск}type
Man=record
SurName:String[16];
Name:String[16];
Otchestvo:String[16];
Born:String[8];
Phone:LongInt;
end;
Var
f:text;
i3,tmp,p,q,c,i,j,n,q1,q2:Integer;
tstr:String;
tLong:LongInt;
People:array[1..20] of Man; {Массив записей книжки}
Borned,Dates:array[1..20] of byte; {Массив индексов найденных записей}Begin
Assign(f,'c:\ttp\zbook.dat'); Reset(f); {Открываем файл для чтения}
CLRSCR; i3:=0;
WhileNOT EOF(f) do{Считываем в цикле содержимое файла zbook.dat}Begin
i3:=i3+1;
Readln(f,tstr); {Берем из файла строку и режем на части}
People[i3].SurName:=Copy(tstr,1,pos(' ',tstr)-1);
Delete(tstr,1,pos(' ',tstr));
People[i3].Name:=Copy(tstr,1,pos(' ',tstr)-1);
Delete(tstr,1,pos(' ',tstr));
People[i3].Otchestvo:=Copy(tstr,1,pos(' ',tstr)-1);
Delete(tstr,1,pos(' ',tstr));
People[i3].Born:=Copy(tstr,1,pos(' ',tstr)-1);
Delete(tstr,1,pos(' ',tstr));
val(tstr,People[i3].Phone,tmp);
End;
Close(f); tmp:=0; c:=0;
if param='SurName'then{Проверяем какой был передан параметр}Begin{и ищем записи по нужному полю}Write('Введите номер телефона (??????) ');
Readln(tLong);
for p:=1to i3 doIf People[p].Phone=tLong ThenBeginWrite(People[p].SurName,' ');
Write(People[p].Name,' ');
Write(People[p].Otchestvo,' ');
exit;
End;
If p=i3 Then Writeln('Ничего не найдено!');
End;
if param='Number'thenBeginWrite('Введите фамилию ');
Readln(tstr);
for p:=1to i3 doIf People[p].SurName=tstr ThenBeginIf People[p].Phone<>0Then Writeln(People[p].Phone)
Else Writeln('Нет телефона!');
exit;
End;
If p=i3 Then Writeln('Ничего не найдено!');
End;
if param='Borned'thenBeginWrite('Введите номер месяца ');
Readln(tLong);
for p:=1to i3 doBegin
val(copy(People[p].Born,4,2),q,tmp);
If q=tLong ThenBegin
c:=c+1;
Borned[c]:=p;
End;
End;
Writeln('Найдено дней рождений ',c);
Writeln;
{Сортируем по возрастанию дни рождения}for i:=1to c do val(copy(People[Borned[i]].Born,1,2),Dates[i],tmp);
for i:=1to c-1dofor j:=i+1to c dobeginif Dates[i]<Dates[j] thenbegin
n:=Borned[i];
Borned[i]:=Borned[j];
Borned[j]:=n;
end;
end;
for p:=1to c doBegin{Выводим результаты поиска}write(People[Borned[p]].Born,' ');
write(People[Borned[p]].SurName,' ');
write(People[Borned[p]].Name,' ');
write(People[Borned[p]].Otchestvo,' ');
Writeln;
End;
End;
End;
{==================================Основная программа========================}BEGIN
DisplayAutor;ReadKey; {Выводим заставку}
l1:
y:=1;
textcolor(15);
DisplayMenu; {Выводим меню}repeat
textcolor(10); {Опрашиваем в цикле нажатия клавишей}
gotoxy (13,y*2); write(chr(16));
klav:=readkey;
gotoxy (13,y*2); write(' ');
if ord(klav)=97thenif y > 1then y:=y-1else y:= 5;
if ord(klav)=122thenif y < 5then y:=y+1else y:= 1;
if ord(klav)=27thenbegin y:=5; klav:=Chr(13) end;
if (ord(klav)=13) and (y<6) thenbegin{выполняем нужное действие}case y of{в зависимости от выбранного пункта меню}1:begin Search('Number'); readkey; goto l1 end;
2:begin Search('SurName'); readkey; goto l1 end;
3:begin Search('Borned'); readkey; goto l1 end;
4:begin DisplayAutor; readkey; goto l1 end;
5:exit;
end;
end;
until (ord(klav)=13) and (y=5);
END.