Автор работы: Пользователь скрыл имя, 11 Мая 2014 в 18:14, курсовая работа
При разработке прикладного программного обеспечения паскаль позволяет выполнить проект в короткие сроки, предоставляя для этого множество функций и процедур для оперирования стандартными типами данных. Удобство программирования, представленное языком, не имеет аналогов. Данная тенденция сохранилась и в последующих редакциях и модификаций паскаля, например, - Delphi.
Целью данного курсового проекта является разработка программного обеспечения для ведения штатного расписания сотрудников с возможностью сохранения данных на диск и отображения величины заработных плат в виде графика.
Введение 4
1 Постановка задачи на разработку программы 5
2 Состав и структура исходных данных и результатов 6
3 Методы решения задач 7
4 Описание программы 8
5 Методика отладки программы 13
6 Руководство пользователя 14
Заключение 16
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 17
ch :=ReadKey;
if (ch=#27) then exit;
if (ch = #0) then
begin
ch :=ReadKey;
end;
case ch of
#59:new_s ;
#60:view_s ;
#61:del_s ;
#62:draw_s ;
#63:get_s ;
#64:out_s ;
end;
until ch = #27;
end;
{*****************************
procedure out_str(n:integer;s:string);
var
ii:integer;
jj:integer;
begin
if (length(s) > n) then
begin
for ii:=1 to n do
begin
write(s[ii]);
end;
end
else
begin
JJ:=0;
for ii:=1 to Length(s) do
begin
write(s[ii]);
inc(jj);
end;
for ii:=jj to n do
begin
write(' ');
end;
end;
end;
{*****************************
procedure new_s; {Процедура добавления сотрудника в список}
var
tmp,ends:m_rec;
begin
clrscr;
textcolor(10); {зел цвет}
if Head = Nil then
begin
new(head);
head^.next := NIL;
tmp := head;
end
else
begin
tmp := Head;
while (tmp^.Next<>NIL) do
begin
tmp := tmp^.Next;
end;
ends:=tmp;
new(tmp);
ends^.next := tmp;
tmp^.Next := NIL;
end;
{Заполним поля структуры}
{ Num :Integer;
FIO :string;
WORK :string;
OKL :real;
Perc :real;
}
write('Номер сотрудника:');
readln(tmp^.Num);
write('ФИО:');
readln(tmp^.FIO);
write('Должность:');
readln(tmp^.Work);
write('Оклад:');
readln(tmp^.OKL);
write('Надбавка(%):');
readln(tmp^.Perc);
{ Для автотестов}
{ tmp^.Num :=1;
tmp^.FIO := 'asdasd';
tmp^.WORK := '123aasdsdasd';
tmp^.OKL :=123;
tmp^.Perc :=1;
}
textcolor(14);
writeln('Добавлена запись:');
textcolor(10);
{Шапка}
writeln('╔════╦═══════════════
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
writeln('║');
{вывод текущей записи}
writeln('╠════╬═══════════════
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
writeln('║');
{подвал}
writeln('╚════╩═══════════════
textcolor(11);
write('Для продолжения нажмите любую клавишу');
readkey;
end;
{*****************************
{Процедура добавления сотрудника в список из файла}
procedure new_sf(Num :Integer; FIO :string; WORK :string; OKL :real; Perc :real);
var
tmp,ends:m_rec;
begin
clrscr;
textcolor(10); {зел цвет}
if Head = Nil then
begin
new(head);
head^.next := NIL;
tmp := head;
end
else
begin
tmp := Head;
while (tmp^.Next<>NIL) do
begin
tmp := tmp^.Next;
end;
ends:=tmp;
new(tmp);
ends^.next := tmp;
tmp^.Next := NIL;
end;
{Заполним поля структуры}
tmp^.Num := NUM;
tmp^.FIO := FIO;
tmp^.WORK := WORK;
tmp^.OKL := OKL;
tmp^.Perc := Perc;
end;
{*****************************
{*****************************
{*****************************
procedure view_s; {Процедура просмотра списка сотрудников}
var
tmp:m_rec;
begin
clrscr;
textcolor(10);
{Шапка}
writeln('╔════╦═══════════════
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
write('║');textcolor(13);
textcolor(10);
writeln('║');
tmp :=head;
while (tmp<> NIL) do
begin
{вывод текущей записи}
writeln('╠════╬═══════════════
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
write('║');textcolor(15);
textcolor(10);
writeln('║');
tmp := tmp^.next;
end;
{подвал}
writeln('╚════╩═══════════════
textcolor(11);
write('Для продолжения нажмите любую клавишу');
readkey;
end;
{*****************************
{*****************************
{*****************************
procedure get_s; {Процедура загрузки списка сотрудников из файла}
var
ch:char;
f :file of my_record;
s :string;
tmp:my_record;
begin
clrscr;
textcolor(15);
if head <> NIL then
begin
writeln('При загрузке файла с диска может произойти потеря текущего списка');
writeln('Выберите действие:');
writeln(' - Enter - продолжить, не сохраняя;');
writeln(' - ESC - сохранить текущий список и продолжить.');
repeat
ch:=readkey;
until ((ch =#27) or (ch = #13));
if (ch = #27) then
begin
out_s; {Сохранить текущий список}
end;
end;
clear_s; {Процедура очищает список}
{далее загрузка данных}
textcolor(10);
write('Имя файла для открытия:');
textcolor(11);
readln(s);
assign(f,s);
{$I-} {// Отключаем контроль ввода/вывода}
RESET(F);
{$I+} {// Включаем контроль ввода/вывода}
if IOResult <> 0 {// Выход, если файл не открыт}
then
begin
textcolor(12);
writeln ('Невозможно открыть файл');
end
else
begin
SeekFil:=s;
while (not EOF(f)) do
begin
read(f,tmp);
new_sf(tmp.Num, tmp.FIO,tmp.WORK, tmp.OKL,tmp.Perc);
end;
Close(f);
end;
textcolor(10);
write('Для продолжения нажмите любую клавишу');
readkey;
sort_s;
end;
{*****************************
{*****************************
{*****************************
procedure out_s; {Процедура сохранения списка в файл}
var
s:string;
f :file of my_record;
tmp:my_record;
t:m_rec;
begin
if SeekFil = 'New.bin' then
begin
textcolor(10);
write('Имя файла:');
textcolor(11);
readln(s);
end
else
begin
s:=SeekFil;
end;
assign(f,s);
{$I-} { Отключаем контроль ввода/вывода}
REWRITE(F);
{$I+} { Включаем контроль ввода/вывода}
if IOResult <> 0 {Выход, если файл не создан}
then
begin
textcolor(12);
writeln ('Невозможно сохранить файл');
end
else
begin
SeekFil:=s;
t:=head;
while (t<>NIL) do
begin
tmp.Num := t^.NUM;
tmp.FIO := t^.FIO;
tmp.WORK := t^.WORK;
tmp.OKL := t^.OKL;
tmp.Perc := t^.Perc;
write(f,tmp);
t:=t^.next;
end;
Close(f);
end;
textcolor(10);
write('Для продолжения нажмите любую клавишу');
readkey;
end;
{*****************************
{*****************************
{*****************************
procedure sort_s; {Процедура сортировки списка по ЗП}
var
t1,t2:m_rec;
HaveChange:boolean;
Num :Integer;
FIO :string;
WORK :string;
OKL :real;
Perc :real;
begin
HaveChange:=true;
while HaveChange do
begin
HaveChange:=false;
t1:=head;
while t1^.next<>nil do
begin
t2:=t1^.next;
if ((t1^.OKL*(1+0.01*t1^.Perc)) > (t2^.OKL*(1+0.01*t1^.Perc))) then
begin
HaveChange:=true;
Num := t1^.NUM;
FIO := t1^.FIO;
WORK := t1^.WORK;
OKL := t1^.OKL;
Perc := t1^.Perc;
t1^.NUM:=t2^.NUM;;
t1^.FIO:=t2^.FIO;;
t1^.WORK:=t2^.WORK;
t1^.OKL:=t2^.OKL;
t1^.Perc:=t2^.Perc;
t2^.NUM:=NUM;;
t2^.FIO:=FIO;;
t2^.WORK:=WORK;
t2^.OKL:=OKL;
t2^.Perc:=Perc;
end;
t1:=t1^.next;
end;
end;
end;
{*****************************
{*****************************
{*****************************
procedure del_s; {Процедура удаления сотрудника из списка}
var
t1,t2:m_rec;
num:integer;
begin
clrscr;
textcolor(10);
write('Номер сотрудника:');
textcolor(13);
readln(num);
textcolor(10);
t1:=head;
t2:=head;
while(t1<>nil) do
begin
if t1^.num = num then
begin
if t1 = head then
begin
if t1^.Next = NIL then
begin
dispose(head);
head := NIL;
break;
end
else
begin
head := t1^.next;
dispose(t1);
end
end
else
begin
if t1^.next <> NIL then
begin
t2^.Next:=t1^.next;
dispose(t1);
t1:=t2;
end
else
begin
t2^.next:=Nil;
dispose(t1);
t1:=t2;
end;
end;
end;
t2:=t1;
if t1<> NIL then
begin
t1:=t1^.next;
end;
end;
write('Для продолжения нажмите любую клавишу');
readkey;
end;
{*****************************
{*****************************
{*****************************
procedure clear_s; {Процедура очищает список}
var
tmp:m_rec;
begin
tmp:=Head;
while (tmp<>NIL) do
begin
Head:=tmp^.next;
dispose(tmp);
tmp:=Head;
end;
head := NIL;
end;
{*****************************
{*****************************
{*****************************
function InitGraf:Integer; {функция инициализирует графический режим}
var
CodeError:Integer; {0 - Нет ошибок. Или код ошибки}
gd,gm:integer; {Драйвер и режим}
begin
CodeError:= 0; {Первичная инициализация, предполагается что все пройдет без ошибок}
gd:=detect;
InitGraph(gd,gm,'');
If GraphResult <> grOk then
begin
CodeError :=GraphResult; {Возвращается код ошибок}
end
else
begin
CodeError := 0; {Возвращается 0, ошибок нет}
end;
InitGraf:=CodeError;
end;
{*****************************
{*****************************
{*****************************
procedure draw_s; {Процедура вывода диаграммы на экран}
begin
clrscr;
if InitGraf = 0 then
begin
Show_s;
CloseGraph;
end
else
begin
textcolor(12);
writeln('Ошибка инициализации видеодрайвера');
readkey;
end;
end;
{*****************************
{*****************************
{*****************************
procedure show_s; {Процедура прорисовки диаграммы}
var
cnt: Integer;
tmp: m_rec;
Ht : integer; {высота экрана}
Wt : integer; {Ширина экрана}
i : integer;
mx : real ; {Максимальная ЗП}
ZmY: real ; {Масштаб по Y}
ZmX: real ; {Масштаб по X}
x0,y0:integer;
ZP:real;
s: string;
begin
cnt:=0;
mx:=0;
wt:=GetMaxX;
Ht:=GetMaxY;
tmp:=head;
while (tmp<>NIL) do
begin
inc(cnt);
if ((tmp^.OKL*(1+0.01*tmp^.Perc))
mx:=(tmp^.OKL*(1+0.01*tmp^.
tmp:= tmp^.next;
end;
if mx<>0 then ZmY:= ht/mx
else ZmY:=1;
moveto(0,ht);
tmp:=head;
if cnt<>0 then ZmX:=Wt/Cnt
else ZmX:=1;
i:=1;
x0:=0;
y0:=ht;
while (tmp<>NIL) do
begin
ZP:=(tmp^.OKL*(1+0.01*tmp^.
lineto(x0,Ht-trunc(ZP*ZmY));
lineto(x0+trunc(ZmX),Ht-trunc(
lineto(x0+trunc(ZmX),Ht);
X0:=x0+trunc(ZmX);
tmp:= tmp^.next;
end;
{Рисуем ось ЗП и подписываем ее}
moveto(0,ht);
setcolor(10);
lineto(0,0);
SetTextStyle(1, HorizDir, 1);
outtextXY(1,10,'ZP 1234567890');
for i:=1 to 5 do
begin
moveto(0,i*trunc(ht/5));
lineto(5,i*trunc(ht/5));
x0:=trunc(mx/(6-i));
str(x0,s);
outtext(s);
end;
readkey;
end;
end.
Приложение Б
(обязательное)
Схема алгоритма программы
Рисунок Б.1 – Схема алгоритма главной программы
Рисунок Б.2 – Схема алгоритма процедуры сортировки
Рисунок Б.3 – Схема алгоритма вывода графика на экран
Приложение В
(обязательное)
Результаты тестирования
Информация о работе Использование динамических списков-сотрудники