Помощь - Поиск - Пользователи - Календарь
Полная версия: База данных
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Selena
Помогите пожайлуста разобраться с этим заданием:
Создать средствами языка Pascal реляционную базу данных сотрудников, работающих в ШЧ-6, имеющую таблицы:
«Сотрудники», содержащую поля:
12. Фамилия
13. Имя
14. Отчество
15. Год рождения
16. Пол
17. Табельный номер
18. Стаж
19. Цех
20. Должность
21. Разряд
22. Зарплата
«Зарплата», содержащую поля:
11. Фамилия
12. Табельный номер
13. Оклад
14. Надбавка за стаж
15. Премия
16. Районный коэффициент
17. Начислено
18. Отчисление в негосударственный пенсионный фонд
19. Кредит
20. Налог
21. Получение на руки

I. Заполнить поля таблицы сотрудников, кроме поля зарплата, 5-ю записями.
II. В базе зарплата перенести значения полей «Фамилия» и «Табельный номер» из базы сотрудников.
III. Поля «Отчисление в негосударственный пенсионный фонд» и «Кредит» заполнить произвольно.

Первую таблицу я сделала, но почему-то когда я ее запускаю, во внешний фаил затисывается вместо цифр какие-то квадратики и она сама выодится в одну строку:
Program vvod_sotrudniki;
Uses WinCrt;
Type
sotrudn=Record
Fam:String[15];
Im:String[15];
Otch:String[15];
Dtr:1960..1990;
Pol:Char;
Tn:Integer;
Sz:0..50;
Ce:1..5;
Dol:String[20];
Raz:1..10;
Zr:Real;
End;
Var
MasR:Array[1..25] of sotrudn;
f:File of sotrudn;
i,n:Byte;
Name:String[12];
Begin
WriteLn('введите имя созд. таблицы');ReadLn(name);
Assign(f,name);ReWrite(f);
WriteLn('ввод данных в таблицу ',name);
WriteLn('введите количество сотрудников');ReadLn(n);
For i:=1 to n do
Begin
WriteLn('введите фамилию,i:2);ReadLn(MasR[i].fam);
WriteLn('введите имя',i:2);ReadLn(MasR[i].im);
WriteLn('введите отчество',i:2);ReadLn(MasR[i].otch);
WriteLn('введите дату рождения',i:2);ReadLn(MasR[i].dtr);
WriteLn('введите пол',i:2);ReadLn(MasR[i].pol);
WriteLn('введите табельный номер номер ',i:2);ReadLn(MasR[i].tn);
WriteLn('введите стаж',i:2);ReadLn(MasR[i].sz);
WriteLn('введите цех',i:2);ReadLn(MasR[i].ce);
WriteLn('введите должность',i:2);ReadLn(MasR[i].dol);
WriteLn('введите разряд',i:2,);ReadLn(MasR[i].raz);
MasR[i].zr:=0;
End;
WriteLn('введенные данные');
For i:=1 to n do
Begin
Write(MasR[i].fam:15);
Write(MasR[i].im:10);
Write(MasR[i].otch:15);
Write(MasR[i].dtr:4);
Write(MasR[i].pol:1);
Write(MasR[i].tn:8);
Write(MasR[i].sz:4);
Write(MasR[i].ce:3);
Write(MasR[i].dol:15);
Write(MasR[i].raz:2);
Write(MasR[i].zr:8:2);
End;
For i:=1 to n do
Write(f,MasR[i]);
Close(f);
End.


А как делать вторую:
Надо создать модуль чтобы обьеденить эти таблицы, или вторую таблицу также ввести, а потом через созданный модуль их объединить?
volvo
Selena,
Цитата
во внешний фаил затисывается вместо цифр какие-то квадратики и она сама выодится в одну строку
На то и типизированный файл (File of sotrudn), чтобы не записывать текстовое представление... При записи в текой файл переносится весь Record, как он был в памяти, поэтому и записываются
Цитата
вместо цифр какие-то квадратики
:yes: Чтобы корректно просмотреть этот файл нельзя открывать его текстовым редактором, нужно читать из него данные в такой же Record как и тот, из которого в файл записывали...

Да и перенос строки в таком файле ни к чему - переход к следующей записи делается по размеру Record-а. Так что все в порядке.

Цитата
А как делать вторую:
Для каждой таблицы описывай свой Record, и потом можно даже в одном модуле собирать информацию и записывать ее в соответствующие файлы. А вот файлы будут разные: одна таблица - один файл...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.