Премини към съдържанието

Препоръчан отговор


Здравейте! Имам нужда от малко помощ по един код. Гледах го, чудих му се, но така и не разбрах на какъв принцип работи и с каква цел е написан. Факт, че Borland-а откри 25 грешки ме навява на мисълта, че нещо не е както трябва . Кода ми е изпратен от приятел, който утре е на изпит, не знае за какво е програмата (написали са му я колеги от университета) и ме помоли да намеря начин да се оправи и да заработи. ПОМОЩ  :ph34r:

#include <iostream.h>  #include <string.h> /* izvikvame string.h, za da mojem da izpolzvame nizovi promenlivi*//* ako ne izvikame tova prostranstvo shte se naloji 	da vikame std::cout/cin ili shte trqbva da 	izvikame iostream.h s razshirenieto */using namespace std;const int N_BOOKS = 1024; /* pravim si konstanta, s koqto opredelqme kolko da ni e golqma bibliotekata *//* sazdavame si struktura na bibliotekata */struct library {	string f_name; /*ukazvame imeto na avtora*/	string l_name; /*ukazvame familiqta na avtora*/	string b_name; /*ukazvame ime na knigata*/	unsigned long int isbn; /*ukazvame identifikatora na knigata (ISBN)*/} books[N_BOOKS]; /*ukazvame masiv s N_BOOKS na broi elementi(tova oznachava kolko da ni e golqma bibliotekata)*//* deklarirame predvaritelno funkciite, za da mojem da gi izpolzvamev glavnata funkciq( main() ) i sledovatelno da opishem deistviqta im sled main() */void menu();void list_books(int param, int index);bool add_book();bool add_new_book(string f_name, string l_name, string b_name, unsigned long int isbn);int search_a_book();int search_book();int check_lib_size();int check_isbn(unsigned long int isbn);int main(){		/* definirame si promenliva, koqto da priema chislo za opciite ot menuto*/	short int choice;		/* glavno menu, izpolzvame do...while(); za da se podsigurim, che pone vendyj		shte se izvede menuto i shte poiska da izberem nqkakva opciq */	do {		/* izvejdame menuto na ekrana*/		menu();			/* kazvame na potrebitelq da vyvede chislo, koeto otgovarq v menuto*/		cout << "Select an option from the menu: ";				/*vyvejdame chislo*/		cin >> choice;			/* spored stoinostta na choice izbirame koq funkciq da izpolzvame			sledovatelno kakvo deistvie iskame da predpriemem */		switch(choice)		{			/* proverqvame dali ima nqkakvi zapisi v strukturata i izvejdame spisyka*/			case 1:	(check_lib_size() > 0) ? list_books(0, 0) : list_books(2, 0); break;						/* izkarvame na ekrana poleta za dobavqne na novi knigi v spisyka*/			case 2: (add_book()) ? cout << "nBook has been added!nnn" : cout << "nBook has not been added!nnn"; break;						/* izkarvame na ekrana pole, chrez koeto mojem da tyrsim kniga*/			case 3: search_book(); break;		}	}while(choice < 4); /* ako vyvedem 4 ili po-golqmo ot 4 izlizame ot programata*/}/* Sazdavame menu ot tip void, poneje ne iskame da vrashtame	 stoinost, a samo da izvejdame obiknoven tekst */void menu(){	cout << "Menu " << "n";	cout << "----------------------" << endl;	cout << "1. List books        |" << endl;	cout << "2. Add new book      |" << endl;	cout << "3. Search for book   |" << endl;	cout << "4. Exit              |" << endl;	cout << "----------------------" << endl;}/* syzdavame spisyk s knigite zapisani v registyra na bibliotekata	kato otnovo e ot tip void poneje izvejdame chist tekst, a ne stoinost ot return		param = 0 - pokazvame celiq spisyk s knigi	param = 1 - pokazvame samo konkretna kniga, spored tyrseneto	param = 2 - pokazvame, che nqma knigi*/void list_books(int param, int index){	if(param == 0){		int i = 0;		cout << "nnBook listn";		cout << "-----------------------------------" << endl;		do{			cout << "Author: " << books[i].f_name << " " << books[i].l_name << endl;			cout << "Book name: " << books[i].b_name << endl;			cout << "ISBN: " << books[i].isbn << endl;			cout << "-----------------------------------" << endl;				i++;		}while(books[i].isbn != 0);		cout << "nnn";	}	else if (param == 1 && index > -1){		cout << "nnBookn";		cout << "-----------------------------------" << endl;		cout << "Author: " << books[index].f_name << " " << books[index].l_name << endl;		cout << "Book name: " << books[index].b_name << endl;		cout << "ISBN: " << books[index].isbn << endl;		cout << "-----------------------------------" << endl;		cout << "nnn";	}	else{		cout << "nnBook listn";		cout << "----------------------------------" << endl;		cout << "There is no any books in library! |" << endl;		cout << "----------------------------------";		cout << "nnn";		}}/* pomoshtna funckiq, koqto vsyshtnost dobavq zapisa v masiva */bool add_new_book(string f_name, string l_name, string b_name, unsigned long int isbn){	/* vzimame goleminata na masiva i posredstvom stoinostta opredelqme		 na koe poredno mqsto v masiva da zapishem noviq element */	int size = check_lib_size();		/*prisvoqvane na stoinostite kym masiva na strukturata*/	books[size].f_name = f_name;	books[size].l_name = l_name;	books[size].b_name = b_name;	books[size].isbn = isbn;		/*vryshtame istina za dobaven zapis*/	return true;}/* dobavqne na kniga v bibliotekata(registrirane) */bool add_book(){		/* deklarirame promenlivite */	string f_name, l_name, b_name;	unsigned long int isbn;		do{		cout << "nnAdding a book" << "nn";		cout << "Author first name: ";		cin >> f_name;		cout << "Author family name: ";		cin >> l_name;		cout << "Book name: ";		cin >> b_name;		cout << "ISBN: ";		cin >> isbn;				/*pravim proverka za korektnost na ISBN i dali e unikalen			ako e unikalen dobavqme v masiva, ako li ne vyrtim			dokato napishem unikalen za knigata ISBN*/		if(isbn != 0 && check_isbn(isbn) == 0)			return add_new_book(f_name, l_name, b_name, isbn);				}while(check_isbn(isbn) == 1);	}/* tyrsene na element k v masiva na strukturata library books 	poneje tyrsim po ISBN, k ni e ot tip integer */int search_a_book(int k){	int i = 0;		/* vyrtim cikyl dokato k syvpadne s nqkoi ISBN vpisan v masiva 		pri syvpadenie, cikyla spira i vzimame poslednata stoinost na i */	while((books[i].isbn != k) && i < N_BOOKS)					i++;			/* proverqvame indexa "i" s tyrseniq element "k" */	if(books[i].isbn == k)		return i; /* ako syvpadne vryshtame indexa */			return -1; /* ako ne syvpadne vryshtame -1(priema se kato false v sluchaq) */}/* display funkciqta za tyrsene */int search_book() {		/*deklarirame si promenliva */	unsigned long int isbn;		/*pozvolqvame tyrseneto na knigi da stava, samo ako ima nqkakvi zapisi v masiva */	if(check_lib_size() > 0){		/*vyrtim cikyl dokato search_a_book(isbn) ne vyrne validen ISBN */		do {			cout << "nnSearching for bookn";			cout << "Search by ISBN: ";			cin >> isbn;				if(search_a_book(isbn) > -1)				/* ako vyrne validen ISBN, izkarvame knigata, 					kato podavame param = 1 i indexa na masiva 					na koito se namira knigata */				list_books(1, search_a_book(isbn));			else				/*vseki pyt pri nevaliden ISBN izpisvame tozi tekst */				cout << "nInvalid ISBN number!nnn";		}while(search_a_book(isbn) == -1);	}}/* proverqvame goleminata na masiva na strukturata */int check_lib_size(){	int i = 0;		/* vyrtim cikyla dokato ISBN e razlichen ot 0(dokato ima korektni ISBN-i) */	while(books[i].isbn != 0){		i++;		}		/*vryshtame broq korektni ISBN-i */	return i;}/* proverqvame za veche syshtestvuvashti ISBN-i */int check_isbn(unsigned long int isbn){	int i = 0;		while((books[i].isbn != isbn) && (i < N_BOOKS))		i++;				if(books[i].isbn == isbn)		return 1;				return 0;	}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте! Имам нужда от малко помощ по един код. Гледах го, чудих му се, но така и не разбрах на какъв принцип работи и с каква цел е написан. Факт, че Borland-а откри 25 грешки ме навява на мисълта, че нещо не е както трябва . Кода ми е изпратен от приятел, който утре е на изпит, не знае за какво е програмата (написали са му я колеги от университета) и ме помоли да намеря начин да се оправи и да заработи. ПОМОЩ  :P

