Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Приложение 1. Oтчет по курсовой работе.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
324.1 Кб
Скачать

3.3.3. Dolgnost – вывод списка сотрудников, занимающих заданную должность

Заголовок функции:

void Dolgnost (FILE *fin)

Рис.4. Схема функции вывода списка сотрудников, занимающих заданную должность.

3.3.4. SredniOkl – определение среднего оклада сотрудников отдела

Заголовок функции:

void SredniOkl (FILE *f)

k=k+1

чтение строки tz

Вывод s / k

нет

Вывод “Файл

пустой”

да

нет

Рис.3. Блок-схема определение среднего оклада сотрудников отдела.

3.3.5. Voz - определение возраста по году рождения

Заголовок функции:

int Voz (char gr[DL_GR])

Входные данные:

gr - год рождения.

Значение функции:

возраст.

Возраст сотрудника вычисляется как разность между текущим годом и годом рождения сотрудника.

Текст функции:

int Voz (char gr[DL_GR])

{

int igr = atoi(gr); /* преобразование года рождения в тип int */

return 2012 - igr;

}

Литература

1. Хохлов Д.Г. Основы технологии модульного программирования. Учебное пособие. - Казань. Изд-во Казан. гос. техн. ун-та , 2005. - 63 с.

2. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - СПб: Питер, 2004г. - 461с.

3. Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. - СПб: Питер, 2002 г. - 240с.

4. Хохлов Д.Г. Структуры данных и комбинаторные алгоритмы. Учебное пособие. - Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 102 с.

5. Хохлов Д.Г., Захарова З.Х. Практикум по структурам данных и комбинаторным алгоритмам: Учебное пособие.- Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 48 с.

6. Бикмурзина А.Р. Лабораторный практикум по программированию. - Казань: Изд-во Казан. гос. техн. ун-та, 2000г.

Приложение 1. Текст программы

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <stdlib.h>

#include <time.h>

#define DL_FIO 20 /* длина поля фамилии в файле */

#define DL_GR 5 /* длина поля года рождения */

#define DL_DOL 20 /* длина поля должности */

#define DL_OKL 8 /* макс. длина оклада */

struct sotrydnik /* структура записи входного файла */

{ char fio[DL_FIO]; /* фамилия и инициалы пациента */

char gr [DL_GR]; /* год рождения */

char dol[DL_DOL]; /* должность */

char okl[DL_OKL+2]; /* оклад + '\n' + '\0' */

};

/* прототипы функций */

void DateVoz(FILE *f);

void Dolgnost(FILE *fin);

void SredniOkl(FILE *f);

int Voz (char gr[DL_GR]);

/*----------------------*/

/* главная функция */

/*----------------------*/

int main()

{

FILE *f; /* ссылка на входной файл */

char n; /* номер пункта меню */

clrscr();

f= fopen("sotryd.txt", "r");

if (f==NULL)

{ puts ("Файл sotryd.txt не найден");

getch();

return 1;

}

do

{ puts ("\n========================================================");

puts ("Выберите номер пункта меню:");

puts ("1 - вывод списка сотрудников, старше заданного возраста");

puts ("2 – список сотрудников, занимающих заданную должность");

puts ("3 – средний оклад сотрудников отдела");

puts ("4 - выход");

puts ("------------------------------------------------------");

n = getche();

switch(n)

{

case '1': DateVoz(f); break;

case '2': Dolgnost(f); break;

case '3': SredniOkl(f); break;

case '4': break;

default: puts("\nНужно вводить номер пункта от 1 до 4");

}

if (n!='4')

{ puts("\nДля продолжения нажмите любую клавишу");

getch();

}

}

while (n != '4');

fclose(f);

return 0;

}

/*--------------------------------------*/

/* Функция вывода списка сотрудников, */

/* старше заданного возраста */

/*--------------------------------------*/

void DateVoz (FILE *f)

{

char zdata[DL_DATA]; /* заданный возраст */

int n=0, N; /* порядковый номер сотрудника в выводимом списке */

struct sotrydnik tz; /* текущая запись файла */

puts ("\nВведите возраст сотрудника");

scanf(“%i”,&N);

rewind(f);

while (fgets((char *)&tz,sizeof(struct sotrydnik),f) != NULL)

if (Voz(tz.gr)>N )

{ if (n==0)

{ puts("№ Фамилия И.О. Год р. Должность Оклад ");

puts("-------------------------------------------");

}

tz.gr[DL_GR - 1] = '\0';

printf ("%d. %s %s", ++n, tz.fio, tz.dol);

}

if (n==0) puts ("\nНет сотрудников, заданного возраста");

}

/*-----------------------------------------------*/

/* функция определения возраста по году рождения */

/*-----------------------------------------------*/

int Voz (char gr[DL_GR])

{

int igr = atoi(gr); /* год рождения типа int */

return 2012 - igr;

}

/*---------------------------------------------*/

/* функция вывода списка сотрудников, */

/* занимающих заданную должность */

/*---------------------------------------------*/

void Dolgnost(FILE *f)

{

char zdol[DL_DOL]; /* заданная должность */

int k,n=0; /* порядковый номер сотрудника в выводимом списке */

struct sotrydnik tz; /* текущая запись файла */

puts ("\nВведите должность");

gets (zdol);

k=strlen(zdol);

rewind(f);

while (fgets((char *)&tz,sizeof(struct sotrydnik),f) != NULL)

if (strncmp(tz.dol,zdol,k)==0)

{ if (n==0)

{ puts("№ Фамилия И.О. Год р. Оклад ");

puts("----------------------------------");

}

tz.gr[DL_GR - 1] = '\0';

printf ("%d. %s %s", ++n, tz.fio, tz.okl);

}

if (n==0) puts ("\nНет сотрудников, занимающих заданную должность");

}

/*---------------------------------------*/

/* функция определения среднего оклада */

/* сотрудников отдела */

/*---------------------------------------*/

void SredniOkl(FILE *f)

{

struct sotrydnik tz; /* текущая запись файла */

float p, s = 0; /* сумма окладов всех сотрудников */

int k = 0; /* количество сотрудников в файле */

rewind (f);

while (fgets((char *)&tz,sizeof(struct sotrydnik),f) != NULL)

{ p=atof(tz.okl);

s+=p;

k++;

}

if (k) printf ("\nСредний оклад сотрудников отдела:%.2f\n",s/k);

else puts ("\nФайл sotryd.txt пустой");

}