Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.08 KB | None | 0 0
  1. /********************************************************************
  2. * CSCI251 - Ass1
  3. * <Name - Login>
  4. * ass1.cpp - Contains function definitions for student records database
  5. ********************************************************************/
  6. #include <iostream>
  7. #include <fstream>
  8. #include<cstring>
  9.  
  10. using namespace std;
  11.  
  12. // ============== Constants ==========================================
  13.  
  14. const char cTextFileName[] = "ass1.txt";
  15. const char cBinaryFileName[] = "ass1.dat";
  16. const int cMaxRecs = 100;
  17. const int cMaxChars = 30;
  18. const int cMaxSubjects = 8;
  19.  
  20. // ============= User Defined types ==================================
  21.  
  22. enum StatusType{eEnrolled,eProvisional,eWithdrawn};
  23. struct SubjectType{ char Code[8]; StatusType Status; int Mark;};
  24.  
  25. struct StudentRecord{
  26. long StudentNo;
  27. char FirstName[cMaxChars];
  28. char LastName[cMaxChars];
  29. int NumSubjects;
  30. SubjectType Subjects[cMaxSubjects];
  31. };
  32.  
  33.  
  34. // ============= Global Data =========================================
  35.  
  36. StudentRecord gRecs[cMaxRecs];
  37. int gNumRecs=0;
  38.  
  39.  
  40. // ============= Private Function Prototypes =========================
  41.  
  42. void PrintRecord(int i);
  43. int FindRecord(long StudentNum);
  44.  
  45. // ============= Public Function Definitions =========================
  46.  
  47.  
  48. void ReadFile()
  49. {
  50. ifstream fin; // declares input filestream object
  51. fin.open("ass1.txt"); // opens existing file
  52. if(!fin.good()){
  53. cout << "Cant find text data file!\n"<< endl;
  54. exit(1);
  55. }
  56. int i = 0;
  57. fin>>gRecs[i].StudentNo;
  58. while(!fin.eof() && i<cMaxRecs) {
  59.  
  60. fin>>gRecs[i].FirstName;
  61. fin>>gRecs[i].LastName;
  62. fin>>gRecs[i].NumSubjects;
  63. for(int j=0;j<gRecs[i].NumSubjects;j++) {
  64.  
  65.  
  66. fin>>gRecs[i].Subjects[j].Code;
  67. int temp;
  68. fin>>temp;
  69. gRecs[i].Subjects[j].Status=StatusType(temp);
  70.  
  71. fin>>gRecs[i].Subjects[j].Mark;
  72. }
  73. i++;
  74. //fin.ignore();
  75. fin>>gRecs[i].StudentNo;
  76. }
  77. gNumRecs = i;
  78. fin.close();
  79. cout<<gNumRecs<<"records read";
  80.  
  81.  
  82. }
  83.  
  84. void DisplayRecord()
  85. {
  86. long StudentNo;
  87.  
  88. cout << "Enter student number: ";
  89. cin >> StudentNo;
  90. int i = FindRecord(StudentNo);
  91. if(i==-1)
  92. cout << "Record not found!\n";
  93.  
  94.  
  95.  
  96. else
  97. PrintRecord(i);
  98. }
  99.  
  100.  
  101. void SaveFile()
  102. {// Writes array to text data file
  103. /*
  104. open TextFileName
  105. if open no good
  106. print "Problem opening data file!\n";
  107. exit(1);
  108. for i=0 to gNumRecs
  109. write gRecs[i] StudentNo;
  110. write gRecs[i] FirstName;
  111. write gRecs[i] LastName;
  112. write gRecs[i] NumSubjects;
  113. for j=0 to NumSubjects
  114. write gRecs[i] Subjects[j] Code;
  115. write gRecs[i] Subjects[j] Status;
  116. write gRecs[i] Subjects[j] Mark;
  117. close textfile
  118. print gNumRecs " records saved"
  119. */
  120. ofstream outs;
  121. outs.open("ass1.txt");
  122. if(!outs.good()){
  123. cout << "Problem opening data file!\n"<< endl;
  124. exit(1);
  125.  
  126. }
  127.  
  128. for(int i=0;i<gNumRecs;i++)
  129. {
  130.  
  131. outs<<gRecs[i].StudentNo<<"\n";
  132. outs<<gRecs[i].FirstName<<" ";
  133. outs<<gRecs[i].LastName<<"\n";
  134. outs<<gRecs[i].NumSubjects<<"\n";
  135. for(int j=0;j<gRecs[i].NumSubjects;j++) {
  136.  
  137. outs<<gRecs[i].Subjects[j].Code<<" ";
  138. outs<<gRecs[i].Subjects[j].Status<<" ";
  139.  
  140. outs<<gRecs[i].Subjects[j].Mark<<"\n";
  141. }
  142. i++;
  143. outs<<"\n";
  144. //fout.ignore();
  145.  
  146. }
  147.  
  148. outs.close();
  149. cout<<gNumRecs<<"records saved ";
  150.  
  151.  
  152. }
  153.  
  154. void UpdateRecord()
  155. {// updates status or mark of specified subject of specified student number
  156. /*
  157. print "Enter student number: "
  158. read student number
  159. i = FindRecord(StudentNumber);
  160. if record not found
  161. print "Record not found!"
  162. else
  163. display the found record
  164. request subject code from user
  165. if subject code is found then
  166. ask user to select status or mark
  167. request new status or mark
  168. update status or mark
  169. else
  170. print "Subject code not found!"
  171. */
  172. long StudentNo;
  173.  
  174. cout << "Enter student number: ";
  175. cin >> StudentNo;
  176. int i = FindRecord(StudentNo);
  177. if(i==-1)
  178. cout << "Record not found!\n";
  179.  
  180.  
  181.  
  182. else{
  183.  
  184. PrintRecord(i);
  185.  
  186. cout<<"Subject code: ";
  187. char code [8];
  188. cin>>code;
  189. for(int j=0; j<gRecs[i].NumSubjects; j++)
  190. {
  191.  
  192. if (strcmp(gRecs[i].Subjects[j].Code, code)==0){
  193. char uinput;
  194. cout<<"Select mark or status:";
  195. cin>>uinput;
  196. switch(uinput){
  197. case 'm':
  198. int Nmark;
  199. cout<<"new mark: ";
  200. cin>>Nmark;
  201.  
  202. gRecs[i].Subjects[j].Mark=Nmark;
  203. break;
  204. case 's':
  205. char Nstatus;
  206. cout<<"select new status:"
  207. <<"\n\te: enrolled"
  208. <<"\n\tp: provisional"
  209. <<"\n\tw: withdrawn";
  210. cin>>Nstatus;
  211.  
  212. switch(Nstatus){
  213. case 'e':
  214. gRecs[i].Subjects[j].Status=eEnrolled;
  215. break;
  216. case 'p':
  217. gRecs[i].Subjects[j].Status=eProvisional;
  218. break;
  219.  
  220. case 'w':
  221. gRecs[i].Subjects[j].Status=eWithdrawn;
  222. break;
  223.  
  224. }
  225.  
  226.  
  227.  
  228.  
  229. }
  230.  
  231. }
  232. }
  233. }
  234. // ============= Private Function Definitions =========================
  235.  
  236. void PrintRecord(int i){
  237.  
  238. // Prints record i on screen
  239.  
  240. /*
  241. print gRecs[i] StudentNo;
  242. print gRecs[i] FirstName;
  243. print gRecs[i] LastName;
  244. print gRecs[i] NumSubjects;
  245. for j=0 to NumSubjects
  246. print gRecs[i] Subjects[j] Code;
  247. print gRecs[i] Subjects[j] Status;
  248. print gRecs[i] Subjects[j] Mark;
  249. */
  250.  
  251. cout<<"Student No"<<gRecs[i].StudentNo<<endl;
  252. cout<<"FirstName"<<gRecs[i].FirstName<<endl;
  253. cout<<"LastName"<<gRecs[i].LastName<<endl;
  254. cout<<"NumSubjects"<<gRecs[i].NumSubjects<<endl;
  255. cout<<"Subjects:"<<endl;
  256.  
  257.  
  258. for(int j=0;j<gRecs[i].NumSubjects;j++)
  259. {
  260.  
  261.  
  262.  
  263. cout<<gRecs[i].Subjects[j].Code<<" ";
  264.  
  265. switch(gRecs[i].Subjects[j].Status)
  266.  
  267. {
  268. case eEnrolled:
  269. cout<<"Enrolled";
  270. break;
  271. case eProvisional:
  272. cout<<"Provisional";
  273. break;
  274. case eWithdrawn:
  275. cout<<"Withdrawn";
  276. break;
  277.  
  278. }
  279. cout<<gRecs[i].Subjects[j].Mark<<endl;
  280.  
  281. }
  282. }
  283.  
  284. int FindRecord(long StudentNo)
  285. {// returns index of matching record or -1 if not found
  286. /*
  287. for i=0 to gRecs
  288. if gStudRecs[i] StudentNo == StudentNo
  289. return i
  290. */
  291. for(int i=0;i<gNumRecs;i++){
  292. // cout<<gRecs[i].StudentNo<<endl;
  293. if(gRecs[i].StudentNo == StudentNo)
  294.  
  295. return i;
  296. }
  297. return -1;
  298.  
  299. }
  300.  
  301. void PrintMenu();
  302.  
  303. /*int main(){
  304.  
  305. char Command;
  306. ReadFile();
  307. PrintMenu();
  308. do{
  309. cout << "Command: ";
  310. cin >> Command;
  311. Command=tolower(Command);
  312. switch (Command)
  313. {
  314. case 'u':
  315. UpdateRecord();
  316. break;
  317. case 'd':
  318. DisplayRecord();
  319. break;
  320. case 'm':
  321. PrintMenu();
  322. break;
  323. case 'q':
  324. break;
  325. default:
  326. cerr << "Illegal Command\n";
  327. PrintMenu();
  328. }
  329. } while (Command != 'q');
  330.  
  331. SaveFile();
  332.  
  333. return 0;
  334. }
  335. */
  336. void PrintMenu(){
  337. cout << "Commands Available:\n";
  338. cout << " d - Display Record\n";
  339. cout << " u - Update Record\n";
  340. cout << " m - Print Menu\n";
  341. cout << " q - Quit the program\n\n";
  342. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement