Программирование на языке высокого уровня. Запуск программы (файл patient.c). Описание применения. Описание функций

Страницы работы

Фрагмент текста работы

Министерство образования и науки Российской Федерации

КУРСОВАЯ РАБОТА

по  дисциплине

«Программирование  на языке высокого уровня»

                                        Исполнитель:   ст. гр.  . . .

Руководитель:

Оценка_________________

Подпись________________

“___” ________________20  г.

КАЗАНЬ

СОДЕРЖАНИЕ

1. ЗАДАНИЕ                                                                                                          3

2. ОПИСАНИЕ ПРИМЕНЕНИЯ                                                                           3

2.1. Запуск программы                                                                                   3

2.2. Входные данные                                                                                      3

2.3. Выходные данные                                                                                   3

2.4. Сообщения программы                                                                           4

3. ОПИСАНИЕ ПРОГРАММЫ                                                                            4

3.1. Метод решения задачи                                                                    4

3.2. Структура программы                                                                     5

3.3. Описание функций                                                                          5

3.3.1. main – главная функция                                                          5

3.3.2. Date – вывод пациентов, поступивших в заданный день              7

3.3.3. MiddleAge - определение среднего возраста пациентов               8

3.3.4. Diagnos - запись в новый файл списка пациентов с заданным                 диагнозом                                                 9

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

ЛИТЕРАТУРА                                                                                                       11

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

Приложение 2. Пример входного файла patient.txt                                              14

Приложение 3. Результаты тестирования программы                                        15

1. ЗАДАНИЕ

Дан файл, содержащий сведения о пациентах клиники. Каждая строка файла содержит запись об одном пациенте. Структура записи файла:

- фамилия и инициалы пациента;

- год рождения;

- дата поступления;

- диагноз.

Написать программу, которая

- выводит список пациентов, поступивших в заданный день;

- выводит средний возраст пациентов;

- записывает в новый файл список пациентов с заданным диагнозом.

         2. ОПИСАНИЕ ПРИМЕНЕНИЯ

2.1. Запуск программы

Запуск программы (файл patient.c) можно выполнить  из среды Turbo C 2.0 (или Borland C++ 3.1), либо из командной строки MS DOS, введя patient.exe  .

2.2. Входные данные

Входные данные программы находятся в файле  “patient.txt”. Число строк в файле - произвольное. Каждая строка содержит фамилию с инициалами (25 символов), год рождения (5 символов), дату поступления (9 символов) и диагноз (до 40 символов).    Пример строки файла:

Д.Г.             1961 12.05.04 инфаркт миокарда

|         25                         |   5   |     9       |        <= 40              |

Пример входного файла приведен в приложении 2.

По запросу программы с клавиатуры необходимо ввести номер пункта меню (см. раздел 2.3), дату поступления пациентов в виде “дд.мм.гг”, например,  05.09.04,  имя выходного файла и диагноз.

2.3. Выходные данные

Программа выводит на экран меню:

=================================================================

Выберите номер пункта меню:

1 - вывод списка пациентов, поступивших в заданный день

2 - определение среднего возраста пациентов

3 - запись в новый файл списка пациентов с заданным диагнозом

4 - выход

При выборе пункта 1 на экран выводится сообщение:

Введите дату поступления в виде: дд.мм.гг

После ввода даты, например 12.05.04, выводится результат в виде:

№   Фамилия И.О.        Год рожд.  Диагноз

----------------------------------------------------------------------------

1.    Д.Г.              1961  пневмония

2.    И.С.        1945  инфаркт миокарда

3.    А.И.                 1960  инсульт

4.    С.П.        1943  стенокардия

Если ввести дату, которой нет в файле, выводится сообщение:

Нет пациентов, поступивших в заданный день

Примеры выходных данных для остальных пунктов меню см. в приложении 3.

2.4. Сообщения программы

Ниже приводится перечень  возможных сообщений программы:

1. Файл  patient.txt не найден

2. Выберите номер пункта меню:

3. Нужно вводить номер пункта от 1 до 4

4. Введите дату поступления в виде: дд.мм.гг

5. №   Фамилия И.О.    Год рожд. Диагноз

6. Нет пациентов, поступивших в заданный день

7. Средний возраст пациентов:

8. Файл patient.txt пустой

9. Введите имя выходного файла

10. Укажите диагноз

11. Нет пациентов с заданным диагнозом

12. Запись в файл завершена

13. Для продолжения нажмите любую клавишу

3. ОПИСАНИЕ ПРОГРАММЫ

3.1. Метод решения задачи

Задачу можно разбить на три отдельные подзадачи:

1.  Поиск в файле записей, в которых дата поступления пациента в клинику  совпадает с заданной датой,  и вывод списка таких пациентов.

2.  Последовательный   просмотр  записей файла,  суммирование  возрастов всех пациентов и определение количества всех пациентов, чтобы определить средний возраст.

3.  Поиск во входном файле записей, в которых диагноз совпадает с заданным диагнозом, и вывод их в выходной файл.

Каждая  подзадача решается методом линейного поиска (последовательного просмотра элементов таблицы).

Чтобы пользователь мог выбирать, какие подзадачи  решать и в каком порядке, программа выводит на экран меню (см. раздел 2.3).

3.2. Структура программы


Рис.1. Функциональная структура программы

Программа состоит из пяти функций: главной функции main и четырех подпрограмм.

