ive become frustrated with this application im trying to solve and would be most grateful if someone could help.
im designing an application which will enable a user to enter marks for a module and work out their result.
Data for a module is stored in a file.
Most of it is yet to be finished but my problem currently is to do with the find_module() function. The function in the class Module called bool is_match has to compare the module code entered by the user with the module codes read into a character array from the text file. If theres a match i.e my module code entered exists the function should return true to my find_module().
text file
Code:
3sfe408
Software Development Principles
12
1
Tut1 2
Tut2 2
Tut3 2
Tut4 2
Tut5 2
Tut6 2
Tut7 2
Tut8 2
Tut9 2
Tut10 2
Cswk1 10
Cswk2 20
50
50
30
30
40
30
3sfe403
System Software
4
1
Test1 10
Test2 10
Test3 10
Test4 10
40
60
30
30
40
30
3sfe407
Introduction to Internet Programming
9
1
Tut1 2
Tut2 3
Tut3 2
Tut4 2
Tut5 2
Tut6 3
Tut7 3
Tut8 2
Cswk 20
40
60
30
30
40
30
3isy453
Modelling in Information Systems
2
1
Cwk1 10
Cwk2 30
40
60
30
30
40
30
header file
Code:
// file module.h
#include <iostream>
#include <fstream>
using namespace std;
const int MODULE_NAME_SIZE = 50; // e.g. System Software
const int CSWK_NAME_SIZE = 10; // e.g Cswk1
const int MODULE_CODE_SIZE = 10; // e.g. 3sfe403
const int MAX_COURSEWORKS = 20; // arbitrary limit?
class Module
{
private:
char code[MODULE_CODE_SIZE]; // module code
char name[MODULE_NAME_SIZE]; // module name
int n_cswks; // number of courseworks
int n_exams; // number of exams (0 or 1)
char names[MAX_COURSEWORKS][CSWK_NAME_SIZE]; // names of courseworks
int weightings[MAX_COURSEWORKS]; // weighting of each cswk
int c_wtg; // overall coursework weighting
int ex_wtg; // overall exam weighting
int c_thold; // coursework threshold
int ex_thold; // exam threshold
int passmrk; // passmark
int refer_mark; // referral mark
public:
Module();
bool has_exam(); // returns true if module has an exam
int num_cswks(); // returns number of cswks
bool is_match(char id[]); // returns true if id matches code
char* get_name(); // returns name of module as a string
char* get_cswk_name(int i); // name of coursework i as a string
int get_cswk_wtg(int i); // weighting for coursework i
int get_c_wtg(); // returns coursework weighting
int get_ex_wtg(); // returns exam weighting
int get_c_thold(); // returns cswk threshold
int get_ex_thold(); // returns exam threshold
int get_passmrk(); // returns minimum pass mark
int get_refer_mark(); // returns minimum referral mark
void get(ifstream&); // gets data from file
};
module.cc file
Code:
// file module.cc
#include <iostream>
#include "module.h"
#include <cstring>
using namespace std;
Module::Module()
{
int n_cswks =0; // number of courseworks
int n_exams=0; // number of exams (0 or 1)
int c_wtg=0; // overall coursework weighting
int ex_wtg=0; // overall exam weighting
int c_thold=0; // coursework threshold
int ex_thold=0; // exam threshold
int passmrk=0; // passmark
int refer_mark=0; // referral mark
}
bool Module::is_match(char id)
{
return(strcmp(total,id)==0);
}
char* Module::get_name()
{
return "DUMMY MODULE NAME"; // UNFINISHED
}
char* Module::get_cswk_name(int i)
{
return "CSWK"; // UNFINISHED
}
int Module::get_cswk_wtg(int i)
{
return 0; // UNFINISHED
}
int Module::get_c_wtg()
{
return 0; // UNFINISHED
}
int Module::get_ex_wtg()
{
return 0; // UNFINISHED
}
int Module::get_c_thold()
{
return 0; // UNFINISHED
}
int Module::get_ex_thold()
{
return 0; // UNFINISHED
}
int Module::get_passmrk()
{
return 0; // UNFINISHED
}
int Module::get_refer_mark()
{
return 0; // UNFINISHED
}
bool Module::has_exam()
{
return false; // UNFINISHED
}
int Module::num_cswks()
{
return 0; // UNFINISHED
}
void Module::get(ifstream& infile)
{
char dummy[80];
infile.getline(code,MODULE_CODE_SIZE) ;
infile.getline(name,MODULE_NAME_SIZE) ;
infile >> n_cswks >> n_exams;
for (int i = 0; i < n_cswks; i++)
{
infile >> names[i] >> weightings[i];
}
infile >> c_wtg >> ex_wtg >> c_thold >> ex_thold >> passmrk >> refer_mark;
infile.getline(dummy,80);
}
main file
Code:
// file demo.cc
#include "module.h"
#include <iostream>
using namespace std;
enum Result { PASS, FAIL, REFER}; // used in Result
const int MAX_NUMBER_OF_MODULES = 50; // arbitrary
int find_module(Module modules[],int n,char code[])
{
int result;
int i =0;
while(i < n)
{
if(modules[i].is_match(code))
{
result = i;
break;
}
i++;
}
// if found returns index of position of code in array of modules
// if not found returns -1
// n is number of modules read from input file
return result;
}
void get_marks(Module mod, int marks[])
{
// gets user entry of marks for module mod
cout << "Enter marks for " << mod.get_name() << endl;
cout << "Coursework marks ... " << endl;
int num_cswks = mod.num_cswks();
for (int i = 0; i < num_cswks; i++)
{
cout << " Enter % mark for " << mod.get_cswk_name(i) << " : ";
cin >> marks[i];
}
if(mod.has_exam())
{
cout <<"Enter exam mark : ";
cin >> marks[num_cswks];
}
}
void result(Module mod, int marks[])
{
// it displays the results (pass / fail / list of referrals
// mod is the module we are working on
// marks[] is the array of marks - both coursework and exam
// the exam mark is there is one is the last mark in marks[]
}
int main()
{
int marks[MAX_COURSEWORKS]; // actual coursework marks
char module_code[MODULE_NAME_SIZE];
Module m[MAX_NUMBER_OF_MODULES];
// open the data file if possible - abort if not found
ifstream infile("module.txt");
if (infile.fail())
{
cerr << "Unable to open input file.";
exit(1);
}
// read data from file and count modules
int i = 0;
while(infile)
{
m[i].get(infile);
if (infile)
{
i++;
}
if(i == MAX_NUMBER_OF_MODULES) break; // just in case!
}
int n_modules = i;
// get data from user
cout << "Enter module code : ";
cin >> module_code;
// check if the module exists
int num = find_module(m,n_modules,module_code);
if(num >= 0)
{ // module exists - num is array index
get_marks(m[num],marks);
result(m[num],marks);
}
else
{
cout << "Module " << module_code << " not found\n";
}
return 0;
}
at the moment when i run the program it displays "not found"
all i want it to do at this early stage is return the index of position of code in array of modules to main.
im not sure if theres a problem with the way im comparing it in the bool is_match function or if theres a problem in the find_module function with what im sending to be compared, or BOTH.