1

これが私のコードです。宿題ですが、全部やりました。ただし、検索機能は動作しません。私は私がそれに何か間違ったことをしているのを知っています。ユーザーは検索する名前を入力する必要があり、エントリ全体が表示されます。void search関数に「エラーC2120:'void'すべてのタイプで不正です」というエラーがあります。

            // Awholenew world.cpp : Defines the entry point for the console application.
            //

            #include "stdafx.h"
            #include<process.h>
            #include<iomanip>
            #include<stdio.h>
            #include<string.h>
            #include<fstream>
            #include<sstream>
            #include<iostream>
            #include<conio.h>
            #include<stdlib.h>

            using namespace std;

            struct main
            {
                char FName[20];
                char Last[20];
                char Address[30];
                long Phone;
                int ID;
                long CNIC;
            }obj;

            class Main
            {

            public:
                virtual void init()
                {
                    cin.getline(obj.FName,20);
                    cout << "Enter Name: ";
                    cin.getline(obj.Last,20);

                    cout << "Enter Address: ";
                    cin.getline(obj.Address, 30);
                    cout << "Enter Phone: ";
                    cin>>obj.Phone; 

                }
                void view()
                {
                    cout << "Name: " << obj.Last<< endl;
                    cout << "Address: " << obj.Address << endl;
                    cout << "Phone: " << obj.Phone << endl;
                    cout << "CNIC: " << obj.CNIC << endl;
                    cout << "ID: " << obj.ID << endl;

                }




                virtual void search()
                {
                    char choice4;   
                    char Target[20];
                    int Found=0;

                    fstream fin;
                    if (fin.open("Main.txt", ios::in| ios::out) == NULL)
                        cout<<"File is empty" << endl;
                    else
                        cout<<"Enter Name: " << endl;
                    cin.getline(Target, 20);

                    while(!fin.eof() && Found ==0)
                    {
                        fin<< endl << obj.Last << endl <<obj.Address <<endl <<obj.Phone << endl << obj.CNIC << endl << obj.ID;
                        if (strcmp(Target, obj.Last) == 0)
                            Found =1;
                    }
                    if(Found)
                    {
                        Main::view();

                    }
                    else if (!Found)
                        printf("**There is no such Entry**\n");
                    fin.close();

                }



                void display()
                {

                    char BUFFER[100];
                    ifstream fin("Main.txt");


                        while (!fin.eof())
                        {
                        fin.getline(BUFFER, 100);
                        cout << BUFFER << endl;

                        }
                }

            };

            class Teacher : public Main
            {
            public:

            void tinit()
            {
                ofstream fin("Main.txt", ios::app);
                Main::init();
                cout << "Enter CNIC of Teacher" << endl;
                cin>>obj.CNIC;
                fin<< endl << obj.Last << endl << obj.Address << endl << obj.Phone << endl << "Teacher CNIC: " << obj.CNIC << endl;

            }

            };

            class Student : public Main
            {
            public:
                void sinit()
                {
                ofstream fin("Main.txt", ios::app);
                Main::init();
                cout << "Enter ID of Student" << endl;
                cin>>obj.Phone; 
                fin<< endl << obj.Last <<endl << obj.Address << endl  << obj.Phone << endl  << "Student ID" << obj.ID << endl;
                }

            };

            class Employee : public Main
            {
            public:
                void einit()
                {

                ofstream fin("Main.txt", ios::app);
                Main::init();
                cout << "Enter Employee CNIC" << endl;
                cin>>obj.CNIC;  
                fin << endl << obj.Last <<endl  << obj.Address << endl  << obj.Phone << endl << "Employee CNIC: " << obj.CNIC << endl;
                }

            };
            int _tmain(int argc, _TCHAR* argv[])
            {
                Main* myarr[100];
                Teacher* tearr[100];
                Student* starr[100];
                Employee* emarr[100];
                int var=0;
                int choice;
                char input;

                start:
                printf("===============MAIN MENU===============");
                printf("\n[1]Insert\n[2]Display All\n[3]Search\n[4]Exit\n");
                printf("=======================================");
                printf("\n\nEnter Your Choice: ");

                cin >> choice;

                switch(choice)
                {

                case 1:
            label:
                    cout<< "Enter Choice s/t/e" << endl;
                    cin >> input;


                if (input == 't')
                    tearr[var]->tinit();
                if (input == 's')
                    starr[var]->sinit();
                if (input == 'e')
                    emarr[var]->einit();

                cout << " Enter another (y/n)? ";
                cin >> input;

                if (input == 'y')
                    goto label;
                else 
                    goto start;
                    break;
                case 2:
                        myarr[var]->display();
                        break;
                case 3:
                    myarr[var]->search();
                    break;
                case 4:
                    cout << "Are you sure? y/n" << endl;
                    char in;
                    cin>>in;
                    if (in=='y')
                        getch();
                    else goto start;
                    break;
                default:
                    return 0;
                    break;

                return 0;
                }
            }
4

3 に答える 3

0

私が気付いた最も明白なことは、obj変数に格納されているタイプ'main'の構造体が特定のクラスインスタンスの外部にあるように見えることです。これは、タイプMain、Employee、Student、またはTeacherのすべてのオブジェクトが、それ自体のスコープ外の単一のobjにのみ書き込みを行っていることを意味します。すべての従業員、教師、学生、「メイン」は、最後に書き込んだFName、Last、Addressの値を共有します。

おそらく必要なのは、Mainの各インスタンスに独自のFName、Last、Addressなどを持たせることです。

        class Main
        {
           struct main
           {
             char FName[20];
             char Last[20];
             char Address[30];
             long Phone;
             int ID;
             long CNIC;
           }obj;

        public:
            virtual void init()
            {
             ... rest of code here
于 2012-05-03T06:05:19.317 に答える
0

私が見ることができる1つの問題は次のとおりです。

fstream fin;
if (fin.open("Main.txt", ios::in| ios::out) == NULL)

関数fstream::openは次のように宣言されます。

void open ( const char * filename, 
            ios_base:openmode mode = ios_base::in | ios_base::out );

ご覧のとおり、戻り型はvoidであるため、if式で使用することはできません。

于 2012-05-03T06:10:29.197 に答える
0

あなたの投稿を主な問題に減らしてください。すべてを単一の「コード」ブロックにリストするだけの場合。誰もあなたが何をしているのか理解できません。

1:「goto」は使用しないでください!(!!!!!)

2:フラグにintの代わりにboolを実際に使用する必要があります

3:構造体またはクラス名にmain/Mainを使用しないでください。これは実際にはmainmathod用に予約されており(一部のシステムでは)、同じ名前の1つのクラスと1つの構造体があると混乱します(大文字と小文字を区別しない)

4:関数Main :: view();にアクセスしています。検索方法で。しかし、どのオブジェクトに?通常、データをオブジェクトにロードし、this-> view()を介してアクセスする必要があります。

5:コンセプト全体が有線で表示されます。なぜテキストファイルとポリモーフィッククラス階層を使用しているのですか?テキストファイルは階層をダンプします。多分あなたはあなたのクラスの概念を再考するべきです。

于 2012-05-03T06:24:55.617 に答える