Date – вывод пациентов, поступивших в заданный день.

MiddleAge - определение среднего возраста пациентов.

Diagnos - запись в новый файл списка пациентов с заданным  диагнозом.

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

3.3. Описание функций

3.3.1. main – главная функция

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

int  main ()

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

0 –  в случае успешного завершения;

1 –  если входной файл не найден.

Рабочие данные:

f – указатель на структуру с информацией о входном файле;

n – номер пункта меню.

Рис.1.     Блок-схема функции  main()

3.3.2. Date – вывод пациентов, поступивших в заданный день

Заголовок функции:                                   Структура записи файла:

void Date (FILE *f)          

fio - фамилия и инициалы пациента                           gr  - год рождения

Входные данные:                                 data - дата поступления  

f -  ссылка на входной файл                       diag - диагноз

да

 

n=n+1

 

Вывод  n,

tz.fio,  tz.gr,

tz.diag

 
                                         

Рис.2.   Схема функции вывода списка пациентов, поступивших в заданный день.       

        3.3.3. MiddleAge - определение среднего возраста пациентов

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

void MiddleAge(FILE *f)

нет

 
Выноска 1 (без границы): Вх. данные: f – ссылка на файл        Овал:   возврат

Вывод   S / k

 

k=k+1

 

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

 

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

3.3.4. Diagnos - запись в новый файл списка пациентов с   заданным   диагнозом

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

void Diagnos (FILE *fin)

да

 

ввод диагноза  zdiag;

net = 1

 
Блок-схема: решение: tz.diag =zdiag

net=0

 

Запись в выходной файл

tz. fio,    tz.gz,  tz.data

 

чтение строки вх. файла в структуру tz

 
                                             

Рис.4. Схема функции записи в новый файл списка пациентов с  заданным  диагнозом.

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

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

int  Age (char gr[DL_GR])

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

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

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

возраст.

Возраст пациента вычисляется как разность между текущим годом и годом рождения  пациента. Для определения текущего года используются библиотечные функции, определенные в файле   time.h .   Функция time() позволяет получить текущую дату и время. Она возвращает ее в виде числа секунд, прошедших с полуночи 1 января 1970 года.   Функция localtime() преобразует эту величину в стандартную структуру типа tm, который определен в том же файле time.h, и возвращает адрес этой структуры. Поле tm_year этой структуры содержит число лет, прошедших с 1900 года.

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

int  Age (char gr[DL_GR])

{

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

long timer;             /* число секунд, прошедших с начала 1970 года до текущего момента */

int year;               /* текущий год */

struct tm *t;           /* указатель на структуру, содержащую текущую дату и время */

timer = time (NULL);  /* получение числа секунд, прошедших с начала 1970                                    года */

t = localtime(&timer);/* преобразование в структуру типа tm */

year = 1900+ t->tm_year; /* определение тек. года */

return year - 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   25    /* длина поля фамилии в файле */  

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

#define  DL_DATA  9     /* длина поля даты поступления */

#define  DL_DIAG  40    /* макс. длина диагноза */

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

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

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

char  data[DL_DATA]; /* дата поступления */

char  diag[DL_DIAG+2]; /* диагноз + '\n' + '\0'  */

};

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

void Date(FILE *f);

void MiddleAge(FILE *f);

void Diagnos(FILE *fin);

int  Age (char gr[DL_GR]);

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

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

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

int main()

{

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

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

clrscr();

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

if (f==NULL)

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

getch();

return 1;

}

do

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

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

puts ("1 - вывод списка пациентов, поступивших в заданный день");

puts ("2 - определение среднего возраста пациентов");

puts ("3 - запись в новый файл списка пациентов с заданным диагнозом");

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

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

n = getche();

switch(n)

{

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

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

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

case '4': break;

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

}

if (n!='4')

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

getch();

}

}

while (n != '4');

fclose(f);

return 0;

}

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

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

/*     поступивших в заданный день      */

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

void Date (FILE *f)

{

char zdata[DL_DATA]; /* заданная дата поступления */

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

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

puts ("\nВведите дату поступления в виде: дд.мм.гг");

gets  (zdata);                               

rewind(f);

while (fgets(&tz,sizeof(struct pacient),f) != NULL)

if (strncmp(tz.data,zdata,DL_DATA-1) == 0 )

{  if (n==0)

{ puts("№   Фамилия И.О.  Год рожд. Диагноз");

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

}

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

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

}

if (n==0)  puts ("\nНет пациентов, поступивших в заданный день");

}                                                          

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

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

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

void MiddleAge(FILE *f)

{

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

float  s = 0;           /* сумма возрастов всех пациентов */

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

rewind (f);

while (fgets(&tz,sizeof(struct pacient),f) != NULL)

{  s += Age(tz.gr);

k++;

}

if (k) printf ("\nСредний возраст пациентов:%.1f\n",s/k);

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

}

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

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

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

int  Age (char gr[DL_GR])

{

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

long timer;             /* число секунд, прошедших с начала 1970 года до текущего момента */

int year;               /* текущий год */

struct tm *t;           /* указатель на структуру, содержащую текущую дату и время */

timer = time (NULL);  /* получение числа секунд, прошедших с начала 1970                                    года */

t = localtime(&timer);/* преобразование в структуру типа

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Курсовые работы
Размер файла:
122 Kb
Скачали:
0