Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Baza danych zapis do pliku

Ostatnio zmodyfikowano 2013-02-08 21:02
Autor Wiadomość
Hipochondryk
Temat założony przez niniejszego użytkownika
Baza danych zapis do pliku
» 2013-02-08 11:37:40
Witam kolejna baza i kolejny problem. Otóż po wprowadzeniu danych do stringu i wyswietleniu jest ok, lecz po zapisaniu do pliku wyskakują krzaczki np dla danych wejsciowych
a b c d e f
wyjscie powinno wyglądać
00002|a|b|c|d|e|f

a wygląda :


〰〰簲簱簲簳簴簵簶††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††ഠ《〰㈰ㅼ㉼㍼㑼㕼㙼⁼††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††਍〰〰簲愠换摼晥杼楨橼汫㉼㑼⁼†††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††††ഠ

załączam dotychczasowy kod kod :

Czy możecie pomóc mi z rozwiązaniem i zrozumieniem tego problemu ?
Problem tkwi moim zdaniem gdzieś wew. funkcji dodawaj.

C/C++
/* Wykonal Artur Lisowski
   Arturlisowski94@o2.pl
  
   Nazwa: Baza danych
   Data: 08.02.13
   Opis:
*/

#include <iostream>
#include <fstream>
#include <string>
#include <conio2.h>
#include <cstdio>
#include <windows.h>

#define KR cout<<"|";
#define TG textcolor (LIGHTGREEN);
#define NLINIA cout<<endl;
#define CLS system("cls");
#define STOP system("pause");



using namespace std;


void menu();
void dodawaj();
int konwertuj( int );



int main() {
   
    menu();
    int w = 0;
    //czeka na nacisniecie klawisza wyboru w menu
    while( !w ) w = getch();
   
    CLS
    // po wcisnieciu klawisza wybiera odpowiednią droge programu
    switch( w ) {
    case 49: cout << " Wybrano wyszukanie w bazie"; break;
    case 50: dodawaj(); break;
    case 51: cout << " wybrano wyjscie"; return 0;
    default: cout << "Error #003";
    }
   
   
   
   
   
   
   
   
    STOP
    return 0;
}




void menu() {
    TG
    cout << " _______________________________________________";
    NLINIA KR
    cout << " Witaj w bazie danych Hurtowni Informatycznej  ";
    KR NLINIA KR
    cout << "-----------------------------------------------";
    KR NLINIA KR
    cout << "1) Wyszukaj w bazie.                           "; KR NLINIA KR
    cout << "2) Dodaj do bazy.                              "; KR NLINIA KR
    cout << "3) Wyjdz.                                      "; KR NLINIA KR
    cout << "-----------------------------------------------"; KR NLINIA KR
    cout << "Wcisnij odpowiedni numer.                      "; KR NLINIA KR
    cout << "_______________________________________________"; KR NLINIA
}



void dodawaj() {
    //zmienna plikowa baza.
    fstream baza;
   
   
    //plik otwierany w trybie zapisywania, dopisywania, i ustawienia wew wsk. na koncu pliku
    baza.open( "baza_danych.txt", ios::out | ios::app | ios::ate );
   
   
    if( baza.is_open() ) {
        string dodaj, temp;
       
       
       
        int liczba_rekordow = 2; // wartosc 2 tymczasowa  tymczasowo będzie wczytywane z pliku w później
        // tutaj oblicza rekord czyli np dla rekordu 2 wyświetla 00002 a dla 111 00111  - jest po to by każda linijka wyglądała wmiare podobnie ma to ułatwić poźniejsze operacje na pliku
        if( liczba_rekordow < 10 ) {
            dodaj += "0000";
            dodaj += konwertuj( liczba_rekordow );
        }
        else if( liczba_rekordow < 100 ) {
            dodaj += "000";
            dodaj += konwertuj( liczba_rekordow / 10 );
            dodaj += konwertuj( liczba_rekordow % 10 );
        }
        else if( liczba_rekordow < 1000 ) {
            dodaj += "00";
            dodaj += konwertuj( liczba_rekordow / 100 );
            dodaj += konwertuj(( liczba_rekordow / 10 ) % 10 );
            dodaj += konwertuj( liczba_rekordow % 10 );
        }
        else if( liczba_rekordow < 1000 ) {
            dodaj += "0";
            dodaj += konwertuj( liczba_rekordow / 1000 );
            dodaj += konwertuj(( liczba_rekordow / 100 ) % 10 );
            dodaj += konwertuj(( liczba_rekordow / 10 ) % 10 );
            dodaj += konwertuj( liczba_rekordow % 10 );
        }
        else {
            dodaj += konwertuj( liczba_rekordow / 10000 );
            dodaj += konwertuj(( liczba_rekordow / 1000 ) % 10 );
            dodaj += konwertuj(( liczba_rekordow / 100 ) % 10 );
            dodaj += konwertuj(( liczba_rekordow / 10 ) % 10 );
            dodaj += konwertuj( liczba_rekordow % 10 );
        }
       
        // | oddziela informacje w bazie miedzy soba nizej wczytuje informacje do stringu i je rozdzielam
        dodaj += '|';
        cout << "Podaj prosze nazwe produktu : ";
        getline( cin, temp );
        dodaj += temp;
        dodaj += '|';
        cout << "Podaj Producenta : ";
        getline( cin, temp );
        dodaj += temp;
        dodaj += '|';
        cout << "Podaj kategorie produktu : ";
        getline( cin, temp );
        dodaj += temp;
        dodaj += '|';
        cout << "Wpisz opis : ";
        getline( cin, temp );
        dodaj += temp;
        dodaj += '|';
        cout << "Ile sztuk ?";
        getline( cin, temp );
        dodaj += temp;
        dodaj += '|';
        cout << "cena netto: ";
        getline( cin, temp );
        dodaj += temp;
        dodaj += '|';
        // kazdemu stringowi nadaje wielkosc 200 dla latwiejszej pracy na nim za pomoca wew. wskaznikow w dalszej czesci programu     
        if( dodaj.size() < 200 ) dodaj.resize( 199, ' ' );
       
        //no i zapisuje do pliku i tu jest problem
        baza << dodaj << '\n';
       
       
       
    }
   
    else cout << "Error #001" << endl;
   
    baza.close();
}


int konwertuj( int l ) {
    switch( l ) {
    case 0: return 48;
    case 1: return 49;
    case 2: return 50;
    case 3: return 51;
    case 4: return 52;
    case 5: return 53;
    case 6: return 54;
    case 7: return 55;
    case 8: return 56;
    case 9: return 57;
    }
}

string dodaj, po wyswietleniu zawartosci posiada porządaną wartość, lecz plik już nie.

Dziękuje i pozdrawiam Artur Lisowski
P-75934
krzyk
» 2013-02-08 13:31:19
Mi to działa,może masz ustawione dziwne kodowanie tekstu.
A ponizszy kod zastępuje całe Twoje konwertuj.
C/C++
#include <iomanip>
cout << setfill( '0' ) << setw( 5 );
cout << 14 << endl;
P-75938
Hipochondryk
Temat założony przez niniejszego użytkownika
» 2013-02-08 14:12:27
to  już nie pierwszy raz gdy mam problem z zapisem do pliku. za każdym razem inny problem. Jak zmienic kodowanie?
P-75939
krzyk
» 2013-02-08 21:02:31
Mi też wychodzą szlaczki w pliku ale tylko przy literach typu ąęćż.
Przy odczycie z pliku i tak wszystko poprawnie odczytuje.
P-75981
« 1 »
  Strona 1 z 1