Добавить функционал в программу сведений о студентах - C (СИ)

Узнай цену своей работы

Формулировка задачи:

ПРиветик ! я написала програмку,но мне нужно ее усложнить, а я уже запуталася что и как =(( Помогите плииииз..очень прошу если не трудно Эта прога делает делает _записывает данные _выписывает студентов з указанного семестра _выписывает всех студентов... а надо еще чтобы она могла _выписать всех студентов за алфавитом _выписть студентов з семестру за алфавитом _ограничить возможность вводу два раза одного индекса (зачетка) _поиск за номером индекса
#include <stdio.h>
#include <stdlib.h>
 
typedef struct {
char imie[100];
char nazwisko [100];
char nr_indeksa[100];
int semestr;
} STUDENT ;
 
int main ()
{char symbol;
char c;
STUDENT kadra[100];
int i,n = 0;
printf ( " co chcesz robic daliej? "); // что делать дальше?
//scanf ( "%s", c);
while ((c = getchar() ) != 'q' ) // пока не будет введен символ чтобы остановить прогу
{
printf ( "podaj symbol");
scanf ("%c", &symbol);
if (symbol == 'a')  //а - вписать  студентов
{ printf ("imie");
scanf ("%s", kadra [i].imie);
printf ("nazwisko");
scanf ("%s",&(kadra [i].nazwisko));
printf ("nr_indeksa");
scanf ("%s", &(kadra[i].nr_indeksa));
printf ("semestr");
scanf ("%d", &(kadra[i].semestr));
n++;
} else
if (symbol == 'b')   // б - выписать всех студентов
{ for (i=0; i<=n; i++)
printf ("imie %s\n nazwisko %s\n nr_indeksa %s\n semestr %d\n\n" , kadra[i].imie, kadra[i].nazwisko, kadra[i].nr_indeksa, kadra[i].semestr);
} else
if (symbol == 'c') // с - выписать за семестром
{
int semestr_;
printf ("podaj semestr_");
scanf ("%d", &semestr_);
for (i=0; i<=n ; i ++)
while ( semestr_ == kadra[i].semestr )
printf ("imie %s\n nazwisko %s\n nr_indeksa %s\n" , kadra[i].imie, kadra[i].nazwisko, kadra[i].nr_indeksa);
}
else
 
getchar ();
getchar ();
}
return 0;
}

Решение задачи: «Добавить функционал в программу сведений о студентах»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
typedef struct {
    char imie[100];
    char nazwisko [100];
    char nr_indeksa[100];
    int semestr;
} STUDENT ;
 
int compare(const void *a, const void *b)
{
    int n = strcmp((*(STUDENT*)a).nazwisko, (*(STUDENT*)b).nazwisko);
    if(n==0)
          return strcmp((*(STUDENT*)a).imie, (*(STUDENT*)b).imie);
    else return n;
}
 
int main ()
{
    char symbol;
   // char c;
    STUDENT kadra[100];
    int i,x, checkIndeksNo = 0;
   // char *pstr;
   // int sortStudents=1;
   // char *names[100];
 
    printf ("Press ENTER to start!");
    symbol = 0;
    i = 0;
    while (symbol != 'q' )
 
    {
        printf ("Co chesz robic");
        printf("\na = dodaj studenta");
        printf("\nb = pokaz wszystkich studentow");
        printf("\nc = wypisanie wszystkich studentow z danego semestru");
        printf("\nd = Szukanie studenta na nazwisko");
        printf("\ne = wypisywanie wszystkich studentow z danego semestru w kolejnosci alfabetyczn");
        printf("\nq = koniec\n");
        scanf ("%c", &symbol);
        getchar();
        if (symbol == 'a')
        {
            // Сбросить индекс проверить
            checkIndeksNo = 0;
            // додать студента
            printf ("Imie: ");
            scanf ("%s", & (kadra[i].imie));
            printf ("Nazwisko: ");
            scanf ("%s",&(kadra[i].nazwisko));
            printf ("indeks: ");
            scanf ("%s",&(kadra[i].nr_indeksa));
 
            while (checkIndeksNo!=1){
                // Это в то время как () не остановится перед тем как пользователь входит уникальный индекс
 
                for (x=0; x<i; x++){
                    // Проверьте, если индекс  уже существует в массиве
                    if (!strcmp(kadra[i].nr_indeksa,kadra[x].nr_indeksa)){
                        if (x != i){
                            // Последний ввод будет всегда возвращаться, правда, такая проверка только записи из прошлого
                            checkIndeksNo = 2;
 
                            printf ("\nError: indeks jest zajety '");
                            printf (kadra[x].imie);
                            printf (" ");
                            printf (kadra[x].nazwisko);
                            printf ("'.podaj nowy indeks\n");
                        }
                    }
                }
 
                if (checkIndeksNo == 2){
                    // Индекс уже существует в массиве, пользователю необходимо заполнить вновь числа
                    printf ("indeks: ");
                    scanf ("%s",&(kadra[i].nr_indeksa));
                    // Сброс чека (в то время как цикл будет запустить снова)
                    checkIndeksNo = 0;
                }
                else {
                    // Все нормально, за исключением индекса , и переходите к следующему вопросу (в то время как цикл будет завершен)
                    checkIndeksNo = 1;
                }
            }
 
            printf ("Semestr: ");
            scanf ("%d", &(kadra[i].semestr));
            getchar();
            i++;
        }
        else if (symbol == 'b')
        {
            // листа всіх студентів
            for (x=0; x<i; x++ )
            {
                printf ("imie: %s\nNazwisko: %s\nIndeks : %s\nSemestr: %d\n\n" , kadra[x].imie, kadra[x].nazwisko, kadra[x].nr_indeksa, kadra[x].semestr);
            }
 
        }
        else if (symbol == 'c')
        {
            // листа всіх студентів за вибраним семестром
            int semestr_;
            printf ("\nsemestr: \n\n");
            scanf ("%d", &semestr_);
            getchar();
            for (x=0; x<i; x++){
                if(semestr_ == kadra[x].semestr){
                    printf ("Imie: %s\nNazwisko: %s\nIndeks: %s\nSemestr: %d\n\n" , kadra[x].imie, kadra[x].nazwisko, kadra[x].nr_indeksa, kadra[x].semestr);
                }
            }
        }
        else if (symbol == 'd')
        {
            // пошук за введеним прізвищем
            char studentNazwisko[100];
 
            printf ("\nWpisz nazwisko studenta: ");
            scanf ("%s",(&studentNazwisko));
            getchar();
            printf ("\nWyniki wyszukiwania dla '");
            printf ("%s", studentNazwisko);
            printf ("':\n\n");
 
            for (x=0; x<i; x++){
                if (strstr(kadra[x].nazwisko, &studentNazwisko)!=NULL){
                    printf ("Imie: %s\nNazwisko: %s\nIndeks: %s\nSemestr: %d\n\n" , kadra[x].imie, kadra[x].nazwisko, kadra[x].nr_indeksa, kadra[x].semestr);
                }
            }
        }
        else if (symbol == 'e')
        {
            qsort(kadra, i, sizeof(STUDENT), compare);
            printf("Posortowane!\n");
        }
    }
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы