4 # define firstERC mMGRS
6 # define numERCS (lastERC - firstERC + 1)
10 mMGRS, fMGRS, mNON, fNON
15 bool initDone = FALSE;
17 void db_initMod (void)
32 for (i = firstERC; i <= lastERC; i++)
34 db[i] = erc_create ();
40 eref _db_ercKeyGet (erc c, int key)
45 for_ercElems (er, it, c)
47 if (eref_get (er).ssNum == key)
49 erc_iterReturn (it, er);
56 eref _db_keyGet (int key)
61 for (i = firstERC; i <= lastERC; i++)
63 er = _db_ercKeyGet (db[i], key);
64 if (!eref_equal (er, erefNIL))
73 int _db_addEmpls (erc c, int l, int h, empset s)
81 for_ercElems (er, it, c)
84 if ((e.salary >= l) && (e.salary <= h))
94 db_status hire (employee e)
96 if (e.gen == gender_ANY)
105 if (!eref_equal (_db_keyGet (e.ssNum), erefNIL))
112 void uncheckedHire (employee e)
121 erc_insert (db[mMGRS], er);
123 erc_insert (db[mNON], er);
126 erc_insert (db[fMGRS], er);
128 erc_insert (db[fNON], er);
131 bool fire (int ssNum)
137 for (i = firstERC; i <= lastERC; i++)
138 for_ercElems (er, it, db[i])
139 if (eref_get (er).ssNum == ssNum)
142 erc_delete (db[i], er);
149 bool promote (int ssNum)
156 er = _db_ercKeyGet (db[mNON], ssNum);
158 if (eref_equal (er, erefNIL))
160 er = _db_ercKeyGet (db[fNON], ssNum);
161 if (eref_equal (er, erefNIL))
172 erc_delete (db[mNON], er);
173 erc_insert (db[mMGRS], er);
177 erc_delete (db[fNON], er);
178 erc_insert (db[fMGRS], er);
184 db_status setSalary (int ssNum, int sal)
194 er = _db_keyGet (ssNum);
196 if (eref_equal (er, erefNIL))
208 int query (db_q q, empset s)
226 for (i = firstERC; i <= lastERC; i++)
227 numAdded += _db_addEmpls (db[i], l, h, s);
230 numAdded = _db_addEmpls (db[mMGRS], l, h, s);
231 numAdded += _db_addEmpls (db[fMGRS], l, h, s);
234 numAdded = _db_addEmpls (db[mNON], l, h, s);
235 numAdded += _db_addEmpls (db[fNON], l, h, s);
242 numAdded = _db_addEmpls (db[mMGRS], l, h, s);
243 numAdded += _db_addEmpls (db[mNON], l, h, s);
246 return _db_addEmpls (db[mMGRS], l, h, s);
248 return _db_addEmpls (db[mNON], l, h, s);
254 numAdded = _db_addEmpls (db[fMGRS], l, h, s);
255 numAdded += _db_addEmpls (db[fNON], l, h, s);
258 return _db_addEmpls (db[fMGRS], l, h, s);
260 return _db_addEmpls (db[fNON], l, h, s);
270 printf ("Employees:\n");
272 for (i = firstERC; i <= lastERC; i++)
274 printVal = erc_sprint (db[i]);
275 printf ("%s", printVal);