Форум программистов, компьютерный форум CyberForum.ru

Упорядочить список студентов по году рождения и распечатать его - C++

Войти
Регистрация
Восстановить пароль
 
N-Dubz
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 27
02.06.2013, 08:39     Упорядочить список студентов по году рождения и распечатать его #1
Здравствуйте помогите написать программу.
На диске имеется файл данных STUDENT.DAT.упорядочить список студентов по году рождения и распечатать его.
Заранее большое спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2013, 08:39     Упорядочить список студентов по году рождения и распечатать его
Посмотрите здесь:

Упорядочить список студентов по году рождению C++
Студентов поступивших в нечетном году занести в список, отличный от общего C++
C++ Распечатать список учеников , фамилии которых начинаются на букву В, с указанием даты их рождения
Распечатать анкетные данные студентов, успевающих на 4 и 5 C++
Распечатать список студентов, которые получили только оценки 5 на экзаменах, в возрастающем порядке по возрасту C++
C++ Распечатать список студентов дни рождения которых приходятся на лето
Упорядочить список студентов по возрастанию среднего балла C++
Распечатать анкетные данные студентов, успевающих на 4 и 5 C++
C++ Распечатать список студентов со средним баллом выше общего среднего балла
C++ Распечатать список студентов дни рождения которых приходятся на лето
C++ Сортировка студентов по дате рождения
C++ Распечатать список студентов упорядоченный по году рождения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
02.06.2013, 09:26     Упорядочить список студентов по году рождения и распечатать его #2
N-Dubz, может ты выложишь сюда этот файл?
MarVaL
С++ Beginner
 Аватар для MarVaL
116 / 116 / 16
Регистрация: 28.02.2013
Сообщений: 246
02.06.2013, 10:25     Упорядочить список студентов по году рождения и распечатать его #3
Исходник:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
 
struct Birthday {
  int d, m, y;
};
 
struct FullName {
  std::string name;
  std::string surname;
  std::string patronymic;
};
 
struct Student {
  FullName full_name;
  Birthday birthday;
};
 
struct List {
private:
  Student student;
  List *next;
public:
  List() : next(0) { }
  ~List();
  void add(const Student&);
  void show() const;
  void sort();
  void clear();
} *Head, *Temp;
 
List::~List() { }
 
void List::add(const Student & s) {
  List *node = new List;
  node->student = s;
  if(!Head) {
    Head = Temp = node;
    node->next = 0;
  } else {
    Temp->next = node;
    node->next = 0;
    Temp = node;
  }
}
 
void List::show() const { 
  List *tmp = Head;
  std::cout << std::setw(25) << std::left << "Full Name" << std::setw(12) << std::right << "Birthday" << std::endl;
  while(tmp) {
    std::cout << tmp->student.full_name.name << ' ' << tmp->student.full_name.surname << ' ' 
    << tmp->student.full_name.patronymic << std::setw(4) << std::right << tmp->student.birthday.d << std::setw(3) 
    << tmp->student.birthday.m << std::setw(5) << tmp->student.birthday.y << std::endl;
    tmp = tmp->next;
  }
}
 
void List::clear() {
  List *tmp = Head;
  while(tmp) {
    List *tmp1 = tmp->next;
    delete tmp;
    tmp = tmp1;
  }
}
 
List* readFile();
void sort(Student *, int);
 
int main() {
  List *list = readFile();
  list->show();
  list->clear();
  return 0;
}
 
 
List* readFile() {
  std::ifstream fin("stud.txt");
  Student students[10];
  int counter = 0;
  while(!fin.eof()) {
    Student student;
    std::string name, surname, patronymic;
    int d, m, y;
    fin >> name >> surname >> patronymic >> d >> m >> y;
    student.full_name.name = name;
    student.full_name.surname = surname;
    student.full_name.patronymic = patronymic;
    student.birthday.d = d;
    student.birthday.m = m;
    student.birthday.y = y;
    students[counter] = student;
    counter++;
  }
  sort(students, counter);
  List *list = new List;
  for(int i = 0; i < counter; ++i)
    list->add(students[i]);
  return list;
}
 
void sort(Student *students, int counter) {
  for(int i = 0; i < counter; ++i) {
    int i_min = i;
    for(int j = i + 1; j < counter; ++j)
      if(students[i].birthday.y > students[j].birthday.y)
        i_min = j;
    Student tmp = students[i_min];
    students[i_min] = students[i];
    students[i] = tmp;
  }
}

Файл:
Кликните здесь для просмотра всего текста
Andrey Mihailov Sergeevich 22 5 1991
Sergey Nikolaem Andreevich 5 8 1979
Pavel Novaikin Sergeevich 15 11 1992
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
02.06.2013, 11:19     Упорядочить список студентов по году рождения и распечатать его #4
Конечно, всё можно было сделать намного проще, но мне почему то захотелось так. Я сделал сортировку, только по году, т.е. если годы одинаковые, то сортировки не будет. Чтобы было всё как надо, измени немного оператор <, в классе Студент. Если не получиться, или если тебе нужно код по проще, пиши.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <vector>
 
 /////////////////////////////////////////////////////////////////////////////////
