Witam. Mam do napisania program na zaliczenie laboratorium i nie mogę sobie poradzić z przekazywaniem elementów tablicy struktur do innej funkcji. Po krotce opisze co mam do zarobienia i jakich zasad mam się trzymać.
Programy muszą być napisane z użyciem niezależnych funkcji i wskaźników (jeśli konieczne),
nie używać referencji i zmiennych globalnych.
- Zadeklaruj strukturę umożliwiającą przechowywanie informacji o wybranym przedmiocie np.
b) dane o płytach:
- wykonawca,
- tytuł,
- liczba utworów,
- czas nagrania itp.
a następnie napisz proste menu, które umożliwia wykorzystanie wymienionych poniżej funkcji:
a) funkcję, umożliwiającą wprowadzenie z klawiatury danych o jednym przedmiocie
(wypełnienie wszystkich pól struktury) i zapamiętanie ich w tablicy.
b) funkcję umożliwiającą wypisanie na ekranie wszystkich danych zapamiętanych w strukturze
(np. w postaci tabelki)
c) funkcje umożliwiające usunięcie z tablicy danych o wybranym przedmiocie, uporządkowanie wszystkich
danych zapamiętanych w tablicy według wybranego klucza (np. uporządkowanie pól opisujących
samochody według marki)
d) funkcję, która umożliwia zapis i odczyt danych do pliku *.txt
//DEKLARACJE
#include <iostream.h>
#include <fstream.h>
//PROTOTYPY
void menu();
void dodaj(struct katalog[],int n);
void wypisz();
void otworz();
//GŁÓWNA FUNKCJA
void main()
{
struct plyta // dekrlaracja struktury
{
string wykonawca, album, gatunek;
short int rok, utworow, ID;
float czas, cena;
} katalog[33];
char funkcja; //deklaracja zmiennej dla switch'a
int n=0;
std::getline(std::cin, katalog[4].wykonawca);
katalog[1].wykonawca="Antonio Vivaldi";
katalog[2].wykonawca="A Perfect Circle";
katalog[2].album="Mer De Noms";
katalog[2].gatunek="Hard Rock";
katalog[2].rok=2000;
katalog[2].utworow=12;
katalog[2].czas=62.22;
katalog[2].cena=39.99;
menu();
while (funkcja!='q')
{
std::cin >> funkcja;
switch (funkcja) {
case '1' :
dodaj(katalog[],n);
for (int i = 0; i < 15; i++)
{
std::cout << endl << katalog[i].wykonawca;
}
break;
case '2' :
wypisz();
break;
case '3' :
otworz();
break;
case '4' :
break;
case '5' :
break;
case '6' :
test();
break;
case 'm' :
menu();
break;
default :
std::cout << endl << "Wybierz jedna z dostepnych funkcji!" << endl;
}
}
}
void menu()
{
system("cls");
std::cout << "Wybierz czynnosc:" << endl;
std::cout << "1) Dodaj plyte" << endl
<< "2) Wyswietl spis" << endl
<< "3) Usun z katalogu" << endl
<< "4) Wypisz posortowane" << endl
<< "5) Zapisz do pliku" << endl
<< "6) Wczytaj z pliku" << endl
<< "m) MENU" << endl
<< "q) Wyjdz" << endl;
}
void dodaj(katalog[], int n)
{
menu();
katalog[n].wykonawca="jeee"
}
void wypisz()
{
menu();
/*
std::cout << endl << "Wykonawca: " << katalog[0].wykonawca;
std::cout << endl << "Album: " << katalog[0].album;
std::cout << endl << "Gatunek: " << katalog[0].gatunek;
std::cout << endl << "Rok wydania: " << katalog[0].rok;
std::cout << endl << "Liczba utworow: " << katalog[0].utworow;
std::cout << endl << "Laczny czas utowrow na plycie: " << katalog[0].utworow;
std::cout << endl << "Cena: " << katalog[0].cena;
*/
}
void otworz()
{
ifstream f("dane.txt");
int tablica[20];
int i=0;
while(f >> tablica[i]) i++;
f.close();
cout << "Tablica: ";
int j;
for(j=0;j<i;j++)
cout <<tablica[j]<< endl;
cout << endl;
}
Nie mam pojęcia w jaki sposób to zrobić na wskaźnikach. Gdybym mógł użyć zmiennych globalnych to żadnego problemu by nie było. Bardzo proszę o pomoc.