Вывести на экран фамилии студентов в порядке увеличения их суммарного числа прогулов - C (СИ)
Формулировка задачи:
Решение задачи: «Вывести на экран фамилии студентов в порядке увеличения их суммарного числа прогулов»
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include "kurs.h" /* MAXRECS - максимальный размер массива */ #define MAXRECS 50 /* DL - максимальная длина считываемой строки */ #define DL 80 /* прототипы */ void DispData(Student x[], char *s); void ListData(Student x[], int n); Student FindRec(Student x[], char *str); Student Assign(Student x); /* глобальные переменные */ struct STUDENT { char fio[15+1]; char predm[5+1]; int prog; int step; }; typedef struct STUDENT Student; /* к-во записей */ int nRecs; int main() { Student studs[MAXRECS]; int i, nr; /* оформите ввод массива (из файла или как-то иначе */ do { printf(Rus("\nРабота с базой данных STUDENT\n")); printf(Rus("выберите команду:\n")); printf(Rus("1 - вывод сведений\n")); printf(Rus("2 - вывод списка\n")); printf(Rus("3 - сортировка списка \n")); printf(Rus("4 - поиск по фамилии\n")); printf(Rus("5 - выход\n")); printf("-> "); scanf("%i", &choice); switch (choice) { case 1: printf(Rus("выбрано: 1 - вывод сведений о студенте\n ")); printf(Rus("введите первые буквы фамилии: ")); scanf("%s", s); DispData(studs, s); break; case 2: printf(Rus("выбрано: 2 - вывод списка студентов\n ")); ListData(studs, nRecs); break; case 3: printf(Rus("выбрано: 3 - сортировка списка студентов\n ")); SortN(studs, nRecs); break; case 4: printf(Rus("выбрано: 4 - поиск по фамилии\n ")); printf(Rus("введите первые буквы фамилии: ")); scanf("%s", s); FindRec(studs, s); break; case 5: printf(Rus("выбрано: 5 - выход\n ")); break; default: printf(Rus("ошибка ввода номера команды\n")); choice = 0; } } while (choice <5 && choice >0) ; printf(Rus("нажмите любую клавишу")); getch(); return 0; } void DispData(Student a[], char *s) { int i=0, j=0, res=0; for (i=0; i<nRecs;i++) { if (strstr(Rus(a[i].fio),s)!=NULL) { res=1; printf("%15s ",Rus(a[i].fio)); printf(" %5s %3i %i\n",Rus(a[i].predm),a[i].prog, a[i].step); } } if (res==0) printf("\n%s\n",Rus("фамилии нет в списке")); } void ListData(Student a[], int n) { int i,j; printf(Rus("СПИСОК СТУДЕНТОВ\n")); for(i=0;i<n;i++) { printf("%15s ", Rus(a[i].fio)); printf("%5s %4i %i\n", Rus(a[i].predm),a[i].prog, a[i].step); } } void SortN(Student x[],int n) { int i,j; for (i=n-1; i>0; i--) for (j=0;j<i;j++) if (x[j].prog>x[j+1].prog) Swap(&x[j],&x[j+1]); } void Swap(Student *x, Student *y) { Student tmp; tmp=Assign(*x); *x=Assign(*y); *y=Assign(tmp); } Student Assign(Student x) { Student z; strcpy(z.fio, x.fio); strcpy(z.predm, x.predm); z.prog=x.prog; z.step=x.step; return z; } Student FindRec(Student x[], char *str) { int i=0, res=0; for (i=0; i<nRecs; i++) { if (strstr(Rus(x[i].fio), str)!=NULL) { res=1; printf("%15s ", Rus(x[i].fio)); printf("%5s %4i %i\n", Rus(x[i].predm),x[i].prog, x[i].step); } } if (res==0) printf("\n%s", Rus("студента нет в списке")); }
Объяснение кода листинга программы
В данном коде реализована работа с базой данных студентов. Код начинается с объявления переменных и структур. Затем в функции main() происходит основной процесс работы с базой данных, который включает в себя ввод данных, их вывод и сортировку. Список студентов выводится в функции ListData(), которая принимает массив студентов и его размер. В цикле происходит обход каждого элемента массива и вывод его содержимого на экран. Сортировка списка студентов реализована в функции SortN(). Она работает по принципу сортировки пузырьком, сравнивая значения поля prog двух соседних элементов массива. Если значение поля prog первого элемента больше, чем у второго, то они меняются местами. Поиск студента по фамилии реализован в функции FindRec(). Она принимает массив студентов и строку, которая является частью фамилии искомого студента. В цикле происходит обход каждого элемента массива и сравнение его фамилии с искомым значением. Если совпадение найдено, то информация о найденном студенте выводится на экран. Также в коде присутствуют функции DispData() и Assign(), которые используются для вывода информации о конкретном студенте и для копирования значений из одного объекта типа Student в другой соответственно. В конце кода подключаются заголовочные файлы, которые содержат русские строки для работы с русским языком в консоли.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д