Oppure

Loading
06/01/10 22:01
gianlu666
Topic:
Write a program, which will be store a list of your personal books. Every book has a title, an author name and the year of issue. Of course, you may add new books and delete old ones. The program should remember, which books are lended and who borrows every book from you. (Every friend you lend books to, has the name, surname, email and phone number).

Topic:
Scrivere un programma, che memorizzerà un elenco dei tuoi libri. Ogni libro ha un titolo, autore e anno di emissione. Deve essere possibile aggiungere nuovi libri e cancellare quelli vecchi. Il programma deve ricordare quali libri sono in prestito e a chi. (Ogni amico al quale si prestano libri, ha nome, cognome, email e numero di telefono).

Essendo che il progetto va presentato in lingua inglese è la lingua che viene utilizzata anche nel codice.
Ho definito le classi book e friend, e l'apertura e chiusura dei file nei quali le informazioni vanno memorizzate alla chiusura del programma. Spero che i metodi implementati Setparameterfriend e Setparameterbook consentano, qualora richiamati nel main di inizializzare un nuovo oggetto all'interno della classe rispettiva.

Nell'ordine credo di affrontare il problema come segue:
studio dei costruttori e distruttori (nel caso in cui non fossero richiesti li serviranno per l'esame a fine corso)
aggiunta nella classe book e friend di un int tra i parametri caratteristici.
int=0 => il libro è disponibile
int=j => lo stesso parametro è assegnato a friend e book, dunque book(string _title,string _author,string _yearofissue,int _j) è in prestito a friend(string _namesurname,string _email,string _phone,int _j)

Si accettano consigli sul prossimo passo.
Non ho idea di come fare ad eliminare un libro dalla lista se i distruttori non funzionano in tal senso.
Nel caso si volesse visualizzare la lista dei libri con relativo friend connesso o disponibilità, mi serve il numero di libri ed un ciclo di for che mi consenta di visualizzarli tutti, ma ai libri voglio assegnare un indice diverso da 0 solo se sono in prestito e mi serve un if/else per distinguere il caso O dagli altri oppure posso inizializzare cosi friend(string _disponibile,string _,string _,int _0).

// project.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
class Book
{
private:
string title;
string author;
string yearofissue;
public:
Book(string _title,string _author,string _yearofissue);
void Setparameterbook(string _author,string _title,string _yearofissue);
};
Book::Book(string _title,string _author,string _yearofissue){
author=_author ;
title=_title ;
yearofissue=_yearofissue ;
}
void Book::Setparameterbook(string _author,string _title,string _yearofissue){
author=_author ;
title=_title ;
yearofissue=_yearofissue ;
}
class Friend
{
private:
string namesurname;
string email;
string phone;
public:
Friend(string _namesurname,string _email,string _phone);
void Setparameterfriend(string _namesurname,string _email,string _phone);
};
Friend::Friend(string _namesurname,string _email,string _phone){
namesurname=_namesurname ;
email=_email ;
phone=_phone ;
}
void Friend::Setparameterfriend(string _namesurname,string _email,string _phone){
namesurname=_namesurname ;
email=_email ;
phone=_phone ;
}
int _tmain(int argc, _TCHAR* argv[])
{
  ifstream ins;         // input stream
  ofstream outs;        // output stream
// open files, exit program if fail
  ins.open("indata.dat");
  if (ins.fail())
    {
      cout << "Can't open indata.dat" <<endl;
      return 1; //exit with code 1 for failure
    }
  outs.open("results.dat");
  if (outs.fail())
    {
      cout << "Can't open results.dat" << endl;
      return 1; //exit with code 1 for failure
    }


ins.close();     // Close all files
  outs.close();
outs <<2;
system ("pause");
return 0;
}


Non mi dite che non mi sto impegnando!
Ultima modifica effettuata da netarrow 06/01/10 22:56
aaa
06/01/10 23:06
netarrow
Non capisco cosa serva Setparameterbook e Setparameterfriend visto che c'è il costruttore per inizializzare l'oggetto e passargli i dati. Da quel che ho letto direi che è sufficiente il costruttore Book e un metodo che rappresenta l'atto di prestare il libro tipo giveBookTo(Friend f), col quale poi imposti i parametri; poi un metodo per rappresentare la restituzione dove reimposti i parametri allo stato in cui il libro è in tuo possesso.
E per quanto riguarda Friend basta solo il costruttore.

Inoltre ti consiglio di impostare un ID di tipo int dentro la classe Book e anche dentro la classe Friend, di impostarla come static e usarla come chiave primaria (incrementandola ogni volta che crei un nuovo oggetto). In questo modo avrai un riferimento univoco alle entità e potrai usarle per riferirti ad esse, come avevi accennato nel tuo post indicando l'ID del friend nel book per sapere a chi lo ha prestato.


Per quanto riguarda il salvataggio mi vengono due strade coi file:
1) Un file per ogni libro, del tipo id.dat dove serializzi il semplice oggetto
2) un file ad accesso diretto dove scrivi in un unico file tutti i libri

Stesso discorso per la classe Friend.

Naturalmente il codice per il salvataggio è sempre quello che ho postato all'original poster tempo fa, se naturalmente vuoi usare la seconda opzione le cose si complicano visto che devi gestire la posizione nel file in baso al suo indice e in base alla dimensione della struttura salvata.

Inoltre per tenere in memoria i dati ti consiglio di usare un vector<Book>: cplusplus.com/reference/stl/vector/

A meno che tu non voglia passare ogni volta per i file.

P.S
Non so che libro usiate come riferimento, ma in C++ Tecniche Avanzate di Programmazione deitel&deitel c'è un bel capitolo sull'elaborazione dei file, con un bel esempio completo sulla gestione su file di conti correnti e transazioni.
Se non hai il libro potresti cmq scaricarti i sorgenti di esempio sul sito dell'apogeo: apogeonline.com/libri/88-503-2387-5/allegato/…
Il capitolo da guardare è il 4.
Ultima modifica effettuata da netarrow 06/01/10 23:09
aaa
07/01/10 0:44
gianlu666
Vedo di studiare i link domattina.
Elimino i doppi metodi per l'inizializzazione degli oggetti e vedo di cominciare ad implementare il metodo per prestito e restituzione. Non mi è tutto chiaro ma farò il possibile!
Per il momento grazie mille e buonanotte!
Diamine nelle ultime 3 ore non ho conlcuso nulla!
aaa
07/01/10 7:03
netarrow
Postato originariamente da netarrow:
Inoltre ti consiglio di impostare un ID di tipo int dentro la classe Book e anche dentro la classe Friend, di impostarla come static e usarla come chiave primaria (incrementandola ogni volta che crei un nuovo oggetto). In questo modo avrai un riferimento univoco alle entità e potrai usarle per riferirti ad esse, come avevi accennato nel tuo post indicando l'ID del friend nel book per sapere a chi lo ha prestato.


Qui naturalmente ho detto una cosa sbagliata, l'ID chiaramente NON deve essere static o ne avresti uno solo condiviso fra tutti gli oggetti.

Devi crearti invece un campo lastID statico per rendere noto a tutti gli oggetti l'ultimo ID usato, incrementarlo e salvarlo dentro l'ID d'istanza. Così garantirai l'unicità.

Dì pure quali sono le parti che non sono chiare.
Ultima modifica effettuata da netarrow 07/01/10 7:09
aaa