|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
16.08.2008, 01:31 | #1 (permalink) |
Новичок
Регистрация: 16.08.2008
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
ОПИСАНИЕ Программа должна использовать массив данных о сотрудниках небольшой фирмы (до 10 сотрудников). По каждому сотруднику вводится следующая информация: • Фамилия, имя, отчество; • год и дата рождения; • пол; • стаж работы по специальности; • домашний адрес; • телефон; • должность; • оклад. Информация о сотрудниках фирмы хранится в файле workers.dat. Программа содержит следующие процедуры и функции: • НовыйСотрудник (предназначена для ввода данных о новом сотруднике и сохранении ее в файле workers.dat); • Уволить (удаляет информацию об уволенном сотруднике из массива данных); • Просмотреть (позволяет просмотреть информацию о сотрудниках в алфавитном порядке); • Упорядочить (упорядочивает список сотрудников в порядке убывания величины оклада); • Найти (выводит на экран список сотрудников, работающих в указанной должности, например, инженером). В программе разрешается использовать дополнительные файлы, облегчающие просмотр и поиск требуемой информации о сотруднике. ВХОД Имя вызываемой процедуры должно вызываться из списка пунктов меню по номеру пункта. Информация о новом сотруднике вводится в диалоге типа "Введите фамилию сотрудника:" и т.д. Процедура Уволить запрашивает ввод фамилии И.О.увольняемого сотрудника. Процедура Просмотреть должна ожидать нажатия "горячей" клавиши перехода к информации об очередном сотруднике в списке. Процедура Найти запрашивает ввод жолжности по выбору пользователя. ВЫХОД Процедура Просмотреть по каждому нажатию "горячей" клавиши выводит полную информацию об очередном сотруднике из алфавитного списка. Процедура Упорядочить выводит на экран список из фамилии И.О. и окладов сотрудников в порядке убывания величины оклада. Процедура Найти выводит на экран список сотрудников, работающих в указанной должности. ОШИБКИ Ошибочный ввод информации, правильность которой компьютер в состоянии проверить, должен приводить к отказу от неправильного ввода с выходом на повторный ввод этой же информации. просто не знаю, что делать((( от этой проги зависит моя учёба!!! помогите!!! |
16.08.2008, 01:31 | |
Helpmaster
Member
Регистрация: 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, 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) | |
Новичок
Регистрация: 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. |
|
17.08.2008, 00:14 | #7 (permalink) | |
Member
Регистрация: 20.06.2008
Сообщений: 35
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
17.08.2008, 19:14 | #8 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
lexel
Ваша процедура постоянно переписывает привводе нового сотрудника первую запись :). Попробуйте реализовать это с помощью счетчика записей, для этого нужно сначала считать количество записей из файла, потом увеличить счетчик на один, ввести данные и записать в файл. Пользуйтесь справкой программной среды. Там все примеры есть. В частности для Pascal реализованы следующие операторы работы с файлами (список далеко не полный): Assign - ассоциировать файловую переменную с файлом Reset - инициализация файла по чтению Rewrite - инициализация файла по записи Append - инициализация файла по добавлению строк в конец файла. WriteLN - запись строки в файл ReadLN - чтение строки из файла в переменную Close - закрыть файл В C++ работа идет с потоками данных, которые потом можно адресовать, сравнивать и уничтожать. Об этом - в предыдущем посте.
__________________
Убить всех человеков! |
17.08.2008, 22:46 | #9 (permalink) |
Новичок
Регистрация: 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??? |
18.08.2008, 17:07 | #10 (permalink) |
support
Регистрация: 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;
__________________
Убить всех человеков! |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|