Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Proektirovanie_programmy.docx
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
49 Кб
Скачать

Реализация модуля Sort

Функции сравнения двух элементов списка CmpName, CmpSing, CmpLong, CmpDate, CmpTime получают в качестве параметров указатели на элементы структуры и возвращают целочисленные значение 1, если первый элемент больше второго, и -1, если наоборот.

int CmpName(const SONG *s1, const SONG *s2)

{

return strcmp(s1->name, s2->name);

}

int CmpSing(const SONG *s1, const SONG *s2)

{

return strcmp(s1->sing, s2->sing);

}

int CmpLong(const SONG *s1, const SONG *s2)

{

if(s1->min>s2->min) return 1;

else if(s1->min<s2->min) return -1;

else {

if(s1->sec>s2->sec) return 1;

else if(s1->sec<s2->sec) return -1;

else return 0;

}

}

int CmpDate(const SONG *s1, const SONG *s2)

{

if(s1->year>s2->year) return 1;

else if(s1->year<s2->year) return -1;

else {

if(s1->month>s2->month) return 1;

else if(s1->month<s2->month) return -1;

else {

if(s1->day>s2->day) return 1;

else if(s1->day<s2->day) return -1;

else {

if(s1->hour>s2->hour) return 1;

else if(s1->hour<s2->hour) return -1;

else {

if(s1->minutes>s2->minutes) return 1;

else if(s1->minutes<s2->minutes) return -1;

else return 0;

}

}

}

}

}

PerseFromStr – функция принимает указатель на переменную, которую потом заполняет, и возвращает команду продолжать ввод или закончить цикл.

int ParseFromStr(SONG *val)

{

fflush(stdin);

char name[31], sing[21];

unsigned min, sec, day, month, year, hour, minutes;

printf("Nazvanie: ");

scanf("%s", name);

if(name[strlen(name)]=='\"') name[strlen(name)]=0;

fflush(stdin);

printf("Ispolnitel': ");

scanf("%s", sing);

if(sing[strlen(sing)], '\"') sing[strlen(sing)]=0;

fflush(stdin);

printf("Prodoljitel'nost': ");

scanf("%u%*c%u", &min, &sec);

printf("Data efira: ");

scanf("%u%*c%u%*c%u", &day, &month, &year);

printf("Vremja efira: ");

scanf("%u%*c%u", &hour, &minutes);

if(min>60||sec>60||day>31||month>12||year>2011||hour>23||minutes>60) return -1;

strcpy(val->name, name);

strcpy(val->sing, sing);

val->min = min;

val->sec = sec;

val->day = day;

val->month = month;

val->year = year;

val->hour = hour;

val->minutes = minutes;

printf("Prodoljit' vvod? (1 - da, 0 - net)");

int com;

fflush(stdin);

scanf("%d", &com);

return com;

}

ToStr – функция получает в качестве параметров указатель на строку, в которую будет осуществляться запись, и указатель на элемент структуры . Далее с помощью функции sprintf поля записи собираются в строку, которая и является возвращаемым значением.

int ToStr(char *str,const SONG *val)

{

return sprintf(str,"%s %s %u.%u %u.%u.%u %u:%u", val->name, val->sing, val->min, val->sec, val->day, val->month, val->year, val->hour, val->minutes);

}

Приложение A

Модульная схема программы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]