Virtual U.org
Get Personal Training on VU Today
    
Top shadow
 
 register/help
User Name:

Password:

ODEPTRES.CPP Source File
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

ODEPTRES.CPP

Go to the documentation of this file.
00001 //Filename    : ODEPTRES.CPP
00002 //Description : Department resource object
00003 
00004 #include <ALL.H>
00005 #include <OMATH.H>
00006 #include <OSYS.H>
00007 #include <OFIELD.H>
00008 #include <OGAMESET.H>
00009 #include <ODEPT.H>
00010 #include <ODEPTRES.H>
00011 #include <OSTUDENT.H>                             // for enum   { SL_UG, SL_MASTER, SL_DOCTOR, SL_DISTANCE_LEARN };
00012 #include <OFIELD.H>                               // for IPED_FILED_COUNT
00013 #include <OCOURRES.H>                             // template_course_type
00014 #include <opschool.h>
00015 
00016 //---------- #define constant ------------//
00017 
00018 #define DEPARTMENT_DB    "DEPT"
00019 #define DEPARTMENT_DB2   "DEPT2"
00020 #define DEPARTMENT_DB3   "FACILITY"
00021 
00022 // db from HE.GDB.init
00023 #define FACULTY_TRANSITION_PROBABILITY    "FAC_TRAN"
00024 #define COURSE_UG_DB        "COUR_B"              // db from HE.GDB.init
00025 #define COURSE_MASTER_DB    "COUR_M"
00026 #define COURSE_DOCTOR_DB    "COUR_D"
00027 #define ELECTIVE_PREF_DB    "ELECPREF"
00028 
00029 //----------------------------------------------//
00030 //
00031 void change_templ_code(char* code) {
00032     switch (code[0]) {
00033     case 'S':
00034         code[0] = 'A';
00035         break;
00036     case 'N':
00037         code[0] = 'B';
00038         break;
00039     case 'M':
00040         code[0] = 'C';
00041         break;
00042     case 'H':
00043         code[0] = 'D';
00044         break;
00045     case 'O':
00046         code[0] = 'E';
00047         break;
00048     default:
00049         err_here();
00050         break;
00051     }
00052 }
00053 
00054 //----------------------------------------------//
00055 
00056 //------- Begin of function DepartmentRes::DepartmentRes -----------//
00057 
00058 DepartmentRes::DepartmentRes() {
00059     init_flag=0;
00060 }
00061 
00062 //--------- End of function DepartmentRes::DepartmentRes -----------//
00063 
00064 //------- Begin of function DepartmentRes::DepartmentRes -----------//
00065 
00066 DepartmentRes::~DepartmentRes() {
00067     deinit();
00068 }
00069 
00070 //--------- End of function DepartmentRes::DepartmentRes -----------//
00071 
00072 //---------- Begin of function DepartmentRes::init -----------//
00076 void DepartmentRes::init() {
00077     deinit();
00078 
00079     general_dept.init();
00080     memset(&general_dept_info, 0, sizeof(DepartmentInfo));
00081 
00082     //------- load database information --------//
00083 
00084     load_info();
00085     load_faculty_info();
00086     load_course_info();
00087     load_elective_course_pref();
00088 
00089     init_flag=1;
00090 }
00091 
00092 //---------- End of function DepartmentRes::init -----------//
00093 
00094 //---------- Begin of function DepartmentRes::deinit -----------//
00095 
00096 void DepartmentRes::deinit() {
00097     if( init_flag ) {
00098         mem_del(info_array);
00099 
00100         init_flag=0;
00101     }
00102 
00103     //----------------------------------// 990603
00104 
00105     for( int i=general_dept.student_array.size() ; i>0 ; i-- ) {
00106         if( !general_dept.student_array.is_deleted(i) )
00107             general_dept.student_array.del(i);
00108     }
00109 
00110     //----------------------------------//
00111 
00112 }
00113 
00114 //---------- End of function DepartmentRes::deinit -----------//
00115 
00116 //------- Begin of function DepartmentRes::load_info -------//
00118 void DepartmentRes::load_info() {
00119     DepartmentRec  *deptRec;
00120     DepartmentInfo *deptInfo;
00121     Database    *dbDepartment = game_set.open_db(DEPARTMENT_DB);
00122 
00123     department_count = (short) dbDepartment->rec_count();
00124     info_array      = (DepartmentInfo*) mem_add( sizeof(DepartmentInfo)*department_count );
00125 
00126     err_when( department_count != DEPARTMENT_TYPE_COUNT );
00127 
00128     //------ read in department information array -------//
00129 
00130     memset( info_array, 0, sizeof(DepartmentInfo) * department_count );
00131 
00132     for( int i=0 ; i<department_count ; i++ ) {
00133         deptRec   = (DepartmentRec*) dbDepartment->read(i+1);
00134         deptInfo  = info_array+i;
00135 
00136         if (i+1==department_count)
00137             i=i;
00138 
00139         m.rtrim_fld( deptInfo->name, deptRec->name, deptRec->NAME_LEN );
00140 
00141         //String str = deptInfo->name;
00142         //str += " Department";
00143         //strncpy(deptInfo->name, str, MAX_STR_LEN );
00144 
00145         deptInfo->field_id = field_res.look_up_code( deptRec->field_code[0] );
00146         // deptInfo->total_courses_taught = m.atoi( deptRec->total_courses_taught, 9 );
00147 
00148         //0406 if ( deptInfo->total_courses_taught <= 0 )
00149         //      deptInfo->total_courses_taught = 200;           // fix bug on fly               //1230: it's a place holder and is calculated during init course enrollment
00150 
00151         deptInfo->max_dl_class_size = m.atoi( deptRec->max_dl_class_size, 9 );
00152 
00153         deptInfo->salary_multiplier   = (float) m.atof( deptRec->salary_multiplier, 9 );
00154         deptInfo->teaching_load_multiplier = (float) m.atof( deptRec->teaching_load_multiplier, 9 );
00155         deptInfo->research_per_faculty_multiplier = (float) m.atof( deptRec->research_per_faculty_multiplier, 9 );
00156         deptInfo->female_multiplier   = (float) m.atof( deptRec->female_multiplier, 9 );
00157         deptInfo->minority_multiplier = (float) m.atof( deptRec->minority_multiplier, 9 );
00158 
00159         deptInfo->talent_teaching    = m.atoi( deptRec->talent_teaching, 9 );
00160         deptInfo->talent_scholarship = m.atoi( deptRec->talent_scholarship, 9 );
00161         deptInfo->talent_research    = m.atoi( deptRec->talent_research, 9 );
00162 
00163         deptInfo->percent_pi_faculty = char(100 * m.atof( deptRec->percent_faculty_pi, 9 ));
00164         //## chea 061299 1.8.2
00165         //              deptInfo->normal_research_project_size = m.atoi( deptRec->research_project_size, 9 );
00166         deptInfo->normal_research_project_size =2 * m.atoi( deptRec->research_project_size, 9 );
00167 
00168         deptInfo->doctoral_grad_rate_multiplier     = (float) m.atof( deptRec->doctoral_graduation_rate_multiplier, 9 );
00169         deptInfo->doctoral_time_to_dropout_multiplier = (float) m.atof( deptRec->doctoral_time_to_dropout_multiplier, 9 );
00170         deptInfo->doctoral_time_to_degree_multiplier    = (float) m.atof( deptRec->doctoral_time_to_degree_multiplier, 9 );
00171         deptInfo->graduate_tuition_rate_multiplier    = (float) m.atof( deptRec->graduate_tuition_rate_multiplier, 9 );
00172 
00173         memcpy( deptInfo->template_rank_and_age, deptRec->template_rank_and_age, 1 );
00174         memcpy( deptInfo->template_gender_ethnic, deptRec->template_gender_ethnic, 1 );
00175         memcpy( deptInfo->template_salary, deptRec->template_salary, 1 );
00176         memcpy( deptInfo->template_talent, deptRec->template_talent, 1 );
00177         memcpy( deptInfo->template_course_load, deptRec->template_course_load, 1 );
00178 
00179         memcpy( deptInfo->template_discretionary_time, deptRec->faculty_discretionary_time, 1 );
00180         memcpy( deptInfo->template_course_type, deptRec->course_type, 2 );
00181 
00182         memcpy( deptInfo->base_fac_discretionary_time, deptRec->base_fac_discretionary_time, 1);
00183 
00184         change_templ_code(deptInfo->template_rank_and_age);
00185         change_templ_code(deptInfo->template_gender_ethnic);
00186         change_templ_code(deptInfo->template_salary);
00187         change_templ_code(deptInfo->template_talent);
00188         change_templ_code(deptInfo->template_course_load);
00189         change_templ_code(deptInfo->template_discretionary_time);
00190         change_templ_code(deptInfo->base_fac_discretionary_time);
00191 
00192         course_res.change_course_templ_code(deptInfo->template_course_type);
00193     }
00194 
00195     //-----------------------------------------//
00196 
00197     DepartmentRec2 *deptRec2;
00198     Database    *dbDepartment2 = game_set.open_db(DEPARTMENT_DB2);
00199 
00200     err_when( department_count != (short) dbDepartment2->rec_count());
00201 
00202     for( i=0 ; i<department_count ; i++ ) {
00203         deptRec2  = (DepartmentRec2*) dbDepartment2->read(i+1);
00204         deptInfo  = info_array+i;
00205 
00206         //----- read data from database dept2 -----//
00207 
00208         deptInfo->iped_field = m.atoi( deptRec2->iped_field, 2) - 1;
00209         err_when( deptInfo->iped_field < 0 || deptInfo->iped_field >= IPED_FIELD_COUNT );
00210 
00211         deptInfo->field_fraction_pct[SL_UG] = (float) m.atof( deptRec2->field_fraction_pct_sl1n2, 10);
00212         deptInfo->field_fraction_pct[SL_MASTER] = (float) m.atof( deptRec2->field_fraction_pct_sl3, 9);
00213         deptInfo->field_fraction_pct[SL_DOCTOR] = (float) m.atof( deptRec2->field_fraction_pct_sl4, 9);
00214         deptInfo->field_fraction_pct[DISTANCE_LEARN] = (float) m.atof( deptRec2->field_fraction_pct_sl5, 9);
00215     }
00216 
00217     //-----------------------------------------//
00218 
00219     init_facility_info();
00220 
00221     DepartmentInfo  *gdeptInfo;
00222     DepartmentRec3 *deptRec3;
00223     Database    *dbDepartment3 = game_set.open_db(DEPARTMENT_DB3);
00224 
00225     err_when( department_count + 1 != (short) dbDepartment3->rec_count());
00226 
00227     for( i=0 ; i<department_count+1 ; i++ ) {
00228         if ( i < department_count ) {
00229             deptRec3  = (DepartmentRec3*) dbDepartment3->read(i+1);
00230             gdeptInfo  = info_array+i;
00231         }
00232         else
00233             gdeptInfo = &general_dept_info;
00234 
00235         //----- read data from database dept3 -----//
00236 
00237         gdeptInfo->replacement_cost = m.atoi( deptRec3->replacement_cost, 9);
00238         gdeptInfo->normal_onm_cost = (float) m.atof( deptRec3->normal_onm_cost, 9);
00239         gdeptInfo->months_to_construct = (char) m.atoi( deptRec3->months_to_construct, 9);
00240 
00241         gdeptInfo->sf_per_course_enrollment_in_seminars = (float) m.atof( deptRec3->sf_per_course_enrollment, 9);
00242         gdeptInfo->sf_per_course_enrollment_in_general_courses = (float) m.atof( deptRec3->sf_per_course_enrollment, 9);
00243         gdeptInfo->sf_per_course_enrollment_in_lecture_courses = (float) m.atof( deptRec3->sf_per_course_enrollment, 9);
00244 
00245         gdeptInfo->sf_per_faculty = (float) m.atof( deptRec3->sf_per_faculty, 9);
00246         gdeptInfo->sf_per_research_dollar = (float) m.atof( deptRec3->sf_per_research_dollar, 9);
00247         gdeptInfo->sf_per_dollar_of_central_exp = (float) m.atof( deptRec3->sf_per_dollar_of_central_exp, 9);
00248         gdeptInfo->fixed_sf_per_dept = (float) m.atof( deptRec3->fixed_sf_per_dept, 9);
00249     }
00250 
00251     //----//
00252 }
00253 
00254 //--------- End of function DepartmentRes::load_info ---------//
00255 
00256 //##### begin fred 0730 #####//
00257 //---------- Begin of function DepartmentRes::load_faculty_info -----------//
00259 void DepartmentRes::load_faculty_info() {
00260     DepartmentFacultyRec  *deptRec;
00261     DepartmentInfo *deptInfo;
00262     Database    *dbDeptFac = game_set.open_db(FACULTY_TRANSITION_PROBABILITY);
00263 
00264     short dbCount = (short) dbDeptFac->rec_count();
00265 
00266     //------ read in faculty transition probability array -------//
00267 
00268     // update these three variable in deptInfo
00269 
00270     //float     associate_professor_departure_probability[PROB_SCHOOL_TYPE_COUNT];
00271     //float     assistant_professor_departure_probability[PROB_SCHOOL_TYPE_COUNT];
00272     //enum { ASST_PROF, ASSOC_PROF, FULL_PROF, LONG_TERM_ADJUNCT, SHORT_TERM_ADJUNCT }; // 3 professers & 2 adjuncts
00273 
00274     err_when( dbCount !=  department_count * 7 );
00275 
00276     for( int i=0 ; i<dbCount; i++ ) {
00277         deptRec   = (DepartmentFacultyRec*) dbDeptFac->read(i+1);
00278         deptInfo  = info_array+i%department_count;
00279 
00280         if ( i < department_count )
00281             load_faculty_info_sub((deptInfo->assistant_professor_promotion_probability), deptRec);
00282         else if ( i < department_count*2 )
00283             load_faculty_info_sub((deptInfo->faculty_departure_probability[ASST_PROF]), deptRec);
00284         else if ( i < department_count*3 )
00285             load_faculty_info_sub((deptInfo->associate_professor_promotion_probability), deptRec);
00286         else if ( i < department_count*4 )
00287             load_faculty_info_sub((deptInfo->faculty_departure_probability[ASSOC_PROF]), deptRec);
00288         else if ( i < department_count*5 )
00289             load_faculty_info_sub((deptInfo->faculty_departure_probability[FULL_PROF]), deptRec);
00290         else if ( i < department_count*6 )
00291             load_faculty_info_sub((deptInfo->faculty_departure_probability[LONG_TERM_ADJUNCT]), deptRec);
00292         else if ( i < department_count*7 )
00293             load_faculty_info_sub((deptInfo->faculty_departure_probability[SHORT_TERM_ADJUNCT]), deptRec);
00294     }
00295 }
00296 
00297 //---------- End of function DepartmentRes::load_faculty_info -----------//
00298 
00299 //---------- Begin of function DepartmentRes::load_faculty_info_sub -----------//
00301 void DepartmentRes::load_faculty_info_sub(float trans_prob[PROB_SCHOOL_TYPE_COUNT], DepartmentFacultyRec *deptRec) { {
00302     // for (int s=0; s<PROB_SCHOOL_TYPE_COUNT; s++)
00303 
00304     trans_prob[NATIONAL] = (float) m.atof(deptRec->trans_prob[0], 9);
00305 
00306     trans_prob[REGIONAL] = (float) m.atof(deptRec->trans_prob[1], 9);
00307 
00308     trans_prob[LOCAL] = (float) m.atof(deptRec->trans_prob[2], 9);
00309 }
00310 }
00311 
00312 //---------- End of function DepartmentRes::load_faculty_info_sub -----------//
00313 
00314 //---------- Begin of function DepartmentRes::load_course_info -----------//
00316 void DepartmentRes::load_course_info() {
00317     //***
00318     //ASKBILLok order of departments in the curri_requriments is ***WRONG***
00319     //***
00320 
00321     DepartmentUGCourseRec     *deptUGRec;
00322     DepartmentInfo *deptInfo;
00323     Database    *dbDept = game_set.open_db(COURSE_UG_DB);
00324 
00325     short dbCount = (short) dbDept->rec_count();
00326     char rowsPerDept = 4;
00327 
00328     //------ read in course curriculam requirment array -------//
00329 
00330     // 1 for general education
00331     err_when( dbCount != (department_count + 1) * rowsPerDept );
00332 
00333     // a. Special case handle the "department": general education
00334     //
00335     deptUGRec   = (DepartmentUGCourseRec*) dbDept->read(1);
00336 
00337     for ( int e=0; e<BACHELOR_YEAR_COUNT; e++ )
00338         general_dept_info.bachelor_elective_year_count[e] = (char) m.atoi(deptUGRec->elective[e], 9);
00339 
00340     deptUGRec   = (DepartmentUGCourseRec*) dbDept->read(2);
00341     load_course_info_sub(general_dept_info.bachelor_depth1, (DepartmentCourseRec *)deptUGRec);
00342 
00343     deptUGRec   = (DepartmentUGCourseRec*) dbDept->read(3);
00344     load_course_info_sub(general_dept_info.bachelor_depth2, (DepartmentCourseRec *)deptUGRec);
00345 
00346     deptUGRec   = (DepartmentUGCourseRec*) dbDept->read(4);
00347     load_course_info_sub(general_dept_info.bachelor_depth3, (DepartmentCourseRec *)deptUGRec);
00348 
00349     // b. Genernal case
00350     //
00351     for( int i=4 ; i<dbCount; i++ ) {
00352         deptUGRec   = (DepartmentUGCourseRec*) dbDept->read(i+1);
00353         deptInfo  = info_array + (i-4)/rowsPerDept;
00354 
00355         switch ( i%rowsPerDept ) {
00356         case 0:
00357             for ( e=0; e<BACHELOR_YEAR_COUNT; e++ )
00358                 deptInfo->bachelor_elective_year_count[e] = (char) m.atoi(deptUGRec->elective[e], 9);
00359 
00360             //this is a dummy "total" row in the db
00361 
00362             //bughere0 elective course has depth!!!  // 1229
00363             break;
00364         case 1:
00365             load_course_info_sub(deptInfo->bachelor_depth1, (DepartmentCourseRec *)deptUGRec);
00366             break;
00367         case 2:
00368             load_course_info_sub(deptInfo->bachelor_depth2, (DepartmentCourseRec *)deptUGRec);
00369             break;
00370         case 3:
00371             load_course_info_sub(deptInfo->bachelor_depth3, (DepartmentCourseRec *)deptUGRec);
00372             break;
00373         }
00374     }
00375 
00376     //----- MASTER ------//
00377 
00378     DepartmentMasterCourseRec  *deptMasterRec;
00379 
00380     dbDept = game_set.open_db(COURSE_MASTER_DB);
00381     dbCount = (short) dbDept->rec_count();
00382     rowsPerDept = 3;
00383 
00384     err_when( dbCount != department_count * rowsPerDept );
00385 
00386     for( i=0 ; i<dbCount; i++ ) {
00387         deptMasterRec   = (DepartmentMasterCourseRec*) dbDept->read(i+1);
00388         deptInfo  = info_array + i/rowsPerDept;
00389 
00390         switch ( i%rowsPerDept ) {
00391         case 0:
00392             deptInfo->master_elective_year_count = 0; // (char) m.atoi(deptMasterRec->elective, 9);
00393             //this is a dummy "total" row in the db
00394 
00395             //TODO 1229 master has no elective, so remove class member: deptInfo->master_elective_year_count
00396             break;
00397         case 1:
00398             load_course_info_sub(deptInfo->master_depth3, deptMasterRec);
00399             break;
00400         case 2:
00401             load_course_info_sub(deptInfo->master_graduate, deptMasterRec);
00402             break;
00403         }
00404     }
00405 
00406     //----- Doctor ------//
00407 
00408     DepartmentCourseRec  *deptRec;
00409 
00410     dbDept = game_set.open_db(COURSE_DOCTOR_DB);
00411     dbCount = (short) dbDept->rec_count();
00412     rowsPerDept = 2;
00413 
00414     err_when( dbCount != department_count * rowsPerDept );
00415 
00416     for( i=0 ; i<dbCount; i++ ) {
00417         deptRec   = (DepartmentCourseRec*) dbDept->read(i+1);
00418         deptInfo  = info_array + i/rowsPerDept;
00419 
00420         switch ( i%rowsPerDept ) {
00421         case 0:
00422             //this is a dummy "total" row in the db
00423             break;
00424         case 1:
00425             load_course_info_sub(deptInfo->doctor_graduate, deptRec);
00426             break;
00427         }
00428     }
00429 }
00430 
00431 //---------- End of function DepartmentRes::load_course_info -----------//
00432 
00433 //---------- Begin of function DepartmentRes::load_course_info_sub -----------//
00435 void DepartmentRes::load_course_info_sub(char required[COURSE_GAME_FIELD_COUNT], DepartmentCourseRec *deptRec) {
00436     for (int s=0; s<COURSE_GAME_FIELD_COUNT; s++) {
00437         required[s] = (char) m.atoi(deptRec->required[s], 9);
00438     }
00439 }
00440 
00441 //---------- End of function DepartmentRes::init_course_info_sub -----------//
00442 
00443 //---------- Begin of function DepartmentRes::load_facility_info() -----------//
00447 void DepartmentRes::init_facility_info() {
00448     DepartmentInfo *deptInfo;
00449 
00450     //DepartmentFacilityRec  *deptRec;
00451     //Database          *dbDepartment = game_set.open_db(DEPARTMENT_DB);
00452 
00453     //department_count = (short) dbDepartment->rec_count();
00454 
00455     //------ read in department information array -------//
00456 
00457     for( int i=0 ; i<department_count; i++ ) {
00458         //deptRec   = (DepartmentRec*) dbDepartment->read(i+1);
00459         //deptInfo  = (GeneralDepartmentInfo *) (department_res.info_array+i);
00460         deptInfo  = info_array+i;
00461 
00462         // Parameters for replacement and normal operations and maintenance cost
00463         deptInfo->replacement_cost = 200;
00464         // 0.99->99%
00465         deptInfo->cost_growth = math.get_random_snd(0.030f, .01f);
00466         deptInfo->cost_growth_last2 = 0;
00467         deptInfo->normal_onm_cost = 4.0f;
00468         deptInfo->months_to_construct = 14;
00469 
00470         // Parameters for calculating normal square footage
00471         deptInfo->sf_per_course_enrollment_in_seminars = 6;
00472         deptInfo->sf_per_course_enrollment_in_general_courses = 5;
00473         deptInfo->sf_per_course_enrollment_in_lecture_courses = 4;
00474 
00475         deptInfo->sf_per_faculty = 2000;
00476         deptInfo->sf_per_research_dollar = 100;
00477         deptInfo->sf_per_dollar_of_central_exp = 0;
00478         deptInfo->fixed_sf_per_dept = 5000;
00479 
00480         // initialize variables
00481         deptInfo->actual_sf = -1;                     // important! for facilities model to initialize this
00482     }
00483 
00484     general_dept_info.replacement_cost = 180;
00485     general_dept_info.cost_growth = 0;
00486     general_dept_info.cost_growth_last2 = 0;
00487     general_dept_info.normal_onm_cost = 3.5f;
00488     general_dept_info.months_to_construct = 13;
00489 
00490     // three dummy field for general deparment
00491     general_dept_info.sf_per_course_enrollment_in_seminars = 0;
00492     general_dept_info.sf_per_course_enrollment_in_general_courses = 0;
00493     general_dept_info.sf_per_course_enrollment_in_lecture_courses = 0;
00494     general_dept_info.sf_per_faculty = 0;
00495     general_dept_info.sf_per_research_dollar = 0;
00496 
00497     general_dept_info.sf_per_dollar_of_central_exp = 5;
00498     general_dept_info.fixed_sf_per_dept = 50000;
00499 
00500     // initialize variables
00501     general_dept_info.actual_sf = -1;
00502 }
00503 
00504 //---------- End of function DepartmentRes::init_facility_info() -----------//
00505 
00506 //---------- Begin of function DepartmentRes::load_elective_course_pref -----------//
00508 void DepartmentRes::load_elective_course_pref() {
00509     ElecPrefRec  *deptRec;
00510 
00511     DepartmentInfo *deptInfo;
00512     Database  *dbDept = game_set.open_db(ELECTIVE_PREF_DB);
00513     short dbCount = (short) dbDept->rec_count();
00514 
00515     err_when(dbCount != department_count);
00516 
00517     for( int i=1; i<=department_count ; i++ ) {
00518         float totalPref=0;
00519         deptInfo = department_res[i];
00520 
00521         deptRec   = (ElecPrefRec*) dbDept->read(i);
00522 
00523         for( int j=0 ; j<department_count ; j++ ) {
00524             deptInfo->bachelor_elective_course_pref[j] = 100 * (float) m.atof( deptRec->pref[j], 9);
00525 
00526             // varsto be removed
00527             deptInfo->master_elective_course_pref[j]   = 100.0f / (department_count);
00528 
00529             //----- verify if the total is 100 -----//
00530 
00531             totalPref += deptInfo->bachelor_elective_course_pref[j];
00532         }
00533 
00534         // error difference is too big, having taking into account of the floating point error
00535         err_when( totalPref <= 99 || totalPref >= 101 );
00536     }
00537 
00538     //------- initialize general_dept_info --------//
00539 
00540     for( int j=0 ; j<department_count ; j++ ) {
00541         general_dept_info.bachelor_elective_course_pref[j] = 100.0f / department_count;
00542     }
00543 }
00544 
00545 //---------- End of function DepartmentRes::load_elective_course_pref -----------//
00546 
00547 //----- Begin of function DepartmentRes::calc_total_elective_course_pref -----//
00551 void DepartmentRes::calc_total_elective_course_pref() {
00552     for( int i=0; i<=department_count; i++ ) {
00553         DepartmentInfo* deptInfo = department_res[i]; // 0 points to the general department
00554 
00555         deptInfo->total_bachelor_elective_course_pref = 0;
00556         deptInfo->total_master_elective_course_pref = 0;
00557 
00558         //---- only add preference for existing departments ---//
00559 
00560         for (int r=department_array.size(); r>0; r--) {
00561             if( department_array.is_deleted(r) )
00562                 continue;
00563 
00564             int deptId = department_array[r]->department_id;
00565 
00566             deptInfo->total_bachelor_elective_course_pref +=
00567                 deptInfo->bachelor_elective_course_pref[deptId-1];
00568 
00569             deptInfo->total_master_elective_course_pref +=
00570                 deptInfo->master_elective_course_pref[deptId-1];
00571 
00572             err_when(department_array[r]->department_recno != r);
00573         }
00574 
00575     }
00576 }
00577 
00578 //------ End of function DepartmentRes::calc_total_elective_course_pref ------//
00579 
00580 //---------- Begin of function DepartmentRes::school_type_2_prob_school_type -----------//
00582 int DepartmentRes::get_prob_school_type() {
00583     return player_school.student_market;
00584 }
00585 
00586 //------ End of function DepartmentRes::calc_total_elective_course_pref ------//
00587 
00588 //---------- Begin of function DepartmentRes::operator[] -----------//
00590 DepartmentInfo* DepartmentRes::operator[](int deptId) {
00591     if ( deptId==0 )
00592         return &general_dept_info;
00593 
00594     err_when( deptId < 1 || deptId > department_count );
00595 
00596     return info_array + deptId - 1;
00597 }
00598 
00599 //---------- End of function DepartmentRes::operator[] -----------//

Generated on Fri Aug 23 01:37:24 2002 for VirtualU by doxygen1.2.17