spow 44197 اشتراک گذاری ارسال شده در 11 مرداد، ۱۳۹۰ این پروژه یک دفترچه تلفن با امکان ثبت و جستجو ، ویرایش ، مرتب سازی و ذخیره اطلاعات در فایل می باشد. شرح قابلیت ها: 1- امکان افزودن شماره جدید 2- امکان جستجو بر اساس نام 3- امکان جستجو بر اساس شماره 4- مرتب سازی بر اساس نام یا نام خانوادگی 5- نمایش کل اطلاعات دفترچه تلفن 6- ذخیره سازی اطلاعات در فایل #include #include #include #include #include #include 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 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 getch(); break; case EXIT : return; default : cout } return; } /*=================Add_new=====================*/ void Add_new() { Phone* temp = new Phone; Phone* temp2 = Start_ptr; clrscr(); cout cin >> temp->name; cout cin >> temp->family; cout 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 getch(); return; } else { cout do { strcpy(show, ""); strcat(show, temp->family); strcat(show, ", "); strcat(show, temp->name); show[0] = toupper(show[0]); cout tel temp = temp->next; }while(temp != NULL); } cout getch(); return; } /*=================Search=======================*/ Phone* Search( char* temp_search , int choice ) { /* If list is empty */ if ( Start_ptr == NULL ) { cout 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 name family tel return current; } /* If record !found */ else { cout 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 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 getch(); return; } while( temp != NULL ) { outFile name family tel; if( temp->next != NULL ) { outFile } temp = temp->next; } outFile.close(); cout } /*===============Read_from_file=============================*/ void Read_from_file() { ifstream inputFile("Data.dat" , ios::in ); if ( !inputFile ) { cout 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 } /*==============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 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 { 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 { for ( int j = 0; 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 do { strcpy(show, ""); strcat(show, sort[index]->family); strcat(show, ", "); strcat(show, sort[index]->name); show[0] = toupper(show[0]); cout tel }while(sort[++index] != NULL); cout getch(); return; } /*====================Menu1=======================*/ void Menu1() { clrscr(); cout } /*====================Menu2=======================*/ void Menu2() { cout } void Edit_current() { strcpy(current->name,""); strcpy(current->family,""); cout cin >> current->name; cout cin >> current->family; cout cin >> current->tel; clrscr(); } /*====================End=========================*/ 2 لینک به دیدگاه
ارسال های توصیه شده