
- •Курсовая работа по дисциплине «Программирование на языке высокого уровня»
- •1. Задание
- •2. Описание применения
- •2.1. Запуск программы
- •2.2. Входные данные
- •2.3. Выходные данные
- •2.4. Сообщения программы
- •3. Описание программы
- •3.1. Метод решения задачи
- •3.2. Структура программы
- •3.3. Описание функций
- •3.3.1. Main – главная функция
- •3.3.2. DateVoz – вывод списка сотрудников, заданного возраста
- •3.3.3. Dolgnost – вывод списка сотрудников, занимающих заданную должность
- •3.3.4. SredniOkl – определение среднего оклада сотрудников отдела
- •Литература
- •Приложение 1. Текст программы
- •Приложение 2. Пример входного файла sotryd.Txt
- •Приложение 3. Результаты тестирования программы
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 пустой");
}