Помощь - Поиск - Пользователи - Календарь
Полная версия: База данных
Форум «Всё о Паскале» > 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, и потом можно даже в одном модуле собирать информацию и записывать ее в соответствующие файлы. А вот файлы будут разные: одна таблица - один файл...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.