Вывести информацию о всех двоечниках и корректировать ее - 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");
Объяснение кода листинга программы
- Открывается файл
SpisokStud.binв режиме записи (wb).