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

  • Автор темы ehanjaki
  • Дата начала
E

ehanjaki

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

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;

}
 
R

rrrFer

#3
мол фамилия не может состоять из цифр! обьясните плиз! и в какую часть кода это нужно прописывать
вот в эту часть: void AddStud()
более конкретные вопросы есть?
 
W

Whatka

#5
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<<" ";
}
}
//
 
R

rrrFer

#6
Whatka
В названии темы написано "исключительная ситуация", значит, наверное, надо исключение выкидывать?
да а что туда записать??
пятый пункт правил прочитайте:
Ну а те, кто не хочет что-то делать самостоятельно, должны понимать, что работа людей стоит денег. Даже самая мелкая. А потому, если вы готовы платить за решение своей проблемы, то так же указывайте это в своей теме. Что-то в духе: Нужно решить такую-то задачу. Оплата.
Я ваших усилий не вижу, в void AddStud() кинуть исключение в main() поймать, в чем проблемы? Конкретно.
 
W

Whatka

#7
r04
заметил,но я предасавляю возможность ему самому переделать под необходимое ;)