آژانس هواپیماییexchanging
dakhlestan

برنامه نویس حرفه ای با ++c

شروع موضوع توسط oranoos_mta ‏31 می 2007 در انجمن خانواده C++ , C

  1. oranoos_mta

    oranoos_mta Registered User

    تاریخ عضویت:
    ‏22 آپریل 2007
    نوشته ها:
    1,144
    تشکر شده:
    33
    میتونید مشکله این برنامه رو به من بگید
    کد:
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <iomanip>
    #include <conio.h>
    #include <fstream>
    
    using namespace std;
    
    struct Phone
    {
    	char name[15];
    	char family[15];
    	char tel[12];
    	
    	Phone *next;
    };
    
    Phone* Start_ptr = NULL;
    Phone* current = NULL;
    
    void Select ( int ); // which choice user selected;
    void Add_new();
    void Print_all();
    void Menu1();
    void Menu2();
    void Edit_current();
    void Uninstall();
    void Delete_current ();
    void Delete_all();
    void Tel_or_name( int );
    void Read_from_file();
    void Write_to_file();
    void Save_as_csv();
    void Sort_name( int );
    void Add_tail_from_file( Phone* );
    
    Phone* Search( char* , int);
    
    
    enum MENU{ ADD=1, SEARCH_NAME, SEARCH_NO, SORT_NAME, SORT_FAMIL, SHOW_ALL, SAVE, EXPORT_CSV, EXIT, UNINSTALL };
    
    int main()
    {
    	Read_from_file();
    	
    	int choice;
    	
    	do
    	{
    		Menu1();	
    		cin >> choice;
    		system("cls");
    		Select ( choice );
    		
    	}while ( choice != EXIT );
    	
    	Write_to_file();
    	
    	cout <<"Thank you\nSend your comment to [email protected]" << endl;
    	Delete_all();
    	
    	return 0;
    }
    
    /*===================Select=======================*/
    void Select( int choose )
    {	
    	switch ( choose )
    	{
    	case ADD :
    		Add_new();      break;
    		
    	case SEARCH_NAME :
    		Tel_or_name(1); break;
    		
    	case SEARCH_NO :
    		Tel_or_name(2); break;
    		
    	case SORT_NAME :
    		Sort_name(1);   break;
    		
    	case SORT_FAMIL :
    		Sort_name(2);   break;
    		
    	case SHOW_ALL :
    		Print_all();    break;
    
    	case SAVE :
    		Write_to_file();
    		cout <<"We will save your data automatically when your work finished" << endl;
    		system("pause");
    		break;
    		
    	case EXPORT_CSV :
    		Save_as_csv();	break;
    
    	case EXIT :
    		return;
    
    	case UNINSTALL :
    		Uninstall();    break;
    
    	default :
    		cout <<"Select again :" << endl;
    	}
    	return;
    }
    /*=================Add_new=====================*/
    void Add_new()
    {
    	Phone* temp = new Phone;
    	Phone* temp2 = Start_ptr;
    	
    	system("cls");
    	
    	cout << "Enter the name : ";
    	cin >> temp->name;
    	cout << "Family : ";
    	cin >> temp->family;
    	cout << "Phone number : ";
    	cin >> temp->tel;
    	
    	temp->next = NULL;
    	
    	if ( Start_ptr == NULL )
    	{
    		Start_ptr = temp;		
    	}
    	
    	else
    	{
    		while( temp2->next != NULL )
    		{
    			temp2 = temp2->next;
    		}
    		temp2->next = temp;
    	}
    	
    	return;
    }
    /*==============Print_all=======================*/
    void Print_all()
    {
    	Phone* temp = Start_ptr;
    	char show[35];
    	
    	if ( Start_ptr == NULL )
    	{
    		cout <<"The list is empty!" << endl;
    		system("pause");
    		return;
    	}
    	else
    	{
    		cout<<"\nName                                Phone       "
    			<<"\n----------------------------------- ------------" << endl;
    		do
    		{
    			strcpy(show, "");
    			strcat(show, temp->family);
    			strcat(show, ", ");
    			strcat(show, temp->name);
    			show[0] = toupper(show[0]);
    			cout << setiosflags( ios::left )
    				<< setw(36) << show << setw(12) <<temp->tel <<endl;
    			
    			temp = temp->next;
    		}while(temp != NULL);
    	}
    	cout << endl;
    	system("pause"); 
    	return;
    }
    
    /*=================Search=======================*/
    Phone* Search( char* temp_search , int choice )
    {
    	/* If list is empty */
    	if ( Start_ptr == NULL )
    	{
    		cout <<"List is empty!" << endl;
    		return NULL;
    	}
    
    	/* Search by name */
    	if ( choice == 1 )
    	{
    		while( current != NULL && strcmp( current->name, temp_search ) != 0 )
    		{
    			current = current->next;
    		}
    	}
    
    	/* Search by tel */
    	if ( choice == 2 )
    	{
    		while( current != NULL && strcmp( current->tel, temp_search ) != 0 )
    		{
    			current = current->next;
    		}
    		
    	}
    
    	/* If record found */
    	if ( current != NULL )
    	{
    		cout << "Record found" << endl
    			<< current->name << " " << current->family << " : " << current->tel << endl;
    		
    		return current;
    	}
    
    	/* If record !found */
    	else
    	{
    		cout <<"Record NOT found" << endl;
    		current = Start_ptr; //move back the current pointer to fisrt node
    		return NULL;
    	}
    }
    
    /*====================Delete_current====================*/
    void Delete_current()
    {
    	Phone* temp = NULL;
    	Phone* prev = NULL;
    
    	/* If it`s the fisrt node */
    	if ( current == Start_ptr ) 
    	{
    		temp = Start_ptr;
    		Start_ptr = Start_ptr->next; //If we have only 1 node, start_ptr will point to NULL
    		delete temp;
    		temp = NULL;
    	}
    
    	/* If it`s in the middle of list or the last node */
    	else	
    	{
    		prev = Start_ptr;
    		while( prev->next != current )
    		{
    			prev = prev->next;
    		}
    		prev->next = current->next;// If it`s the last node prev will point to NULL
    		delete current;
    		current = Start_ptr;
    	}			
    }
    
    /*=================Delete_all=================*/
    void Delete_all()
    {
    	if ( Start_ptr == NULL )
    	{
    		return; // we have no memory allocated
    	}
    
    	Phone* temp = Start_ptr;
    	while( Start_ptr != NULL )
    	{
    		temp = Start_ptr;
    		Start_ptr = Start_ptr->next;
    		delete temp;
    	}
    }
    
    /*=================Tel_or_name================*/
    void Tel_or_name(int choose)
    {
    	Phone* temp_del = NULL;
    	char temp_search[15];
    	int choice;
    	
    	current = Start_ptr;
    		
    	cout <<"Enter the "<<(choose == 1 ? "name" : "tel") <<" to search : ";
    	cin >> temp_search;
    		
    	temp_del = Search( temp_search, choose );
    		
    	while ( temp_del != NULL )
    	{
    		Menu2();
    		cin >> choice;
    			
    		switch( choice )
    		{
    		case 1: current = current->next; temp_del = Search( temp_search, choose ); break;
    		case 2: Delete_current(); break;
    		case 3: Edit_current();   break;
    		case 4: return;
    		}
    	}
    	system("pause");
    	
    }
    /*==============Write_to_file=============================*/
    void Write_to_file()
    {
    	Phone* temp = Start_ptr;
    	ofstream outFile("Data.dat" , ios::out );
    	
    	if( !outFile )
    	{
    		cerr << "Some error ocured during writing to file." << endl;
    		system("pause");
    		return;
    	}
    	
    	while( temp != NULL )
    	{
    		outFile << temp->name << " " << temp->family << " " << temp->tel;
    		if( temp->next != NULL )
    		{
    			outFile << endl;
    		}
    		temp = temp->next;
    		
    	}
    
    	outFile.close();
    
    	cout <<"Data saved successfully." << endl;
    }
    /*===============Read_from_file=============================*/
    void Read_from_file()
    {
    	ifstream inputFile("Data.dat" , ios::in );
    	
    	if ( !inputFile )
    	{
    		cout << "Data couldn`t be loaded." << endl;
    		system("pause");
    		return;
    	}
    
    	do
    	{
    		Phone* temp = new Phone;
    		
    		inputFile >> temp->name;
    		inputFile >> temp->family;
    		inputFile >> temp->tel;
    		temp->next = NULL;
    		
    		Add_tail_from_file( temp );
    
    		//Where should I place delete temp?????	
    	}while( !inputFile.eof() );
    
    	cout <<"Data loaded successfully" << endl;
    }
    /*================Save_as_csv===========================*/
    void Save_as_csv()
    {
    	ofstream outputFile;
    	cout << "Enter the path you want to save your file.\nExample : c:\\\\program\\\\yourfile.csv" << endl;
    	char path[100]="";
    	cin>>path;
    	
    	outputFile.open( path, ios::out );
    	
    	if( !outputFile )
    	{
    		cerr << "Some error ocured during writing to file." << endl;
    		exit(1);
    	}
    	
    	outputFile << "Name" << ';' << "Family" << ';' <<"Tel" <<endl;
    	
    	Phone* temp = Start_ptr;
    	
    	while( temp != NULL )
    	{
    		outputFile << temp->name << ';' << temp->family << ';' << temp->tel << endl;
    		temp = temp->next;
    	}
    	outputFile.close();
    	cout << "Data saved successfully at " << path << endl;
    	system("pause");
    	
    }
    /*==============Add_tail_from_file=================*/
    void Add_tail_from_file( Phone* temp )
    {
    	
    	if ( Start_ptr == NULL )
    	{
    		Start_ptr = temp;	
    	}
    	else
    	{
    		Phone* temp2 = Start_ptr;
    		while ( temp2->next != NULL )
    		{
    			temp2 = temp2->next;
    		}
    		temp2->next = temp;
    	}
    }
    
    /*================Sort_name=================================*/
    
    void Sort_name(int choice)
    {
    	/* If list is empty */
    	if ( Start_ptr == NULL )
    	{
    		cout <<"The list is empty!" << endl;
    		system("pause");
    		return;
    	}
    	
    	/* Determine the size of list */
    	int counter = 1;
    	Phone* temp = Start_ptr;
    	
    	while( temp->next != NULL )
    	{
    		temp = temp->next;
    		counter++;
    	}
    	
    	/* an Array of pointers to struct Phone. I couldn`t do this part by dynamic memory
    	allocation i.e Phone* sort = new Phone[counter] 
    	or some thing like that. if you could help, please send me your suggestion .*/
    	Phone* sort[1000];
    	
    	sort[0] = Start_ptr;
    	for ( int cnt = 1; cnt < counter; cnt++ )
    	{
    		sort[cnt] = sort[cnt-1]->next;
    	}
    	sort[counter] = NULL;
    	
    	/* bubble sort */
    	/* This part could be better too.for example if user enter capital 'F' it comes
    	   before 'a'. I had to change all letter to lower case but has no time. */
    	
    	for ( int i = 0; i < counter; i++ )
    	{
    		for ( int j = 0; j < counter - i - 1; j++)
    		{
    			/* Sort by name */
    			if ( choice == 1 )
    			{
    				if ( strcmp(sort[j]->name, sort[j+1]->name) > 0 )
    				{
    					Phone* temp2 = sort[j];
    					sort[j] = sort[j+1];
    					sort[j+1] = temp2;
    				}
    			}
    
    			/* Sort by family */
    			else
    			{
    				if ( strcmp(sort[j]->family, sort[j+1]->family) > 0 )
    				{
    					Phone* temp2 = sort[j];
    					sort[j] = sort[j+1];
    					sort[j+1] = temp2;
    				}
    			}
    		}
    	}
    	
    	/* Showing sorted list */	
    	char show[35];
    	int index= 0;
    	
    	cout<<"\nName                                Phone       "
    		<<"\n----------------------------------- ------------" << endl;
    	do
    	{
    		strcpy(show, "");
    		strcat(show, sort[index]->family);
    		strcat(show, ", ");
    		strcat(show, sort[index]->name);
    		show[0] = toupper(show[0]);
    		cout << setiosflags( ios::left )
    			<< setw(36) << show << setw(12) <<sort[index]->tel <<endl;
    		
    	}while(sort[++index] != NULL);
    	
    	cout << endl;
    	system("pause");
    	return;
    }
    /*====================Menu1=======================*/
    void Menu1()
    {
    	system("cls");
    		cout << "1.  Add new phone"
    			<<"\n2.  Search for name"
    			<<"\n3.  Search for number"
    			<<"\n4.  Sort by name"
    			<<"\n5.  Sort by family"
    			<<"\n6.  Show all list"
    			<<"\n7.  Save data"
    			<<"\n8.  Export as CSV ( Comma Separated Values )"
    			<<"\n9.  Exit"
    			<<"\n10. Uninstall"
    			<<"\n\nYour choice : ";
    }
    
    /*====================Menu2=======================*/
    void Menu2()
    {
    	cout << "\n1.  Find next"
    		<<"\n2.  Delete current person"
    		<<"\n3.  Edit current person"
    		<<"\n4.  continue" << endl
    		<<"\nYour choice : ";
    }
    
    /*====================Uninstall===================*/
    void Uninstall()
    {
    	char answer = 'n';
    	cout <<"Are you sure you want to delete all files include your saved data ? ( y or n)" << endl;
    
    	cin >> answer;
    
    	if ( toupper( answer ) == 'Y' )
    	{
    
    	system("cls");
    	cout << "Uninstalling...\n";
    	remove("Phonebook.cpp");
    	remove("Phonebook.plg");
    	remove("Phonebook.dsp");
    	remove("Phonebook.ncb");
    	remove("Phonebook.exe");
    	remove("Data.dat");
    	cout <<"Some files couldn`t be deleted. remove them manually." << endl;
    	system("pause");
    	Delete_all();
    	exit(1);
    	}
    }
    
    /*====================Edit_current================*/
    void Edit_current()
    {
    	strcpy(current->name,"");
    	strcpy(current->family,"");
    
    	cout << "Enter the name : ";
    	cin >> current->name;
    	cout << "Family : ";
    	cin >> current->family;
    	cout << "Phone number : ";
    	cin >> current->tel;
    
    	system("cls");
    }
    /*====================End=========================*/
    
    
     
  2. m3hrz4d

    m3hrz4d Registered User

    تاریخ عضویت:
    ‏21 سپتامبر 2005
    نوشته ها:
    620
    تشکر شده:
    1
    محل سکونت:
    اصفهان
    کامپایل که میشه ظاهر کار هم میکنه ولی همه ی آپشن هاش رو تست نکردم.بهتر بود میگفتی مشکلت چیه؟!
     
  3. oranoos_mta

    oranoos_mta Registered User

    تاریخ عضویت:
    ‏22 آپریل 2007
    نوشته ها:
    1,144
    تشکر شده:
    33
    تو کامپایلر من 4 تا ارور میده
     
  4. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
  5. oranoos_mta

    oranoos_mta Registered User

    تاریخ عضویت:
    ‏22 آپریل 2007
    نوشته ها:
    1,144
    تشکر شده:
    33
    turbo 4.5
     
  6. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    خب مشکلتون همین کامپایلر هست یکی قدیمی شده و این برنامه با استاندارد های جدید نوشته شده بهتر کامپایلرتون رو به روز کنید