0

پروژه دانشجویی رایگان C++: دفترچه تلفن

 
mehdigerdali
mehdigerdali
کاربر طلایی1
تاریخ عضویت : خرداد 1390 
تعداد پست ها : 5587
محل سکونت : خوزستان

پروژه دانشجویی رایگان C++: دفترچه تلفن

خلاصه: این پروژه یک دفترچه تلفن با امکان ثبت و جستجو ، ویرایش ، مرتب سازی و ذخیره اطلاعات در فایل می باشد.

شرح قابلیت ها:
1- امکان افزودن شماره جدید
2- امکان جستجو بر اساس نام
3- امکان جستجو بر اساس شماره
4- مرتب سازی بر اساس نام یا نام خانوادگی
5- نمایش کل اطلاعات دفترچه تلفن
6- ذخیره سازی اطلاعات در فایل


#include <iostream.h>
#include <stdlib.h>
#include <cstring.h>
#include <iomanip.h>
#include <conio.h>
#include <fstream.h>



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 Delete_current ();
void Delete_all();
void Tel_or_name( int );
void Read_from_file();
void Write_to_file();

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;
        clrscr();
        Select ( choice );
        
    }while ( choice != EXIT );
    
    Write_to_file();

    cout <<"Thank you" << 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;
        getch();
        break;



    case EXIT :
        return;

    

    default :
        cout <<"Select again :" << endl;
    }
    return;
}
/*=================Add_new=====================*/
void Add_new()
{
    Phone* temp = new Phone;
    Phone* temp2 = Start_ptr;
    
    clrscr();
    
    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;
        getch();
        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;
    getch();
    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;
        }
    }
    getch();
    
}
/*==============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;
        getch();
        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;
        getch();
        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;
}

/*==============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;
        getch();
        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;
    getch();
    return;
}
/*====================Menu1=======================*/
void Menu1()
{
    clrscr();
        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"
            <<"\n9.  Exit"
            <<"\n\nYour choice : ";
}

/*====================Menu2=======================*/
void Menu2()
{
    cout << "\n1.  Find next"
        <<"\n2.  Delete current person"
        <<"\n3.  Edit current person"
        <<"\n4.  continue" << endl
        <<"\nYour choice : ";
}


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;

    clrscr();
}
/*====================End=========================*/

***به بهشت نمی روم اگر مــــــادرم آنجا نباشد***

آنگاه که تنها شدی و در جست جوی یک تکیه گاه مطمئن هستی ، بر من توکل نما . نمل/79

 

دوشنبه 20 تیر 1390  6:57 PM
تشکرات از این پست
ahmad_99 amir11014 hoseinjames
cryingsphere
cryingsphere
کاربر نقره ای
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 375
محل سکونت : خراسان رضوی

پاسخ به:پروژه دانشجویی رایگان C++: دفترچه تلفن

ممنون. استفاده کردیم. مفید بود

پنج شنبه 23 تیر 1390  1:05 PM
تشکرات از این پست
ahmad_99
ahmad_99
کاربر تازه وارد
تاریخ عضویت : فروردین 1390 
تعداد پست ها : 7
محل سکونت : اصفهان

پاسخ به:پروژه دانشجویی رایگان C++: دفترچه تلفن

ممنون از اینکه اینو در اختیار ما گذاشتی

بازم ممنون

شنبه 1 مرداد 1390  12:49 PM
تشکرات از این پست
rasoolbaba
rasoolbaba
کاربر تازه وارد
تاریخ عضویت : مرداد 1390 
تعداد پست ها : 6
محل سکونت : آذربايجان شرقي

پاسخ به:پروژه دانشجویی رایگان C++: دفترچه تلفن

ای ول عالی بود دمت گرم پاسخ به:پروژه دانشجویی رایگان C++: دفترچه تلفن

ياشاسين آذربايجان

سه شنبه 22 شهریور 1390  9:06 PM
تشکرات از این پست
meysam_3
meysam_3
کاربر برنزی
تاریخ عضویت : شهریور 1389 
تعداد پست ها : 49

پاسخ به:پروژه دانشجویی رایگان C++: دفترچه تلفن

به نام خدا / ممنون خسته نباشید / اگه بشه فایل اگزشم بذارید خیلی خوب میشه

لبیک یا خامنه ای

یک شنبه 18 دی 1390  10:31 PM
تشکرات از این پست
دسترسی سریع به انجمن ها