Новичок
Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.11.2009
Репутация: нет Всего: нет
|
Поскажите пожалуйста, как надо подправить........ у меня программа, которая выводит таблицу из n записей (у меня типа student). Программа предусматривает реактирование полей, в том числе удаление строки в таблице, но когда я удалаю запись с номером 25 например, удаляется последняя, даже если их 15. Как это можно исправить? это у меня в функции pravkavsego(student *group, int *n) | Код | #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #define N 50
struct student { char FIO[20]; int num; int exam[4]; };
void zapolnenie(student *group, int *n) { int i,j; char m[2]; clrscr(); printf("Skolko zapisey dobavit?\n"); scanf("%d",n); for (i=0;i<*n;i++) { strcpy(group[i].FIO,"Petrov"); itoa(i+1,m,10); strcat(group[i].FIO,m); group[i].num=rand()%100+1; for (j=0;j<4;j++) group[i].exam[j]=rand()%3+3; } }
void vyvod(student *group, int n) { int i,j; clrscr(); printf("Tablica\n" "---------------------------------------\n" "| N | FIO | Gr | Exams |\n" "----|---------------------------------|\n"); for (i=0;i<n;i++) { printf("|%-3d| %-18s| %-3d |", i+1, group[i].FIO,group[i].num); for (j=0;j<4;j++) printf("%1d|",group[i].exam[j]); printf("\n---------------------------------------\n"); } getch(); }
void pravka(student *group, int i) { int j,v; clrscr(); printf("Chto redaktirovat?\n" "1. FIO\n" "2. Gruppa\n" "3. Exams\n" "4. Nazad\n" ); scanf("%d",&v); switch(v) { case 1: clrscr(); printf("Vvedite FIO:\n"); scanf("%s",group[i].FIO); break;
case 2: clrscr(); printf("Vvedite gruppu:\n"); scanf("%d",&group[i].num); break; case 3: clrscr(); printf("Vyberite examin\n"); scanf("%d",&v); switch(v) { case 1: printf("Vvedite rezultat examena:\n"); scanf("%d",&j); group[i].exam[v-1]=j; break; case 2: printf("Vvedite rezultat examena:\n"); scanf("%d",&j); group[i].exam[v-1]=j; break; case 3: printf("Vvedite rezultat examena:\n"); scanf("%d",&j); group[i].exam[v-1]=j; break; case 4: printf("Vvedite rezultat examena:\n"); scanf("%d",&j); group[i].exam[v-1]=j; break; } break; } }
void pravkavsego(student *group, int *n) { int v,i,j; clrscr(); printf("Menu\n" "1. Dobavka\n" "2. Redaktirovanie\n" "3. Udalenie\n" "4. Vyhod\n" ); scanf("%d",&v); switch(v) { case 1: clrscr(); (*n)++; i=*n-1; group[*n-1].FIO[0]='\0';
printf("Vvedite FIO:\n"); scanf("%s",group[i].FIO);
printf("Vvedite gruppu:\n"); scanf("%d",&group[i].num);
printf("Vvedite exameni\n"); printf("Vvedite rezultat examena1:\n"); scanf("%d",&group[i].exam[0]);
printf("Vvedite rezultat examena2:\n"); scanf("%d",&group[i].exam[1]);
printf("Vvedite rezultat examena3:\n"); scanf("%d",&group[i].exam[2]);
printf("Vvedite rezultat examena4:\n"); scanf("%d",&group[i].exam[3]); break;
case 2: clrscr(); printf("Kakoy element redaktirovat?\n"); scanf("%d",&j); pravka(group,j-1); break; case 3: clrscr(); printf("Kakoy element udalit?\n"); scanf("%d",&j); for (i=j-1;i<*n-1;i++) group[i]=group[i+1]; (*n)--; break } }
void stipendia(student *group,int n) { int b3,b4,b5,h,i,j,stipendia=0; clrscr(); printf("Tablica\n" "---------------------------------------------\n" "| N | FIO | Gr | Exams |dohod|\n" "----|---------------------------------------|\n"); for (i=0;i<n;i++) { printf("|%-3d| %-18s| %-3d |", i+1, group[i].FIO,group[i].num); for (j=0;j<4;j++) printf("%1d|",group[i].exam[j]); for (h=0,b3=0,b4=0,b5=0;h<4;h++) { if (group[i].exam[h]==3) b3++; if (group[i].exam[h]==4) b4++; if (group[i].exam[h]==5) b5++; } if (b3>0) stipendia=0; else if (b4>b5) stipendia=25; else if (b4==0) stipendia=100; else if (b5>b4) stipendia=50; printf("%5d|",stipendia); printf("\n---------------------------------------------\n"); } getch(); }
void sohranenie(student *group, int n) { FILE *f; int i,j; f=fopen("D:\struct.txt","w"); if(f!=NULL) { fprintf(f,"%d\n",n); i=0; while (i<n) { fprintf(f,"%s\n%3d",group[i].FIO,group[i].num); for(j=0;j<4;j++) fprintf(f,"%5d",group[i].exam[j]); fprintf(f,"\n"); i++; } fclose(f); } else { printf("Zapis v fail nevozmozhna"); getch(); } }
void zagruzka(student *group, int *n) { FILE *f; int i=0,j,dl; f=fopen("D:\struct.txt","r"); if(f!=NULL) { fscanf(f,"%d\n",n); while (i<*n) { fgets(group[i].FIO,19,f); dl=strlen(group[i].FIO); if (group[i].FIO[dl-1]=='\n') group[i].FIO[dl-1]='\0'; fscanf(f,"%3d",&group[i].num); for (j=0;j<5;j++) fscanf(f,"%5d",&group[i].exam[j]); i++; } } else { printf("Oshibka!"); getch(); } }
void main() { student group[N]; int v,n=0; do { clrscr(); printf("Menu\n" "1. Zapolnenie\n" "2. Vyvod tablicy\n" "3. Stipendia uvelichivaetsya\n" "4. Redactor\n" "5. Sohranit v fail\n" "6. Zagruzit iz faila\n" "7. Vyhod\n" ); scanf("%d",&v); switch(v) { case 1: zapolnenie(group,&n); break;
case 2: vyvod(group,n); break;
case 3: stipendia(group,n); break;
case 4: pravkavsego(group,&n); break;
case 5: sohranenie(group,n); break;
case 6: zagruzka(group,&n); break; } } while (v!=7); }
|
|