// ---------------------------------STUDENT ---------------------------------//
 
class Student
{
    struct Birthday {
        Birthday(int _d, int _m, int _y): d(_d), m(_m), y(_y) { }
 
        int d, m, y;
    };
    
    struct FullName {
        FullName(std::string _name, std::string _surname, std::string _patronymic):
            name(_name), surname(_surname), patronymic(_patronymic) { }
 
        std::string name, surname, patronymic;
    };
 
    Birthday birthday;
    FullName fullname;
 
public:
    Student(std::string _name, std::string _surname, std::string _patronymic,
        int _d, int _m, int _y):
    fullname(FullName(_name, _surname, _patronymic)), birthday(Birthday(_d, _m, _y))
    { }
 
    bool operator< (const Student& rhs) { 
        return birthday.y < rhs.birthday.y; 
    }
 
    friend std::ostream& operator<< (std::ostream&, const Student&);
 
};
 
std::ostream& operator<< (std::ostream& os, const Student& stud)
{
    os << stud.fullname.surname << ' ' << stud.fullname.name << ' ' << stud.fullname.patronymic 
        << std::setw(0x5) << stud.birthday.d << '.' << stud.birthday.m << '.' << stud.birthday.y;
 
    return os;
}
 
 // ---------------------------------END STUDENT -----------------------------//
/////////////////////////////////////////////////////////////////////////////////
 
 
void StudSort(std::vector<Student>& stud) { 
    std::sort(stud.begin(), stud.end());
}
 
 
void Print(const Student& stud) { 
    std::cout << stud << std::endl; 
}
 
 
 // ---------------------------------MAIN ------------------------------------//
/////////////////////////////////////////////////////////////////////////////////
 
int main()
{
    std::vector<Student> studBase;
 
    std::ifstream ifsStud("STUDENT.DAT");
 
    std::string n, s, p;
    int d, m, y;
 
    if (!ifsStud.is_open()) { std::cerr << "ERROR! File can't opened. \n";
        exit(EXIT_FAILURE);
    }
 
    while (!ifsStud.eof())
    {
        ifsStud >> n; ifsStud >> s; ifsStud >> p;
        ifsStud >> d; ifsStud >> m; ifsStud >> y;
 
        studBase.push_back(Student(n, s, p, d, m, y));
    }
 
    StudSort(studBase);
 
    std::for_each(studBase.begin(), studBase.end(), Print);
 
    system("PAUSE");
    return 0;
}
N-Dubz
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 27
02.06.2013, 11:27  [ТС]     Упорядочить список студентов по году рождения и распечатать его #5
мне бы код попроще, если можно.
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
02.06.2013, 12:36     Упорядочить список студентов по году рождения и распечатать его #6
N-Dubz,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <algorithm>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
// --------------------------------------------------------------------------------
struct Student // структура для сохранения информации прочитаной из файла
{
    Student(std::string _n, std::string _s, std::string _p, int _d, int _m, int _y):
        n(_n), s(_s), p(_p), d(_d), m(_m), y(_y) { }
    
    std::string n, s, p;
    int d, m, y;
};
// ---------------------------------------------------------------------------------
 
void Print(const std::vector<Student>& stud) // функция печати содержимого вектора
{
    for (auto i = stud.begin(); i != stud.end(); ++i)
    {
        std::cout << i->n << ' ' << i->s << ' ' << i->p 
            << " - " << i->d << '.' << i->m << '.' << i->y << std::endl;
    }
}
 
bool Pred(const Student& s1, const Student& s2) // предикат сортировки (в нашем случае это год)
{
    return s1.y < s2.y;
}
 
 
int main()
{
    std::vector<Student> studBase; // создаём вектор структур
 
    std::ifstream ifsStud("STUDENT.dat"); // поток для работы с файлом
 
    std::string n, s, p; // вспомагательные
    int d, m, y; // переменные
 
    if (!ifsStud.is_open()) { std::cerr << "ERROR! File can't opened. \n";
        exit(EXIT_FAILURE);
    }
 
    while (!ifsStud.eof()) // пока не будет постигнут конец файла
    {
        ifsStud >> n; ifsStud >> s; ifsStud >> p;
        ifsStud >> d; ifsStud >> m; ifsStud >> y;
 
        studBase.push_back(Student(n, s, p, d, m, y));
    }
 
    std::sort(studBase.begin(), studBase.end(), Pred); // сортируем стандартной функцией
 
    Print(studBase); // выводим. 
 
 
    system("PAUSE");
    return 0;
}
Yandex
Объявления
02.06.2013, 12:36     Упорядочить список студентов по году рождения и распечатать его
Ответ Создать тему
Опции темы

Текущее время: 23:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru