From c568338e83232093e211775c2cad0fa3c1010c81 Mon Sep 17 00:00:00 2001 From: Coder Date: Mon, 30 Sep 2019 08:58:41 +0000 Subject: [PATCH] Upload files to '' --- CSCI251-A1- Spring 2019.pdf | Bin 0 -> 87929 bytes Readme.txt | 24 ++ abc.cpp | 541 ++++++++++++++++++++++++++++++++++++ abc.h | 120 ++++++++ driver.cpp | 33 +++ general_functions.cpp | 65 +++++ general_functions.h | 64 +++++ makefile | 11 + 8 files changed, 858 insertions(+) create mode 100644 CSCI251-A1- Spring 2019.pdf create mode 100644 Readme.txt create mode 100644 abc.cpp create mode 100644 abc.h create mode 100644 driver.cpp create mode 100644 general_functions.cpp create mode 100644 general_functions.h create mode 100644 makefile diff --git a/CSCI251-A1- Spring 2019.pdf b/CSCI251-A1- Spring 2019.pdf new file mode 100644 index 0000000000000000000000000000000000000000..07105a4916f28278d7746565bd568a784d718448 GIT binary patch literal 87929 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

dF+ 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 +#include +#include +# include "general_functions.h" +# include "abc.h" + +using namespace std; + +const int MAX_ATTEMPTS_ALLOWED = 3; + +input_files_name perform_checks_on_args( + int argc, char *argv[]) +{ + if (argc != 5) + { + cerr << "Expected 5 arguments, received " << argc + << " argument(s). Please provide exactly 5 arguments and " + "in correct order i.e.:\n" + "1. Program name/path (received automatically)\n" + "2. Students File such as Students.txt\n" + "3. Subjects File such as Subjects.txt\n" + "4. Teachers File such as Teachers.txt\n" + "5. Output-file such as Results.txt\n" + "\n" + "Run program similar to this:\n" + "$ ./ABC Students.txt Subjects.txt Teachers.txt " + "Results.txt\n"; + exit(1); + } + else + { + input_files_name args; + args.students = argv[1]; + args.subjects = argv[2]; + args.teachers = argv[3]; + args.results = argv[4]; + return args; + } +} + +input_files_textlines read_input_files( + input_files_name file_names) +{ + input_files_textlines files_textlines; + files_textlines.students = get_textfile_lines( + file_names.students); + files_textlines.subjects = get_textfile_lines( + file_names.subjects); + files_textlines.teachers = get_textfile_lines( + file_names.teachers); + + print_three_newlines(); + + return files_textlines; +} + +vector generate_students_struct( + vector students_lines) +{ + cout << "Processing students file text:" << endl; + + vector students; + int line_number = 0; + for (auto student_line:students_lines) + { + line_number++; + + // Ignoring empty line. Giving no warning/error for it either. + if (student_line.size() == 0) + continue; + + try + { + student a_student; + string ability_string; + string consistency_string; + string subject_sring; + + istringstream line(student_line); + getline(line, a_student.name, ','); + getline(line, a_student.code, ','); + getline(line, ability_string, ','); + a_student.ability = stoi(ability_string); + getline(line, consistency_string, ','); + a_student.consistency = stoi(consistency_string); + getline(line, a_student.program, ':'); + while(getline(line, subject_sring, ',')) + { + int subject_code = stoi(subject_sring); + if (subject_code > 0) + a_student.subjects.push_back(subject_code); + else + throw "Anything that you can"; + } + + if (a_student.name.size() == 0 + or a_student.code.size() != 6 + or is_string_some_positive_number( + a_student.code) == false + or a_student.ability < 0 + or a_student.ability > 100 + or a_student.consistency < 0 + or a_student.consistency > 15 + or a_student.program.size() == 0 + or a_student.subjects.size() == 0) + { + throw "All the things that you can"; + } + + students.push_back(a_student); + + cout << "Student Name: " << a_student.name << '\n' + << "Code: " << a_student.code << '\n' + << "Ability: " << a_student.ability << '\n' + << "Consistency: " << a_student.consistency << '\n' + << "Program Name: " << a_student.program << '\n' + << "Subjects code: "; + for (auto subject_code: a_student.subjects) + { + cout << subject_code << " "; + } + cout << '\n' << endl; + + } + catch(...) + { + cerr << "Non-Fatal Error Occured while processing student" + << " file lines into student structs. However as per " + << "specifiction, skipping proccesing anymore " + << "students.\n" + << "Line number: " << line_number << " is not in " + << "proper format.\n" + << "Actual Line:\n" + << student_line << "\n" + << "Expected line format:\n" + << "Name,Student code,Ability,Consistency,Program " + << "name:Subject list\n" + << "Where,\n" + << "1. Name is an non-empty string.\n" + << "2. Student code is 6 *digit* string.\n" + << "3. Ability is an integer in range 0 to 100.\n" + << "4. Consistency is an integer in range 0 to 15.\n" + << "5. Program name is an non-empty string.\n" + << "6. Subject list is the list of comma-seprated " + << "positive integers representing subject codes.\n"; + break; + } + } + + print_three_newlines(); + + return students; +} + +vector generate_subjects_struct( + vector subjects_lines) +{ + cout << "Processing subjects file text:" << endl; + + vector subjects; + int line_number = 0; + for (auto subject_line: subjects_lines) + { + line_number++; + + // Ignoring empty line. Giving no warning/error for it either. + if (subject_line.size() == 0) + continue; + + try + { + subject a_subject; + string difficulty_string; + string variability_string; + + istringstream line(subject_line); + getline(line, a_subject.name, ','); + getline(line, difficulty_string, ','); + a_subject.difficulty = stoi(difficulty_string); + getline(line, variability_string); + a_subject.variability = stoi(variability_string); + + if (a_subject.name.size() == 0 + or a_subject.difficulty < -15 + or a_subject.difficulty > 15 + or a_subject.variability < -3 + or a_subject.variability > 3) + { + throw "Buzzwords"; + } + + subjects.push_back(a_subject); + + cout << "Subject Name: " << a_subject.name << '\n' + << "Difficulty: " << a_subject.difficulty << '\n' + << "Variability: " << a_subject.variability << '\n' + << endl; + + } + catch (...) + { + cerr << "Fatal error occured while processing subjects " + << "file lines into subject structs. Line: " + << line_number << " is not in proper format.\n" + << "Actual line:\n" + << subject_line << "\n" + << "Expected line format: \n" + << "Name,Difficulty,Variability\n" + << "Where,\n" + << "1. Name is a non-empty string.\n" + << "2. Diffuculty is interger in range -15 to 15.\n" + << "3. Variability is integer in range -3 to 3.\n"; + exit(3); + } + } + + print_three_newlines(); + + return subjects; +} + +vector generate_teachers_struct( + vector teachers_lines) +{ + cout << "Processing teachers file text:" << endl; + + vector teachers; + int line_number = 0; + for (auto teacher_line: teachers_lines) + { + line_number++; + + // Ignoring empty line. Giving no warning/error for it either. + if (teacher_line.size() == 0) + continue; + + try + { + teacher a_teacher; + istringstream line(teacher_line); + string toughness_string; + string variability_string; + string subject_string; + + getline(line, a_teacher.name, ','); + getline(line, toughness_string, ','); + a_teacher.toughness = stoi(toughness_string); + getline(line, variability_string, ':'); + a_teacher.variability = stoi(variability_string); + while(getline(line, subject_string, ',')) + { + int subject_code = stoi(subject_string); + if (subject_code > 0) + a_teacher.subjects.push_back(subject_code); + else + throw "Cheesy praises at teacher"; + } + + if (a_teacher.name.size() == 0 + or a_teacher.toughness < -15 + or a_teacher.toughness > 15 + or a_teacher.variability < -3 + or a_teacher.variability > 3 + or a_teacher.subjects.size() == 0) + { + throw "some swag"; + } + + cout << "Teacher Name: " << a_teacher.name << '\n' + << "Toughness: " << a_teacher.toughness << '\n' + << "Variability: " << a_teacher.variability << '\n' + << endl; + + teachers.push_back(a_teacher); + } + catch (...) + { + cerr << "Fatal error occured while processing teachers " + << "file lines into teacher structs. Line: " + << line_number << " is not in proper format.\n" + << "Actual line:\n" + << teacher_line << "\n" + << "Expected line format: \n" + << "Name,Toughness,Variability:Subjects List\n" + << "Where,\n" + << "1. Name is a non-empty string.\n" + << "2. Toughness is interger in range -15 to 15.\n" + << "3. Variability is integer in range -3 to 3.\n" + << "4. Subects list is comma-seprated list of positive" + << "integers representing subjects codes.\n"; + exit(4); + } + } + + print_three_newlines(); + + return teachers; +} + +void add_teachers_vector_index_number_to_subjects_struct( + vector &teachers, + vector &subjects) +{ + for (int i=0; i < teachers.size(); i++) + { + for (auto subject_code: teachers[i].subjects) + { + if (subject_code <= subjects.size()) + { + /* -1 and +1 since indexes starts from 0. + */ + subjects[subject_code-1].teachers.push_back(i+1); + } + else + { + cerr << "Fatal error. Subject code " << subject_code + << " of teacher: " << i+1 << " i.e. " + << teachers[i].name << " is more than total " + << "number of subjects i.e. " << subjects.size() + << '\n'; + exit(5); + } + } + } +} + +void process_students_and_generate_results( + vector &students, + vector &subjects, + vector &teachers) +{ + cout << "Processing students results:" << endl; + + int student_number = 0; + for (auto &a_student: students) + { + student_number++; + int attempts = 0; + + cout << "Processing student " << student_number << " i.e. " + << a_student.name << ":" << endl; + + for (int i=0; i < a_student.subjects.size(); i++) + { + attempts++; + result a_result; + + a_result.subject_code = a_student.subjects[i]; + if (a_result.subject_code > subjects.size()) + { + cerr << "Fatal error. Subject code " + << a_result.subject_code << " of student: " + << student_number << " i.e. " << a_student.name + << " is more than total number of subjects i.e. " + << subjects.size() << '\n'; + exit(5); + } + // -1 since index starts at 0 + auto &a_subject = subjects[a_result.subject_code-1]; + a_result.subject_name = a_subject.name; + + a_result.teacher_code = pick_teacher_randomly( + a_subject.teachers); + // -1 since index starts at 0 + auto &a_teacher = teachers[a_result.teacher_code-1]; + a_result.teacher_name = a_teacher.name; + + int attempts_based_marks_modifier = (attempts-1)*5; + a_result.mean = ( + a_student.ability + - a_subject.difficulty + - a_teacher.toughness + + attempts_based_marks_modifier); + + a_result.standard_deviation = ( + a_student.consistency + - a_subject.variability + - a_teacher.variability); + a_result.standard_deviation = absolute_number( + a_result.standard_deviation); + + int minimum_possible_marks = ( + a_result.mean - a_result.standard_deviation); + minimum_possible_marks = bigger_number( + minimum_possible_marks, 0); + minimum_possible_marks = smaller_number( + minimum_possible_marks, 100); + + int maximum_possible_marks = ( + a_result.mean + a_result.standard_deviation); + maximum_possible_marks = smaller_number( + maximum_possible_marks, 100); + maximum_possible_marks = bigger_number( + maximum_possible_marks, 0); + + int marks = random_int( + minimum_possible_marks, + maximum_possible_marks); + a_result.marks = marks; + a_result.grade = return_grade_for_float((float)marks); + a_student.results.push_back(a_result); + + cout << a_result.subject_name << " (" + << a_result.subject_code << ") by " + << a_result.teacher_name << " (" + << a_result.teacher_code << ") Attempt: " + << attempts << " Mean: " + << a_result.mean << " Standard Deviation: " + << a_result.standard_deviation << " Maximum: " + << maximum_possible_marks << " Minimum: " + << minimum_possible_marks << " Marks: " + << a_result.marks << " Grade: " << a_result.grade + << endl; + + // Supplementary provided. + if (marks >= 45 and marks < 50) + { + int supplementary_marks_modifier = 5; + a_result.mean += supplementary_marks_modifier; + marks = random_int( + minimum_possible_marks, + maximum_possible_marks) + + supplementary_marks_modifier; + a_result.marks = marks; + + if (marks >= 50) + { + a_result.grade = "SP"; + } + else + a_result.grade = "F"; + + a_student.results.push_back(a_result); + + cout << "Supplementary Marks: " << a_result.marks + << " Grade: " << a_result.grade << endl; + } + + // Fail. + if (a_result.grade == "F") + { + /* Max attempts allowed reached. Excluded from college. + * No more subjects are taught. + */ + if (attempts >= MAX_ATTEMPTS_ALLOWED) + { + a_student.overall_marks += marks; + cout << endl; //cosmetic hotfix + a_student.overall_grade_or_status = "F"; + a_student.subjects_studied += 1; + break; + } + // Repeat same subject + else + { + i--; + } + } + // Study next subject with attempt reset to 0. + else + { + a_student.overall_marks += marks; + attempts = 0; + a_student.subjects_studied += 1; + } + + // line between every subject attempt + cout << endl; + } + + a_student.percentage = ((float) + ((a_student.overall_marks*100)/\ + a_student.subjects_studied)/100.0); + + if (a_student.overall_grade_or_status == "?") + { + a_student.overall_grade_or_status =\ + return_grade_for_float(a_student.percentage); + } + + cout << "Overall Percentage: " << a_student.percentage + << " Overall Grade: " << a_student.overall_grade_or_status + << '\n' << endl; + } +} + +void write_results_to_output_file( + vector &students, std::string results_file_name) +{ + ofstream results_file(results_file_name); + + if (!results_file.good()) + { + cerr << "Fatal Error: Could not write results to output-file:" + << results_file_name << "\n" + << "Possibly do not have write acces to directory\n"; + exit(6); + } + + for (auto a_student: students) + { + results_file << a_student.code << "-" << a_student.name << ","\ + << a_student.program << "-" << a_student.percentage << "-"\ + << a_student.overall_grade_or_status << ":"; + for (auto a_result:a_student.results) + { + results_file << a_result.subject_code << "-"\ + << a_result.subject_name << ","\ + << a_result.teacher_code << "-"\ + << a_result.teacher_name << ","\ + << a_result.mean << "+-"\ + << a_result.standard_deviation << "=>"\ + << a_result.marks << "-" << a_result.grade << ";"; + } + results_file << "\n"; + } + results_file.close(); +} + +int pick_teacher_randomly(vector teachers_codes) +{ + int selected_teacher_index = random_int( + 0, (teachers_codes.size()-1)); + return teachers_codes[selected_teacher_index]; +} + +string return_grade_for_float(float percentage) +{ + if (percentage >= 85.0) + return "HD"; + else if (percentage >= 75.0) + return "D"; + else if (percentage >= 65.0) + return "C"; + else if (percentage >= 50.0) + return "P"; + else + return "F"; +} diff --git a/abc.h b/abc.h new file mode 100644 index 0000000..1dbff25 --- /dev/null +++ b/abc.h @@ -0,0 +1,120 @@ +// License: AGPLv3 or later. https://www.gnu.org/licenses/licenses.html + +/* Functions which are written specifically for A Big College (ABC) + */ + +#ifndef _ABC_H_ +#define _ABC_H_ + +#include + +struct input_files_name +{ + std::string students; + std::string subjects; + std::string teachers; + std::string results; // output-file +}; + +struct input_files_textlines +{ + std::vector students; + std::vector subjects; + std::vector teachers; +}; + +struct teacher +{ +/* teacher's index no.+1 is treated as teacher code which is used + * internally in subject's struct as teachers who can teach those + * subjects + */ +// int code; + std::string name; + int toughness; + int variability; + std::vector subjects; +}; + +struct result +{ + int subject_code; + /* Even though redundant, it makes function statements a lot more + * readable. + */ + std::string subject_name; + int teacher_code; + // Same as previous comment + std::string teacher_name; + int mean; + int standard_deviation; + int marks; + std::string grade; +}; + +struct student +{ + std::string name; + std::string code; + int ability; + int consistency; + std::string program; + // Only the last attempt of every subject is added to overall_marks + int overall_marks = 0; + /* Following calculation is used to obtain percentage upto two decimal + * points precision only: + * ((float)((overall_marks*100)/subjects_studied)/100.0) + */ + float percentage; + /* If fail, F will be added at exclusion time. Else, will be + * calculated based on percentage. + */ + std::string overall_grade_or_status = "?"; + std::vector subjects; + // used for calculating overall percentage + int subjects_studied = 0; + std::vector results; +}; + +struct subject +{ +// subject's index no.+1 is treated as subject code +// int code; + std::string name; + int difficulty; + int variability; + std::vector teachers; +}; + +input_files_name perform_checks_on_args( + int argc, char *argv[]); + +input_files_textlines read_input_files( + input_files_name file_names); + +std::vector generate_students_struct( + std::vector students); + +std::vector generate_subjects_struct( + std::vector subjects); + +std::vector generate_teachers_struct( + std::vector teachers); + +void add_teachers_vector_index_number_to_subjects_struct( + std::vector &teachers, + std::vector &subjects); + +void process_students_and_generate_results( + std::vector &students, + std::vector &subjects, + std::vector &teachers); + +void write_results_to_output_file( + std::vector &students, std::string results_file_name); + +int pick_teacher_randomly(std::vector teachers_codes); + +std::string return_grade_for_float(float percentage); + +#endif diff --git a/driver.cpp b/driver.cpp new file mode 100644 index 0000000..816c33d --- /dev/null +++ b/driver.cpp @@ -0,0 +1,33 @@ +// License: AGPLv3 or later. https://www.gnu.org/licenses/licenses.html + +#include +#include +#include "abc.h" + +using namespace std; + +int main(int argc, char *argv[]) +{ + input_files_name args = perform_checks_on_args(argc, argv); + + input_files_textlines input_files_by_line = read_input_files( + args); + + vector students = generate_students_struct( + input_files_by_line.students); + + vector subjects = generate_subjects_struct( + input_files_by_line.subjects); + + vector teachers = generate_teachers_struct( + input_files_by_line.teachers); + + add_teachers_vector_index_number_to_subjects_struct(teachers, subjects); + + process_students_and_generate_results( + students, subjects, teachers); + + write_results_to_output_file(students, args.results); + + return 0; +} diff --git a/general_functions.cpp b/general_functions.cpp new file mode 100644 index 0000000..c6f49dd --- /dev/null +++ b/general_functions.cpp @@ -0,0 +1,65 @@ +// License: AGPLv3 or later. https://www.gnu.org/licenses/licenses.html + +#include +#include +#include +# include "general_functions.h" + +using namespace std; + +vector get_textfile_lines(std::string filename) +{ + ifstream file(filename); + vector file_lines; + + if (! file.good()) + { + cerr << "Failed to open/read file: " << filename\ + << ". Non-exhaustive list of possible reasons:\n"\ + << "1. File does not exist.\n"\ + << "2. Unable to read file due to:\n"\ + << "2.1 Don't have read access to file\n"\ + << "2.2 File is opened elsewhere and some program have a "\ + << "lock on file.\n"; + exit(2); + } + + cout << "Reading file: " << filename << endl; + + while (file.good()) + { + string line; + getline(file, line); + file_lines.push_back(line); + } + + file.close(); + + return file_lines; +} + +int random_int(int lower_bound, int upper_bound) +{ + static std::random_device seed; + static std::mt19937 random_number_generator(seed()); + std::uniform_int_distribution range( + lower_bound, upper_bound); + return range(random_number_generator); +} + +bool is_string_some_positive_number(std::string a_string) +{ + for (int i=0; i < a_string.size(); i++) + { + string character(1, a_string[i]); + try + { + stoi(character); + } + catch(...) + { + return false; + } + } + return true; +} diff --git a/general_functions.h b/general_functions.h new file mode 100644 index 0000000..7584f65 --- /dev/null +++ b/general_functions.h @@ -0,0 +1,64 @@ +// License: AGPLv3 or later. https://www.gnu.org/licenses/licenses.html + +/* General functions which can be used in any program + */ + +#ifndef _GENERAL_FUNCTIONS_H_ +#define _GENERAL_FUNCTIONS_H_ + +#include + +std::vector get_textfile_lines(std::string filename); + +int random_int(int lower_bound, int upper_bound); + +bool is_string_some_positive_number(std::string a_string); + +/* Its a good practice to prototype all functions including which are + * defined in header file itself such as inline functions before defining + * any function. This way, even if we use one function in another + * function, we do not have to worry about function undefined error + * possibilities. + */ + +inline int absolute_number(int number); + +inline int smaller_number(int a, int b); + +inline int bigger_number(int a, int b); + +/* this function is used between different parts of program's standard + * output for better sepration of dissimilar outputs + */ +inline void print_three_newlines(); + +inline int absolute_number(int number) +{ + if (number < 0) + return -(number); + else + return number; +} + +inline int smaller_number(int a, int b) +{ + if (a > b) + return b; + else + return a; +} + +inline int bigger_number(int a, int b) +{ + if (a < b) + return b; + else + return a; +} + +inline void print_three_newlines() +{ + std::cout << "\n" << std::endl; +} + +#endif diff --git a/makefile b/makefile new file mode 100644 index 0000000..9c3cb73 --- /dev/null +++ b/makefile @@ -0,0 +1,11 @@ +ABC: driver.o abc.o general_functions.o + CC -std=c++11 -o ABC driver.o abc.o general_functions.o && rm *.o + +driver.o: driver.cpp abc.h + CC -std=c++11 -c driver.cpp + +abc.o: abc.cpp general_functions.h + CC -std=c++11 -c abc.cpp + +general_functions.o: general_functions.cpp + CC -std=c++11 -c general_functions.cpp