Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Nie działa projekt dotyczący struktur

$
0
0

Daję kod źródłowy w którym nie działa sortowanie oraz zapis do pliku i proszę o pomoc.

Program miał za zadanie:

  1. dodawanie osoby
  2. usuwanie po nazwisku
  3. wyszukiwanie po nazwisku, wyświetla dane
  4. Drukowanie całej listy
  5. sortowanie po nazwisku albo po wieku(nie działa)
  6. zapis do pliku (nie działa)
  7. odczyt z pliku 
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <io.h>
#include <cstringt.h>
using namespace std;
typedef struct osoba
{
	char imie[25];
	char nazwisko[50];
	int wiek;
	struct osoba* nast;
	struct osoba* pop;
}*os_wsk;

//dodawanie nowej osoby
os_wsk dodawanie(os_wsk poprzedni)
{
	//alokacja pamieci na strukture
	os_wsk nowa_os = malloc(sizeof(struct osoba));


	//wprowadzanie danych nowej osoby
	printf("Wpisz imie: \n");
	char temp[25];
	scanf("%s", temp);
	strcpy(nowa_os->imie, temp);
	printf("Podaj Nazwisko: \n");
	scanf("%s", temp);
	strcpy(nowa_os->nazwisko, temp);
	printf("Wprowadz swoj wiek\n");
	int temp2;
	scanf("%d", &temp2);
	nowa_os->wiek = temp2;

	// wskaźniki na następnego i poprzedniego
	nowa_os->pop = poprzedni;
	nowa_os->nast = NULL;
	if (poprzedni != NULL)
		poprzedni->nast = nowa_os;

	return nowa_os;

}
//wyswietlenie jednej osoby
void wys_jednej(os_wsk szukany)
{
	printf(" %s %s %d\n", szukany->imie, szukany->nazwisko, szukany->wiek);
}
//sortowanie listy
void sortowanie_listy(os_wsk* pocz_listy)
{
	os_wsk nowa = NULL;
	os_wsk temp;
	os_wsk pom;

	while (pocz_listy != NULL)
	{
		temp = malloc(sizeof(struct osoba));
		strcpy(temp->imie, (*pocz_listy)->imie);
		strcpy(temp->nazwisko, (*pocz_listy)->nazwisko);
		temp->wiek = (*pocz_listy)->wiek;
		temp->nast = NULL;
		temp->pop = NULL;
		if (nowa == NULL)
			nowa = temp;
		else if (strcmp(nowa->nazwisko, temp->nazwisko) > 0)
		{
			temp->nast = nowa;
			nowa->pop = temp;
			nowa = temp;
		}
		else
		{
			pom = nowa;
			while (pom->nast != NULL && strcmp(pom->nast->nazwisko, temp->nazwisko) < 0)
				pom = pom->nast;
			temp->pop = pom;
			temp->nast = pom->nast;
			if (pom->nast != NULL)
				pom->nast->pop = temp;
			pom->nast = temp;
		}
		pom = (*pocz_listy);
		(*pocz_listy) = (*pocz_listy)->nast;
		free(pom);
	}
	(*pocz_listy) = nowa;
}
/*
//odczyt z pliku
void odczyt_z_pliku(char* plik,os_wsk pocz_listy)
{
FILE *ot;
ot=fopen(plik,"r");
os_wsk temp;
os_wsk pom;
if (od==NULL)
printf("nie mozna otworzyc pliku");
else
{
while(fscanf(plik,"%s %s %d",temp->imie,temp->nazwisko,&temp->wiek) != EOF)
//alokacja pamieci na nowy element
pom=(malloc(sizeof(struct osoba);
pom->nast=NULL;
pom->pop=NULL;
strcpy(temp->imie, (*pocz_listy)->imie);
strcpy(temp->nazwisko, (*pocz_listy)->nazwisko);


}

fclose(ot);
}
*/





//szukanie po nazwisku
void wyszukanie(os_wsk pocz_listy)
{
	char szukam[20];
	printf("Wpisz nazwisko osoby ktora chcesz znalezc\n");
	scanf("%s", szukam);
	os_wsk szukany = pocz_listy;
	int odnaleziony = 0;
	while (szukany != NULL)
	{
		if (strcmp(szukany->nazwisko, szukam) == 0)
		{
			printf("znaleziono osobę/y o takim nazwisku\n");
			wys_jednej(szukany);
			odnaleziony = 1;
		}

		szukany = szukany->nast;
	}
	if (odnaleziony == 0)
		printf("Nie znaleziono nikogo o takim nazwisku\n");
}
//usuwanie całej listy
void usuwanie_wszystko(os_wsk pocz_listy) {
	os_wsk temp = pocz_listy;
	os_wsk usuwany;
	while (temp != NULL)
	{
		usuwany = temp;
		temp = temp->nast;
		free(usuwany);
	}

}
//usuwanie konkretnej osoby
void usuwanie_os(os_wsk* pocz_listy, os_wsk* kon_listy)
{
	char szukam[25];
	printf("Kogo chcesz usunac? (wpisz nazwisko)");
	scanf("%s", szukam);
	os_wsk szukany = *pocz_listy;
	os_wsk do_usuniecia;
	while (szukany != NULL)
	{
		if (strcmp(szukany->nazwisko, szukam) == 0)
		{
			//sprawdzenie czy jest jedyny element
			if (szukany == *kon_listy)
			{
				free(szukany);
				*pocz_listy = NULL;
				*kon_listy = NULL;
				break;
			}
			do_usuniecia = szukany;
			if (*pocz_listy == do_usuniecia)
				*pocz_listy = do_usuniecia->nast;
			if (*kon_listy == do_usuniecia)
				*kon_listy = do_usuniecia->pop;

			szukany->pop->nast = szukany->nast;
			szukany->nast->pop = szukany->pop;
			szukany = szukany->nast;
			free(do_usuniecia);
		}
		else {
			szukany = szukany->nast;

		}
	}

}
void zapisz_do_pliku(char* plik, os_wsk pocz_listy)
{
	FILE *ws;
	ws = fopen(plik, "w");
	os_wsk temp = pocz_listy;
	if (pocz_listy == NULL)
		printf("Lista jest pusta\n");
	else
	{
		while (temp != NULL)
		{
			fprintf(ws, "%s %s %d\n", temp->imie, temp->nazwisko, temp->wiek);
			temp = temp->nast;
		}
	}
	fclose(ws);
}
void wyswietl_cala_liste(os_wsk pocz_listy)
{
	os_wsk temp = pocz_listy;
	if (temp == NULL)
		printf("Lista jest pusta\n");
	else
	{
		while (temp != NULL)
		{
			printf("%s %s %d\n", temp->imie, temp->nazwisko, temp->wiek);
			temp = temp->nast;
		}
	}
}

void menu(int *w)
{
	int z;
	printf("Wybierz opcje\n");
	printf("1-dodaj osobe\n");
	printf("2-usun osobe po nazwisku\n");
	printf("3-usunac cala liste\n");
	printf("4-znajdz osobe\n");
	printf("5-wyswietl cala liste\n");
	printf("6-posortuj liste\n");
	printf("7-zapisz\n");
	printf("8-odczytaj\n");
	printf("9-exit\n");
	scanf("%d", &z);
	*w = z;
}
int main(int ilosc_argumentow, char** argumenty)
{
	os_wsk pocz_listy = NULL;
	os_wsk kon_listy = NULL;
	int k;
	do
	{
		menu(&k);
		switch (k)
		{
		case 1:
			kon_listy = dodawanie(kon_listy);
			if (pocz_listy == NULL)
				pocz_listy = kon_listy;

			break;
		case 2:
			usuwanie_os(&pocz_listy, &kon_listy);
			break;
		case 3:
			usuwanie_wszystko(pocz_listy);
			pocz_listy = NULL;
			kon_listy = NULL;

			break;
		case 4:
			wyszukanie(pocz_listy);

			break;
		case 5:
			wyswietl_cala_liste(pocz_listy);
			break;
		case 6:
			sortowanie_listy(&pocz_listy);

			break;
		case 7:
			zapisz_do_pliku(argumenty[1], pocz_listy);
			break;
		case 8:

			break;
		}
	} while (k != 9);

}

 


Viewing all articles
Browse latest Browse all 21942