📄 listy z zapisem do pliku.cpp
字号:
// unidirectional list sample
#include <iostream>
#include <fstream>
#include <new>
using namespace std;
char plik_dane[]="dane.txt";
struct baza
{
char imie[20];
char nazwisko[32];
unsigned int wiek;
baza *poprzedni;
baza *nastepny;
};
baza *glowa=NULL, *ogon=NULL, *biezacy=NULL;
// reading from file
void wczytaj_z_pliku(char* nazwa)
{
ifstream plik(nazwa);
baza *nowy;
if (!plik)
{
cout << "Brak danych do wczytania !";
return;
}
plik.ignore();
while (!plik.eof()) {
try
{
nowy = new baza;
}
catch(bad_alloc)
{
cout << "Brak miejsca na nowa baza";
return;
}
plik >> (nowy->imie);
plik >> (nowy->nazwisko);
plik >> (nowy->telefon);
biezacy=nowy;
if (ogon==NULL)
ogon=nowy;
else
glowa->nastepny=nowy;
nowy->poprzedni=glowa;
nowy->nastepny=NULL;
glowa=nowy;
}
}
// reading from file
void zapisz_do_pliku(char* nazwa)
{
ofstream plik(nazwa);
baza *temp;
temp=ogon;
while (temp != NULL)
{
plik << endl << temp->imie << endl << temp->nazwisko << endl << temp->telefon;
temp=temp->nastepny;
}
plik.close();
}
void dodaj_na_poczatek()
{
baza *nowy;
try
{
nowy = new baza;
}
catch(bad_alloc)
{
cout << "Brak miejsca na nowy baza";
return;
}
cout << "Podaj imie: ";
cin >> (nowy->imie);
cout << "Podaj nazwisko: ";
cin >> (nowy->nazwisko);
cout << "Podaj telefon: ";
cin >> (nowy->telefon);
biezacy=nowy;
if (glowa==NULL)
glowa=nowy;
else
ogon->poprzedni=nowy;
nowy->poprzedni=NULL;
nowy->nastepny=ogon;
ogon=nowy;
}
void dodaj_na_koniec()
{
baza *nowy;
try
{
nowy = new baza;
}
catch(bad_alloc)
{
cout << "Brak miejsca na nowy baza";
return;
}
cout << "Podaj imie: ";
cin >> (nowy->imie);
cout << "Podaj nazwisko: ";
cin >> (nowy->nazwisko);
cout << "Podaj telefon: ";
cin >> (nowy->telefon);
biezacy=nowy;
if (ogon==NULL)
ogon=nowy;
else
glowa->nastepny=nowy;
nowy->poprzedni=glowa;
nowy->nastepny=NULL;
glowa=nowy;
}
void pokaz_wszystkie()
{
baza *temp;
temp=ogon;
cout << endl;
while (temp != NULL)
{
cout << temp->imie << " " << temp->nazwisko << ", tel:" << temp->telefon << endl;
temp=temp->nastepny;
}
cout << endl;
}
void skocz_do()
{
int n;
cout << "\tPodaj numer rekordu, do ktorego chcesz skoczyc (liczac od 1): ";
cin >> n;
biezacy=ogon;
for (int i=1; i<n; i++)
if (biezacy!=glowa)
biezacy=biezacy->nastepny;
else
{
biezacy=ogon;
cout << "\tRekord o podanym numerze nie istnieje!\nPrzenosze do pierwszego...";
break;
}
}
void usun()
{
if (biezacy=glowa)
{
glowa = glowa->poprzedni;
glowa->nastepny = NULL;
delete biezacy;
biezacy = glowa;
}
else if (biezacy=ogon)
{
ogon = ogon->nastepny;
ogon->poprzedni = NULL;
delete biezacy;
biezacy = ogon;
} else {
(biezacy->poprzedni)->nastepny=biezacy->nastepny;
(biezacy->nastepny)->poprzedni=biezacy->poprzedni;
delete biezacy;
biezacy=ogon;
}
}
int main()
{
char odp;
cout << "Wczytuje dane...";
wczytaj_z_pliku(plik_dane);
do {
system("cls");
if (biezacy!=NULL)
{
cout << "\t\t\tBiezacy rekord:\n\t";
cout << biezacy->imie << "\t" << biezacy->nazwisko << "\t\t" << biezacy->telefon << endl;
}
else
cout << "\t\tLista jest pusta! \n";
cout << "\n\t\t\t\tMENU\n\n";
cout << "\t> 1 < Pierwszy\t\t" << "> 6 < Usun biezacy\n";
cout << "\t> 2 < Poprzendi\t\t" << "> 7 < Dodaj na poczatek\n";
cout << "\t> 3 < Nastepny\t\t" << "> 8 < Dodaj na koniec\n";
cout << "\t> 4 < Ostatni\t\t" << "> 9 < Pokaz wszystkie\n";
cout << "\t> 5 < Skocz do...\t" << "> 0 < Wyjscie\n";
cout << "\n\tWybierz opcje: ";
cin >> odp;
switch (odp)
{
case '1': biezacy=ogon; break;
case '2': if (biezacy!=ogon) biezacy=biezacy->poprzedni; break;
case '3': if (biezacy!=glowa) biezacy=biezacy->nastepny; break;
case '4': biezacy=glowa; break;
case '5': skocz_do(); break;
case '6': usun(); break;
case '7': dodaj_na_poczatek(); break;
case '8': dodaj_na_koniec(); break;
case '9': pokaz_wszystkie(); system("pause"); break;
}
} while (odp!='0');
system ("cls");
cout << "\nZapisuj
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -