#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
//------------------------------------------------------------------------------
int main() {
cout << "------------------------------------------------\n";
cout << "|Vitejte v programu pro zapisovani zamestnancu |\n";
cout << "------------------------------------------------\n";
//Vypsani "int"
int zacatek = 0;
int pass;
int id;
int status;
int addzam=0;
int nazevsouboru;
int vek;
char str[128];
char jmeno[20];
char prace[20];
//------------------------------------------------------------------------------
do {
if ( zacatek )
{
cout << "zadali jste nespravne udaje \n";
}
cout << "Prihlaste se:\n\n";
cout << "ID: ";
if ( !( cin >> id) ) { cin.clear(); cin >> str; }
cin.get();
cout << "PASSWORD: ";
if ( !( cin >> pass) ) { cin.clear(); cin >> str; }
cin.get();
zacatek = 1;
}
while (pass != 1409 || id != 1409);
cout << "Prihlasili jste se, nacitam data!\n\n";
ifstream Zamstatus ("Zamestnanci.txt");
cout << "Prejete si zobrazit aktualni status vsech pridanych zamestnancu?\n 1 = ano / 2 = ne\n";
cin >> status;
if (status == 1)
{
cout << Zamstatus <<endl;
}
cin.get();
cout << "Prejete si pridat zamestnance?\n 1 = ano / 2 = ne\n";
cin >> addzam;
if (addzam == 1)
{
cout << "Zadejte udaje zamestnance: \n";
cout << "Zadejte jmeno zamestnance: " << jmeno;
cout << "Zadejte vek zamestnance: " << vek;
cout << "Zadejte napln prace zamestnance:" << prace;
}
cin.get();
cout << "Prejete si zalohovat soubor s priponou .txt vsech pridanych zamestnancu?\n 1 = ano / 2 = ne\n";
ofstream Zamestnanci ("Zamestnanci.txt");
cin >> nazevsouboru;
if (nazevsouboru ==1)
{
Zamestnanci << nazevsouboru;
}
cin.get();
return 0;
}
Ahoj, tady ten kod slouzi k pridani zamestnance, nasledny vypis (neni hotov) a nasledne zalohovani dat do souboru.txt . Take se z neho budou nacitat data, ktera pujdou zobrazit. Mojim problemem je dnes to, jak pridat do souboru.txt nejaka data, pokud pridam noveho zamestnance anichz bych premazal stary soubor zamestnanci.txt se starymi zamestnanci (tzn. ze se budou stale a stale pridavat) diky
Fórum › C / C++
Vkladani dat do souboru, ale bez premazavani souboru!
Navic pokud mam soubor zamestnanci.txt hotov a je v nem cokoli, momentalne:
------------- Zamestnanec --------------
Jmeno: Michal Novak
Vek: 19 let
Prace: Sprava site, Administrator
----------------------------------------
tak se mi pri pozadavku na zobrazeni zamestnancu zobrazi
0x22fdf4
nevite jak s tim pryc?
To Hanz.S : Na začátek trocha kritiky: Ty si otevřeš soubor ale už ho nezavíráš! Potom mi trochu uniká smysl tohohle:
cin >> nazevsouboru;
if (nazevsouboru ==1)
{
Zamestnanci << nazevsouboru;
}
Ale hádám, že tam někdy v budoucnu bude opravdové zálohování takže budiž (bylo by dobrý zálohovat do jinýho souboru). Špatnej nápad by nebyl testovat jestli se soubor vůbec otevřel ale to je jenom rada. A teď už k tvému dotazu. Pro to abys mohl do souboru něco přidat je nutné si otevřít soubor pro přípis. Tady najdeš info i s příkladem jak na to:
[url]
http://www.cplusplus.com/reference/iostream/fstream/open.html
[/url]
http://www.cplusplus.com/reference/iostream/fstream/open.html
Jasny, dekan! Jo, ja jsem vazne amater a ucim se vse co mohu a to nejlepe tak, ze si stahnu scripty jinych a koukam proc je to tak a pak si to tvorim stylem pokus (aha, tak je to takto) / omyl.
Mam takovej problem a vubec tomu nerozumim
// fstream::open
#include <fstream>
using namespace std;
int main () {
void open ( const char * filename, ios_base::openmode mode = ios_base::in | ios_base::out );
fstream filestr;
filestr.open ("test.txt", fstream::in | fstream::out | fstream::app);
// >> i/o operations here <<
// tady bych mel dat asi neco jako cout <<"text" << "endl" ale kontrolor to neveme
filestr.close();
return 0;
}
Vubec nechapu, jak udelat to, abych vlozil text do souboru, nechapu to poradite mi? JInak ten soubor test.txt mam vytvoreny ve stejny slozce jako mam soubor test.ccp a test.exe
Pokud používáš streamy tak se k nim přistupuje stejně jako k objektu cout. Tudíž by měl fungovat takovýto zápis do souboru:
fstream filestr;
filestr.open ("test.txt", fstream::out | fstream::app);
filestr << "Livovolny text " << 23 << endl;
int ddd = 2;
filestr << ddd << endl;
filestr.close();
Tohle by mělo zapsat do souboru řetězec mezeru číslo odřádkovat a zapsat číslo a odřádkovat. Nechápu proč máš definovanou tu funkci open uvnitř main?
// fstream::open
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
int main () {
cout << "------------------------------------------------\n";
cout << "|Vitejte v programu pro zapisovani zamestnancu |\n";
cout << "------------------------------------------------\n";
fstream filestr;
filestr.open ("test.txt", fstream::out | fstream::app);
cout << "\n- INFO -\n";
cout << "Tento program slouzi k zapisovani zamestnancu\n";
cout << "do textoveho souboru, ktery najdete ve stejne\n";
cout << "slozce, v ktere jste spustili tento program.\n";
cout << "\nU jmen piste pouze pismena, u veku pouze\n";
cout << "cislice a u naplne prace piste bez mezer\n";
cout << "oddelujte carkami. Pri zapisovani datumu\n";
cout << "piste nasledovne: den: 21, mesic: ledna, rok: 2008.\n";
cout << "Cas piste pouze v hodinach, napriklad 17 nebo 1730 (17:30).\n";
cout << "\nDekujeme za vasi prizen.\n";
cout << "\n----------- ZAPIS NOVEHO ZAMESTNANCE -----------\n";
char krestni_jmeno[12];
cout << "Krestni jmeno: ";
cin >> krestni_jmeno;
char prijmeni[30];
cout << "Prijmeni: ";
cin >> prijmeni;
double vek;
cout << "Vek: ";
cin >> vek;
char prace[30];
cout << "Napln prace: ";
cin >> prace;
double datum_den;
cout << "Vypis datumu: \n";
cout << "Den: ";
cin >> datum_den;
char datum_mesic[10];
cout << "Mesic: ";
cin >> datum_mesic;
int datum_rok;
cout << "Rok: ";
cin >> datum_rok;
double cas;
cout << "Zadejte cas pridavani: ";
cin >> cas;
cout << "\n\n Zamestnanec byl zapsan do souboru s priponou .txt";
cin.get();
filestr << "----------- ZAMESTNANEC -----------" << endl;
filestr << "Krestni jmeno: " << krestni_jmeno << endl;
filestr << "Prijmeni: " << prijmeni << endl;
filestr << "Vek: " << vek << endl;
filestr << "Napln prace: " << prace << endl;
filestr << "Zamestnanec byl zapsan dne " << datum_den;
filestr << ". " << datum_mesic;
filestr << " roku " << datum_rok;
filestr << " v " << cas << "hodin." << endl;
filestr.close();
cin.get();
return 0;
}
Nazdar, toto je plne funkcni kod! Funguje, ale mam problem. Chtel bych, aby se uzivatel, ktery spusti tento program vratil na zacatek a mohl pridat dalsiho zamestnance. Hlavne, aby to nedelal problem a nevynechalo to filestr, aby se zapsal dalsi zamestnanec. Nechci to delat pres goto MENU! Diky za odpoved!
"Databaze" v textovych souborech s promenlivou delkou radku/zaznamu jsou cesta do pekel :smile1: Schvalne zkus vymyslet, jak bys s takovymi daty dale operoval, kdybys chtel delat i neco jineho nez jen pridavani na konec (treba oprava udaju).
Kazdopadne ale zkus nejakou knihu nebo tutorial k jazyku. Narazeni na jednotlive konstrukce a nasledne dohledavani jejich funkce je hodne pomaly postup (viz do-while vyse). Prece nebudes jezdit na trikolce jen proto, ze jsi u souseda jeste nevidel kolobezku.
Luky, opravdu si nebudu kupovat mistrovstvi v c++ za 1000kc. To je proste moc a v knihovne to ani nekoupi, hlavne, ze tam maji knihy z roku 97 na tema C++.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Vkládání dat z databáze do souboru — založil Hatykar
Vkládání textu ze souboru do druhého souboru — založil Adela123
Vkládání hlavičkových souborů v knihovně — založil Lorin
Vkládání textu z jiného souboru — založil Marek Štafl
Upload souboru bez formulare — založil aTTix
Moderátoři diskuze