Реализация модуля 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
Модульная схема программы