Този пост ме разби тотално. :) :) :)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

Здравейте! Имам нужда от малко помощ по един код. Гледах го, чудих му се, но така и не разбрах на какъв принцип работи и с каква цел е написан. Факт, че Borland-а откри 25 грешки ме навява на мисълта, че нещо не е както трябва . Кода ми е изпратен от приятел, който утре е на изпит, не знае за какво е програмата (написали са му я колеги от университета) и ме помоли да намеря начин да се оправи и да заработи. ПОМОЩ  :ph34r:

#include <iostream.h>  #include <string.h> /* izvikvame string.h, za da mojem da izpolzvame nizovi promenlivi*/.../* Sazdavame menu ot tip void ... //Е те това вече изкърти - аз не знам как се създава меню от тип void ! Метод - да, ама чак меню ...*/.../* dobavqne na kniga v bibliotekata(registrirane) */bool add_book(){		/* deklarirame promenlivite */	string f_name, l_name, b_name;	unsigned long int isbn;		do{		cout << "nnAdding a book" << "nn";		cout << "Author first name: ";		cin >> f_name;		cout << "Author family name: ";		cin >> l_name;		cout << "Book name: ";		cin >> b_name;		cout << "ISBN: ";		cin >> isbn;				/*pravim proverka za korektnost na ISBN i dali e unikalen			ako e unikalen dobavqme v masiva, ako li ne vyrtim			dokato napishem unikalen za knigata ISBN*/		if(isbn != 0 && check_isbn(isbn) == 0)			return add_new_book(f_name, l_name, b_name, isbn);				}while(check_isbn(isbn) == 1);	//Компилатора каза и отсече: "Братко, те тука що не връщаме bool стойност - все пак има път на изпълнение, който може да и да не изпълни if-а в цикъла"}.../* display funkciqta za tyrsene */int search_book() {		/*deklarirame si promenliva */	unsigned long int isbn;		/*pozvolqvame tyrseneto na knigi da stava, samo ako ima nqkakvi zapisi v masiva */	if(check_lib_size() > 0){		/*vyrtim cikyl dokato search_a_book(isbn) ne vyrne validen ISBN */		do {			cout << "nnSearching for bookn";			cout << "Search by ISBN: ";			cin >> isbn;				if(search_a_book(isbn) > -1)				/* ako vyrne validen ISBN, izkarvame knigata, 					kato podavame param = 1 i indexa na masiva 					na koito se namira knigata */				list_books(1, search_a_book(isbn));			else				/*vseki pyt pri nevaliden ISBN izpisvame tozi tekst */				cout << "nInvalid ISBN number!nnn";		}while(search_a_book(isbn) == -1);	}       ///Те тука няма ли да върнем int или нещо поне, което да се cast-не до int ?!}

 

Оставяйки настрана култовото заглавие на темата, принципа на помощ е по-скоро да подпомогнем авторски код, а не 

 

 

изпратен от приятел, който утре е на изпит, не знае за какво е програмата (написали са му я колеги от университета)

Дал съм коментари по кода на местата с промените, където съм направил, за да го накарам да тръгнем локално на машината ми.

 

P.S. Ако приятелят Ви мине изпита, дано да отдели време да научи що прави този код - все пак идеята и нашата помощ е да се научи човек, а не да решаваме нечии задачи и да изкарваме нечии оценки. Код лично аз няма да поствам по проблема - теоретично би трябвало и с тази помощ да се справите.

 

P.P.S. Понеже ползвам VS2012, импортите трябваше да ги променя при мен. Не давам гаранция, че при вас там няма проблем ... 

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.