Απλο προγραμμα τραπεζικου λογαριασμου σε C++

Ξεκίνησε από gfk_2010, 21 Μαρ 2016, 02:24:50 ΜΜ

« προηγούμενο - επόμενο »

gfk_2010

Καλησπερα,
Διαθετοντας ελλαχιστες γνωσεις πανω σε C++ θα ηθελα βοηθεια πανω σε ενα προγραμμα που θα περιεχει τον ορισμο και την ηλοποιηση μιας κλασης (οχι main() ) που αντιστοιχει σε τραπεζικό λογαρισμο(πχ BankAcc). Κάθε λογαρισμος οριζεται από τα χρηματα (balance), το επιτοκιο (rate) και το ID (12ψήφιος αριθμός). Σε αυτο το πραγραμμα πρεπει να υπαρχει ενας  default constructor που δημιουργει εναν λογαριασμο με 0 χρηματα, 0 επιτοκιο και ID με 12 άσους (1), και ενας constructor που να δέχεται παραμετρους για ολα τα χρακτηριστικα της κλασης. Επιπλεον θα πρέπει να παρεχω τα εξης:
-ολες τις μεθόδους get_ για πρόσβαση στα χαρακτηριστικά της κλάσης
-ολες τις μεθόδους set_ για αλλαγή των χαρακτηριστικων της κλασης
Και τέλος μια μέθοδο update() που να προσθέτει στα χρηματα του λογαριασμου 1 έτος απλού τοκισμού.
Οποιεσδήποτε γραμμες κώδικα θα βοηθούσαν απειρα την κατασταση καθώς κατανοώ καλύτερα βλέποντας.

itt

Παράθεση από: gfk_2010 στις 21 Μαρ 2016, 02:24:50 ΜΜ
Καλησπερα,
Διαθετοντας ελλαχιστες γνωσεις πανω σε C++ θα ηθελα βοηθεια πανω σε ενα προγραμμα που θα περιεχει τον ορισμο και την ηλοποιηση μιας κλασης (οχι main() ) που αντιστοιχει σε τραπεζικό λογαρισμο(πχ BankAcc). Κάθε λογαρισμος οριζεται από τα χρηματα (balance), το επιτοκιο (rate) και το ID (12ψήφιος αριθμός). Σε αυτο το πραγραμμα πρεπει να υπαρχει ενας  default constructor που δημιουργει εναν λογαριασμο με 0 χρηματα, 0 επιτοκιο και ID με 12 άσους (1), και ενας constructor που να δέχεται παραμετρους για ολα τα χρακτηριστικα της κλασης. Επιπλεον θα πρέπει να παρεχω τα εξης:
-ολες τις μεθόδους get_ για πρόσβαση στα χαρακτηριστικά της κλάσης
-ολες τις μεθόδους set_ για αλλαγή των χαρακτηριστικων της κλασης
Και τέλος μια μέθοδο update() που να προσθέτει στα χρηματα του λογαριασμου 1 έτος απλού τοκισμού.
Οποιεσδήποτε γραμμες κώδικα θα βοηθούσαν απειρα την κατασταση καθώς κατανοώ καλύτερα βλέποντας.

To έχεις προσπαθήσει καθόλου; Μπορώ να στο γράψω αλλά καλύτερα θα ήταν να σου δείξω σε κάτι που έχεις ήδη γράψει τι θα μπορούσες να κάνεις καλύτερα.

dimitrios67

καλε μου φιλε, οπως λεει και ο itt, πρεπει να το προσπαθησεις πρωτα μονος σου.
Φανταζομαι οτι ειναι μια 1η ασκηση σε object oriented programming with C++.
Η ασκηση ειναι πολύ ευκολη.
Ψαξε λιγο σε καποια παραδειγματα σε καποια textbook, και σε λιγη ωρα θα εισαι ok!!.
Εξοχα βιβλία ειναι το "Absolute C++" του Savitch, to "C++ how to program"(Deitel),
και το "C++: A Beginner's Guide" του Herbert Schildt.
καλη συνεχεια!!

(σημειωση: ειναι "υλοποίηση", οχι "ηλοποίηση", "ήλος" ειναι το καρφι).
φιλικα Δημητρης

