Untitled

 avatar
unknown
plain_text
3 years ago
3.6 kB
3
Indexable
#define _CRT_SECURE_NO_WARNINGS
#włącz <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 40 //ilosc litr w celu wydania i nazwiska oraz długosc napisu
 
naucz studenta
{
	int nr_ID;
	char nazwisko[MAX];
	char imie[MAX];
	podwójne punkty;
};
 
struktura wynik
{
	student* wsk;
	wewn. rozmiar;
};
 
int pierwszy(PLIK* plik)
{
	licznik licznika = 0;
	pomoc studenta;
	while (!feof(plik))
	{
		licznik++;
		fscanf(plik, "%d %s %s %lf", &pomoc.nr_ID, &pomoc.nazwisko, &pomoc.imie, &pomoc.punkty);
	}
	przewiń(plik);
	powrót licznika;
}
 
wynik druga(char nazwa[])
{
	PLIK* plik;
	student* tablica;
	wynik dane;
	if ((plik = fopen(nazwa, "r")) == NULL)
	{
		printf("Problem z odczytem pliku...\n");
		wyjście(0);
	}
	w przeciwnym razie
	{
		printf("Plik stworzony istniejący!\n");
		napis;
		napis = fgetc(plik);
		if (feof(plik))
		{
			printf("Plik pusty!\n");
			fzamknij(plik);
			wyjście(0);
		}
		w przeciwnym razie
			przewiń(plik);
	}
	int rozmiar = pierwsza(plik);
	printf("Rozmiar tablicy do: %d\n", rozmiar);
	if (tablica = (student*)malloc(rozmiar * sizeof(student*)))
	{
		printf("\nAlokacja pamieci udanej\n");
		przewiń(plik);
		for (int i = 0; !feof(plik) && i < rozmiar; i++)
		{
			fscanf(plik, "%d %s %s %lf", &tablica[i].nr_ID, &tablica[i].nazwisko, &tablica[i].imie, &tablica[i].punkty);
		}
	}
	w przeciwnym razie
	{
		printf("\nBrak pamieci na alokacje tablicy\n");
		wyjście(0);
	}
	dane.wsk = tablica;
	dane.rozmiar = rozmiar;
	fzamknij(plik);
	dane zwrotne;
}
 
void trzecia(student* tablica, int rozmiar)
{
	printf("\nZawartosc tablicy: \n");
	for (int i = 0; i < rozmiar; i++)
	{
		printf("%d %s %s %lf\n", tablica[i].nr_ID, tablica[i].nazwisko, tablica[i].imie, tablica[i].punkty);
	}
}
 
wynik czwarta(student* tablica1, int rozmiar)
{
	int id, test = 0; //0 do numeru ID hamulca
	wynik tablica2;
	tablica2.rozmiar = rozmiar - 1;
	if (tablica2.wsk = (student*)malloc(tablica2.rozmiar * sizeof(student*)))
		printf("\nAlokacja pamieci udanej!\n");
	w przeciwnym razie
	{
		printf("\nBrak pamieci na alokacje tablicy!\n");
		wyjście(0);
	}
 
	podczas (test == 0)
	{
		printf("\nPodaj nr ID studenta, ktory ma zostac usuniety: ");
		while (scanf_s("%d", &id) != 1 || getchar() != '\n')
		{
			printf("\nBledne dane, uzupełnij ponownie: ");
			while (getchar() != '\n');
		}
		for (int i = 0; i < rozmiar; i++)
		{
			if (id == tablica1[i].nr_ID)
				test++; //jak zawsze raz znajdzie numer z listy
		}
		jeśli (test != 0)
			przerwanie; //znalazł więc koniec
	}
 
	for (int i = 0, j = 0; i < rozmiar; i++)
	{
		if (id != tablica1[i].nr_ID)
		{
			tablica2.wsk[j].nr_ID = tablica1[i].nr_ID;
			strcpy(tablica2.wsk[j].nazwisko, tablica1[i].nazwisko);
			strcpy(tablica2.wsk[j].imie, tablica1[i].imie);
			tablica2.wsk[j].punkty = tablica1[i].punkty;
			j++;
		}
	}
	powrót tablica2;
}
 
 
int main()
{
	wynik dane, dane2;
	PLIK* plik;
	char nazwa[MAX] = "test.txt";
	char zapis[MAX];
	printf("Laboratorium poziom 1, Autor: Adam Abramczyk.\n\n");
 
	dane = druga(nazwa);
	trzecia(dane.wsk, dane.rozmiar);
 
	dane2 = czwarta(dane.wsk, dane.rozmiar);
 
	printf("\nPodaj nazwę pliku do zapisu: ");
	scanf_s("%s", &zapis, MAX);
 
	if ((plik = fopen(zapis, "w")) == NULL)
	{
		printf("Problem z obecnościm pliku...\n");
		wyjście(0);
	}
	printf("\nZawartośc po usunieciu jednej osoby: \n");
	trzecia(dane2.wsk, dane2.rozmiar);
 
	for (int i = 0; i < dane2.rozmiar; i++)
	{
		fprintf(plik, "%d %s %s %lf\n", dane2.wsk[i].nr_ID, dane2.wsk[i].nazwisko, dane2.wsk[i].imie, dane2.wsk[i] .punkty);
	}
	fzamknij(plik);
 
	wolny(dane.wsk);
	wolny(dane2.wsk);
 
	printf("\n\nKoniec programu.\n");
	zwróć 0;
}
Editor is loading...