Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [vp6]Файлы, сохранение м загрузка информации 
:(
    Опции темы
HarryPotter
Дата 18.4.2010, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.4.2010

Репутация: нет
Всего: нет



[vp6] это [Turbo Pascal 7]. Извиняюсь за опечатку в теме выше

Доброго времени суток. У меня появилась задача, в которую я не знаю куда поставить команды записи и считывания информации с текстового файла. Пожалуйста подскажите что думаете (пожалуйста найдите, как исправить процедурные ошибки ввода и вывода и помогите написать процедуру поиска по дате рождения с выводом информации о нем).

Задача: Написать программу, в которой описывается массив записей, хранящий в текстовом файле следующую информацию: ФИО, дата рождения. Программа должна выполнять следующие действия: ввод данных, поиск человека по заданной дате рождения и вывод информации о нём.

Код


program bar9;

uses
crt;

const
r=20;

type
TFIO= record {Данные о человеке}
f{Фамилия},i{Имя},o{Отчество}: string;
d,m,y{Дата рождения}: integer;
end;

TBASE= record
fio: TFIO;
end;

var
baza: array [1..r] of TBASE;
n:byte;{Реальное количество мест в базе}
ch:char;{Выборщик варианта ответа}

procedure EnterData;{Ввод информации о человеке}
var
i: integer;
begin
 writeln;
 writeln;
 n:=0;
 write('Фамилия [',i,']:'); Readln(baza[n+1].fio.f);
 while baza[n+1].fio.f<>'' do begin
  n:=n+1;
  write('Имя [',i,']:'); Readln(baza[n].fio.i);
  write('Отчество [',i,']:'); Readln(baza[n].fio.o);
  writeln('Дата рождения');
  write('День(дд) [',i,']:'); Readln(baza[n].fio.d);
  write('Месяц(мм) [',i,']:'); Readln(baza[n].fio.m);
  write('Год(гггг) [',i,']:'); Readln(baza[n].fio.y);
  writeln('Вы ввели:');
  writeln(baza[n].fio.f,' ',baza[n].fio.i,' ',baza[n].fio.o);
  writeln('Дата рождения(дд/мм/гггг):',baza[n].fio.d,'.',baza[n].fio.m,'.',baza[n].fio.y);
  writeln('Введите имя следующего человека или нажмите "Enter" для завершения вноса в базу данных людей');
  Readln(baza[n+1].fio.f);
 end;
end;
procedure PrintData;{Вывод информации о людях}

var
i,j,imax,max: integer;

begin
 clrscr;
 writeln('Текущий список людей:');
 i:=1; imax:=10;
 repeat
  if imax>n then max:=n else max:=imax;
   while i<=max do begin
   write(i,' ',baza[i].fio.f,' ',baza[i].fio.i,' ',baza[i].fio.o);
   writeln('Дата рождения(дд/мм/гггг):');
   write(baza[i].fio.d,' ',baza[i].fio.m,' ',baza[i].fio.y);
   end;
 writeln;
 i:=i+1;
 if max<n then begin
  writeln;
  writeln('Нажмите любую клавишу для продолжения списка...');
  ch:=ReadKey;
  imax:= i+10;
  clrscr;
  writeln('Текущий список людей(продолжение):');
  end;
  until i>n;
  writeln('Press any key to continie...'); readln;
 end;

procedure search;{Угадайте по названию за что будет отвечать эта функция!!!}
var
d_s,m_s,y_s: integer;
i:integer;
begin
 clrscr;
 Writeln('Введите следующие данные о человеке которого хотите найти:');
 write('День:'); Readln(d_s);
 write('Месяц:'); Readln(m_s);
 write('Год:'); Readln(y_s);
 for i:=1 to n do begin
 if (baza[i].fio.d=d_s) and (baza[i].fio.m = m_s) and (baza[i].fio.y = y_s) then
  begin
  writeln('Нашелся:');
  writeln(baza[i].fio.f,' ',baza[i].fio.i,' ',baza[i].fio.o);
  end;
 end;
end;

procedure mainmenu;
begin
clrscr;
randomize;
writeln('Выберите следующие действия');
writeln('1 - Ввод информации');
writeln('2 - Вывод списка людей');
writeln('3 - Поиск людей');

ch:=ReadKey;
if ch='1' then EnterData;
if ch='2' then PrintData;
if ch='3' then Search;

end;

begin
repeat
mainmenu;
 writeln('Вы действительно хотите завершить программу?(д/н)');
 ch:=ReadKey;
 until (ch='Y') or (ch='y') or (ch='д') or (ch='Д');
end.



Это сообщение отредактировал(а) HarryPotter - 21.4.2010, 18:21
PM MAIL   Вверх
Sanaff
Дата 19.4.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 15.9.2009
Где: г. Северодвинск

Репутация: -1
Всего: 1



Небольшой баг: после ввода инфы о человеке предлагается ввести следущего, но нет возврата к вводу данных о новом человеке. 
наверно так надо:
Код

while baza[n+1].fio.f<>'' do begin
  n:=n+1;
  write('Имя [',i,']:'); Readln(baza[n].fio.i);
  write('Отчество [',i,']:'); Readln(baza[n].fio.o);
  writeln('Дата рождения');
  write('День(дд) [',i,']:'); Readln(baza[n].fio.d);
  write('Месяц(мм) [',i,']:'); Readln(baza[n].fio.m);
  write('Год(гггг) [',i,']:'); Readln(baza[n].fio.y);
  
  writeln('Вы ввели:');
  writeln(baza[n].fio.f,' ',baza[n].fio.i,' ',baza[n].fio.o);
  writeln('Дата рождения(дд/мм/гггг):',baza[n].fio.d,'.',baza[n].fio.m,'.',baza[n].fio.y);
  writeln('Введите имя следующего человека или нажмите "Enter" для завершения вноса в базу данных людей');
  Readln(baza[n+1].fio.f);
end;


а поиск можно так:
запрашиваются  d_s, m_s, y_s как день, месяц, год

Код


for i:=1 to n do
begin
  if (baza[i].fio.d = d_s) and (baza[i].fio.m = m_s) and (baza[i].fio.y = y_s) then
  begin
  writeln('Нашелся:');
  writeln(baza[i].fio.f,' ',baza[i].fio.i,' ',baza[i].fio.o);
  end;
end;






--------------------
Программист - это локальный бог ©ICQ 373-628-456
PM MAIL WWW ICQ   Вверх
HarryPotter
Дата 21.4.2010, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.4.2010

Репутация: нет
Всего: нет



По счету ввода данных разобрался. Поиск тоже оформил. СПС работает. Изменил главный код с учетом исправления. Единственная загвоздка осталась, только в вечном цикле распечатки информации о сотрудниках и как все данные сохранялись и считывались с TXT файла. Если знаете как то пожалуйста помогите
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.