gfk_2010

#include <iostream>
using namespace std;

class BankAccount{
   private:
      double balance,rate;
      int accound_id [12];
   public:
      BankAccount();
      void display();
      void data();
      void update();
};
   BankAccount::BankAccount(){
      strcpy(account_id,111111111111);
      balance=0.0;
      rate=0.0;
   }
   void BankAccount::display(){
      cout<<"\n Account ID:   "<<account_id<<"\n Balance:   "<<balance<<"\n Rate:   "<<rate<<endl;
   }
   void BankAccount::data(){
      cout<<"\n********* WELCOME *********\n Enter ID: ";
      cin.getline(account_id,12);
      cout<<" Enter account's total BALANCE and RATE:   ";
      cin<<balance<<rate;   
   }
int main(int argc, char** argv) {
   BankAccount no1,no2;
   no1.data();
   no1.display();
   no2.display();
   return 0;
}



Αυτη ειναι η γενικη ιδεα. Οπως παρατηρει κανεις υπαρχουν συντακτικα λαθη (πχ δεν μπορω να εμαφανισω πινακα που εχω κανει παραπανω στον κωδικα). Δεν εχω λαβει υποψη λαθη οπως πχ ο χρηστης να εισαγει αρνητικους αριθμους και φυσικα οπως γινεται ευκολα αντιληπτο δεν υπαρχει ιχνος απο set_ get_ καθως και ολοκληρη η update (αυτη που ειναι υπευθηνη για τον τοκισμο 1 χρονου που ειναι ((balance*rate)*12)+balance  ). Μεχρι εκει τα καταφερα.

gfk_2010

Παράθεση από: dimitrios67 στις 22 Μαρ 2016, 08:32:01 ΠΜ
καλε μου φιλε, οπως λεει και ο itt, πρεπει να το προσπαθησεις πρωτα μονος σου.
Φανταζομαι οτι ειναι μια 1η ασκηση σε object oriented programming with C++.
Η ασκηση ειναι πολύ ευκολη.
Ψαξε λιγο σε καποια παραδειγματα σε καποια textbook, και σε λιγη ωρα θα εισαι ok!!.
Εξοχα βιβλία ειναι το "Absolute C++" του Savitch, to "C++ how to program"(Deitel),
και το "C++: A Beginner's Guide" του Herbert Schildt.
καλη συνεχεια!!

(σημειωση: ειναι "υλοποίηση", οχι "ηλοποίηση", "ήλος" ειναι το καρφι).
φιλικα Δημητρης

