void end_table(std::ofstream &ostr, bool for_instructor, const std::vector<Student*> &students, int rank) { bool print_moss_message = false; if (rank != -1 && students[rank]->getMossPenalty() < -0.01) { print_moss_message = true; } if (print_moss_message) { ostr << "* = final grade with Academic Integrity Violation penalty<p> <p>\n"; } if (DISPLAY_FINAL_GRADE && students.size() > 50) { int total_A = grade_counts[Grade("A")] + grade_counts[Grade("A-")]; int total_B = grade_counts[Grade("B+")] + grade_counts[Grade("B")] + grade_counts[Grade("B-")]; int total_C = grade_counts[Grade("C+")] + grade_counts[Grade("C")] + grade_counts[Grade("C-")]; int total_D = grade_counts[Grade("D+")] + grade_counts[Grade("D")]; int total_passed = total_A + total_B + total_C + total_D; int total_F = grade_counts[Grade("F")]; int total_blank = grade_counts[Grade("")]; int total = total_passed + total_F + auditors + total_blank; ostr << "<p>\n"; ostr << "<table border=2 cellpadding=5 cellspacing=0>\n"; ostr << "<tr>\n"; ostr << "<td width=150>FINAL GRADE</td>"; ostr << "<td align=center bgcolor="<<GradeColor("A")<<" width=40>A</td><td align=center bgcolor="<<GradeColor("A-")<<" width=40>A-</td>"; ostr << "<td align=center bgcolor="<<GradeColor("B+")<<" width=40>B+</td><td align=center bgcolor="<<GradeColor("B")<<" width=40>B</td><td align=center bgcolor="<<GradeColor("B-")<<" width=40>B-</td>"; ostr << "<td align=center bgcolor="<<GradeColor("C+")<<" width=40>C+</td><td align=center bgcolor="<<GradeColor("C")<<" width=40>C</td><td align=center bgcolor="<<GradeColor("C-")<<" width=40>C-</td>"; ostr << "<td align=center bgcolor="<<GradeColor("D+")<<" width=40>D+</td><td align=center bgcolor="<<GradeColor("D")<<" width=40>D</td>\n"; if (for_instructor) { ostr << "<td align=center bgcolor="<<GradeColor("F")<<"width=40>F</td><td align=center width=40>dropped</td>\n"; ostr << "<td align=center width=40>audit</td>\n"; ostr << "<td align=center align=center width=40>took final</td>\n"; ostr << "<td align=center align=center width=40>total passed</td>\n"; ostr << "<td align=center align=center width=40>total</td>\n"; } ostr << "</tr>\n"; ostr << "<tr>\n"; ostr << "<td width=150># of students</td>"; ostr << "<td align=center width=40>"<<grade_counts[Grade("A")]<<"</td><td align=center width=40>"<<grade_counts[Grade("A-")]<<"</td>"; ostr << "<td align=center width=40>"<<grade_counts[Grade("B+")]<<"</td><td align=center width=40>"<<grade_counts[Grade("B")]<<"</td><td align=center width=40>"<<grade_counts[Grade("B-")]<<"</td>"; ostr << "<td align=center width=40>"<<grade_counts[Grade("C+")]<<"</td><td align=center width=40>"<<grade_counts[Grade("C")]<<"</td><td align=center width=40>"<<grade_counts[Grade("C-")]<<"</td>"; ostr << "<td align=center width=40>"<<grade_counts[Grade("D+")]<<"</td><td align=center width=40>"<<grade_counts[Grade("D")]<<"</td>\n"; if (for_instructor) { ostr << "<td align=center width=40>"<<grade_counts[Grade("F")]<<"</td><td align=center width=40>"<<grade_counts[Grade("")]<<"</td>\n"; ostr << "<td align=center width=40>"<<auditors<<"</td>\n"; ostr << "<td align=center width=40>"<<took_final<<"</td>\n"; ostr << "<td align=center width=40>"<<total_passed<<"</td>\n"; ostr << "<td align=center width=40>"<<total<<"</td>\n"; } ostr << "</tr>\n"; ostr << "<tr>\n"; ostr << "<td width=150>average OVERALL<br>of students with<br>this FINAL GRADE</td>"; ostr << "<td align=center width=40>"<<grade_avg[Grade("A")]<<"</td><td align=center width=40>"<<grade_avg[Grade("A-")]<<"</td>"; ostr << "<td align=center width=40>"<<grade_avg[Grade("B+")]<<"</td><td align=center width=40>"<<grade_avg[Grade("B")]<<"</td><td align=center width=40>"<<grade_avg[Grade("B-")]<<"</td>"; ostr << "<td align=center width=40>"<<grade_avg[Grade("C+")]<<"</td><td align=center width=40>"<<grade_avg[Grade("C")]<<"</td><td align=center width=40>"<<grade_avg[Grade("C-")]<<"</td>"; if (for_instructor) { ostr << "<td align=center width=40>"<<grade_avg[Grade("D+")]<<"</td><td align=center width=40>"<<grade_avg[Grade("D")]<<"</td>\n"; } else { ostr << "<td align=center width=40> </td><td align=center width=40> </td>\n"; } if (for_instructor) { ostr << "<td align=center width=40>"<<grade_avg[Grade("F")]<<"</td><td align=center width=40>"<<grade_avg[Grade("")]<<"</td>\n"; ostr << "<td align=center width=40> </td>\n"; ostr << "<td align=center width=40> </td>\n"; ostr << "<td align=center width=40> </td>\n"; ostr << "<td align=center width=40> </td>\n"; } ostr << "</tr>\n"; ostr << "</table><p>\n"; } ostr.close(); }
/* Start main function */ int main(void) { /* Variables */ FILE *infilep; /* Input file, examdat.txt */ FILE *outfilep; /* Output file, report.txt */ int quests; /* # of actual questions on test */ int idscan; /* Temp value for scanning IDs */ int studid[STUDENTS]; /* Student ID numbers array */ double stuperc[STUDENTS]; /* Percentage for each student */ char anskey[QUESTIONS]; /* Answer key array */ char stuans1[QUESTIONS]; /* Student 1's answers */ char stuans2[QUESTIONS]; /* Student 2's answers */ char stuans3[QUESTIONS]; /* Student 3's answers */ int miss[QUESTIONS]; /* Counts wrong answers per problem */ int right[STUDENTS]; /* Total number right per student */ int i; /* Counting variable */ /* More students can be added manually */ /* Open files */ infilep = fopen("examdat.txt", "r"); outfilep = fopen("report.txt", "w"); fscanf(infilep, "%d", &quests); /* # of questions */ /* Initializers */ for(i = 0; i < QUESTIONS; i++) { anskey[i] = 'f'; stuans1[i] = 'f'; stuans2[i] = 'f'; stuans3[i] = 'f'; miss[i] = 0; } for(i = 0; i < STUDENTS; i++) { studid[i] = 0; right[i] = 0; stuperc[i] = 0; } FGetAnswers(infilep, anskey, quests); /* Answer key */ /* Student Answers */ fscanf(infilep, "%d", &studid[0]); FGetAnswers(infilep, stuans1, quests); fscanf(infilep, "%d", &studid[1]); FGetAnswers(infilep, stuans2, quests); fscanf(infilep, "%d", &studid[2]); FGetAnswers(infilep, stuans3, quests); /* Student percentages calculations */ right[0] = quests - Grade(anskey, stuans1, miss, quests); right[1] = quests - Grade(anskey, stuans2, miss, quests); right[2] = quests - Grade(anskey, stuans3, miss, quests); for(i = 0; i < STUDENTS; i++) { stuperc[i] = ( (double) right[i] / (double) quests ) * 100; } /* Print to file */ fprintf(outfilep, " Exam Report\n\n"); fprintf(outfilep, "Question"); /* Answer key */ for(i = 1; i <= quests; i++) { fprintf(outfilep, " %d", i); } fprintf(outfilep, "\nAnswer "); for(i = 0; i < quests; i++) { fprintf(outfilep, " %c", anskey[i]); } fprintf(outfilep, "\n ID Score(%%)\n"); /* Student results */ for(i = 0; i < STUDENTS; i++) { fprintf(outfilep, "%d\t%.0f\n", studid[i], stuperc[i]); } fprintf(outfilep, "Question "); /* Missed results */ for(i = 1; i <= quests; i++) { fprintf(outfilep, " %d", i); } fprintf(outfilep, "\nMissed by"); for(i = 0; i < quests; i++) { fprintf(outfilep, " %d", miss[i]); } fclose(infilep); fclose(outfilep); return(0); }
void SearchDialog::CollectSearchResults() { QDate dateStart = QDate(); QDate dateEnd = QDate(); QDate gradeDateStart = QDate(); QDate gradeDateEnd = QDate(); if(searchFields.contains(Database::SearchFields::date)) { int yearStart = QDate::currentDate().year() - ui->ageStart->value(); dateStart = QDate(yearStart, QDate::currentDate().month(), QDate::currentDate().day()); int yearEnd = QDate::currentDate().year() - ui->ageEnd->value(); dateEnd = QDate(yearEnd, QDate::currentDate().month(), QDate::currentDate().day()); } if(searchFields.contains(Database::SearchFields::gradedate)) { gradeDateStart = ui->gradeDateStart->date(); gradeDateEnd = ui->gradeDateEnd->date(); } Profile searchUser = Profile(); if(ui->firstname->text() != "") { searchFields.append(Database::SearchFields::firstname); searchUser.Firstname = ui->firstname->text(); } if(ui->lastname->text() != "") { searchFields.append(Database::SearchFields::lastname); searchUser.Lastname = ui->lastname->text(); } if(ui->patronym->text() != "") { searchFields.append(Database::SearchFields::patronym); searchUser.Patronym = ui->patronym->text(); } if(searchFields.contains(Database::SearchFields::sex)) { searchUser.Sex = ui->sex->currentIndex()==0; } if(ui->document->text() != "") { searchFields.append(Database::SearchFields::document); searchUser.Document = ui->document->text(); } if(ui->addres->text() != "") { searchFields.append(Database::SearchFields::addres); searchUser.Addres = ui->addres->text(); } if(ui->telephone->text() != "") { searchFields.append(Database::SearchFields::telephone); searchUser.Telephone = ui->telephone->text(); } if(ui->sensei->text() != "") { searchFields.append(Database::SearchFields::sensei); searchUser.Sensei = ui->sensei->text(); } Grade searchGrade = Grade(); if(ui->grade->text() != "") { searchFields.append(Database::SearchFields::grade); searchGrade.GradeString = ui->grade->text(); } bool useOr = ui->searchMethod->currentIndex()==0; searchResults = Database::GetInstance()->FindProfiles(searchFields, searchUser, dateEnd, dateStart, searchGrade, gradeDateStart, gradeDateEnd, useOr); }