Консультация № 175273
14.12.2009, 23:46
0.00 руб.
0 2 1
здавствуйте уважаемые эксперты.помогите разобраться с прогой. нужно чтоб по введённому статусу и дате выдачи книги считалась дата возврата
Для рабочих 10 дней
Для студентов 20 дней
Для пенсионеров 15 дней
Для учащихся – 15 дней
Для безработных – 5 дней


Приложение:
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "locale.h"

struct book
{
char name [15];
char author [15];
char fam [20];
char statys [15];
int data_vydachi;
int data_vozvrata;
};
void main()
{ setlocale(LC_ALL, "Rus");
int i;

for (i=0;i<=5;i++) {
struct book s[25];
printf("\t Назвние книги:");
scanf("%s",&s[0].name);
printf("\t Автор:");
scanf("%s",&s[1].author);
printf("\t Фамилия читателя:");
scanf("%s",&s[2].fam);
printf("\t Статус:");
scanf("%s",&s[3].statys);
printf("\t Дата выдачи:");
scanf("%i",&s[4].data_vydachi);
printf("\t Дата возврата:");
scanf("%i",&s[5].data_vozvrata);
getch();}
}

Обсуждение

давно
Профессор
230118
3054
15.12.2009, 00:26
общий
aleshinIvan:
А почему дата хранится в int? Я бы хранила ее в типе, который предназначен для даты, хотя бы struct tm. А статус надо хранить именно в int, так как имеется всего несколько возможных значений. Напишите в приглашении "Введите число от 1 до 5, где 1 - рабочий, 2 - студент, 3- пенсионер, 4- учащийся, 5- безработный. Надо при этом проверять правильность ввода.
давно
Профессор
230118
3054
15.12.2009, 02:26
общий
это ответ
Здравствуйте, aleshinIvan.
Текст программы в приложении.

Приложение:
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "locale.h"
#include <time.h>


struct book
{
char name [15];
char author [15];
char fam [20];
int status;
struct tm data_vydachi;
struct tm data_vozvrata;
};
void main()
{
setlocale(LC_ALL, "Rus");
struct book s[25];
int i=1;
int year,month;
__time64_t now, result;

char buff[80];

for (i=0;i<=25;i++)
{
printf("Название книги:\t ");
scanf("%s",s[i].name);
printf("Автор:\t ");
scanf("%s",s[i].author);
printf("Фамилия читателя:\t ");
scanf("%s",s[i].fam);
printf("Статус: Введите число от 1 до 5, где 1 - рабочий, 2 - студент, 3- пенсионер, 4- учащийся, 5- безработный.\t");
scanf("%i",&s[i].status);

while ((s[i].status>5) | (s[i].status<1))
{
printf("Неправильный статус");
scanf("%i",&s[i].status);
}
_localtime64_s( &s[i].data_vydachi, &now );
printf("Дата выдачи: число.месяц.год\t");
scanf("%i.%i.%i",&s[i].data_vydachi.tm_mday, &month, &year);
s[i].data_vydachi.tm_year=year-1900;
s[i].data_vydachi.tm_mon=month-1;
s[i].data_vozvrata=s[i].data_vydachi;
switch(s[i].status)
{
case 1:
s[i].data_vozvrata.tm_mday+=10;
break;
case 2:
s[i].data_vozvrata.tm_mday+=20;
break;
case 3:
s[i].data_vozvrata.tm_mday+=15;
break;
case 4:
s[i].data_vozvrata.tm_mday+=15;
break;
case 5:
s[i].data_vozvrata.tm_mday+=5;
break;

}

if( (result = mktime( &s[i].data_vozvrata )) != (time_t)-1 )
{
asctime_s( buff, sizeof(buff), &s[i].data_vozvrata );
printf( "Дата возврата: %s\n", buff );
}
else
printf("Произошла ошибка");
getch();
}
}
Форма ответа