Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********************************************************************
- * CSCI251 - Ass1
- * <Name - Login>
- * ass1.cpp - Contains function definitions for student records database
- ********************************************************************/
- #include <iostream>
- #include <fstream>
- #include<cstring>
- using namespace std;
- // ============== Constants ==========================================
- const char cTextFileName[] = "ass1.txt";
- const char cBinaryFileName[] = "ass1.dat";
- const int cMaxRecs = 100;
- const int cMaxChars = 30;
- const int cMaxSubjects = 8;
- // ============= User Defined types ==================================
- enum StatusType{eEnrolled,eProvisional,eWithdrawn};
- struct SubjectType{ char Code[8]; StatusType Status; int Mark;};
- struct StudentRecord{
- long StudentNo;
- char FirstName[cMaxChars];
- char LastName[cMaxChars];
- int NumSubjects;
- SubjectType Subjects[cMaxSubjects];
- };
- // ============= Global Data =========================================
- StudentRecord gRecs[cMaxRecs];
- int gNumRecs=0;
- // ============= Private Function Prototypes =========================
- void PrintRecord(int i);
- int FindRecord(long StudentNum);
- // ============= Public Function Definitions =========================
- void ReadFile()
- {
- ifstream fin; // declares input filestream object
- fin.open("ass1.txt"); // opens existing file
- if(!fin.good()){
- cout << "Cant find text data file!\n"<< endl;
- exit(1);
- }
- int i = 0;
- fin>>gRecs[i].StudentNo;
- while(!fin.eof() && i<cMaxRecs) {
- fin>>gRecs[i].FirstName;
- fin>>gRecs[i].LastName;
- fin>>gRecs[i].NumSubjects;
- for(int j=0;j<gRecs[i].NumSubjects;j++) {
- fin>>gRecs[i].Subjects[j].Code;
- int temp;
- fin>>temp;
- gRecs[i].Subjects[j].Status=StatusType(temp);
- fin>>gRecs[i].Subjects[j].Mark;
- }
- i++;
- //fin.ignore();
- fin>>gRecs[i].StudentNo;
- }
- gNumRecs = i;
- fin.close();
- cout<<gNumRecs<<"records read";
- }
- void DisplayRecord()
- {
- long StudentNo;
- cout << "Enter student number: ";
- cin >> StudentNo;
- int i = FindRecord(StudentNo);
- if(i==-1)
- cout << "Record not found!\n";
- else
- PrintRecord(i);
- }
- void SaveFile()
- {// Writes array to text data file
- /*
- open TextFileName
- if open no good
- print "Problem opening data file!\n";
- exit(1);
- for i=0 to gNumRecs
- write gRecs[i] StudentNo;
- write gRecs[i] FirstName;
- write gRecs[i] LastName;
- write gRecs[i] NumSubjects;
- for j=0 to NumSubjects
- write gRecs[i] Subjects[j] Code;
- write gRecs[i] Subjects[j] Status;
- write gRecs[i] Subjects[j] Mark;
- close textfile
- print gNumRecs " records saved"
- */
- ofstream outs;
- outs.open("ass1.txt");
- if(!outs.good()){
- cout << "Problem opening data file!\n"<< endl;
- exit(1);
- }
- for(int i=0;i<gNumRecs;i++)
- {
- outs<<gRecs[i].StudentNo<<"\n";
- outs<<gRecs[i].FirstName<<" ";
- outs<<gRecs[i].LastName<<"\n";
- outs<<gRecs[i].NumSubjects<<"\n";
- for(int j=0;j<gRecs[i].NumSubjects;j++) {
- outs<<gRecs[i].Subjects[j].Code<<" ";
- outs<<gRecs[i].Subjects[j].Status<<" ";
- outs<<gRecs[i].Subjects[j].Mark<<"\n";
- }
- i++;
- outs<<"\n";
- //fout.ignore();
- }
- outs.close();
- cout<<gNumRecs<<"records saved ";
- }
- void UpdateRecord()
- {// updates status or mark of specified subject of specified student number
- /*
- print "Enter student number: "
- read student number
- i = FindRecord(StudentNumber);
- if record not found
- print "Record not found!"
- else
- display the found record
- request subject code from user
- if subject code is found then
- ask user to select status or mark
- request new status or mark
- update status or mark
- else
- print "Subject code not found!"
- */
- long StudentNo;
- cout << "Enter student number: ";
- cin >> StudentNo;
- int i = FindRecord(StudentNo);
- if(i==-1)
- cout << "Record not found!\n";
- else{
- PrintRecord(i);
- cout<<"Subject code: ";
- char code [8];
- cin>>code;
- for(int j=0; j<gRecs[i].NumSubjects; j++)
- {
- if (strcmp(gRecs[i].Subjects[j].Code, code)==0){
- char uinput;
- cout<<"Select mark or status:";
- cin>>uinput;
- switch(uinput){
- case 'm':
- int Nmark;
- cout<<"new mark: ";
- cin>>Nmark;
- gRecs[i].Subjects[j].Mark=Nmark;
- break;
- case 's':
- char Nstatus;
- cout<<"select new status:"
- <<"\n\te: enrolled"
- <<"\n\tp: provisional"
- <<"\n\tw: withdrawn";
- cin>>Nstatus;
- switch(Nstatus){
- case 'e':
- gRecs[i].Subjects[j].Status=eEnrolled;
- break;
- case 'p':
- gRecs[i].Subjects[j].Status=eProvisional;
- break;
- case 'w':
- gRecs[i].Subjects[j].Status=eWithdrawn;
- break;
- }
- }
- }
- }
- }
- // ============= Private Function Definitions =========================
- void PrintRecord(int i){
- // Prints record i on screen
- /*
- print gRecs[i] StudentNo;
- print gRecs[i] FirstName;
- print gRecs[i] LastName;
- print gRecs[i] NumSubjects;
- for j=0 to NumSubjects
- print gRecs[i] Subjects[j] Code;
- print gRecs[i] Subjects[j] Status;
- print gRecs[i] Subjects[j] Mark;
- */
- cout<<"Student No"<<gRecs[i].StudentNo<<endl;
- cout<<"FirstName"<<gRecs[i].FirstName<<endl;
- cout<<"LastName"<<gRecs[i].LastName<<endl;
- cout<<"NumSubjects"<<gRecs[i].NumSubjects<<endl;
- cout<<"Subjects:"<<endl;
- for(int j=0;j<gRecs[i].NumSubjects;j++)
- {
- cout<<gRecs[i].Subjects[j].Code<<" ";
- switch(gRecs[i].Subjects[j].Status)
- {
- case eEnrolled:
- cout<<"Enrolled";
- break;
- case eProvisional:
- cout<<"Provisional";
- break;
- case eWithdrawn:
- cout<<"Withdrawn";
- break;
- }
- cout<<gRecs[i].Subjects[j].Mark<<endl;
- }
- }
- int FindRecord(long StudentNo)
- {// returns index of matching record or -1 if not found
- /*
- for i=0 to gRecs
- if gStudRecs[i] StudentNo == StudentNo
- return i
- */
- for(int i=0;i<gNumRecs;i++){
- // cout<<gRecs[i].StudentNo<<endl;
- if(gRecs[i].StudentNo == StudentNo)
- return i;
- }
- return -1;
- }
- void PrintMenu();
- /*int main(){
- char Command;
- ReadFile();
- PrintMenu();
- do{
- cout << "Command: ";
- cin >> Command;
- Command=tolower(Command);
- switch (Command)
- {
- case 'u':
- UpdateRecord();
- break;
- case 'd':
- DisplayRecord();
- break;
- case 'm':
- PrintMenu();
- break;
- case 'q':
- break;
- default:
- cerr << "Illegal Command\n";
- PrintMenu();
- }
- } while (Command != 'q');
- SaveFile();
- return 0;
- }
- */
- void PrintMenu(){
- cout << "Commands Available:\n";
- cout << " d - Display Record\n";
- cout << " u - Update Record\n";
- cout << " m - Print Menu\n";
- cout << " q - Quit the program\n\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement