drstreet
تازه وارد
ارسالها: 6
موضوعها: 1
تاریخ عضویت: اسفند ۱۳۸۶
تشکرها : 0
( 3 تشکر در 3 ارسال )
|
کمک در مورد پروژه های زیر
دوستان من توضیح خط به خط این پروژه های زیرو میخوام برای استادم هیچی زبان سی بلد نیستم مرسی که درکم میکنید بچه ها 20 نمره داره...
این برنامه ی منو
کد: /*
dynamic menu with C++ version 1.01 ,updated on July - 9 -2002
This program must be run under BC v3.0 or higher version
*/
#include<conio.h>
#include<dos.h>
#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define FAIL 0
#define ENT 0x000d
#define ESC 0x001b
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
/*
This menu system designed for CGA/EGA/VGA adapter,monochrom is not
supported
*/
class base{
public:
int StrLen(char*);
void StrCopy(char*,char*);
int StrCmp(char*,char*);
};
//----------------------------------------------------------------------
int base::StrLen(char *s)
{
int i;
i=0;
while(*s++)i++;
return i;
}
//---------------------------------------------------------------------
void base::StrCopy(char *dest,char *src)
{
while(*src)*dest++=*src++;
*dest=*src;
}
//---------------------------------------------------------------------
int base::StrCmp(char *dest,char *src)
{
do{
if(*src++!=*dest++)return TRUE;
}while(*src&&*dest);
return FALSE;
}
//*********************************************************************
class screen:public base{
private:
unsigned char TextAttribute,current_x,current_y;
public:
unsigned int last_pressed_key;
screen(void);
unsigned int GetKey(void);
void SetColor(char,char);
void SetTColor(char);
void SetBColor(char);
void SetVideoMode(char);
void CLS(void);
int ReadChar(int,int);
void PutChar(int,int,char);
void PutString(int,int,char*);
void Locate(char,char);
void SetCursor(char,char);
void HideCursor(void);
void ShowCursor(void);
void Fill(char,char,char,char,char);
void Box(int,int,int,int,char*);
void SaveScreen(int,int,int,int,int*);
void LoadScreen(int,int,int,int,int*);
};
//--------------------------------------------------------------
screen::screen(void)
{
TextAttribute=14;
current_x=0;
current_y=0;
}
//--------------------------------------------------------------
unsigned int screen::GetKey(void)
{
unsigned int key;
if(!(key=getch()))key=getch()<<8;
last_pressed_key=key;
return key;
}
//--------------------------------------------------------------
void screen::SetColor(char tcolor,char bcolor)
{
TextAttribute=bcolor<<4|tcolor;
}
//--------------------------------------------------------------
void screen::SetTColor(char text)
{
TextAttribute=(TextAttribute&0xf0)|text;
}
//--------------------------------------------------------------
void screen::SetBColor(char text)
{
TextAttribute=(TextAttribute&0x0f)|text<<4;
}
//--------------------------------------------------------------
void screen::SetVideoMode(char mode)
{
asm{
mov ah,0
mov al,mode
int 0x10
}
}
//--------------------------------------------------------------
void screen::CLS(void)
{
SetVideoMode(3);
}
//--------------------------------------------------------------
int screen::ReadChar(int x, int y)
{
int attrib;
asm{
mov ax,0xb800
mov es,ax
mov ax,y
mov bl,160
mul bl
mov bx,x
shl bx,1
add bx,ax
mov ax,es:[bx]
mov attrib,ax
}
return attrib;
}
//--------------------------------------------------------------
void WriteChar(int x,int y ,int char_attrib)
{
asm{
mov ax,0xb800
mov es,ax
mov ax,y
mov bl,160
mul bl
mov bx,x
shl bx,1
add bx,ax
mov cx,char_attrib
mov es:[bx],cx
}
}
//--------------------------------------------------------------
void screen::Locate(char x,char y)
{
char xx,yy;
asm{
mov ah,2
mov bh,0
mov dl,x
mov dh,y
int 0x10
mov xx,dl
mov yy,dh
}
current_x=xx;
current_y=yy;
}
//--------------------------------------------------------------
void screen::PutChar(int x,int y,char chr)
{
WriteChar(x,y,(unsigned char)chr|(TextAttribute<<8));
}
//--------------------------------------------------------------
void screen::PutString(int x,int y,char *s)
{
while(*s)PutChar(x++,y,*s++);
Locate(x,y);
}
//--------------------------------------------------------------
void screen::SetCursor(char start,char end)
{
asm{
mov ah,1
mov ch,start
mov cl,end
int 0x10
}
}
//--------------------------------------------------------------
void screen::HideCursor(void)
{
SetCursor(1,0);
}
//--------------------------------------------------------------
void screen::ShowCursor(void)
{
SetCursor(4,5);
}
//--------------------------------------------------------------
void screen::Fill(char x1,char y1,char width,char height,char chr)
{
char i,j,x2,y2;
x2=x1+width-1;
y2=y1+height-1;
for(j=y1;j<=y2;j++)
for(i=x1;i<=x2;i++)
PutChar(i,j,chr);
}
//--------------------------------------------------------------
void screen::Box(int x1,int y1,int width,int height,char *pattern)
{
int i,j,x2,y2;
x2=x1+width-1;
y2=y1+height-1;
for(i=x1;i<x2;i++)
{
PutChar(i,y1,pattern[1]);
PutChar(i,y2,pattern[5]);
}
for(j=y1;j<y2;j++)
{
PutChar(x1,j,pattern[7]);
PutChar(x2,j,pattern[3]);
}
PutChar(x1,y1,pattern[0]);
PutChar(x2,y1,pattern[2]);
PutChar(x2,y2,pattern[4]);
PutChar(x1,y2,pattern[6]);
}
//--------------------------------------------------------------
void screen::SaveScreen(int x1,int y1,int width,int height,int *buff)
{
int i,j,x2,y2;
x2=x1+width-1;
y2=y1+height-1;
for(j=y1;j<=y2;j++)
for(i=x1;i<=x2;i++)
*buff++=ReadChar(i,j);
}
//--------------------------------------------------------------
void screen::LoadScreen(int x1,int y1,int width,int height,int *buff)
{
int i,j,x2,y2;
x2=x1+width-1;
y2=y1+height-1;
for(j=y1;j<=y2;j++)
for(i=x1;i<=x2;i++)
WriteChar(i,j,*buff++);
}
//**********************************************************************
struct bar_pad{
char *prompt;
char *popup_name;
struct bar_pad *next;
};
struct popup_pad{
char *prompt;
struct popup_pad *next;
};
struct bar_menu{
char *name;
int x,y,count,act;
struct bar_pad *pad;
struct bar_menu *next;
};
struct popup_menu{
char *name;
int x,y,count,act,max;
struct popup_pad *pad;
struct popup_menu *next;
};
class menu:public screen{
protected:
struct{
char text,background,
a_text,a_background,
b_text,b_background,
s_text,s_background;
}menu_color;
struct bar_menu *bar;
struct popup_menu *popup;
char default_border[8];
char *current_popup_name;
char *current_bar_name;
void AddBarPad(struct bar_menu*,char*,char*);
struct bar_pad* GotoBarPad(struct bar_menu*,int);
void DeleteBarPads(struct bar_menu*);
struct bar_menu* GotoBar(char*);
void AddPopupPad(struct popup_menu*,char*);
struct popup_pad *GotoPopupPad(struct popup_menu*,int);
void DeletePopupPads(struct popup_menu*);
struct popup_menu *GotoPopup(char*);
public:
menu(void);
~menu(void);
void DefineBar(char*,int,int);
void DefineBarPad(char*,char*,char*);
void DeleteBars(void);
void DefinePopup(char*,int,int);
void DefinePopupPad(char*,char*);
void DeletePopups(void);
char ActivateBar(char*);
char ActivatePopup(char*);
virtual void OnPopupPad(char*,int){};
virtual void OnBarPad(char*,int){};
virtual void OnSelectBar(char*,int){};
virtual void OnSelectPopup(char*,int){};
};
menu::menu(void)
{
bar=NULL;
popup=NULL;
current_bar_name=NULL;
current_popup_name=NULL;
menu_color.text=BLACK;
menu_color.background=LIGHTGRAY;
menu_color.a_text=WHITE;
menu_color.a_background=RED;
menu_color.b_text=BLACK;
menu_color.b_background=LIGHTGRAY;
menu_color.s_text=BLACK;
menu_color.s_background=BLACK;
default_border[0]='ع';
default_border[1]='ؤ';
default_border[2]='·';
default_border[3]='؛';
default_border[4]='¼';
default_border[5]='ح';
default_border[6]='ش';
default_border[7]='³';
}
menu::~menu(void)
{
DeleteBars();
DeletePopups();
}
void menu::AddBarPad(struct bar_menu *bm,char *prompt,char
*popup_name){
struct bar_pad *p,*tmp;
p=new bar_pad;
p->prompt=new char[StrLen(prompt)+1];
p->popup_name=new char[StrLen(popup_name)+1];
StrCopy(p->prompt,prompt);
StrCopy(p->popup_name,popup_name);
p->next=NULL;
if(bm->pad==NULL){
bm->pad=p;
bm->count=1;
}else{
tmp=bm->pad;
while(tmp->next)tmp=tmp->next;
tmp->next=p;
bm->count++;
}
}
struct bar_pad* menu::GotoBarPad(struct bar_menu *bm,int n){
struct bar_pad *p;
int i;
p=bm->pad;
for(i=1;i<n;i++)p=p->next;
return p;
}
void menu::DeleteBarPads(struct bar_menu *bm){
struct bar_pad *tmp;
while(bm->pad){
tmp=bm->pad;
bm->pad=tmp->next;
delete[] tmp->prompt;
delete[] tmp->popup_name;
delete tmp;
}
bm->count=0;
}
void menu::DefineBar(char *name,int x,int y){
struct bar_menu *p,*tmp;
p=new bar_menu;
p->name=new char[StrLen(name)+1];
StrCopy(p->name,name);
p->x=x;
p->y=y;
p->count=p->act=0;
p->pad=NULL;
p->next=NULL;
if(bar==NULL)bar=p;
else{
tmp=bar;
while(tmp->next)tmp=tmp->next;
tmp->next=p;
}
}
struct bar_menu* menu::GotoBar(char *name){
struct bar_menu *p;
p=bar;
while(p){
if(!StrCmp(p->name,name))return p;
p=p->next;
}
return NULL;
}
void menu::DefineBarPad(char *name,char *prompt,char *popup_name){
struct bar_menu *p;
p=GotoBar(name);
if(p)AddBarPad(p,prompt,popup_name);
}
void menu::DeleteBars(void){
struct bar_menu *tmp;
while(bar){
tmp=bar;
bar=tmp->next;
DeleteBarPads(tmp);
delete tmp;
}
}
void menu::AddPopupPad(struct popup_menu *pm,char *prompt){
struct popup_pad *p,*tmp;
p=new popup_pad;
p->prompt=new char[StrLen(prompt)+1];
StrCopy(p->prompt,prompt);
p->next=NULL;
if(pm->pad==NULL){
pm->pad=p;
pm->count=1;
}else{
tmp=pm->pad;
while(tmp->next)tmp=tmp->next;
tmp->next=p;
pm->count++;
}
}
void menu::DeletePopupPads(struct popup_menu *pm){
struct popup_pad *tmp;
while(pm->pad){
tmp=pm->pad;
pm->pad=tmp->next;
delete[] tmp->prompt;
delete tmp;
}
pm->count=0;
if(current_bar_name){
delete[] current_bar_name;
current_bar_name=NULL;
}
}
struct popup_pad* menu::GotoPopupPad(struct popup_menu *pm,int n){
struct popup_pad *p;
int i;
p=pm->pad;
for(i=1;i<n;i++)p=p->next;
return p;
}
void menu::DefinePopup(char *name,int x,int y){
struct popup_menu *p,*tmp;
p=new popup_menu;
p->name=new char[StrLen(name)+1];
StrCopy(p->name,name);
p->x=x;
p->y=y;
p->count=0;
p->act=1;
p->max=5;
p->pad=NULL;
p->next=NULL;
if(popup==NULL)popup=p;
else{
tmp=popup;
while(tmp->next)tmp=tmp->next;
tmp->next=p;
}
}
struct popup_menu* menu::GotoPopup(char *name){
struct popup_menu *p;
p=popup;
while(p){
if(!StrCmp(p->name,name))return p;
p=p->next;
}
return NULL;
}
void menu::DefinePopupPad(char *name,char *prompt){
struct popup_menu *p;
p=GotoPopup(name);
if(p) AddPopupPad(p,prompt);
}
void menu::DeletePopups(void){
struct popup_menu *tmp;
while(popup){
tmp=popup;
popup=tmp->next;
DeletePopupPads(tmp);
delete tmp;
}
if(current_popup_name){
delete[] current_popup_name;
current_popup_name=NULL;
}
}
char menu::ActivateBar(char *name)
{
struct bar_menu *bmenu;
struct bar_pad *bpad;
int i,l,act;
unsigned int key;
bmenu=GotoBar(name);
if(bmenu&&bmenu->count){
if(current_bar_name)delete[] current_bar_name;
current_bar_name=new char[StrLen(name+1)];
StrCopy(current_bar_name,name);
key=0;
bmenu->act=1;
SetColor(menu_color.text,menu_color.background);
Fill(0,bmenu->y,80,1,' ');
while(key!=ESC&&bmenu->count){
l=0;
for(i=1;i<=bmenu->count;i++){
bpad=GotoBarPad(bmenu,i);
SetColor(menu_color.text,menu_color.background);
PutString(bmenu->x+l,bmenu->y,bpad->prompt);
l+=StrLen(bpad->prompt);
}
l=0;
for(i=1;i<=bmenu->act;i++){
bpad=GotoBarPad(bmenu,i);
if(i<bmenu->act)l+=StrLen(bpad->prompt);
}
SetColor(menu_color.a_text,menu_color.a_background);
PutString(bmenu->x+l,bmenu->y,bpad->prompt);
OnBarPad(bmenu->name,bmenu->act);
if(ActivatePopup(bpad->popup_name)) key=last_pressed_key;
else key=GetKey();
switch(key){
case LEFT:bmenu->act--;break;
case RIGHT:bmenu->act++;break;
}
if(bmenu->act<1)bmenu->act=bmenu->count;
if(bmenu->act>bmenu->count)bmenu->act=1;
}
}else return FAIL;
return OK;
}
char menu::ActivatePopup(char *name){
struct popup_menu *pmenu;
struct popup_pad *ppad;
int i,len,act;
char rotate_flag,loop_flag;
int
i_start,i_end,border_x,border_y,border_width,border_mid_x,border_height;
int pad_x,pad_y;
int buff[80*25];
unsigned int key;
pmenu=GotoPopup(name);
if(pmenu&&pmenu->count){
if(current_popup_name)delete[] current_popup_name;
current_popup_name=new char[StrLen(name+1)];
StrCopy(current_popup_name,name);
if(pmenu->max>pmenu->count)pmenu->max=pmenu->count;
i_start=1;
i_end=pmenu->count-pmenu->max+1;
if(pmenu->act>pmenu->max){
act=pmenu->max;
i_start=pmenu->act-pmenu->max+1;
}else act=pmenu->act;
border_width=0;
for(i=1;i<=pmenu->count;i++){
ppad=GotoPopupPad(pmenu,i);
len=StrLen(ppad->prompt);
if(len>border_width)border_width=len;//detect max width
}
border_x=pmenu->x;
border_y=pmenu->y;
border_width+=2;
border_height=pmenu->max+2;
pad_x=border_x+1;
pad_y=border_y+1;
key=0;
SaveScreen(border_x,border_y,border_width+2,border_height+1,buff);
SetColor(menu_color.b_text,menu_color.b_background);
Fill(border_x,border_y,border_width,border_height,32);
Box(border_x,border_y,border_width,border_height,default_border);
SetColor(menu_color.s_text,menu_color.s_background);
SetColor(menu_color.s_text,menu_color.s_background);
Fill(border_x+border_width,border_y+1,2,border_height,32);
Fill(border_x+1,border_y+border_height,border_width,1,32);
loop_flag=TRUE;
while(loop_flag){
SetColor(menu_color.b_text,menu_color.b_background);
for(i=0;i<pmenu->max;i++){
ppad=GotoPopupPad(pmenu,i+i_start);
SetColor(menu_color.text,menu_color.background);
PutString(pad_x,pad_y+i,ppad->prompt);
len=StrLen(ppad->prompt);
Fill(pad_x+len,pad_y+i,border_width-len-2,1,' ');
}
SetColor(menu_color.b_text,menu_color.b_background);
border_mid_x=border_width/2+border_x;
PutChar(border_mid_x,border_y,default_border[1]);
PutChar(border_mid_x,border_y+border_height-1,default_border[5]);
if(i_start>1) PutChar(border_mid_x,border_y,30);
if(i_start<i_end) PutChar(border_mid_x,border_y+border_height-1,31);
SetColor(menu_color.a_text,menu_color.a_background);
ppad=GotoPopupPad(pmenu,act+i_start-1);
PutString(pmenu->x+1,pmenu->y+act,ppad->prompt);
pmenu->act=act+i_start-1;
OnPopupPad(pmenu->name,pmenu->act);
key=GetKey();
switch(key){
case UP :act--;break;
case DOWN:act++;break;
case LEFT:loop_flag=FALSE;break;
case RIGHT:loop_flag=FALSE;break;
case ESC:loop_flag=FALSE;break;
case ENT:loop_flag=FALSE;break;
}
if(act<1){
act=1;i_start--;
}
if(act>pmenu->max){
act=pmenu->max;i_start++;
}
if(i_start<1){
i_start=i_end;
act=pmenu->max;
}
if(i_start>i_end){
i_start=1;
act=1;
}
}
LoadScreen(border_x,border_y,border_width+2,border_height+1,buff);
if(key==ENT)OnSelectPopup(pmenu->name,pmenu->act);
}else return FALSE;
return OK;
}
//**************************************************************************
class menu_test:public menu{
public:
void OnPopupPad(char *popup_name,int act){
gotoxy(35,25);
printf("%15s %d",popup_name,act);
}
void OnBarPad(char *bar_name,int act){
gotoxy(20,25);
printf("%10s %d",bar_name,act);
}
void OnSelectBar(char *bar_name,int act){
gotoxy(10,19);
printf("%10s %d",bar_name, act);
}
void OnSelectPopup(char *popup_name,int act){
gotoxy(10,19);
printf("%10s %d",popup_name, act);
GetKey();
}
void run(void)
{
SetColor(1,7);
Fill(0,0,80,25,'±');
Fill(0,24,80,25,' ');
HideCursor();
DefineBar("main",2,0);
DefineBarPad("main"," File ","file");
DefineBarPad("main"," Edit ","edit");
DefineBarPad("main"," Search ","search");
DefineBarPad("main"," Run ","run");
DefineBarPad("main"," Compile ","compile");
DefineBarPad("main"," Help ","help");
DefinePopup("file",1,1);
DefinePopupPad("file"," New ");
DefinePopupPad("file"," Open ");
DefinePopupPad("file"," Save ");
DefinePopupPad("file"," Save As ");
DefinePopupPad("file"," Change Dir ");
DefinePopupPad("file"," Print ");
DefinePopupPad("file"," OS Shell ");
DefinePopupPad("file"," Exit ");
DefinePopup("edit",8,1);
DefinePopupPad("edit"," Cut ");
DefinePopupPad("edit"," Copy ");
DefinePopupPad("edit"," Past ");
DefinePopupPad("edit"," Clear ");
DefinePopup("search",15,1);
DefinePopupPad("search"," Find ");
DefinePopupPad("search"," Replace ");
DefinePopupPad("search"," Search ");
DefinePopupPad("search"," Go to Line Number ");
DefinePopup("run",24,1);
DefinePopupPad("run"," Run ");
DefinePopupPad("run"," Trace Into ");
DefinePopupPad("run"," Step Over ");
DefinePopupPad("run"," Argoments ... ");
DefinePopup("compile",30,1);
DefinePopupPad("compile"," Compile ");
DefinePopupPad("compile"," Make ");
DefinePopupPad("compile"," Link ");
DefinePopupPad("compile"," Build All ");
DefinePopup("help",39,1);
DefinePopupPad("help"," Contents ");
DefinePopupPad("help"," Index ");
DefinePopupPad("help"," About ");
ActivateBar("main");
ShowCursor();
CLS();
}
};
void main()
{
menu_test test;
test.run();
}
اینم دفتر چه ی تلفن
کد: #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 arashmidos2006@gmail.com" << 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=========================*/
بچه ها توضیح شو استاد از من خط به خط میخواد...از همتون ممنونم
|
|