Συγγνωμη για τα ορθογραφικα  :-[ Οντως γνωριζω οτι ειναι "υλοποιηση" και "ηλος" το καρφι αλλα εγραφα καπως βιαστικα καθως με πιεζει λιγο ο χρονος. Δεν το λεω σαν δικαιολογια, ειναι αλλες φορες παντως που σκοτωνω λεξεις στην κυριολεξια  ;D Ευχαριστω για την συμβουλη. Εχω μια μικρη ιδεα απο την εκδοση Deιtel πανω σε C ομως. Θα τα τσεκαρω.

itt

Παράθεση από: gfk_2010 στις 22 Μαρ 2016, 01:30:31 ΜΜ
#include <iostream>
using namespace std;

class BankAccount{
   private:
      double balance,rate;
      int accound_id [12];
   public:
      BankAccount();
      void display();
      void data();
      void update();
};
   BankAccount::BankAccount(){
      strcpy(account_id,111111111111);
      balance=0.0;
      rate=0.0;
   }
   void BankAccount::display(){
      cout<<"\n Account ID:   "<<account_id<<"\n Balance:   "<<balance<<"\n Rate:   "<<rate<<endl;
   }
   void BankAccount::data(){
      cout<<"\n********* WELCOME *********\n Enter ID: ";
      cin.getline(account_id,12);
      cout<<" Enter account's total BALANCE and RATE:   ";
      cin<<balance<<rate;   
   }
int main(int argc, char** argv) {
   BankAccount no1,no2;
   no1.data();
   no1.display();
   no2.display();
   return 0;
}



Αυτη ειναι η γενικη ιδεα. Οπως παρατηρει κανεις υπαρχουν συντακτικα λαθη (πχ δεν μπορω να εμαφανισω πινακα που εχω κανει παραπανω στον κωδικα). Δεν εχω λαβει υποψη λαθη οπως πχ ο χρηστης να εισαγει αρνητικους αριθμους και φυσικα οπως γινεται ευκολα αντιληπτο δεν υπαρχει ιχνος απο set_ get_ καθως και ολοκληρη η update (αυτη που ειναι υπευθηνη για τον τοκισμο 1 χρονου που ειναι ((balance*rate)*12)+balance  ). Μεχρι εκει τα καταφερα.

Αρχικά για το ότι δεν σου εμφανίζεται ο πίνακας, είναι επειδή στο stream του δίνεις το account_id ως όρισμα. Θα πρέπει να διατρέξεις τον πίνακα και να εκτυπώνεις κάθε στοιχείο του για να σου το δείξει σωστά.

Aφού επέλεξες να βάλεις πίνακα για το ID, στην υλοποιήση σου αυτό

strcpy(account_id,111111111111);


είναι λάθος. H strcpy κάνει copy null-terminated C strings, θα πρέπει να χρησιμοποιήσεις αυτό
memset(account_id, 1, sizeof(int) * 12)
για να μην έχεις access violation και να αρχικοποιήσεις τον πίνακα σωστά.

Ακόμα πιο σωστό θα ήταν να χρησιμοποιήσεις το std::array από την standard βιβλιοθήκη της C++ και απλώς να κάνεις
account_id.fill(1)

Tα set και τα get δεν ξέρω γιατί σε δυσκολεύουν, ουσιαστικά θα είναι κάτι τέτοιο:

double Rate() const
{
	return m_rate;
}

void SetRate(double rate)
{
	m_rate = rate;
}


H update, χωρίς να έχεις ανατοκισμό κάθε μήνα θα είναι κάτι τέτοιο:

void Update()
{
	auto interest = (balance * rate  * kAccountableMonthsForInterest);
	balance += interest;
}


και θα πρέπει να έχεις δηλώσει αυτό κάπου στην κλάση σου

const kAccountableMonthsForInterest = 12;


Δηλαδή η Update ουσιαστικά είναι ο τύπος που έγραψες (υποθέτωντας ότι κάνεις τον ανατοκισμό στο τέλος του χρόνου).

gfk_2010

Παράθεση από: itt στις 22 Μαρ 2016, 02:50:13 ΜΜ
Αρχικά για το ότι δεν σου εμφανίζεται ο πίνακας, είναι επειδή στο stream του δίνεις το account_id ως όρισμα. Θα πρέπει να διατρέξεις τον πίνακα και να εκτυπώνεις κάθε στοιχείο του για να σου το δείξει σωστά.

Aφού επέλεξες να βάλεις πίνακα για το ID, στην υλοποιήση σου αυτό

strcpy(account_id,111111111111);


είναι λάθος. H strcpy κάνει copy null-terminated C strings, θα πρέπει να χρησιμοποιήσεις αυτό
memset(account_id, 1, sizeof(int) * 12)
για να μην έχεις access violation και να αρχικοποιήσεις τον πίνακα σωστά.

Ακόμα πιο σωστό θα ήταν να χρησιμοποιήσεις το std::array από την standard βιβλιοθήκη της C++ και απλώς να κάνεις
account_id.fill(1)

Tα set και τα get δεν ξέρω γιατί σε δυσκολεύουν, ουσιαστικά θα είναι κάτι τέτοιο:

double Rate() const
{
	return m_rate;
}

void SetRate(double rate)
{
	m_rate = rate;
}


H update, χωρίς να έχεις ανατοκισμό κάθε μήνα θα είναι κάτι τέτοιο:

void Update()
{
	auto interest = (balance * rate  * kAccountableMonthsForInterest);
	balance += interest;
}


και θα πρέπει να έχεις δηλώσει αυτό κάπου στην κλάση σου

const kAccountableMonthsForInterest = 12;


Δηλαδή η Update ουσιαστικά είναι ο τύπος που έγραψες (υποθέτωντας ότι κάνεις τον ανατοκισμό στο τέλος του χρόνου).


Οσον αφορα τη main; Δεν θα πρεπει να την τροποποιησω αναλογα; (Γενικα πιστευω εχεις καταλαβει σε τι επιπεδο γνωσης και εμπειριας βρισκομαι πανω στο θεμα και ευχαριστω πολυ που μου δινεις γραμμες κωδικα γιατι πραγματικα με βοηθαει πααααρα πολυ)

itt

Παράθεση από: gfk_2010 στις 22 Μαρ 2016, 02:59:34 ΜΜ

Οσον αφορα τη main; Δεν θα πρεπει να την τροποποιησω αναλογα; (Γενικα πιστευω εχεις καταλαβει σε τι επιπεδο γνωσης και εμπειριας βρισκομαι πανω στο θεμα και ευχαριστω πολυ που μου δινεις γραμμες κωδικα γιατι πραγματικα με βοηθαει πααααρα πολυ)

Το τι θα κάνεις στη main εξαρτάται από το τι θες να κάνει το πρόγραμμα σου. Η ουσία είναι να καταλάβεις πώς θα γράψεις την κλάση. Τώρα αν θα βάλεις μενου και οτιδήποτε στη main, it's up to you.

Μιας και το συζητάμε πάντως, καλό θα ήταν να έχεις την κλάση στα ανάλογα .h και .cpp αρχεία. Τι toolchain χρησιμοποιείς; Μπορώ να σου εξηγήσω πώς να δομήσεις το source και γιατί θα πρέπει να το δομήσεις έτσι, εαν θες.

gfk_2010

Για αυτην την ασκηση χρειαζεται μονο ενα .cpp και δουλευουμε με dev c++
Ειληκρινα, ευχαριστω πολυ για το ενδιαφερον και το χρονο σου!  :)

