将C结构转换为C ++类

时间:2012-11-23 20:23:43

标签: c++ c class structure iostream

我希望每个人昨天和家人度过愉快的时光!在外出访问我的家人时,我想我已开始使用即将到期的一些项目,其中一项是将用C语言编写的代码转换为C ++,该代码使用和存储和修改数据的结构数组。使用对象数组的代码。虽然我最近熟悉C编程语法,但这将是我在C ++中的第一个项目。我理解类应该与结构非常相似,但我对语法以及访问说明符的概念感到困惑。下面是我原来的C代码,以及要进行的更改列表。任何有关如何入门的建议,包括这类工作的优秀资源/教程,将不胜感激。提前感谢您的考虑!

的改变:

  1. 将类中的所有数据声明为私有;
  2. 提供提供所有必需功能的方法(类函数) 为您的程序工作。特别是,声明一个构造函数方法 上课。
  3. 除了程序所需的方法外,还要写一个访问权限(\ get“)和 mutator(\ set)函数,用于类中的每个私有数据成员。
  4. 我的代码:

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdlib.h>
    
    //Function Prototypes
    void insertFirstName(struct structureName[], char[], int);
    void insertLastName(struct structureName[], char[], int);
    void insertHomeNumber(struct structureName[], char[], int);
    void insertCellNumber(struct structureName[], char[], int);
    void printPhoneBook(struct structureName[], int);
    int deleteFriend(struct structureName[], char[], int);
    void showFriend(struct structureName[], char[], int);
    void saveFile(FILE*, struct structureName[], int);
    int loadFile(FILE*, struct structureName[]);
    
    //Structure Declaration
    typedef struct structureName{
       char *fName;  //member for First Name
       char *lName;  //member for Last Name
       char *hPhone; //member for Home Phone
       char *cPhone; //member for Cell Phone
    } pbFriend;
    
    int main(){
    
       int x = 0;
       int flag = 0; //returned in delete function to account for empty phonebook
       int entryCount = 0;//variable for count of entries
       int menuChoice = 0; //variable for switch statement
       int count = 0; //counter keeps track of entry numbers 
       char name[100] = {'\0'}; //place holder for entries
       pbFriend phoneBook[1000] = {'\0'}; //create instance
       char fileSave = '\0'; //variable for selection on file save query
       char fileLoad = '\0'; //variable for selection on file load query
       FILE *pbData; //file pointer
    
       do{
          //load file to phone book query
          printf("Welcome! Would you like to load a file into the phonebook? (y/n): ");
          scanf("%c",&fileLoad);
          getchar();
    
          if(fileLoad=='y'||fileLoad=='Y'){
             count = loadFile(pbData,phoneBook);
             printf("Success! File loaded!\n");
             entryCount = count;
          } //end if
    
          else{
             if(fileLoad!='n'&&fileLoad!='N'){
                printf("Invalid selection.\n");
             } //end if
          } //end else
       }while( fileLoad!='y'&&fileLoad!='Y'&&fileLoad!='n'&&fileLoad!='N');  //end do while
    
       do{
          //display menu                 
          printf("\nPhone Book Application\n");
          printf("1) Add friend\n");
          printf("2) Delete friend\n");
          printf("3) Show a friend\n");
          printf("4) Show phone book\n");
          printf("5) Quit\n");
          printf("What do you want to do?: ");
          scanf("%d",&menuChoice);
          getchar();
          switch(menuChoice){
    
          case 1:  //add friend case
             printf("\nFirst name: ");  //insert first name
             scanf("%s",name);
             getchar();
             //allocate memory
             phoneBook[count].fName = (char*)malloc(100*sizeof(char));
    
             //memory failed to allocate
             if(phoneBook[count].fName == NULL){
                printf("ERROR! Out of memory!");
             }//end if
    
             //memory allocated
             else{
                insertFirstName(phoneBook, name, count);   
             }//end else
    
             printf("Last name: "); //insert last name
             scanf("%s",name);
             getchar();
    
             //allocate memory
             phoneBook[count].lName = (char*)malloc(100*sizeof(char));
    
             //memory failed to allocate
             if(phoneBook[count].lName == NULL){
                printf("ERROR! Out of memory!");
             }//end if
    
             //memory allocated
             else{
                insertLastName(phoneBook, name, count);   
             }//end else
    
             printf("Phone number (home): "); //insert home number
             scanf("%s",name);
             getchar();
    
             //allocate memory
             phoneBook[count].hPhone = (char*)malloc(100*sizeof(char));
    
             //memory failed to allocate
             if(phoneBook[count].hPhone == NULL){
                printf("ERROR! Out of memory!");
             }//end if
    
    
             //memory allocated
             else{
                insertHomeNumber(phoneBook, name, count);   
             }//end else
    
             printf("Phone number (cell): "); //insert cell number
             scanf("%s",name);
             getchar();
    
             //allocate memory
             phoneBook[count].cPhone = (char*)malloc(100*sizeof(char));
    
             //memory failed to allocate
             if(phoneBook[count].cPhone == NULL){
                printf("ERROR! Out of memory!");
             }//end if
    
             //memory allocated
             else{
                insertCellNumber(phoneBook, name, count);   
             }//end else
    
             printf("Entry added to phone book!\n");
             printf("\n");
             count++;
             entryCount++;
             break;
    
          case 2:  //delete friend case
             printf("\nPlease provide a last name for entry deletion: ");
             scanf("%s",&name);
             getchar();
             strcat(name," "); //white space for string values
             flag = deleteFriend(phoneBook, name, count);
    
             //successful deletion
             if(flag == 1){
                printf("The entry has been deleted from the phonebook.\n");
                entryCount--;
             }//end if
    
             //no deletion
             else{
                printf("No deletion has been made.\n");
             } 
             printf("\n");
             break;
    
          case 3:  //show friend case
             printf("\n");
             printf("Please provide a last name: ");
             scanf("%s",&name);
             getchar();
             strcat(name," ");
             showFriend(phoneBook, name, count);
             printf("\n");
             break;
    
          case 4:  //show phone book case
             printf("\n");
             //empty phonebook
             if(entryCount == 0){
                printf("The phonebook is empty.\n");
             }//end if
             else{
                printPhoneBook(phoneBook, count);
             }//end else
             printf("\n");
             break;
    
          case 5:  //quit case
             do{
                printf("\nWould you like to save the phonebook to a file? (y/n): ");
                scanf("%c",&fileSave);
                getchar();
    
                switch(fileSave){
                case 'y': case 'Y': //save case
                   saveFile(pbData,phoneBook,count);
                   printf("Success! File saved!");
                   break;       
    
                case 'n': case 'N': //exit without saving case 
                   printf("Good bye!\n");
                   break;
    
                default: //invalid case
                   printf("Invalid selection.\n");
                   break;
                } //end switch
             }while(fileSave!='y'&&fileSave!='Y'&&fileSave!='n'&&fileSave!='N'); //end do while
             break;
    
          default: //invalid case
             printf("Invalid menu choice.\n\n");
             break;
          }//end switch statement
       }while(menuChoice != 5); //end do while loop
    
       getch();
       return 0;
    }//end main
    
    //Function Definitions
    //function to insert first name
    void insertFirstName(pbFriend phoneBook[], char name[], int count){
       strcpy(phoneBook[count].fName, name);
       strcat(phoneBook[count].fName," ");  
    }
    
    //function to insert last name
    void insertLastName(pbFriend phoneBook[], char name[], int count){
       strcpy(phoneBook[count].lName, name);
       strcat(phoneBook[count].lName," ");
    }
    
    //function to insert home phone number
    void insertHomeNumber(pbFriend phoneBook[], char name[], int count){
       strcpy(phoneBook[count].hPhone, name);
       strcat(phoneBook[count].hPhone," ");
    }
    
    //function to insert cell phone number
    void insertCellNumber(pbFriend phoneBook[], char name[], int count){
       strcpy(phoneBook[count].cPhone, name);
       strcat(phoneBook[count].cPhone," ");
    }
    
    //function to delete entry
    int deleteFriend(pbFriend phoneBook[], char name[], int count){
       int x;
       int foundFlag = 0; //foundFlag for seeing if query is in structure
       char nullStr[30] = {'\0'}; //NULL string
       char name2[30] = {'\0'}; //string to store first name query
       //get first name to prevent multiple deletions due to same last name
       printf("Please provide the first name of the entry to be deleted: ");
       scanf("%s", &name2);
       getchar();
       strcat(name2," ");
       for(x=0;x<count;x++){
          if((strcmp(phoneBook[x].lName,name)==0)&&(strcmp(phoneBook[x].fName,name2)==0)){
             foundFlag = 1; //entry found, proceed with delete
             //free previously allocated memory
             free(phoneBook[x].fName);
             free(phoneBook[x].lName);
             free(phoneBook[x].hPhone);
             free(phoneBook[x].cPhone);
             //set free strings to NULL
             strcpy((phoneBook[x].fName), nullStr);
             strcpy((phoneBook[x].lName), nullStr);
             strcpy((phoneBook[x].hPhone), nullStr);
             strcpy((phoneBook[x].cPhone), nullStr);
          }//end if
       }//end for
       //entry not found
       if(foundFlag == 0){ 
          printf("\nSorry, there is nobody with that name in the phone book.\n");
       }//end if
       return foundFlag;
    }//end function
    
    //function to search entries by last name
    void showFriend(pbFriend phoneBook[], char name[], int count){
       int x;
       int foundFlag = 0; //foundFlag for seeing if query is in structure
       printf("\n");
       for(x=0;x<count;x++){
          if(strcmp((phoneBook[x].lName), name) == 0){
             foundFlag = 1; //entry found, proceed with display
             printf("%s",phoneBook[x].fName);
             printf("%s",phoneBook[x].lName);
             printf("%s(home) ",phoneBook[x].hPhone);
             printf("%s(cell)",phoneBook[x].cPhone);
             printf("\n");
          }//end if   
       }//end for
       //entry not found
       if(foundFlag == 0){
          printf("Sorry, there is nobody with that name in the phone book.\n");
       }//end if                               
    }//end function
    
    //function to print phone book contents
    void printPhoneBook(pbFriend phoneBook[], int count){
       int x;
       for(x=0;x<count;x++){
          //check to avoid NULL strings, which have been deleted
          if(strlen(phoneBook[x].fName) > 0){ 
             printf("%s", phoneBook[x].fName);
             printf("%s", phoneBook[x].lName);
             printf("%s(home) ", phoneBook[x].hPhone);
             printf("%s(cell)", phoneBook[x].cPhone);
             printf("\n");
          }//end if
       }//end for
    }//end function
    
    //function to save to a file
    void saveFile(FILE *pbData, pbFriend phoneBook[], int count){
       char fileName[100] = {'\0'}; //string to store desired name to save file as
       int x = 0; //counter variable
       printf("Please enter the file name: ");
       scanf("%s",fileName);
       getchar();
       //open file
       pbData = fopen(fileName,"w");
       //file open fail case
       if(pbData == NULL){
          printf("ERROR! File not saved!\n");
          perror("The following error occurred"); //specifies i/o error
          getchar();
          exit(EXIT_FAILURE); //exit program with error
       } //end if
       //file open success case
       else{
          //write to file   
          for(x=0;x<count;x++){
             fprintf(pbData, "%s", phoneBook[x].fName);
             fprintf(pbData, "%s", phoneBook[x].lName);
             fprintf(pbData, "%s", phoneBook[x].hPhone);
             fprintf(pbData, "%s", phoneBook[x].cPhone);
          } //end for
          fclose(pbData);
       } //end else
    }// end function
    
    //function to load a file into the phone book
    int loadFile(FILE *pbData, pbFriend phoneBook[]){
       char fileName[100] = {'\0'}; //variable to store name of file to load
       int count = 0; //counter variable
       char tabulaRasa[30] = {'\0'}; /*NULL string to clear garbage data from the
                                     last loop of the feof() condition when loading 
                                     files*/
       printf("Please enter the name of the file you wish to load: ");
       scanf("%s",fileName);
       getchar();
       //open file
       pbData = fopen(fileName,"r");
       //file open fail case
       if(pbData == NULL){
          printf("ERROR! Unable to load file!\n");
          perror("The following error occurred"); //specifies i/o error
          getchar();
          exit(EXIT_FAILURE); //exit program with error
       } //end nested if
       //file open success case
       else{
          //allocate memory to store data from a file
          while(!feof(pbData)){
             phoneBook[count].fName = (char*)malloc(100*sizeof(char));
             if(phoneBook[count].fName == NULL){
                printf("ERROR! Out of memory!");
             } //end double nested if
             phoneBook[count].lName = (char*)malloc(100*sizeof(char));
             if(phoneBook[count].lName == NULL){
                printf("ERROR! Out of memory!");
             } //end double nested if
             phoneBook[count].hPhone = (char*)malloc(100*sizeof(char));
             if(phoneBook[count].hPhone == NULL){
                printf("ERROR! Out of memory!");
             } //end double nested if
             phoneBook[count].cPhone = (char*)malloc(100*sizeof(char));
             if(phoneBook[count].cPhone == NULL){
                printf("ERROR! Out of memory!");
             } //end double nested if
             //load from file
             fscanf(pbData,"%s",phoneBook[count].fName);
             strcat(phoneBook[count].fName," "); 
             fscanf(pbData,"%s",phoneBook[count].lName);                         
             strcat(phoneBook[count].lName," ");
             fscanf(pbData,"%s",phoneBook[count].hPhone);
             strcat(phoneBook[count].hPhone," ");
             fscanf(pbData,"%s",phoneBook[count].cPhone);
             strcat(phoneBook[count].cPhone," ");
             count++; //show that entry/entries have been made from file
          }//end while loop
          //free memory of last entry (junk data from feof() condition)
          free(phoneBook[count-1].fName);
          free(phoneBook[count-1].lName);
          free(phoneBook[count-1].hPhone);
          free(phoneBook[count-1].cPhone);
          //set newly free strings to NULL
          strcpy((phoneBook[count-1].fName), tabulaRasa);
          strcpy((phoneBook[count-1].lName), tabulaRasa);
          strcpy((phoneBook[count-1].hPhone), tabulaRasa);
          strcpy((phoneBook[count-1].cPhone), tabulaRasa);
          count--;
       } //end nested else
       fclose(pbData);
       return(count); //show that phone book is not empty
    } //end if
    

1 个答案:

答案 0 :(得分:3)

开始完成任务的一个绝妙方法是查看C++ Getting Started页面中的一些项目。