Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 05.10.06 Prihlásený: 15.10.18 Príspevky: 1891 Témy: 148 | 148 Bydlisko: Bratislava |
Ahojte. Po php som sa dal na C a som z toho zatiaľ trochu vedľa. Najviac mi chýbajú databázy resp mysql a tak údaje ukladám do txt. Mám takúto úlohu: simulovať bankomat. To znamená, že užívateľ zadá meno, heslo a dostane sa do opakujúceho sa menu s možnosťami Výber, Vklad, Výpis stavu účtu a exit. Môže vybrať a vložiť peniaze čo samozrejme zmení stav účtu. Mená, heslá a stavy účtov mám uložené v txt súbore v tvare meno heslo stav_účtu
Kód: peter 0000 100 jano 1111 500 fero 2222 10000 Potiaľto všetko funguje. Problém je, že po výbere a vložení na účet neviem zmeniť stav účtu v txt súbore. V nasledujúcom zdrojáku som zakomentoval 2 riadky, v ktorých by malo prebiehať updatovanie txt súboru. Ďakujem za rady Kód: #include <stdio.h> #include <string.h> #include <stdlib.h>
int menu_volba;
void menu() { printf("\n/* MENU */\n1 Vklad\n2 Vyber\n3 Vypis uctu\n4 Ukoncit program\n\nStlacte cislo pre vyber operacie: "); scanf("%d", &menu_volba);
if (system("cls")) system("clear"); }
int vklad(int pom, int ciastka) { pom += ciastka; printf("Suma %d bola vlozena na ucet\n\n", ciastka);
return pom; }
int vyber(int pom, int ciastka) { pom -= ciastka; printf("Suma %d bola vybrana z uctu\n\n", ciastka);
return pom; }
int main(void) { int hodnota, najdene = 0, stav_uctu; char meno[10], meno_compare[10], heslo[4], heslo_compare[4], riadok[30]; FILE *fr, *fw;
fr = fopen("bankove_ucty.txt", "r");
printf("Prihlasovacie meno (malymi pismenami): "); scanf("%s", meno);
while( (fgets(riadok, 30, fr)) != NULL) { riadok[strlen(riadok) - 1] = '\0';
sscanf(riadok, "%s %s %d", meno_compare, heslo_compare, &stav_uctu); if ( strcmp(meno, meno_compare) == 0 ) { najdene = 1; break; }
memset(&riadok[0], 0, sizeof(riadok)); memset(&meno_compare[0], 0, sizeof(meno_compare)); memset(&heslo_compare[0], 0, sizeof(heslo_compare)); }
fclose(fr);
if ( !najdene ) { printf("\nZle prihlasovacie meno\n"); return 1; }
printf("\nZadajte prihlasovacie heslo: "); scanf("%s", heslo); if ( strcmp(heslo, heslo_compare) != 0 ) { printf("Zle heslo"); return 1; }
menu();
while (menu_volba != 4) { if (menu_volba == 1) { printf("Zadajte vkladanu sumu: "); scanf("%d", &hodnota);
stav_uctu = vklad(stav_uctu, hodnota);
fw = fopen("bankove_ucty.txt", "w"); // Tu potrebujem prepisat stav_uctu uzivatela ktory je prihlaseny na novy stav_uctu fclose(fw); } else if (menu_volba == 2) { printf("Zadajte vyberanu sumu: "); scanf("%d", &hodnota);
stav_uctu = vyber(stav_uctu, hodnota);
fw = fopen("bankove_ucty.txt", "w"); // Tu potrebujem prepisat stav_uctu uzivatela ktory je prihlaseny na novy stav_uctu fclose(fw); } else if (menu_volba == 3) { printf("Stav uctu: %d\n\n", stav_uctu); }
menu(); }
return 0; }
_________________ Notebook Dell 7537, 24" BenQ BL2411PT, Logitech Illuminated keyboard, Razer DeathAdder, Razer Goliathus, Koss Porta Pro |
|
Registrovaný: 11.01.09 Prihlásený: 27.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Kamahl píše: Najviac mi chýbajú databázy resp mysql
Pre jazyk C existuju kniznice na pracu s mysql, ale blizsie info ti nedam, nakolko som s tym nikdy nerobil. K tvojmu problemu: Ak chces menit nejake data v subore, potrebujes ich mat nejako logicky potriedene, aby si k nim mohol nejake pristupovat. Najlepsie bude, ak si vytvoris nejaku strukturu a do suboru budes len zapisovat a citat tieto struktury. Tak sa dokazes lahko dostat k jednotlivym polozkam a nasledne ich prepisat. Mala ukazka:
Strutktura
Kód: typedef struct { char meno[30]; char heslo[8]; char stavUctu[10]; } Database; Priradenie hodnot permennym v struktureKód: Database d; FILE *f;
strcpy( d.meno, "peter" ); strcpy( d.heslo, "0000" ); strcpy( d.stavUctu, "100" ); Zapis do suboruKód: f = fopen( "database.txt", "w" ); fwrite( (void*) &d, sizeof( Database ), 1, f ); fclose( f ); Citanie zo suboruKód: f = fopen( "database.txt", "r" ); fread( (void*) &d, sizeof( Database ), 1, f );
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 | 96 Bydlisko: Bratislava,... |
napadajú ma hneď 3 spôsoby ako toto riešiť, možno tvoja predstava je úplne iná...
1. pri prepisovaní si vytvor nový súbor, do ktorého budeš riadok po riadku prepisovať súbory zo starého súboru, až kým sa nedostaneš na ten riadok, ktorý chceš upraviť, upravíš ho a ďalej prepisuješ riadok po riadku, následne starý súbor zmažeš (prípadne zálohuješ) a nový premenuješ..
2. maj celú dobu celú databázu v pamäti programu a ukladaj ju po každej transakcii ako zálohu...
3. urob si viacero súborov.. pre každého klienta jeden, s jeho menom, tým pádom sa zbavíš všetkých problémov (kratšia prístupová doba, lebo pristupuješ priamo ku klientovmu súboru a nemusíš ho hľadať v jednom veľkom súbore, menej práce pri prepisovaní, menej miesta zabratého zálohami (pokiaľ zálohuješ, nemusíš do zálohy ukladať aj to, čo sa od poslednej zálohy nezmenilo)
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Registrovaný: 05.10.06 Prihlásený: 15.10.18 Príspevky: 1891 Témy: 148 | 148 Bydlisko: Bratislava |
@Fico: ďakujem za odpoveď. O štruktúrach som v Heroutovi už čítal takže použitie ovládam. Nepochopil som ale ten zápis a čítanie. Kde tam určujem ktorý riadok sa má prepísať?
_________________ Notebook Dell 7537, 24" BenQ BL2411PT, Logitech Illuminated keyboard, Razer DeathAdder, Razer Goliathus, Koss Porta Pro |
|
Registrovaný: 11.01.09 Prihlásený: 27.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Zapis je prosty - kazdy novy zaznam sa zapise na koniec suboru ( fopen s parametrom "a" ). A citanie mozes realizovat v cykle takto:
Kód: f = fopen( "database.txt", "r+" ); while ( fread( (void*) &d, sizeof( Database ), 1, f ) == 1 )
if ( strcmp( d.meno, "peter" ) == 0 ) { // meno, ktore hladame strcpy( d.stavUctu, "1000" ); // novy stav uctu fseek( f, ftell( f ) - sizeof( Database ), SEEK_SET ); // seekneme sa v subore o jeden zaznam spat, aby sme ho prepisali fwrite( (void*) &d, sizeof( Database ), 1, f ); // a prepiseme povodne udaje v subore }
fclose( f );
|
|
Registrovaný: 05.10.06 Prihlásený: 15.10.18 Príspevky: 1891 Témy: 148 | 148 Bydlisko: Bratislava |
Ďakujem. A ako odmažem riadok so starým stavom účtu ? Ak by som len pridával na koniec, tak tam mám veľa záznamov pre 1 užívateľa
_________________ Notebook Dell 7537, 24" BenQ BL2411PT, Logitech Illuminated keyboard, Razer DeathAdder, Razer Goliathus, Koss Porta Pro |
|
Registrovaný: 11.01.09 Prihlásený: 27.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Ono to pridavanie mozes tiez spravit tak, ze najprv prehladas cely subor a ak uz existuje zaznam pre dane meno, tak ho iba prepises, ako v tom mojom poslednom poste. A ak sa nenachadza, tak ho zapises na koniec. Je to opat o nieco jednoduchsie. Ak by si predsa len chcel zmazat nejaky zaznam v strede suboru, tak najskor asi podobnym stylom, ako opisal nBXXL v prvom bode.
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Assembler, C, C++, Pascal, Java | 2 | 472 | 10.11.2012 19:12 Denco1 | | v Siete | 3 | 263 | 14.11.2014 11:40 walther | | v PHP, ASP | 3 | 1417 | 14.10.2009 14:18 pilná lama glama | | v Mobilné zariadenia | 4 | 516 | 07.12.2013 17:04 energyxtc | | v PC zostavy | 19 | 1103 | 23.06.2016 12:36 Drako Ager | | v PHP, ASP | 3 | 513 | 29.08.2008 16:32 chrono | | v Redakčné systémy | 2 | 385 | 20.09.2014 9:53 hatto13 | | v PHP, ASP | 4 | 808 | 30.04.2011 22:44 richo9996 | | v Krčma | 16 | 1233 | 20.01.2012 9:34 marian_r | | v PHP, ASP | 8 | 660 | 29.07.2008 1:11 BBUlet | | v Domény | 7 | 1267 | 14.12.2009 17:37 Tominator | | v Technológia .NET | 13 | 950 | 06.11.2010 19:17 p4tooo | | v Internetový marketing, SEO, reklama | 2 | 1611 | 30.12.2008 17:11 kajbo | | v Redakčné systémy | 6 | 668 | 19.01.2007 22:42 Tom@S | | v Redakčné systémy | 7 | 633 | 12.11.2011 10:00 don jebot | | v Monitory, televízory a projektory | 0 | 514 | 17.08.2011 1:21 majso7 |
|