προβλημα με δημιουργια λογισμικου για οργανωση βιβλιοθηκης στην c!

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
slash23
Δημοσιεύσεις: 3
Εγγραφή: 02 Σεπ 2013 14:10

προβλημα με δημιουργια λογισμικου για οργανωση βιβλιοθηκης στην c!

Δημοσίευση από slash23 » 02 Σεπ 2013 14:27

γεια σας παιδια!Ειναι η πρωτη φορα που ασχολουμαι με δομες δεδομενων στην C και χρειαζομαι την βοηθεια σας..Συγκεκριμενα εχω προβλημα με το παρακατω κομματι της εργασιας μου:
Δημιουργειστε λογισμικο για την οργανωση μιας βιβλιοθηκης.Η αποθηκευση της πληροφοριας να γινεται σε ειδικα διαμορφωμενο αρχειο δεδομενων.Με την έναρξη του λογισμικού διαχείρισης, όλες οι εγγραφές από το αρχείο μεταφορτώνονται στην κύρια μνήμη όπου ο χρήστης θα μπορεί να επεξεργάζεται την συλλογή.Με την λήξη του προγράμματος ή όταν το επιλέγει ο χρήστης, τα δεδομένα από την μνήμη θα αποθηκεύονται στο αρχείο.
Υλοποιήστε τις κατάλληλες συναρτήσεις ώστε να μπορούμε να πραγματοποιούμε τις ακόλουθες πράξεις μέσα από ένα μενού επιλογών:
1. Load books from file
2. Save books to file
3. Add a book
4. Delete a book by id
5. Display a book by id
6. Display a book by title
7. Display books
8. Display books by surname search
9. Exit
Το αρχείο στο οποίο θα σώζουμε ή θα διαβάζουμε θα περνιέται σαν argument στη main. Σε περίπτωση που δεν περαστεί argument, θα χρησιμοποιείται μια default τιμή για ένα τοπικό αρχείο.Οι πράξεις της αναζήτησης θα γίνονται με γραμμική αναζήτηση.

Εχω μπερδευτει αρκετα στην προσπαθεια μου να φτιαξω τον κωδικα.. :-? Θα μπορουσατε να με βοηθησετε για το πως πρεπει να σκεφτω..?

sibas
Honorary Member
Δημοσιεύσεις: 1853
Εγγραφή: 21 Φεβ 2003 01:21
Τοποθεσία: Μια εδώ.. Μια εκεί.. Σήμερα είμαι εδώ!!!
Επικοινωνία:

προβλημα με δημιουργια λογισμικου για οργανωση βιβλιοθηκης στην c!

Δημοσίευση από sibas » 07 Σεπ 2013 13:07

Γειά σου slash23 καλώς ήρθες στο fs
Διάβασε τους παρακάτω συνδέσμους για να πάρεις μια ιδέα και ίσως να σε βοηθήσουν.

http://www.daniweb.com/software-develop ... g-visual-c
http://www.cplusplus.com/forum/general/53884/
http://stackoverflow.com/questions/1320 ... issue-in-c

slash23
Δημοσιεύσεις: 3
Εγγραφή: 02 Σεπ 2013 14:10

προβλημα με δημιουργια λογισμικου για οργανωση βιβλιοθηκης στην c!

Δημοσίευση από slash23 » 09 Σεπ 2013 14:31

sibas ευχαριστω για την απαντηση σου,θα κοιταξω τους συνδεσμους και ελπιζω να με βοηθησουν..
Εχω ξεκινησει να γραφω τον κωδικα μου σε C και για την επιλογη 1. Load books from file εχω
φτιαξει το παρακατω:
void load(void){

FILE *fp;
if((fp = fopen("Books","rb"))==NULL) {
printf("Books file not on disk!\n");
return;
}

if(fread(&top,sizeof top,1,fp) != 1) {
printf("Error reading count!\n");
exit(1);
}

if(fread(b,sizeof b,1,fp) != 1) {
printf("Error reading catalog data!\n");
exit(1);
}

fclose(fp);
}

Επισης εχω και τα εξης struct:
typedef struct Author{
char firstName[56];
char lastName[56];
};

typedef struct book{
int id;
char title[256];
char summary[2048];
int numberOfAuthors;
Author*authors;
};

typedef struct Books{
Book *arr;
int numberOfBooks;
}b[MAX];


Ωστοσο στην εκφωνηση εκτος απ΄το να φορτωνει το αρχειο των βιβλιων μου ζηταει και ο τρέχον πίνακας arr να αποδεσμεύεται και να δημιουργείται εκ νέου με malloc. Για το λόγο αυτό, η πρώτη τιμή που θα γράφεται στο αρχείο θα είναι το πλήθος των εγγραφών (Βιβλίων) που ακολουθούν.
Θα μπορουσατε να μου πειτε αν αυτο που εχω κανει μεχρι τωρα ειναι σωστο αλλα και πως θα μπορουσα να φτιαξω αυτο που μου ζηταει με την malloc?

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

