2011-10-28 17 views
0

私は、COSIDが100から200までの学生と登録されているコースのデータファイルを取り込むプログラムを持っています。それは100 Greg Samson 3 COS301 COS431 COS490 120 Jo Ann Lyons 0のように見えます。私は学生が取っているすべてのコースを保持する動的な配列を持っています。私が抱えている問題は、このプロトタイプを使用してコースIDを入力すると、奇妙なクラスの他の人物を印刷するように求められているということです。void printList (ostream& out, FlexArray<Student> majors, int cosID, string course); C++ダイナミックアレイを検索する

私は本当にこの配列を検索する関数を作成する方法がわかりませんprotype。私はすべてのCOSIDが-1であるように配列を補完しようとしたので、検索しようとすると情報を持つ要素をより簡単に見つけることができるはずですが、その作業を行うことはできません。ここに私のコードは、これまでTです:

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <fstream> 
#include "templates.h" 


using namespace std; 

struct Student { 

    int COSID; 
    string fname; 
    string lname; 
    int totCourses; 
    string * coursearr; 
}; 
void printList (ostream& out, FlexArray<Student> majors, int cosID, string course); 

int main(){ 
    Student s; // Object for struct student 
    int searchCOSID; //varible to find COS id 
    int Loopcheck = -1; //break loop variable 
    string LoopCOSID = ""; //break loop variable 
    FlexArray<Student> fa(100,200); //object for flex array setting Upper bounds to 200 and lower bounds to 100 

    //Initilize the flexarray cosid to -1; 
    for(int i=100; i<=200; i++){ 
     fa[s.COSID = -1]; 
    } 
    cout << fa[105].COSID; 
    char c; 


    ifstream fin;    // declare input file stream object 
    fin.open ("a5.txt"); 
    fin >> s.COSID; 
    fin.get(c); 
    getline(fin, s.fname); 
    getline(fin, s.lname); 
    fin >> s.totCourses; 
    while(!fin.fail()){ 
     s.coursearr = new string[s.totCourses]; 
     if(s.totCourses > 0){ 
     for(int i=0; i<s.totCourses; i++){ 
      fin >> s.coursearr[i]; 
     } 
     } 
     fa[s.COSID] = s; 
     fin >> s.COSID; 
     fin.get(c); 
     getline(fin, s.fname); 
     getline(fin, s.lname); 
     fin >> s.totCourses; 
    } 



     cout << "\nEnter your COS ID: "; 
     cin >> searchCOSID; 
     Student currstudent = fa[searchCOSID]; 
     if(currstudent.COSID=-1){ 
      cout << "ID not asscoaited with a student"; 
     }else{ 
      cout << "The courses taken this semester by " << currstudent.fname << " " << currstudent.lname << " include:"; 
      if(currstudent.totCourses > 0){ 
       for(int i=0; i<currstudent.totCourses;i++){ 
       cout << "\n" << currstudent.coursearr[i]; 
       } 
      } 
      else{cout << endl <<"No courses";} 
     } 



    while(Loopcheck == -1){ 
     cout << "\n\nEnter a couses (Q) to quit: "; 
     cin >> LoopCOSID; 
     if(LoopCOSID == "Q" || LoopCOSID=="q"){ 
      Loopcheck = 0; 
     }else{ 
      string course; 
      cout << endl << "Other students taking this course include: "; 
      //printList(cout,FlexArray<Student>,searchCOSID,coursearr); 
     } 

    } 
    return 0; 


} 

void printList (ostream& out, FlexArray<Student> majors, int cosID, string course){ 
    for (int i = 0; i<101; i++){ 

    } 


} 
+0

これは動的配列です。他の配列を検索して比較するような検索はしないでください。 –

+0

'FlexArray'がどこから来たのか分かりませんが、確かにデータを反復処理する方法を提供します。 –

答えて

2
For each student s in majors (silly name for a list of students isn't it?) 
    if s.COSID is not cosID 
     for each class c that s is taking 
      if c equals course 
       display s.fname 

私は思います。それは伝えにくいです。 print other people in a paticular class when a course ID is inputed using this prototype: void printList (ostream& out, FlexArray<Student> majors, int cosID, string course);COSIDcosIDの人を除いて、courseを受けているすべての生徒を印刷することを意味しますか?

+0

'これはコースを受講するすべての生徒を表示することを意味しますが、COSIDはcosIDパラメータですか? – Nick

+0

申し訳ありません、それは私が投稿したアルゴリズムです。 –

+0

最初のforloop i(?)はどうすればよいですか?これは私が ''学生のものです。 { \t \t(!s.COSID = cosID)であれば{ \t \t \tため(INT J = 0; J <= s.totCoursesあり、j ++){(; I <101 I ++は、I = 0をINT)ため \t \t \t \t \t IF(s.coursearr [J] ==コース){ \t \t \t \t \t COUT << "の\ n" << s.fname << "" << s.lname。あなたの場合、ループの最初に \t \t \t \t} \t \t \t} \t \t} \t} '' – Nick