APUVA! OSAAKO JOKU YSTÄVÄLLINEN C-KIELTÄ OSAAVA AUTTAA? MITEN IHMEESSÄ TÄLLÄNEN TEHDÄÄN? TAI TIETÄIS LINKIN MISTÄ TÄLLÄISEN OHJLELMAN VOISI LÖYTÄÄ? Kastos kun pitäis rakentaa ohjelma jolla voidaan muodostaa ja käsitellä tietokantaa (esim. asunnot, autot jne) ja pitäis tehdä seuraavia juttuja:
- tietokanta tallennetaan teksti-tai binääritiedostoksi
- luetaan tiedot tiedostosta taulukkoon tai listaan ja käsitellään niitä siinä. Alussa ei tiedosta tai se voi olla tyhjä. Pitää olla muuttuja joka sisältää tietokannassa olevien tietojen määrän
- Lisätään/poistetaan/muutetaan/etsitään tietoja
Ohjelmointityö & C:llä
8
1209
Vastaukset
- lapm
Ikävä sanoa mutta kuullostaa koulutehtävältä ja vieläpä helpolta sellaiselta.
Yritä nyt hyvä ihminen lukea niitä muistiinpanoja ja yrittää itse.
Taulukon käsittely on helppoa muistissa, samoin tiedoston käsittely.- Nimetön
Mä tunnen/luulen tuntevani jotenkin C/C perusteet mutta siihen se sitten jää, enkä mä väittäis tota helpoksi aloittelijalle. Vaikuttaa aika laajalta tehtävältä ton kuvauksen perusteella.
- hohhoi
Nimetön kirjoitti:
Mä tunnen/luulen tuntevani jotenkin C/C perusteet mutta siihen se sitten jää, enkä mä väittäis tota helpoksi aloittelijalle. Vaikuttaa aika laajalta tehtävältä ton kuvauksen perusteella.
Minä en osaa hevonvittua mitään, mutta tuo on helposti ratkaistavissa.
- Builder
-En käytä enkä oikein hallitse C-kieltä,mutta mielenkiinnosta opiskelin hieman.
-Ohjelma luo tietokantatiedoston ja kirjoittaa uusia tietueita plus tulostaa failin.
Jos tiedostoa ei ole se luodaan.
-Lisäksi tehdään dynaamiset taulukot ja tulostetaan ne.
Dynaamisista taulukoista on sorvattu staattinen 2-ulotteinen taulukko,
joka on käytettävissä.
-Ohjelma toimii minulla.Kopioi se ainakin ensin suoraan ohjelmaasi tästä.
-Valmiita ohjelmakokonaisuuksia et löydä mistään!!?? - on tehtävä itse.
Tässä kuitenkin eräs osoite http://mastodontti.net/bbs/viewforum.php?f=1
,josta saa hieman alkeita aiheeseen.
#include
#include
#include
#include
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int kirjoita(char *tiedosto);
int tulosta(char *tiedosto);
int tietueita(char *tiedosto);
void tau(char *tiedosto);
void showmenu(void);
struct person
{
//Jos syötetään enemmän merkkejä niin tietokanta on sekaisin!!!
//Sinun täytyy estää liian pitkän merkkijonon syöttö
char etunimi [50];
char sukunimi [50];
};
//**************************************************************************
int main(void)
{
//Jos tiedostoa memo.txt ei ole se luodaan
FILE *stream;
int valinta;
if ((stream=fopen("memo.txt", "a " )) == NULL)
{
fprintf(stderr, "Tiedostoa ei voi avata!!\n");
}
fclose(stream);
//----------------------------------------------------
showmenu();
scanf("%d", &valinta);
while(valinta!=4)
{
switch(valinta)
{
case 1: kirjoita("memo.txt");
break;
case 2:
system("cls");
tulosta("memo.txt");
break;
case 3:
tau("memo.txt");
break;
case 4:
printf("\n\n");
}
printf("\n\n");
showmenu();
scanf("%d",&valinta);
}
system("cls");
printf("Hei hei tavataan!!");
getch();
return 0;
}
//**************************************************************************
int kirjoita(char *tiedosto)
{
//Kirjoitetan yksi tietue
struct person s;
FILE *stream;
//Avataan tiedosto ja luodaan jos sitä ei ole
if ((stream=fopen(tiedosto, "a " )) == NULL)
{
fprintf(stderr, "Tiedostoa ei voi avata!!\n");
return 1;
}
else
{
printf ("Anna etunimi : \n");
scanf("%s",s.etunimi);
printf ("Anna sukunimi: \n");
scanf ("%s",s.sukunimi);
fwrite(&s, sizeof(s), 1, stream);//Kirjoita structi tiedostoon
fclose(stream);
return 0;
}
}
//*************************************************************************
int tulosta(char *tiedosto)
{
//Tulostetaan tietokantatiedoston sisältö(ilman taulukkoa)
struct person s;
FILE *stream;
int tietueita=0;
clrscr();
printf("Tiedoston sisalto\n");
printf("*********************\n");
//Avataan tiedosto
if ((stream=fopen(tiedosto, "r " )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
return 1;
}
else
{
fread (&s,sizeof s,1,stream);
while (!feof(stream))
{
printf ("%s %s\n",s.etunimi,s.sukunimi); /* tulostetaan tietueen kentät */
fread(&s,sizeof s,1,stream); /* luetaan seuraava tietue */
tietueita ;
}
fclose(stream);
return 0;
}//else
}
//*************************************************************************
int tietueita(char *tiedosto)
{
//Tietueitten lukumäärä
struct person s;
FILE *stream;
int tietueita=0;
//Avataan tiedosto
if ((stream=fopen(tiedosto, "rb" )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
}
else
{
fread (&s,sizeof s,1,stream);
while (!feof(stream))
{
fread(&s,sizeof s,1,stream); /* luetaan seuraava tietue */
tietueita ;
}
fclose(stream);
}//else
return tietueita;
}
//*************************************************************************
void showmenu(void)
{
printf("Valitse toiminto:\n");
printf("******************\n");
printf("1=Kirjoita tietue\n");
printf("2=Tulosta naytolle\n");
printf("3=Tee taulukot plus tulosta ne\n");
printf("4=Lopetus\n");
}
//*************************************************************************
void tau(char *tiedosto)
{
struct person s;
int tietueet=0;
int pituus1=0,pituus2=0;
FILE *stream;
char *enimet[100]={NULL};
char *snimet[100]={NULL};
int i;
char* tiedot[100][2];
clrscr();
printf("Taulukoitten sisalto\n");
printf("*********************\n");
tietueet=tietueita(tiedosto);//Tietueita tiedostossa
//Avataan tiedosto
if ((stream=fopen(tiedosto, "rb" )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
}
else
{
i=0;//Nollataan tietuelaskuri
while (!feof(stream)&& i - Builder
-Siinä vähän uutta
-Tietueen deletointi lisätty
-Hakutoiminnot voidaan suorittaa 2-ulotteisessa taulukossa,jonka ohjelma
sisältää.(koodattavaa)
-Tietueen muuttamista ei vielä ole.
-Hakutoimintojakan ei vielä ole,mutta taulukosta on helppo hakea
-Mitäs sinulle muuten kuuluu?? - loppuiko ohjelmoijan ura??
#include
#include
#include
#include
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int kirjoita(char *tiedosto);
int tulosta(char *tiedosto);
int tietueita(char *tiedosto);
void tau(char *tiedosto);
void showmenu(void);
void poista_tietue(char *tiedosto);
struct person
{
//Jos syötetään enemmän merkkejä niin tietokanta on sekaisin!!!
//Sinun täytyy estää liian pitkän merkkijonon syöttö
char etunimi [50];
char sukunimi [50];
};
//**************************************************************************
int main(void)
{
//Jos tiedostoa memo.txt ei ole se luodaan
FILE *stream;
int valinta;
if ((stream=fopen("memo.txt", "a " )) == NULL)
{
fprintf(stderr, "Tiedostoa ei voi avata!!\n");
}
fclose(stream);
//----------------------------------------------------
showmenu();
scanf("%d", &valinta);
while(valinta!=7)
{
switch(valinta)
{
case 1:
//Kirjoita tietue
kirjoita("memo.txt");
break;
case 2:
//Tulosta faili
tulosta("memo.txt");
break;
case 3:
//Tulosta taulukko
tau("memo.txt");
break;
case 4:
//Poista tietue
clrscr();
poista_tietue("memo.txt");
break;
case 5:
clrscr();
//Muuta tietue
printf("Under work...!!");
break;
case 6:
//Etsi etunimi
clrscr();
printf("Under work...!!");
break;
case 7:
//Lopetus
printf("\n\n");
}
printf("\n\n");
showmenu();
scanf("%d",&valinta);
}
system("cls");
printf("Hei hei tavataan!!");
getch();
return 0;
}
//**************************************************************************
int kirjoita(char *tiedosto)
{
//Kirjoitetan yksi tietue
struct person s;
FILE *stream;
clrscr();
//Avataan tiedosto ja luodaan jos sitä ei ole
if ((stream=fopen(tiedosto, "a " )) == NULL)
{
fprintf(stderr, "Tiedostoa ei voi avata!!\n");
return 1;
}
else
{
printf ("Anna etunimi : \n");
scanf("%s",&s.etunimi);
printf ("Anna sukunimi: \n");
scanf ("%s",&s.sukunimi);
fwrite(&s, sizeof(s), 1, stream);//Kirjoita structi tiedostoon
fclose(stream);
return 0;
}
}
//*************************************************************************
int tulosta(char *tiedosto)
{
//Tulostetaan tietokantatiedoston sisältö(ilman taulukkoa)
struct person s;
FILE *stream;
int tietueita=0;
clrscr();
printf("Tiedoston sisalto\n");
printf("*********************\n");
//Avataan tiedosto
if ((stream=fopen(tiedosto, "r " )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
return 1;
}
else
{
fread (&s,sizeof s,1,stream);
while (!feof(stream))
{
printf ("Tietue %d %s %s\n",tietueita 1,s.etunimi,s.sukunimi); /*
tulostetaan tietueen kentät */
fread(&s,sizeof s,1,stream); /* luetaan seuraava tietue */
tietueita ;
}
fclose(stream);
return 0;
}//else
}
//*************************************************************************
int tietueita(char *tiedosto)
{
//Tietueitten lukumäärä
struct person s;
FILE *stream;
int tietueita=0;
//Avataan tiedosto
if ((stream=fopen(tiedosto, "rb" )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
}
else
{
fread (&s,sizeof s,1,stream);
while (!feof(stream))
{
fread(&s,sizeof s,1,stream); /* luetaan seuraava tietue */
tietueita ;
}
fclose(stream);
}//else
return tietueita;
}
//*************************************************************************
void showmenu(void)
{
printf("Valitse toiminto:\n");
printf("******************\n");
printf("1=Kirjoita tietue\n");
printf("2=Tiedostosta naytolle\n");
printf("3=Taulukosta naytolle\n");
printf("4=Poista tietue\n");
printf("5=Muuta tietue\n");
printf("6=Etsi etunimi\n");
printf("7=Lopetus\n");
}
//*************************************************************************
void tau(char *tiedosto)
{
struct person s;
int tietueet=0;
int pituus1=0,pituus2=0;
FILE *stream;
char *enimet[100]={NULL};
char *snimet[100]={NULL};
int i;
char* tiedot[100][2];
clrscr();
printf("Taulukoitten sisalto\n");
printf("*********************\n");
tietueet=tietueita(tiedosto);//Tietueita tiedostossa
//Avataan tiedosto
if ((stream=fopen(tiedosto, "rb" )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
}
else
{
i=0;//Nollataan tietuelaskuri
while (!feof(stream)&& i - Builder
-Lisätty hakutoiminto
-Missä aloittaja luuraa???
-Loppuiko ohjelmoijan ura??
#include
#include
#include
#include
#include
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int kirjoita(char *tiedosto);
int tulosta(char *tiedosto);
int tietueita(char *tiedosto);
void tau(char *tiedosto);
void showmenu(void);
void poista_tietue(char *tiedosto);
void etsi(char *tiedosto);
struct person
{
//Jos syötetään enemmän merkkejä niin tietokanta on sekaisin!!!
//Sinun täytyy estää liian pitkän merkkijonon syöttö
char etunimi [50];
char sukunimi [50];
};
//**************************************************************************
int main(void)
{
//Jos tiedostoa memo.txt ei ole se luodaan
FILE *stream;
int valinta;
if ((stream=fopen("memo.txt", "a " )) == NULL)
{
fprintf(stderr, "Tiedostoa ei voi avata!!\n");
}
fclose(stream);
//----------------------------------------------------
showmenu();
scanf("%d", &valinta);
while(valinta!=7)
{
switch(valinta)
{
case 1:
//Kirjoita tietue
kirjoita("memo.txt");
break;
case 2:
//Tulosta faili
tulosta("memo.txt");
break;
case 3:
//Tulosta taulukko
tau("memo.txt");
break;
case 4:
//Poista tietue
clrscr();
poista_tietue("memo.txt");
break;
case 5:
clrscr();
//Muuta tietue
printf("Under work...!!");
break;
case 6:
//Etsi etunimi
clrscr();
etsi("memo.txt");
break;
case 7:
//Lopetus
printf("\n\n");
}
printf("\n\n");
showmenu();
scanf("%d",&valinta);
}
system("cls");
printf("Hei hei tavataan!!");
getch();
return 0;
}
//**************************************************************************
int kirjoita(char *tiedosto)
{
//Kirjoitetan yksi tietue
struct person s;
FILE *stream;
clrscr();
//Avataan tiedosto ja luodaan jos sitä ei ole
if ((stream=fopen(tiedosto, "a " )) == NULL)
{
fprintf(stderr, "Tiedostoa ei voi avata!!\n");
return 1;
}
else
{
printf ("Anna etunimi : \n");
scanf("%s",&s.etunimi);
printf ("Anna sukunimi: \n");
scanf ("%s",&s.sukunimi);
fwrite(&s, sizeof(s), 1, stream);//Kirjoita structi tiedostoon
fclose(stream);
return 0;
}
}
//*************************************************************************
int tulosta(char *tiedosto)
{
//Tulostetaan tietokantatiedoston sisältö(ilman taulukkoa)
struct person s;
FILE *stream;
int tietueita=0;
clrscr();
printf("Tiedoston sisalto\n");
printf("*********************\n");
//Avataan tiedosto
if ((stream=fopen(tiedosto, "r " )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
return 1;
}
else
{
fread (&s,sizeof s,1,stream);
while (!feof(stream))
{
printf ("Tietue %d %s %s\n",tietueita 1,s.etunimi,s.sukunimi); /* tulostetaan tietueen kentät */
fread(&s,sizeof s,1,stream); /* luetaan seuraava tietue */
tietueita ;
}
fclose(stream);
return 0;
}//else
}
//*************************************************************************
int tietueita(char *tiedosto)
{
//Tietueitten lukumäärä
struct person s;
FILE *stream;
int tietueita=0;
//Avataan tiedosto
if ((stream=fopen(tiedosto, "rb" )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
}
else
{
fread (&s,sizeof s,1,stream);
while (!feof(stream))
{
fread(&s,sizeof s,1,stream); /* luetaan seuraava tietue */
tietueita ;
}
fclose(stream);
}//else
return tietueita;
}
//*************************************************************************
void showmenu(void)
{
printf("Valitse toiminto:\n");
printf("******************\n");
printf("1=Kirjoita tietue\n");
printf("2=Tiedostosta naytolle\n");
printf("3=Taulukosta naytolle\n");
printf("4=Poista tietue\n");
printf("5=Muuta tietue\n");
printf("6=Etsi \n");
printf("7=Lopetus\n");
}
//*************************************************************************
void tau(char *tiedosto)
{
struct person s;
int tietueet=0;
int pituus1=0,pituus2=0;
FILE *stream;
char *enimet[100]={NULL};
char *snimet[100]={NULL};
int i;
char* tiedot[100][2];
clrscr();
printf("Taulukoitten sisalto\n");
printf("*********************\n");
tietueet=tietueita(tiedosto);//Tietueita tiedostossa
//Avataan tiedosto
if ((stream=fopen(tiedosto, "rb" )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
}
else
{
i=0;//Nollataan tietuelaskuri
while (!feof(stream)&& i- Builder
Noin niitä virheitä tulee,varsinkin tähän aikaan aamusta!!
- Builder
-Tässä olisi nyt tietokantaohjelma,jota muuttamalla saadaan aikaiseksi
jokin oma rakenne.
-Taulukon muodostamisesta voisi tehdä oman funktion,jottei muutoksia
tietueiden määrään tarvitsisi tehdä niin moneen paikkaan.
En vain viitsinyt sorvata sitä tähän.
-Lisäksi hakutoimintoon voi pistää tolower-funktion,jotta ei tarvitsisi
välittää isoista ja pienistä kirjaimista.
-Toiminnot:
***********
Kirjoita tietue
Poista tietue
Tulosta tietueet
Muuta tietue
Hae tietue
Muuta
*****
-Mitäs kuuluu aloittajan elämään??Vieläkö ohjelmoijan ura jatkuu??
Asioitten kesken jättäminen on hiukan samaa,kuin keskeytetty
yhdyntä,eivätkä nämä asiat niin vaikeita ole,ettei niitä voisi
normaalijärjellä saada selvitettyä!!!
#include
#include
#include
#include
#include
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int kirjoita(char *tiedosto);
int tulosta(char *tiedosto);
int tietueita(char *tiedosto);
void tau(char *tiedosto);
void showmenu(void);
void poista_tietue(char *tiedosto);
void etsi(char *tiedosto);
void muuta(char *tiedosto);
struct person
{
//Jos syötetään enemmän merkkejä niin tietokanta on sekaisin!!!
//Sinun täytyy estää liian pitkän merkkijonon syöttö
char etunimi [50];
char sukunimi [50];
};
//**************************************************************************
int main(void)
{
//Jos tiedostoa memo.txt ei ole se luodaan
FILE *stream;
int valinta;
if ((stream=fopen("memo.txt", "a " )) == NULL)
{
fprintf(stderr, "Tiedostoa ei voi avata!!\n");
}
fclose(stream);
//----------------------------------------------------
showmenu();
scanf("%d", &valinta);
while(valinta!=7)
{
switch(valinta)
{
case 1:
//Kirjoita tietue
kirjoita("memo.txt");
break;
case 2:
//Tulosta faili
tulosta("memo.txt");
break;
case 3:
//Tulosta taulukko
tau("memo.txt");
break;
case 4:
//Poista tietue
clrscr();
poista_tietue("memo.txt");
break;
case 5:
clrscr();
//Muuta tietue
muuta("memo.txt");
break;
case 6:
//Etsi etunimi
clrscr();
etsi("memo.txt");
break;
case 7:
//Lopetus
printf("\n\n");
}
printf("\n\n");
showmenu();
scanf("%d",&valinta);
}
system("cls");
printf("Hei hei tavataan!!");
getch();
return 0;
}
//**************************************************************************
int kirjoita(char *tiedosto)
{
//Kirjoitetan yksi tietue
struct person s;
FILE *stream;
clrscr();
//Avataan tiedosto ja luodaan jos sitä ei ole
if ((stream=fopen(tiedosto, "a " )) == NULL)
{
fprintf(stderr, "Tiedostoa ei voi avata!!\n");
return 1;
}
else
{
printf ("Anna etunimi : \n");
scanf("%s",&s.etunimi);
printf ("Anna sukunimi: \n");
scanf ("%s",&s.sukunimi);
fwrite(&s, sizeof(s), 1, stream);//Kirjoita structi tiedostoon
fclose(stream);
return 0;
}
}
//*************************************************************************
int tulosta(char *tiedosto)
{
//Tulostetaan tietokantatiedoston sisältö(ilman taulukkoa)
struct person s;
FILE *stream;
int tietueita=0;
clrscr();
printf("Tiedoston sisalto\n");
printf("*********************\n");
//Avataan tiedosto
if ((stream=fopen(tiedosto, "r " )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
return 1;
}
else
{
fread (&s,sizeof s,1,stream);
while (!feof(stream))
{
printf ("Tietue %d %s %s\n",tietueita 1,s.etunimi,s.sukunimi); /*
tulostetaan tietueen kentät */
fread(&s,sizeof s,1,stream); /* luetaan seuraava tietue */
tietueita ;
}
fclose(stream);
return 0;
}//else
}
//*************************************************************************
int tietueita(char *tiedosto)
{
//Tietueitten lukumäärä
struct person s;
FILE *stream;
int tietueita=0;
//Avataan tiedosto
if ((stream=fopen(tiedosto, "rb" )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
}
else
{
fread (&s,sizeof s,1,stream);
while (!feof(stream))
{
fread(&s,sizeof s,1,stream); /* luetaan seuraava tietue */
tietueita ;
}
fclose(stream);
}//else
return tietueita;
}
//*************************************************************************
void showmenu(void)
{
printf("Valitse toiminto:\n");
printf("******************\n");
printf("1=Kirjoita tietue\n");
printf("2=Tiedostosta naytolle\n");
printf("3=Taulukosta naytolle\n");
printf("4=Poista tietue\n");
printf("5=Muuta tietue\n");
printf("6=Etsi \n");
printf("7=Lopetus\n");
}
//*************************************************************************
void tau(char *tiedosto)
{
struct person s;
int tietueet=0;
int pituus1=0,pituus2=0;
FILE *stream;
char *enimet[100]={NULL};
char *snimet[100]={NULL};
int i;
char* tiedot[100][2];
clrscr();
printf("Taulukoitten sisalto\n");
printf("*********************\n");
tietueet=tietueita(tiedosto);//Tietueita tiedostossa
//Avataan tiedosto
if ((stream=fopen(tiedosto, "rb" )) == NULL)
{
printf ("Tiedoston avaus ");
printf (" ei onnistu.\n");
}
else
{
i=0;//Nollataan tietuelaskuri
while (!feof(stream)&& i
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
en vaan saa häntä pois
Mielestäni pyörimästä. Onko kellekään toiselle käynyt näin? Ihastuin pakkomielteisesti noin vuosi sitten erääseen naiseen. Ei vaan katoa mielestä va1762066Suomi24 kysely: ihmisten kuplautumista ei pääosin koeta vakavaksi ongelmaksi
“Kuplautumista on mahdotonta estää. Ihmiset ovat aina viihtyneet samankaltaiset arvot ja maailmankatsomuksen jakavassa seurassa ja muodostaneet sen pe361728Ohhoh! Glamourmalli Elena, 29, teetti tiimalasivartalon - Vei rahaa ja tuotti tuskaa - Katso kuvat!
Transtaustainen glamourmalli Elena Vikström on käynyt vuosien ajan plastiikkakirurgisissa toimenpiteissä. Tästä näet lopputuloksen: https://www.suomi101402Ostiko Martina uuden ponin tyttärelleen, vai oliko myös Stefan itsekkin valitsemassa ponia .?
Kiva kun on tyttärelle mielekäs harrastus annettu, ehkä vielä on tulevaisuudessa hänelle tärkeä ja valitsee sen perusteella tulevan ammatin.2291200Sinä olet tärkeä
Herätät minussa kunnioitusta. Kiehdot minua. En oikein saa kiinni sinusta. Ehkä juuri siksi. Aistin että sinäkin pidät minusta. Vetovoima on ollut alu591198Varisjärvellä mersu.
Varisjärven tiellä tuli vanhamersu kylkiedellä mutkassa vastaan ja vähällä keulaan mutta tökkäs penkkaan, hyppäsin omasta autosta ulos ja kävin kiskas161041- 60959
Belorf haistattaa seuraajiaan "You can hate me now"...
Vai haistattaako lompakkoa, joka taisi viimeinkin ymmärtää häipyä Sofian ulottumattomiin ? Sofia raukka on niin typerä, että ottaa nostetta "omasta tv58957