προβλημα με δημιουργια λογισμικου για οργανωση βιβλιοθηκης στην c!

Δημοσίευση από dva_dev » 09 Σεπ 2013 19:09

γενικά είναι πιο ευανάγνωστος ο κώδικάς σου αν το έχεις μέσα σε [ code ] ... [ /code ] (χωρίς τα κενά).

Στη C (όπως και στη c++ και την pascal) ότι χρησιμοποιείς (definition, δομή, μεταβλητή, συνάρτηση) πρέπει να είναι "γνωστό", να έχει δηλωθεί πριν το σημείο που το χρησιμοποιείς. Με απλά λόγια ο κώδικά σου πρέπει να έχει μια τέτοια μορφή:

Κώδικας: Επιλογή όλων

defines

includes

variables

functions

int main()
{
...
}

//Από εδώ και κάτω μόνο σχόλια και τίποτα άλλο
Τον κώδικα σου θα τον έγραφα αντίστροφα. Π.χ.

Κώδικας: Επιλογή όλων

typedef struct Author{ 
	char firstName[56]; 
	char lastName[56]; 
}; 

typedef struct book{ 
	int id; 
	char title[256]; 
	char summary[2048]; 
	int numberOfAuthors; 
	Author*authors; 
}; 

typedef struct Books{ 
	Book *arr; 
	int numberOfBooks; 
}b[MAX]; 

void load(void){ 
	FILE *fp; 
	if((fp = fopen("Books","rb"))==NULL) { 
		printf("Books file not on disk!\n"); 
		return; 
	} 

	if(fread(&top,sizeof top,1,fp) != 1) { 
		printf("Error reading count!\n"); 
		exit(1); 
	} 

	if(fread(b,sizeof b,1,fp) != 1) { 
		printf("Error reading catalog data!\n"); 
		exit(1); 
	} 

	fclose(fp); 
}
Υπάρχει δυνατότητα "παράκαμψης" αυτού του κανόνα (χωρίς να αναιρείται η βασική αρχή).

Η πρότασή μου είναι α) ξέχνα ότι υπάρχει η εντολή exit() και β) προχώρα, βήμα, βήμα.
1. Γράψε κάτι
2. Τσεκάρισε ότι περνάει από compile.
3. Αν δεν περνάει προσπάθησε να καταλάβεις γιατί βγαίνει λάθος, τι σημαίνει το μήνυμα λάθους, που είναι το λάθος.
4. Προσπάθησε να διορθώσεις τα λάθη (από πάνω προς τα κάτω, όχι αντίστροφα και όχι ανάκατα).
5. Επαναλαμβάνεις από το 2 μέχρι να περάσει από compile.
6. Δοκίμασε ότι τρέχει και κάνει αυτό που περιμένεις.
7. Πρόσθεσε κάτι ακόμα από αυτά που θέλεις να κάνεις.
8. Επαναλαμβάνεις από το 2.

Επίσης τα αρχεία στη c (source code) έχουν κατάληξη .c, όχι .cpp .cc .m ή οτιδήποτε άλλο.

slash23
Δημοσιεύσεις: 3
Εγγραφή: 02 Σεπ 2013 14:10

προβλημα με δημιουργια λογισμικου για οργανωση βιβλιοθηκης στην c!

Δημοσίευση από slash23 » 10 Σεπ 2013 01:28

Παραπάνω δεν παρέθεσα όλο τον κώδικα που έχω γράψει μέχρι στιγμης.Οντως και εγω έχω βάλει πρώτα τα struct και μετά την main,την συνάρτηση για το μενού επιλογών και αυτή για την επιλογή load.. Ωστοσο προς το παρον το πρόβλημα μου ειναι πως θα χρησιμοποιήσω την malloc μεσα στην συνάρτηση load για τον σκοπό που ζητάει η άσκηση..

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

προβλημα με δημιουργια λογισμικου για οργανωση βιβλιοθηκης στην c!

Δημοσίευση από dva_dev » 10 Σεπ 2013 20:30

Θα φτιάξεις μια μεταβλητή τύπου struct Books.
Θα πρέπει να διαβάσεις από το αρχείο πόσα βιβλία έχει για να γεμίσεις το member numberOfBooks.
Θα κάνεις allocate numberOfBooks*sizeof(struct book) και θα το βάλεις στο member arr;
Διαβάζοντας από το αρχείο θα γεμίζεις σιγά σιγά το κάθε στοιχείο το πίνακα arr.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες