Вывести информацию о всех двоечниках и корректировать ее - C (СИ)

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

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

такая проблема, нужно сделать задание по своему варианту: Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, выполнить задание по своему варианту. 4. Структура имеет вид: фамилия студента, номер зачетной книжки, 4 оценки за экзамен. Выводить информацию о всех двоечниках и корректировать ее. Уже не хватает нервов исправлять ее... Пока что сделано: создание файла,добавление в него, просмотр файла, а вот поиск и изменение нихера не работают(( очень прошу помочь исправить!
//4. ÑòðóêòóðГ* èìååò ГўГЁГ¤: 
//ГґГ*ìèëèÿ ñòóäåГ*ГІГ*, Г*îìåð Г§Г*Г·ГҐГІГ*îé ГЄГ*èæêè, 4 îöåГ*ГЄГЁ Г§Г* ГЅГЄГ§Г*ìåГ*. 
//Âûâîäèòü ГЁГ*ôîðìГ*öèþ Г® ГўГ±ГҐГµ äâîå÷Г*ГЁГЄГ*Гµ ГЁ êîððåêòèðîâГ*ГІГј ГҐГҐ. 
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <clocale>
#include <stdlib.h>
int p;
using namespace std;
struct tov {char name[10]; int c; int kol;} t1;
void input(FILE *); // ñîçäГ*Г*ГЁГҐ Г*îâîãî ГґГ*éëГ*
void print(FILE *); // ïðîñìîòð ГґГ*éëГ*
void app(FILE *); // äîáГ*âëåГ*ГЁГҐ Гў ГґГ*éë
void find(FILE *); // ïîèñê ГЁ èçìåГ*ГҐГ*ГЁГҐ
main()
{
setlocale(LC_CTYPE,"Russian");
char c;
FILE *tf;
while (1)
{
 puts(" 1 – Г*îâûé ГґГ*éë");
 puts(" 2 – ïðîñìîòð ГґГ*éëГ*");
 puts(" 3 – äîáГ*âëåГ*ГЁГҐ Гў ГґГ*éë");
 puts(" 4 – ïîèñê ГЁ èçìåГ*ГҐГ*ГЁГҐ");
 puts(" 0 - âûõîä");
 c=getch();
 switch(c)
 { case '1':input(tf);break;
  case '2':print(tf);break;
  case '3':app(tf);break;
  case '4':find(tf);break;
  case '0':return 0;
  default : puts(" Г*ГҐГўГҐГ°Г*ûé ðåæèì");
 }
}
}
void input(FILE *tf)
{char ch;
 tf=fopen("file1.dat","wb"); // îòêðûòèå ГЎГЁГ*Г*Г°Г*îãî ГґГ*éëГ* äëÿ Г§Г*ГЇГЁГ±ГЁ
 printf("\n Ââîä ГЁГ*ôîðìГ*öèè Г® ñòóäåГ*ГІГ*Гµ:\n");
 do
 { printf("\n Г”Г*ìèëèÿ ñòóäåГ*ГІГ*: "); scanf("%s",t1.name);
  printf(" Íîìåð Г§Г*Г·ГҐГІГ*îé ГЄГ*èæêè "); scanf("%d",&t1.c);
  printf(" 4 îöåГ*ГЄГЁ Г§Г* ГЅГЄГ§Г*ìåГ*: ");   scanf("%d",&t1.kol);
  fwrite(&t1,sizeof(t1),1,tf); // Г§Г*ГЇГЁГ±Гј Гў ГґГ*éë îäГ*îé ñòðóêòóðû t1
  printf("\n Г‡Г*ГЄГ®Г*Г·ГЁГІГј? y/n \n");
  ch=getch();
 }
while (ch != 'y');
 fclose(tf);
}
void print(FILE *tf)
{ int i;
 tf=fopen("file1.dat","rb"); // îòêðûòèå ГЎГЁГ*Г*Г°Г*îãî ГґГ*éëГ* äëÿ Г·ГІГҐГ*ГЁГї
 i=1;
 fread(&t1,sizeof(t1),1,tf); // Г·ГІГҐГ*ГЁГҐ ГЁГ§ ГґГ*éëГ* îäГ*îé ñòðóêòóðû t1
 while (!feof(tf))
 {printf("\n %3d)Г”Г*ìèëèÿ: %s Íîìåð Г§Г*Г·.ГЄГ*.: %d ",i, t1.name, t1.c);
 printf(" ÎöåГ*ГЄГ* Г§Г* ГЅГЄГ§Г*ìåГ*: %d",t1.kol);
  printf("\n");
  fread(&t1,sizeof(t1),1,tf);
  i++;
 }
getch();
}
void app(FILE *tf)
{char ch;
 tf=fopen("file1.dat","ab"); // îòêðûòèå ГЎГЁГ*Г*Г°Г*îãî ГґГ*éëГ* äëÿ äîáГ*âëåГ*ГЁГї
 printf("\n Ââîä ГЁГ*ôîðìГ*öèè Г® ñòóäåГ*ГІГ*Гµ:\n");
 do
 { printf("\n Г”Г*ìèëèÿ ñòóäåГ*ГІГ*: "); scanf("%s",t1.name);
  printf(" Íîìåð Г§Г*Г·ГҐГІГ*îé ГЄГ*èæêè "); scanf("%d",&t1.c);
  printf(" 4 îöåГ*ГЄГЁ Г§Г* ГЅГЄГ§Г*ìåГ*: ");scanf("%d",&t1.kol);
  fwrite(&t1,sizeof(t1),1,tf); // Г§Г*ГЇГЁГ±Гј Гў ГґГ*éë îäГ*îé ñòðóêòóðû t1
  printf("\n Г‡Г*ГЄГ®Г*Г·ГЁГІГј? y/n ");
  ch=getch();
 }
while (ch != 'y');
 fclose(tf);
}
void find(FILE *tf)
{char c, tov[10];
 long int i;
 tf=fopen("file1.dat","rb+"); // îòêðûòèå ГЎГЁГ*Г*Г°Г*îãî ГґГ*éëГ* äëÿ Г·ГІГҐГ*ГЁГї ГЁ Г§Г*ГЇГЁГ±ГЁ
 puts(" Г”Г*ìèëèÿ ñòóäåГ*ГІГ* ");
 gets(tov);
 fread(&t1,sizeof(t1),1,tf);
 while (!feof(tf))
 {if (strcmp(t1.name,tov)==0)
  {printf(" Г”Г*ìèëèÿ %s Íîìåð Г§Г*Г·.ГЄГ*. %d",t1.name,t1.c);
  printf(" ÎöåГ*ГЄГ* Г§Г* ГЅГЄГ§Г*ìåГ*: %d",t1.kol);
   printf("\n èçìåГ*ГЁГІГј? y/n ");
   c=getch();
   if (c=='y')
     {
    printf("\nÍîìåð Г§Г*Г·ГҐГІГ*îé ГЄГ*èæêè "); scanf("%d",&t1.c);
    printf(" 4 îöåГ*ГЄГЁ Г§Г* ГЅГЄГ§Г*ìåГ*: ");scanf("%d",&t1.kol);
    i=sizeof(t1);
       fseek(tf, -i, 1); // âîçâðГ*ГІ Г*Г* sizeof(t1) ГЎГ*éò Г*Г*Г§Г*Г¤
      fwrite(&t1,sizeof(t1),1,tf);//Г§Г*ГЇГЁГ±Гј èçìåГ*ВёГ*Г*îé ñòðóêòóðû
     }
   }           fread(&t1,sizeof(t1),1,tf);
}
fclose(tf);
}

Решение задачи: «Вывести информацию о всех двоечниках и корректировать ее»

textual
Листинг программы
FILE *f1;
f1=fopen("SpisokStud.bin", "wb");

Объяснение кода листинга программы

  1. Открывается файл SpisokStud.bin в режиме записи (wb).

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


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

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

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