|
|||
Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образованияМинистерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования «южный федеральный университет» инженерно технологическая академия Институт компьютерных технологий и информационной безопасности Кафедра ИБТКС
«Индивидуальное задание» по курсу «Основы алгоритмизации и программирования»
Выполнил: студент гр. КТсо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; } Тексты файлов данных Контрольный пример
|
|||
|