رفتن به مطلب

پروژه دفترچه تلفن در C++


spow

ارسال های توصیه شده

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

 

شرح قابلیت ها:

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=========================*/

  • Like 2
لینک به دیدگاه
×
×
  • اضافه کردن...