| | |
| 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 Bydlisko: Bratislava | Napísal Kamahl: 19.10.2011 19:11 | |
|
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ý: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 20.10.2011 17:29 | |
|
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 Bydlisko: Bratislava,... | Napísal nBXXL: 20.10.2011 17:35 | |
|
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 Bydlisko: Bratislava | Napísal autor témy Kamahl: 21.10.2011 1:45 | |
|
@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ý: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 21.10.2011 11:24 | |
|
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 Bydlisko: Bratislava | Napísal autor témy Kamahl: 21.10.2011 12:51 | |
|
Ď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ý: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 21.10.2011 12:57 | |
|
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 |
---|
| Čítanie premennej určitého na určitom riadku v txt súbore v Assembler, C, C++, Pascal, Java | 2 | 431 | 10.11.2012 19:12 Denco1 | | Nefukcnost konkretneho webu v Siete | 3 | 216 | 14.11.2014 11:40 walther | | Zaheslovanie konkretneho suboru v PHP, ASP | 3 | 1366 | 14.10.2009 14:18 pilná lama glama | | Zhodnotenie konkrétneho tabletu v Mobilné zariadenia | 4 | 456 | 07.12.2013 17:04 energyxtc | | Herné HTPC bez konkrétneho rozpočtu v PC zostavy | 19 | 1038 | 23.06.2016 12:36 Drako Ager | | Vyber konkretneho textu z textarea v PHP, ASP | 3 | 467 | 29.08.2008 16:32 chrono | | wordpress: ziskanie konkretneho post/page v Redakčné systémy | 2 | 355 | 20.09.2014 9:53 hatto13 | | mailový formulár - poslanie konkrétneho checkboxu v PHP, ASP | 4 | 761 | 30.04.2011 22:44 richo9996 | | Prepis vyslovnosti v Krčma | 16 | 1175 | 20.01.2012 9:34 marian_r | | prepis suboru v PHP, ASP | 8 | 615 | 29.07.2008 1:11 BBUlet | | Prepis domény v Domény | 7 | 1222 | 14.12.2009 17:37 Tominator | | prepis suborou v Technológia .NET | 13 | 911 | 06.11.2010 19:17 p4tooo | | Prepis adries .. v Internetový marketing, SEO, reklama | 2 | 1443 | 30.12.2008 17:11 kajbo | | prepis kodu v Redakčné systémy | 6 | 616 | 19.01.2007 22:42 Tom@S | | Wordpress - konkretny obsah pre konkretneho uzuvatela v Redakčné systémy | 7 | 590 | 12.11.2011 10:00 don jebot | | Vyber LCD monitora z konkretneho shopu v Monitory, televízory a projektory | 0 | 485 | 17.08.2011 1:21 majso7 |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|