Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <checkValid.h>
- #include <windows.h>
- #include <stdio.h>
- using namespace std;
- struct student{
- char surname[20];
- char name[20];
- char patronymic[30];
- unsigned int progress;
- struct{
- int day;
- int month;
- int year;
- }data;
- };
- unsigned int counter = 0;
- int menu();
- void dataProcessing(student* &arr);
- void add(student* &arr);
- void printer(student* &arr,int lim);
- void filler(student* &arr);
- void del(student* &arr);
- int search(student* &arr, int code);
- void sorter(student* &arr);
- void inKlass(student* &arr);
- void outKlass(student* &arr);
- FILE* F;
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- F = fopen("data.bin","rw");
- fread(&counter,sizeof(int),1,F);
- student* database = new student[counter];
- student* &st = database;
- for(int i = 0;i < counter;i++){
- fread(&database[i],sizeof(database),1,F);
- }
- fclose(F);
- cout << counter <<"\n";
- int case3;
- while (true){
- switch(menu()){
- case 1:
- add(st);
- filler(st);
- sorter(st);
- break;
- case 2:
- printer(st,counter);
- break;
- case 3:
- cout << "Выберите режим поиска\n";
- cout << "1 По фамилии\n";
- cout << "2 По успеваемости\n";
- cout << "3 По дате\n";
- cin >> case3;
- search(st,case3);
- break;
- case 4:
- del(st);
- break;
- case 5:
- inKlass(st);
- break;
- case 8:
- delete [] database;
- return 0;
- break;
- }
- }
- }
- int menu(){
- int g;
- cout << "\n1 Добавить нового студента\n";
- cout << "2 Просмотр всей группы\n";
- cout << "3 Поиск\n";
- cout << "4 Удаление по номеру списка\n";
- cout << "5 Градация по оценкам\n";
- cout << "8 Выход\n";
- cin >> g;
- return g;
- }
- // добавление пустой ячейки
- void add(student* &arr){
- counter++;
- student* tmp = new student[counter];
- for(int i = 0;i < counter-1;i++){
- tmp[i] = arr[i];
- }
- delete [] arr;
- arr = tmp;
- }
- //
- //Заполнение пустой ячейки
- void filler(student* &arr){
- cout << "Введите имя : ";
- cin.ignore();
- cin >> arr[counter-1].name;
- cout << "Введите фамилию : ";
- //cin.ignore();
- cin >> arr[counter-1].surname;
- cout << "Введите отчество : ";
- //cin.ignore();
- cin >> arr[counter-1].patronymic;
- cout << "Введите дату : ";
- dataProcessing(arr);
- cout << "Введите успеваемость : ";
- while(checkValid() == false){}
- arr[counter-1].progress = temp;
- F = fopen("data.bin","wb");
- fwrite(&counter,sizeof(int),1,F);
- for(int i = 0; i < counter;i++){
- fwrite(&arr[i],sizeof(arr[i]),1,F);
- }
- fclose(F);
- outKlass(arr);
- }
- //
- // Обработкаввода даты
- void dataProcessing(student* &arr){
- char input[10];
- cin.ignore();
- cin >> input;
- int dot = 0;
- arr[counter-1].data.day = 0;
- arr[counter-1].data.month = 0;
- arr[counter-1].data.year = 0;
- for(int i = 0; i < strlen(input);i++){
- if(input[i] != '.'){
- switch(dot){
- case 0:
- arr[counter-1].data.day = (arr[counter-1].data.day * 10) + (input[i] - '0');
- if(arr[counter-1].data.day > 31){dot = -1;}
- break;
- case 1:
- arr[counter-1].data.month = (arr[counter-1].data.month * 10) + (input[i] - '0');
- if(arr[counter-1].data.month > 12){dot = -1;}
- break;
- case 2:
- arr[counter-1].data.year = (arr[counter-1].data.year * 10) + (input[i] - '0');
- if(arr[counter-1].data.year > 3000){dot = -1;}
- break;
- case -1:
- cout << "Неверный ввод";
- i = 99;
- break;
- }
- }else{
- dot++;
- }
- }
- }
- //
- void printer(student* &arr,int lim){
- if(counter == 0){
- cout << "\nБаза данных пуста\n";
- }else{
- cout <<"Номер" << "\t" << "Фамилия" << "\t\t" << "Имя" << "\t" << "Отчество" << "\t" << "Дата рождения" << "\t" << "Успеваемость\n";
- for(int i = 0; i < lim;i++){
- cout << i+1 << "\t" << arr[i].surname << "\t\t" << arr[i].name << "\t" << arr[i].patronymic << "\t";
- arr[i].data.day > 10 ? cout << arr[i].data.day << "." :cout << "0" << arr[i].data.day << "." ;
- arr[i].data.month > 10 ? cout << arr[i].data.month << "." :cout << "0" << arr[i].data.month << "." ;
- cout << arr[i].data.year << "\t";
- cout << arr[i].progress << "\n";
- }
- }
- }
- int search(student* &arr, int code){
- char buff[20];
- int a;
- int b;
- double d;
- switch(code){
- case 1:
- cout << "Введите Фамилию : ";
- cin.ignore();
- cin >> buff;
- cout <<"Номер" << "\t" << "Фамилия" << "\t" << "Имя" << "\t" << "Отчество" << "\t" << "Дата рождения" << "\t" << "Успеваемость";
- for(int i = 0; i < counter;i++){
- if(arr[i].surname == buff){
- cout << i+1 << "\t" << arr[i].surname << "\t\t" << arr[i].name << "\t" << arr[i].patronymic << "\t";
- arr[i].data.day > 10 ? cout << arr[i].data.day << "." :cout << "0" << arr[i].data.day << "." ;
- arr[i].data.month > 10 ? cout << arr[i].data.month << "." :cout << "0" << arr[i].data.month << "." ;
- cout << arr[i].data.year << "\t";
- cout << arr[i].progress << "\n";
- }
- }
- break;
- case 2:
- cout << "Введите диапазон : ";
- while(checkValid() == false){}
- a = temp;
- while(checkValid() == false){}
- b = temp;
- cout << "Номер" << "\t" << "Фамилия" << "\t" << "Имя" << "\t" << "Отчество" << "\t" << "Дата рождения" << "\t" << "Успеваемость";
- for(int i = 0; i < counter;i++){
- if(arr[i].progress >= a && arr[i].progress <= b){
- cout << i+1 << "\t" << arr[i].surname << "\t\t" << arr[i].name << "\t" << arr[i].patronymic << "\t";
- arr[i].data.day > 10 ? cout << arr[i].data.day << "." :cout << "0" << arr[i].data.day << "." ;
- arr[i].data.month > 10 ? cout << arr[i].data.month << "." :cout << "0" << arr[i].data.month << "." ;
- cout << arr[i].data.year << "\t";
- cout << arr[i].progress << "\n";
- }
- }
- break;
- case 3:
- int day,month;
- bool flag=false;
- cout << "Введите день: ";
- while(checkValid() == false){}
- day = temp;
- if(day == 0||day > 31){ //контроль границ ввода
- cout << "Неверные данные";
- search(arr,3);
- }else{
- cout << "Введите месяц : ";
- while(checkValid() == false){}
- month = temp;
- if(month==0||month>12){ //контроль границ ввода
- cout << " Неверные данные ";
- search(arr,3);
- }else{
- for(int i=0; i < counter; i++)
- if(arr[i].data.day == day && arr[i].data.month == month){
- cout << "Номер" << "\t" << "Фамилия" << "\t" << "Имя" << "\t" << "Отчество" << "\t" << "Дата рождения" << "\t" << "Успеваемость";
- flag=true;
- }
- if(flag == false){
- cout << "Ничего не найдено\n";
- }
- }
- }
- for(int i = 0; i < counter;i++){
- if( arr[i].data.day == day && arr[i].data.month == month){
- cout << i+1 << "\t" << arr[i].surname << "\t\t" << arr[i].name << "\t" << arr[i].patronymic << "\t";
- arr[i].data.day > 10 ? cout << arr[i].data.day << "." :cout << "0" << arr[i].data.day << "." ;
- arr[i].data.month > 10 ? cout << arr[i].data.month << "." :cout << "0" << arr[i].data.month << "." ;
- cout << arr[i].data.year << "\t";
- cout << arr[i].progress << "\n";
- }
- }
- }
- }
- void del(student* &arr){
- int pos;
- cout << "Введите номер : ";
- while(checkValid() == false){}
- pos = temp;
- if(pos > counter){
- cout << "Номер отсутствует \n";
- del(arr);
- }else{
- pos--;
- counter--;
- student * tmp=new student[counter];
- for(int i = 0; i < pos;i++)
- tmp[i] = arr[i];
- for(int i = pos+1; i < counter+1;i++)
- tmp[i-1] = arr[i];
- delete[] arr;
- arr = tmp;
- cout << "Удалено" << endl;
- F = fopen("data.bin","wt");
- fwrite(&counter,sizeof(int),1,F);
- fwrite(&arr,sizeof(arr),1,F);
- fclose(F);
- outKlass(arr);
- }
- }
- void sorter(student* &arr){
- int i = 1;
- while(i < counter){
- if(i == 0 || arr[i - 1].surname <= arr[i].surname){
- i++;
- }else{
- student temp = arr[i];
- arr[i] = arr[i - 1];
- arr[i - 1] = temp;
- i--;
- }
- }
- }
- void outKlass(student* &arr){ //запись студентов в файлы классификации
- int c = 0;
- F = fopen("high.bin", "wb");
- for(int i = 0; i < counter; i++)
- if(arr[i].progress>= 70){
- fwrite(&arr[i],sizeof(arr[i]),1,F);
- c++;
- }
- fseek(F,0,SEEK_SET);
- fwrite(&c,sizeof(int),1,F);
- fclose(F);
- c = 0;
- F=fopen("middle.bin", "wb");
- for(int i = 0; i < counter; i++)
- if((arr[i].progress >= 50)&&(arr[i].progress < 70)){
- fwrite(&arr[i],sizeof(arr[i]),1,F);
- c++;
- }
- fseek(F,0,SEEK_SET);
- fwrite(&c,sizeof(int),1,F);
- fclose(F);
- c = 0;
- F=fopen("low.bin", "wb");
- for(int i = 0; i < counter; i++)
- if(arr[i].progress < 50){
- fwrite(&arr[i],sizeof(arr[i]),1,F);
- c++;
- }
- fseek(F,0,SEEK_SET);
- fwrite(&c,sizeof(int),1,F);
- fclose(F);
- }
- void inKlass(student* &arr){
- cout << "Выберите режим : \n";
- cout << "1 Высокий балл\n";
- cout << "2 Средний балл\n";
- cout << "3 Низкий балл\n";
- cout << "4 Выйти в главное меню\n";
- student* tmp = new student[counter];
- while(true){
- while(checkValid() == false){}
- int c ;
- int s =temp;
- switch(s){
- case 1:
- F = fopen("high.bin","rw");
- fread(&c,sizeof(int),1,F);
- for(int i = 0; i < c;i++){
- fread(&tmp,sizeof(tmp),1,F);
- }
- printer(tmp,c);
- fclose(F);
- break;
- case 2:
- F = fopen("middle.bin","rw");
- fread(&c,sizeof(int),1,F);
- for(int i = 0; i < c;i++){
- fread(&tmp,sizeof(tmp),1,F);
- }
- printer(tmp,c);
- fclose(F);
- break;
- case 3:
- F = fopen("low.bin","rw");
- fread(&c,sizeof(int),1,F);
- for(int i = 0; i < c;i++){
- fread(tmp,sizeof(tmp),1,F);
- }
- printer(tmp,c);
- fclose(F);
- break;
- }
- }
- }
Add Comment
Please, Sign In to add comment