Технический форум
Вернуться   Технический форум > Программирование > Форум программистов


Ответ
 
Опции темы Опции просмотра
Старый 16.08.2008, 01:31   #1 (permalink)
lexel
Новичок
 
Регистрация: 16.08.2008
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

дали задание:

ОПИСАНИЕ
Программа должна использовать массив данных о сотрудниках небольшой фирмы (до 10 сотрудников). По каждому сотруднику вводится следующая информация:
• Фамилия, имя, отчество;
• год и дата рождения;
• пол;
• стаж работы по специальности;
• домашний адрес;
• телефон;
• должность;
• оклад.
Информация о сотрудниках фирмы хранится в файле workers.dat.
Программа содержит следующие процедуры и функции:
• НовыйСотрудник (предназначена для ввода данных о новом сотруднике и сохранении ее в файле workers.dat);
• Уволить (удаляет информацию об уволенном сотруднике из массива данных);
• Просмотреть (позволяет просмотреть информацию о сотрудниках в алфавитном порядке);
• Упорядочить (упорядочивает список сотрудников в порядке убывания величины оклада);
• Найти (выводит на экран список сотрудников, работающих в указанной должности, например, инженером).
В программе разрешается использовать дополнительные файлы, облегчающие просмотр и поиск требуемой информации о сотруднике.
ВХОД
Имя вызываемой процедуры должно вызываться из списка пунктов меню по номеру пункта.
Информация о новом сотруднике вводится в диалоге типа "Введите фамилию сотрудника:" и т.д.
Процедура Уволить запрашивает ввод фамилии И.О.увольняемого сотрудника.
Процедура Просмотреть должна ожидать нажатия "горячей" клавиши перехода к информации об очередном сотруднике в списке.
Процедура Найти запрашивает ввод жолжности по выбору пользователя.
ВЫХОД
Процедура Просмотреть по каждому нажатию "горячей" клавиши выводит полную информацию об очередном сотруднике из алфавитного списка.
Процедура Упорядочить выводит на экран список из фамилии И.О. и окладов сотрудников в порядке убывания величины оклада.
Процедура Найти выводит на экран список сотрудников, работающих в указанной должности.
ОШИБКИ
Ошибочный ввод информации, правильность которой компьютер в состоянии проверить, должен приводить к отказу от неправильного ввода с выходом на повторный ввод этой же информации.

