Цитата nosov_mikkail (
)
1.Дан массив, содержащий сведения о студентах некоторой группы: ФИО, оценки по пяти экзаменационным дисциплинам. Вывести сначала студентов, получающих повышенную стипендию, затем обычную, и, наконец, без стипендии. Организовать поиск студента по фамилии с выводом информации о нем. (использование структур)
main.cpp
Код
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <iostream>
#include <fstream>
#include "student.h"
int getChiselFromChar(char value)
{
switch (value) {
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
default:
return 0;
}
}
int getIntFromString(string str)
{
int result = getChiselFromChar(str[str.length()-1]);
for (int i=str.length()-2,k=1;i>=0;i--,k++)
{
result += getChiselFromChar(str[i]) * pow(10,k);
}
return result;
}
int main()
{
ifstream myfile("input.txt");
string tmp;
getline(myfile,tmp);
int count = getIntFromString(tmp);
Student **students = new Student*[count];
for (int i=0;i<count;i++)
{
string line;
getline(myfile,line);
int j = 0;
string surname = "";
while (line[j] != ' ') {
surname += line[j];
j++;
}
string name = "";
while (line[j] != ' ') {
name += line[j];
j++;
}
int rating1, rating2, rating3, rating4, rating5;
tmp = "";
while (line[j] != ' ') {
tmp += line[j];
j++;
}
rating1 = getIntFromString(tmp);
tmp = "";
while (line[j] != ' ') {
tmp += line[j];
j++;
}
rating2 = getIntFromString(tmp);
tmp = "";
while (line[j] != ' ') {
tmp += line[j];
j++;
}
rating3 = getIntFromString(tmp);
tmp = "";
while (line[j] != ' ') {
tmp += line[j];
j++;
}
rating4 = getIntFromString(tmp);
tmp = "";
while (line[j] != ' ') {
tmp += line[j];
j++;
}
rating5 = getIntFromString(tmp);
students[i] = new Student(surname,name,rating1,rating2,rating3,rating4,rating5);
}
string show = "show sort";
string find = "find ";
while (true) {
std::cout << "Enter the command: ";
std::cin >> tmp;
if (tmp == "exit")
break;
bool ok = false;
if (tmp.length() == show.length())
{
ok = true;
for (int i=0;i<show.length();i++)
{
if (tmp[i] != show[i])
{
ok = false;
break;
}
}
if (ok)
{
for (int i=0;i<count;i++)
if (students[i]->hightGrant())
students[i]->write();
for (int i=0;i<count;i++)
if (students[i]->normalGrant())
students[i]->write();
for (int i=0;i<count;i++)
if (students[i]->notGrant())
students[i]->write();
}
}
if (tmp.length() > find.length())
{
ok = true;
for (int i=0;i<find.length();i++)
if (tmp[i] != find[i])
{
ok = false;
break;
}
if (ok)
{
string surname = "";
for (int i=find.length();i<tmp.length();i++)
surname += tmp[i];
ok = false;
for (int i=0;i<count;i++)
if (surname == students[i]->surname)
{
students[i]->write();
ok = true;
break;
}
if (ok == false)
{
std::cout << "Surname not find" << endl;
}
ok = true;
}
}
if (ok == false)
{
std::cout << "Command not find" << endl;
}
}
return 0;
}
student.h
Код
#ifndef STUDENT_H
#define STUDENT_H
#include <stdlib.h>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
struct Student
{
public:
string surname;
string name;
int rating1, rating2, rating3, rating4, rating5;
public:
Student(string surname, string name, int rating1, int rating2,
int rating3, int rating4, int rating5);
bool hightGrant();
bool normalGrant();
bool notGrant();
void write();
};
#endif // STUDENT_H
student.cpp
Код
#include "student.h"
Student::Student(string surname, string name, int rating1, int rating2, int rating3, int rating4, int rating5)
{
this->surname = surname;
this->name = name;
this->rating1 = rating1;
this->rating2 = rating2;
this->rating3 = rating3;
this->rating4 = rating4;
this->rating5 = rating5;
}
bool Student::hightGrant()
{
return rating1 == 5 && rating2 == 5 && rating3 == 5 && rating4 == 5 && rating5 == 5;
}
bool Student::normalGrant()
{
return hightGrant() == false && rating1 >= 4 && rating2 >= 4 && rating3 >= 4 && rating4 >= 4 && rating5 >= 4;
}
bool Student::notGrant()
{
return rating1 < 4 || rating2 < 4 || rating3 < 4 || rating4 < 4 || rating5 < 4;
}
void Student::write()
{
std::cout << surname << " " << name << " " << rating1 << " " << rating2 << " " << rating3 << " " << rating4 << " " << rating5 << endl;
}
Входной файл с данными выглядит так
2
Иванов Иван 4 4 5 4 4
Романова Мария 5 5 5 5 5