Исключительная Ситуация

Тема в разделе "C/C++/C#", создана пользователем ehanjaki, 12 июл 2012.

  1. ehanjaki

    ehanjaki Гость

    это полностью рабочая прога списки студентов( добавление удаление вывод)
    как сделать чтобы когда я добавляю нового студента(когда пишу его фамилию цифрами) выдавалась ошибка, мол фамилия не может состоять из цифр! обьясните плиз! и в какую часть кода это нужно прописывать

    Код (C++):
    #include<iostream>
    #include<fstream>
    #include<string.h>
    #define NMAX 20
    using namespace std;
    struct Student
    {
    char fam[30];
    char io[5];
    int oc[5];
    };
    void ShowAll() // выводит всех студентов
    {
    fstream fs;
    Student s;
    fs.open("input.txt",ios::in);
    cout<<endl<<"все студенты: "<<endl;
    while(!fs.eof())
    {
    fs>>s.fam;
    fs>>s.io;
    for(int i=0;i<5;i++)
    fs>>s.oc[i];

    cout<<s.fam<<" "<<s.io<<" ";
    for(int j=0;j<5; j++)
    cout<<s.oc[j]<<" ";
    cout<<endl;
    }
    fs.close();
    }
    void ShowOtl() // список студентов сдавших только на 5
    {
    fstream fs;
    Student s;
    int otl;// признак отличника
    fs.open("input.txt",ios::in);
    cout<<endl<<"отличники:"<<endl;
    while(!fs.eof())
    {
    otl=1; // считаем что все отличники
    fs>>s.fam;
    fs>>s.io;
    for(int i=0;i<5;i++)
    {
    fs>>s.oc[i];
    if(s.oc[i]!=5)// не отличник
    otl=0;
    }
    if(otl) // выводим только отличников
    {
    cout<<s.fam<<" "<<s.io<<" ";
    for(int j=0;j<5; j++)
    cout<<s.oc[j]<<" ";
    cout<<endl;
    }
    }
    fs.close();
    }
    void Show3()// вывод имеющих тройки
    {
    fstream fs;
    Student s;
    int tr;// признак наличия тройки
    fs.open("input.txt",ios::in);
    cout<<endl<<"имеют тройки:"<<endl;
    while(!fs.eof())
    {
    tr=0; // считаем, что троек нет
    fs>>s.fam;
    fs>>s.io;
    for(int i=0;i<5;i++)
    {
    fs>>s.oc[i];
    if(s.oc[i]==3)// нашли тройку
    tr=1;
    }
    if(tr) // выводим только имеющих тройки
    {
    cout<<s.fam<<" "<<s.io<<" ";
    for(int j=0;j<5; j++)
    cout<<s.oc[j]<<" ";
    cout<<endl;
    }
    }
    fs.close();
    }
    void DelStud(char fam[30]) // удаление студента с фамилией fam
    {
    Student mas[NMAX];
    int n=0;
    fstream fs;
    Student s;
    int dw;// количество двоек
    fs.open("input.txt",ios::in);
    while(!fs.eof())
    {
    fs>>s.fam;
    fs>>s.io;
    for(int i=0;i<5;i++)
    {
    fs>>s.oc[i];
    }
    if (strcmp(s.fam,fam)!=0)
    mas[n++]=s;
    }
    fs.close();
    fs.open("input.txt",ios::out);
    for(int i=0;i<n;i++)
    {
    fs<<mas[i].fam<<" "<<mas[i].io<<" ";
    for(int j=0;j<5; j++)
    {
    fs<<mas[i].oc[j];
    if(j!=4 )
    fs<<" ";
    }
    if(i!=n-1)
    fs<<endl;
    }
    fs.close();
    }
    void Show2() // вывести список студентов имеющих двойки
    {
    fstream fs;
    Student s;
    int dw;// количество двоек
    fs.open("input.txt",ios::in);
    cout<<endl<<"имеют двойки:"<<endl;
    while(!fs.eof())
    {
    dw=0; // считаем, что двоек нет
    fs>>s.fam;
    fs>>s.io;
    for(int i=0;i<5;i++)
    {
    fs>>s.oc[i];
    if(s.oc[i]==2)// нашли двойку
    dw++; // увеличиваем кол-во двоек
    }
    if(dw) // выводим только имеющих тройки
    {
    cout<<s.fam<<" "<<s.io<<" ";
    for(int j=0;j<5; j++)
    cout<<s.oc[j]<<" ";
    cout<<endl;
    }
    if (dw>1)
    {
    DelStud(s.fam);// удаление студента из списка
    cout<<s.fam<<" отчислен(а)! "<<endl;
    }
    }
    fs.close();
    }

    void AddStud()
    {
    fstream fs;
    Student s;
    cout<<"введите фамилию студента: ";
    cin>>s.fam;
    cout<<"введите инициалы: ";
    cin>>s.io;
    cout<<"введите 5 оценок: ";
    for (int i=0;i<5;i++)
    cin>>s.oc[i];
    fs.open("input.txt",ios::app);
    fs<<endl;
    fs<<s.fam<<" "<<s.io<<" ";
    for(int i=0;i<5;i++)
    {
    fs<<s.oc[i];
    if(i!=4)
    fs<<" ";
    }
    }
    void Del()
    {
    char fam[30];
    cout<<"введите фамилию студента: ";
    cin>>fam;
    DelStud(fam);
    }







    int main()
    {setlocale(LC_ALL,"RUS");


    char c;
    do
    {
    cout<<"\n                            \n";
    cout<<"1. вывести всех студентов"<<endl;

    cout<<"2. вывести отличников"<<endl;

    cout<<"3. вывести имеющих 3"<<endl;

    cout<<"4. вывести имеющих 2"<<endl;

    cout<<"5. добавить студента"<<endl;

    cout<<"6. удалить студента из списка"<<endl;

    cout<<"7. выход"<<endl;
    cin>>c;

    switch (c)
    {
    case '1':ShowAll();break;
    case '2':ShowOtl();break;
    case '3':Show3();break;
    case '4':Show2();break;
    case '5':AddStud();break;
    case '6':Del();break;
    case '7': return 0;
    default : cout<<"неверный ввод"<<endl;
    }
    }
    while(c!='7');
    return 0;

    }
     
  2. ehanjaki

    ehanjaki Гость

    первый раз с этим столкнулся
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    вот в эту часть: void AddStud()
    более конкретные вопросы есть?
     
  4. ehanjaki

    ehanjaki Гость

    да а что туда записать??
     
  5. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Код (C++):
    //
    void AddStud()
    {

    char c;
    fstream fs;
    Student s;
    bool incor=false;
    metka:
    if(!incor)
    cout<<"введите фамилию студента: ";
    if(incor)
    cout<<"Неправильно!введите верную фамилию студента: ";
    cin>>s.fam;
    for(int i=0;i<strlen(s.fam);i++)
    {
    c=s.fam[i];
    if((int)c<65||(int)c>122)//     для ввода английскими буквами
    //if((int)c<192||(int)c>255)    для ввода русскими буквами
    {
    incor=1;
    goto metka;
    }
    }
    cout<<"введите инициалы: ";
    cin>>s.io;
    cout<<"введите 5 оценок: ";
    for (int i=0;i<5;i++)
    cin>>s.oc[i];
    fs.open("input.txt",ios::app);
    fs<<endl;
    fs<<s.fam<<" "<<s.io<<" ";
    for(int i=0;i<5;i++)
    {
    fs<<s.oc[i];
    if(i!=4)
    fs<<" ";
    }
    }
    //
     
  6. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Whatka
    В названии темы написано "исключительная ситуация", значит, наверное, надо исключение выкидывать?
    пятый пункт правил прочитайте:
    Я ваших усилий не вижу, в void AddStud() кинуть исключение в main() поймать, в чем проблемы? Конкретно.
     
  7. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    r04
    заметил,но я предасавляю возможность ему самому переделать под необходимое ;)
     
Загрузка...
Похожие Темы - Исключительная Ситуация
  1. astana2030
    Ответов:
    4
    Просмотров:
    928
  2. sergeifrost
    Ответов:
    1
    Просмотров:
    1.322
  3. GnS
    Ответов:
    3
    Просмотров:
    1.604

Поделиться этой страницей