dimitrios67

Σε αυτες τις ασκησεις , το id ειτε θα ειναι ενας απλος int, ειτε ενα string.
To  int accound_id [12], δεν ειναι σωστο "σχεδιαστικα".
π.χ. θα μπορουσε να ηταν αποδεκτος ενας id,
όπου σε καθε "θεση" του πίνακα να εχουμε διψηφιους κλπ ακεραιους?
Το καλυτερο ειναι , ο κωδικος λογαριασμου να ειναι ενα string, μιας και η C++
υποστηριζει τυπο string.
string ID; με #include<string>
ΕΡ: στο 1ο εξαμηνο κανατε καποια γλώσσα προγραμματισμού?
Γλώσσα C, κανατε καθόλου?
Εισαι από τεχνολογική κατευθυνση?

καλη συνεχεια...

gfk_2010

Παράθεση από: dimitrios67 στις 24 Μαρ 2016, 07:06:47 ΜΜ
Σε αυτες τις ασκησεις , το id ειτε θα ειναι ενας απλος int, ειτε ενα string.
To  int accound_id [12], δεν ειναι σωστο "σχεδιαστικα".
π.χ. θα μπορουσε να ηταν αποδεκτος ενας id,
όπου σε καθε "θεση" του πίνακα να εχουμε διψηφιους κλπ ακεραιους?
Το καλυτερο ειναι , ο κωδικος λογαριασμου να ειναι ενα string, μιας και η C++
υποστηριζει τυπο string.
string ID; με #include<string>
ΕΡ: στο 1ο εξαμηνο κανατε καποια γλώσσα προγραμματισμού?
Γλώσσα C, κανατε καθόλου?
Εισαι από τεχνολογική κατευθυνση?

καλη συνεχεια...
Η αληθεια ειναι οτι με string πολλοι μου ειπαν οτι θα ταν παλυ πιο σωστο. Βεβαια δεν ηξερα πως να το δουλεψω. Στο Α εξαμηνο ειχαμε κανει C (το μαθημα το περασα κιολας!!!). Δυστυχως ημουν απο την τεχνολογικη που ειχε χημεια και ηλεκτρολογια (καλυτερο μαθημα ever!) και εκανα καποια ιδιαιτερα πανω σε καποια βασικα θεματα και κυριως στη λογικα (σε γλωσσα με αυτη που κανουν στη 3η λυκειου ομως).
Ευχαριστω πολυ για το χρονο σου!! Καλη συνεχεια και σε εσενα!