Добавить функционал в программу сведений о студентах - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д