Хелпикс

Главная

Контакты

Случайная статья





Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования



Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования

«южный федеральный университет»

инженерно технологическая академия

Институт компьютерных технологий и информационной безопасности

Кафедра ИБТКС

 

«Индивидуальное задание»

по курсу «Основы алгоритмизации и программирования»

 

Выполнил:

студент гр. КТсо1-1

Годин А.О.

 

 

Проверил:

ассистент кафедры ИАСБ

Петряева М.В.

 

Таганрог 2018


Вариант №2

Цель индивидуального задания:

Написать программу, считывающую настроенные параметры из файлов и Для заданного номера телефона сформировать список тех предоставленных услуг, суммарная стоимость которых не меньше заданной, в течение 3-х последних дней (от момента запуска программы).

ход работы:

1. Составление Блок-схемы

2. Описание программы

3. Тексты файлов данных

4. Контрольный пример

Выполнение задания:

Блок схема:


 

Код программы:

#include <stdio.h>

#include <malloc.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>

 

typedef struct {

 

       char name[50];

       char phone[13];

} client;

 

typedef struct {

 

       char name[40];

       int code;

       int rate;

       char periods[7];

} serv;

 

typedef struct {

 

       char number[13];

       int CodeSer;

       long int time;

       char duration[9];

} info;

 

int main() {

           

       char tsr[100], *istr, tmp[50], phone[12];

       int i = 0, size = 1, k = 0, rk = 0, ct = 0;

       int s = 0, j, l, fl = 0, flag = 0, sum = -1, value;

       int time_end, time_border = 3 * 24 * 60 * 60; // 3 дня в секундах

       FILE *out, *in, *inc, *ins, *ii;

       info *ir; client *c; serv *sv;

 

       in = fopen("Param.ini", "r");

       out = fopen("Report.txt", "w");

 

       time_t time_now = time(NULL);

       const time_t time_str = time_now - time_border;

       struct tm *aTm = localtime(&time_str);

 

       if( in == NULL ) {

 

                   puts("Error, could not open Param.ini!");

                   getchar();

                   return -1;

       }

       else

                   while(fgets(tsr, sizeof(tsr), in) != NULL) {

 

                              if( tsr[2] == 'm' ) {

 

                                          istr = strtok(tsr, "=");

                                          istr = strtok(NULL, ";");

                                          strcpy(tmp, istr);

                                          sum = atoi(tmp);

                              }

 

                              if( tsr[1] == 'i' ) {

 

                                          istr = strtok(tsr, "=");

                                          istr = strtok(NULL, ";");

                                          strcpy(phone, istr);

                          }

                   }

 

       fclose(in);

       size = 1;

 

       if (sum <= 0) {

 

                   puts("\nInvalid value if sum!");

                   getchar();

                   return -10;

       }

 

       inc = fopen("client.txt", "r");

       c = (client*)malloc(size*sizeof(client));

 

       if( inc == NULL ) {

 

                   puts("Error, could not open client.txt!");

                   getchar();

                   return -2;

       }

       else

                   while(fgets(tsr, sizeof(tsr), inc) != NULL) {

 

                              size++;

                              c = (client*)realloc(c, size*sizeof(client));

 

                              istr = strtok(tsr, ",");

                              strcpy(c[ct].name, istr);

 

                              istr = strtok(NULL, ",");

                              strcpy(c[ct].phone, istr);

 

                              ct++;

                   }

 

       fclose(inc);

       size = 1;

 

       ins = fopen("services.txt", "r");

       sv = (serv*)malloc(size*sizeof(serv));

 

       if( ins == NULL ) {

 

                   puts("Error, could not open services.txt!");

                   getchar();

                   return -3;

       }

       else

                   while(fgets(tsr, sizeof(tsr), ins) != NULL) {

 

                              size++;

                              sv = (serv*)realloc(sv, size*sizeof(serv));

 

                              istr = strtok(tsr, ",");

                              strcpy(sv[s].name, istr);

 

                              istr = strtok(NULL, ",");

                              strcpy(tmp, istr);

                              sv[s].code = atoi(tmp);

 

                              istr = strtok(NULL, ",");

                              strcpy(tmp, istr);

                              sv[s].rate = atoi(tmp);

 

                              istr = strtok(NULL, ",");

                              strcpy(sv[s].periods, istr);

 

                              s++;

                   }

 

       fclose(ins);

       size = 1;

       int serv_code[10] = {0};

 

       ii = fopen("InfoOfServices.txt", "r");

       ir = (info*)malloc(size*sizeof(info));

 

       if( ii == NULL ) {

 

                   puts("Error, could not open InfoOfServices.txt!");

                   getchar();

                   return -4;

       }

       else

                   while(fgets(tsr, sizeof(tsr), ii) != NULL) {

 

                              size++;

                              ir = (info*)realloc(ir, size*sizeof(info));

 

                              istr = strtok(tsr, ",");

                          strcpy(ir[rk].number, istr);

 

                              istr = strtok(NULL, ",");

                              strcpy(tmp, istr);

                              ir[rk].CodeSer = atoi(tmp);

 

                              struct tm T;

 

                              istr = strtok(NULL, ".");

                              strcpy(tmp, istr);

                              T.tm_mday = atoi(tmp);

 

                              istr = strtok(NULL, ".");

                              strcpy(tmp, istr);

                              T.tm_mon = atoi(tmp)-1;

 

                              istr = strtok(NULL, " ");

                              strcpy(tmp, istr);

                              T.tm_year = atoi(tmp)-1900;

 

                              istr = strtok(NULL, ":");

                              strcpy(tmp, istr);

                              T.tm_hour = atoi(tmp);

 

                              istr = strtok(NULL, ":");

                              strcpy(tmp, istr);

                              T.tm_min = atoi(tmp);

 

                              istr = strtok(NULL, ",");

                              strcpy(tmp, istr);

                              T.tm_sec = atoi(tmp);

 

                              istr = strtok(NULL, ";");

                              strcpy(ir[rk].duration, istr);

 

                              const time_t time_last = mktime(&T);

                              ir[rk].time = time_last;

 

                              rk++;

                   }

 

       fclose(ii);

 

       for(i = 0; i < rk; i++){

 

                   if( strcmp(ir[i].number, phone) == 0 )

                              if( ir[i].time >= time_str ){

 

                                          value = atoi(ir[i].duration);

                                          if( value != 0 )

                                                      serv_code[ir[i].CodeSer-1] += value;

                                          else

                                                      serv_code[ir[i].CodeSer-1]++;

 

                              }

 

       }

 

       for(i = 0; i < s; i++)

 

                   if( serv_code[i] != 0 ){

 

                              value = sv[i].rate * serv_code[i];

                              if( value > sum ){

 

                                          flag += 1;

                                          if( flag == 1 )

                                                      fprintf(out, "По номеру %s:\n\n", phone);

                                          fprintf(out, "%s - %d;\n", sv[i].name, value );

                              }

                   }

 

       if( flag != 0 )

 

                   printf("Resuls writed in Report.txt");

       else{

 

                   printf("\nInvalid Phone number or not answer");

                   fprintf(out, "No data");

       }

 

       free(c);

       free(sv);

       free(ir);

 

       close(out);

 

       getchar();

 

       return 0;

}

Тексты файлов данных

Контрольный пример



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.