просто не знаю, что делать(((
от этой проги зависит моя учёба!!! помогите!!!
lexel вне форума   Ответить с цитированием

Старый 16.08.2008, 01:31
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посетители форума могли уже решить эту проблему в какой то из этих тем

Помогите срочно пожалуйста.
Паскаль. Помогите срочно
Помогите с задачей на С++ очень срочно нужно...пожалуйста

Старый 16.08.2008, 02:02   #2 (permalink)
Артём
votum separatum
 
Аватар для Артём
 
Регистрация: 05.05.2008
Сообщений: 14,603
Записей в дневнике: 52
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 18619
По умолчанию

В смысле дали задание? Прогу такую самому сбацать?? :D http://www.freeware.ru/program_prog_id_7509.html (например)
Артём вне форума   Ответить с цитированием
Старый 16.08.2008, 02:11   #3 (permalink)
lexel
Новичок
 
Регистрация: 16.08.2008
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

может и не такую, но в принцыпе, да. на Pascal'е или C++
lexel вне форума   Ответить с цитированием
Старый 16.08.2008, 02:14   #4 (permalink)
lexel
Новичок
 
Регистрация: 16.08.2008
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

ПОМОГИТЕ, ПЛЗ!!!
lexel вне форума   Ответить с цитированием
Старый 16.08.2008, 06:30   #5 (permalink)
Роман Вознюк
Member
 
Регистрация: 20.06.2008
Сообщений: 35
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ну а чего ты собственно хочешь? В смысле в чем состоит затруднение.
Роман Вознюк вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 16.08.2008, 13:03   #6 (permalink)
lexel
Новичок
 
Регистрация: 16.08.2008
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Роман Вознюк
Ну а чего ты собственно хочешь? В смысле в чем состоит затруднение.
я не знаю, как работать с файлами((( в принцыпе, надо создать массив, с которого будут даные передаваться в файл, я так думаю.
вот немного начал, но оно, наверное, не правильно:

program firma;
uses crt;
type mas=array[1..15,1..8] of string;
var a:mas;
k:byte;

procedure noviy(a:mas);
begin
writeln('vvedit dani novogo sotrudnika');
write('vvedit FIO ');
readln(a[1,1]);
write('vvedit datu narodjenia(d:m:g) ');
readln(a[1,2]);
write('vvedit pol(m/f)' );
readln(a[1,3]);
write('vvedit staj roboti ');
readln(a[1,4]);
write('domashnia adresa ');
readln(a[1,5]);
write('telefon ');
readln(a[1,6]);
write('doljnost ');
readln(a[1,7]);
write('oklad ');
readln(a[1,8]);


end;

begin
writeln('Vvedit nomer operacii:');
writeln('1.noviy sotrudnik');
writeln('2.uvolit');
writeln('3.posmotret');
writeln('4.uporiado4it');
writeln('5.nayti');
readln(k);
case k of
1:noviy(a);
{2:
3:
4:
5:}
else
begin
writeln('vvedeno nepravilniy nomer');
end;
end;

readkey;
end.
lexel вне форума   Ответить с цитированием
Старый 17.08.2008, 00:14   #7 (permalink)
Роман Вознюк
Member
 
Регистрация: 20.06.2008
Сообщений: 35
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от lexel
я не знаю, как работать с файлами(((
Работа с файлами ничем не отличается от обычного ввода/вывода - только еще указывается допогнительный параметр - дескриптор файла.
Роман Вознюк вне форума   Ответить с цитированием
Старый 17.08.2008, 19:14   #8 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

lexel
Ваша процедура постоянно переписывает привводе нового сотрудника первую запись :). Попробуйте реализовать это с помощью счетчика записей, для этого нужно сначала считать количество записей из файла, потом увеличить счетчик на один, ввести данные и записать в файл.
Пользуйтесь справкой программной среды. Там все примеры есть.

В частности для Pascal реализованы следующие операторы работы с файлами (список далеко не полный):
Assign - ассоциировать файловую переменную с файлом
Reset - инициализация файла по чтению
Rewrite - инициализация файла по записи
Append - инициализация файла по добавлению строк в конец файла.
WriteLN - запись строки в файл
ReadLN - чтение строки из файла в переменную
Close - закрыть файл

В C++ работа идет с потоками данных, которые потом можно адресовать, сравнивать и уничтожать. Об этом - в предыдущем посте.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 17.08.2008, 22:46   #9 (permalink)
lexel
Новичок
 
Регистрация: 16.08.2008
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

у меня в програме
program firma;
uses crt;
type mas=array[1..15,1..8] of string;
var a:mas;
k,i:byte;
f:text;
m:char;

procedure noviy(a:mas;i:byte);
var z:char;
f:boolean;
d,m:byte;
g:word;
begin
writeln('vvedit dani novogo sotrudnika');
write('vvedit FIO ');
readln(a[1,1]);
repeat
write('vvedit datu narodjenia(d m g) ');
read(d);
read(m);
read(g);
if d>31 then
begin
writeln('takogo dnia ne isnye, povtorit vvod');
f:=false;
end
else f:=true;
if m>12 then
begin
writeln('takogo misiacia ne isnye, povtorit vvod');
f:=false;
end
else f:=true;
if g>1992 then
begin
writeln('pracivniku menshe 16 rokiv, povtorit vvod');
f:=false;
end
else f:=true;
until f=true;
a[1,2]:=d+' '+m+' '+g;
repeat
write('viberit pol(m/f)' );
readln(z);
f:=false;
if z='m' then begin
a[1,3]:='male';
f:=true;
end
else if z='f' then begin
a[1,3]:='female';
f:=true;
end
else writeln('nepravilniy vvod, vvedit sche raz');
until f=true; }
write('vvedit staj roboti ');
readln(a[1,4]);
write('domashnia adresa ');
readln(a[1,5]);
write('telefon ');
readln(a[1,6]);
write('doljnost ');
readln(a[1,7]);
write('oklad ');
readln(a[1,8]);


end;

begin
writeln('Vvedit nomer operacii:');
writeln('1.noviy sotrudnik');
writeln('2.uvolit');
writeln('3.posmotret');
writeln('4.uporiado4it');
writeln('5.nayti');
readln(k);
case k of
1:begin
assign(f,'workers.dat');
reset(f);
while not eof(f) do
begin
readln(f,m);
i:=i+1;
end;
noviy(a,i);
end;
{2:
3:
4:
5:}
else
begin
writeln('vvedeno nepravilniy nomer');
end;
end;

readkey;
end.
в процедуре noviy возле слова begin выдаёт 202 ошибку (переполнение стэка). Почему???

и как сделать ограничение по дате, если в
repeat
write('vvedit datu narodjenia(d m g) ');
read(d);
read(m);
read(g);
if d>31 then
begin
writeln('takogo dnia ne isnye, povtorit vvod');
f:=false;
end
else f:=true;
if m>12 then
begin
writeln('takogo misiacia ne isnye, povtorit vvod');
f:=false;
end
else f:=true;
if g>1992 then
begin
writeln('pracivniku menshe 16 rokiv, povtorit vvod');
f:=false;
end
else f:=true;
until f=true;
a[1,2]:=d+' '+m+' '+g;
a[1,2] типа string, а d,m и g-byte???
lexel вне форума   Ответить с цитированием
Старый 18.08.2008, 17:07   #10 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Код:
repeat
      write('vvedit datu narodjenia(d m g) ');
      read(d);
      read(m);
      read(g);
      f:=true;
      if d>31 then
                begin
                  writeln('takogo dnia ne isnye, povtorit vvod');
                  f:=false;
                end
              else if m>12 then
                begin
                  writeln('takogo misiacia ne isnye, povtorit vvod');
                  f:=false;
                end
              else if g>1992 then
                  begin
                    writeln('pracivniku menshe 16 rokiv, povtorit vvod');
                    f:=false;
                  end;
  until f=true;
Попробуйте так, в принципе, это сложное условие, не проверял, но должно работать.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 16:12.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.