![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
hemm |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Суть такова: написал базу данных, но не могу никак сообразить, возможно ли редактировать в такой БД запись отдельно. Как мне выделить/вычленить любую по желанию запись и, например, удалить только ее или отредактировать? Или лучше использовать для такой БД двумерные массивы?
*Тупанул при написании. Для запуска файла надо в том же каталоге создать файл "database" и указать его имя при запросе в программе.
program students;
uses crt,dos;
label ChangeFile;
type spisok = record
nomer: string[6]; // Порядковый номер
zach: string[7]; // Номер зачетной книжки
fam: string[20]; // Фамилия
imya: string[20]; // Имя
otch: string[20]; //Отчество
gruppa: string[8]; //Номер группы
end;
StudentDataBase = file of spisok;
var a: StudentDataBase;
i, z: integer;
s: real;
c:char;
q:boolean;
DataBase: string;
k:byte;
p:string;
ss:string;
{-------------------------------------------------> INPUT}
procedure new(var a: StudentDataBase);
var j: integer; zk: spisok;
begin
reset(a);
seek(a, filesize(a));
repeat
begin
with zk do begin
writeln;
write('#................: ');
readln(nomer);
write('Зачетная книжка..: ');
readln(zach);
write('Фамилия..........: ');
readln(fam);
write('Имя..............: ');
readln(imya);
write('Отчество.........: ');
Readln(otch);
write('Группа...........: ');
readln(gruppa);
writeln;
write(a, zk);
writeln;
writeln('Продолжить запись? Да: 1 Нет: 0');
readln(j);
end;
end;
until j =0;
close(a);
end;
{-----------------------------------------------> // INPUT}
{-------------------------------------------------> OUTPUT}
procedure output(var a: StudentDataBase);
var i: integer; zk: spisok;
begin
with zk do begin
clrscr;
reset(a);
writeln;
writeln(' База данных "Студенты" ');
writeln;
writeln(& #39;============================================================================
===');
writeln(' № | з/книжка | Фамилия | Имя | Отчество | Группа ');
writeln(& #39;============================================================================
===');
while not eof(a) do
begin
read(a, zk);
write(nomer:6);
write('|', zach: 10);
write('|', fam: 17);
write('|', imya: 13);
write('|', otch: 18);
write('|', gruppa: 8);
writeln;
writeln('-------------------------------------------------------------------------------');
end;
writeln;
writeln(' Нажмите клавишу Enter для перехода в меню...');
close(a);
end;
readln;
end;
{-----------------------------------------------> // OUTPUT}
{------------------------------------------> FIND}
procedure find(var a: StudentDataBase);
var i: integer;
zk: spisok;
student: string;
begin
clrscr;
reset(a);
write('Введите данные для поиска: ');
readln(student);
writeln;
writeln(' База данных "Студенты" ');
writeln;
writeln(& #39;============================================================================
===');
writeln(' № | з/книжка | Фамилия | Имя | Отчество | Группа ');
writeln(& #39;============================================================================
===');
while not eof(a) do
begin
with zk do begin
read(a, zk);
if (zach = student) or (fam=student) or (imya=student) or (otch=student) or (gruppa=student) then
begin
write(nomer:6);
write('|', zach: 10);
write('|', fam: 17);
write('|', imya: 13);
write('|', otch: 18);
write('|', gruppa: 8);
writeln;
writeln('-------------------------------------------------------------------------------');
end;
end;
end;
close(a);
writeln;
writeln(' Нажмите клавишу Enter для перехода в меню...');
readln;
end;
{------------------------------------------> // FIND}
begin
changefile:
{------------------------------------------> LOADING}
clrscr;
write('Укажите имя загружаемой базы: ');
readln(DataBase);
repeat
clrscr;
assign(a, DataBase);
{------------------------------------------> // LOADING} // временно отключил
{-------> MENU}
write('Disk Size: ', DiskSize(0) div 1024 div 1024, ' Мбайт');
writeln;
write('Current File: ', DataBase);
writeln;
writeln('Menu: ');
writeln;
writeln('1: New Record(-s)');
writeln('2: Output Record(-s)');
writeln('3: Find Record(-s)');
writeln('4: Change File | отключил');
writeln('5: Exit');
writeln('6: Delete File');
writeln('7: Add Record(-s) | не работает');
writeln('8: Delete Record(-s) | не работает');
writeln('9: Current Record: | не работает');
readln(z);
case z of
1: new(a);
2: output(a);
3: find(a);
4: goto changefile;
5: q:=true;
6: begin
erase(a);
writeln;
write('File ', Database, ' was deleted');
readln;
end;
end;
until q;
end.
Сообщение отредактировано: hemm - 24.06.2011 1:06 Прикрепленные файлы ![]() |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата чем посоветуете заменить метку? repeat...until? Хотя бы... Тебе надо будет обернуть все, начиная от метки до конца твоего теперешнего Repeat/Until еще одним циклом, и при выборе "4: Change File" просто делать break. Из внутреннего цикла программа тут же выйдет, и перейдет к началу внешнего, то есть, туда, где стояла метка. Условие выхода из внешнего цикла остается прежним, "until q", так что в случае, когда пользователь захочет выйти из программы - выйдешь сразу из обоих циклов.Что касается Цитата if (zach = student) or (fam=student) or (imya=student) or (otch=student) or (gruppa=student) then
Сообщение отредактировано: IUnknown - 24.06.2011 11:25 |
![]() ![]() |
![]() |
Текстовая версия | 25.07.2025 9:21 |