Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как найти строку списка по индексу в SearchStudent(Student **st_arr, int sz, int n)-- это по фамилии, а как переделать, чтобы по индексу?

81K
18 апреля 2012 года
scratches
2 / / 18.04.2012
#include <iostream>
using namespace std;

const int size=26; // размер массива списка
char *stop_fam="end"; // признак конца ввода

struct Student
{
char familia[35];
char name[25];
char otch[25];
int mark1;
int mark2;
int mark3;
int mark4;
int mark5;
};

char* InputStudent(Student *stud_ptr)
{

cout<<"familia: ";
cin>>stud_ptr->familia;

if(strcmp(stop_fam,stud_ptr->familia)!=0)
{

cout<<"name: ";
cin>>(*stud_ptr).name;

cout<<"otchestvo : ";
cin>>(*stud_ptr).otch;

cout<<"mark1: ";
cin>>stud_ptr->mark1;

cout<<"mark2: ";
cin>>stud_ptr->mark2;

cout<<"mark3: ";
cin>>stud_ptr->mark3;

cout<<"mark4: ";
cin>>stud_ptr->mark4;

cout<<"mark5: ";
cin>>stud_ptr->mark5;

}
return stud_ptr->familia;


}

int InputStudentsList(Student **st_arr, int sz)
{
for(int i=0; i<sz; i++)
{
Student *stud=new Student; // выделяем память для описания студента

char *fam_ptr=InputStudent(stud); // вводим описание студента

if(strcmp(fam_ptr,stop_fam)==0)
{
delete stud; // освобождаем память
return i;
}

st_arr=stud; // записывем адрес памяти описания студента в массив указателей
}
return sz;
}

void AddNewStudent(Student **st_arr, int sz, int *n) // добавляем нового студента
{
if((*n + 1)<size)
{
Student *stud=new Student; // выделяем память для описания студента

char *fam_ptr=InputStudent(stud); // вводим описание студента


if(strcmp(fam_ptr,stop_fam)==0)
{
delete stud; // освобождаем память
cout<<"Wrong student input!"<<endl;
}
else
{
st_arr[*n]=stud;
*n+=1; // увеличить колтчество студентов на 1
}

}
else
cout<<"Unpossible to add new student. Array is full!"<<endl;
}

bool DeleteCurrentStudent(Student **st_arr, int sz, int *n, int cur)
{
if((cur>=0)&&(cur<*n) && (st_arr[cur]!=NULL) )
{
delete st_arr[cur];

st_arr[cur]=st_arr[(*n)-1];
st_arr[(*n)-1]=NULL;

*n=*n-1;

return true;
}
else
return false;
}

int SearchStudent(Student **st_arr, int sz, int n)
{
cout<<"Input Familiar for search: ";

char fam[15];
cin>>fam;

for(int i=0; (i<sz) && (i<n) ; i++)
if(strcmp(st_arr->familia, fam)==0)
return i;
return sz; // если студент не найден
}

void OutputStudent(Student *stud_ptr, int number)
{

if(number==0)
{
cout<<"familia: "<<stud_ptr->familia<<endl;
cout<<"name: "<<stud_ptr->name<<endl;
cout<<"otch: "<<stud_ptr->otch<<endl;
cout<<"mark1: "<<stud_ptr->mark1<<endl;
cout<<"mark2: "<<stud_ptr->mark2<<endl;
cout<<"mark3: "<<stud_ptr->mark3<<endl;
cout<<"mark4: "<<stud_ptr->mark4<<endl;
cout<<"mark5: "<<stud_ptr->mark5<<endl;
}
else
cout<<number<<". "<<stud_ptr->familia<<" "<<stud_ptr->name<<" "<<stud_ptr->otch<<" "<<stud_ptr->mark1<<" "<<stud_ptr->mark2<<" "<<stud_ptr->mark3<<" "<<stud_ptr->mark4<<" "<<stud_ptr->mark5<<endl;


}

void OutputStudentsList(Student **st_arr, int sz, bool var)
{


if(sz==0)
{
cout<<"<list is empty>"<<endl;
return;
}

for(int i=0; i<sz; i++)
if(var)
OutputStudent(st_arr,i+1);
else
OutputStudent(st_arr,0);
}
void OutputStudentsListIndex(Student **st_arr, int sz, bool var)
{
if(sz==0)
{
cout<<"<list is empty>"<<endl;
return;
}
int index;
cin>>index;
for(int i=1; i<(sz+1); i++)
{
if (index==i)
{
OutputStudent(st_arr[i-1],i);
break;
}

}
}

float SrBal(Student **stud_ptr, int number)
{
float sum=0;
for(int i=0; i<number; i++)
{
sum +=stud_ptr->mark1+stud_ptr->mark2+stud_ptr->mark3+stud_ptr->mark4+stud_ptr->mark5;
}
return sum/(5*number);
}

float SrBalStudenta(Student **stud_ptr, int number)
{
float sum=0;
sum =stud_ptr[number]->mark1+stud_ptr[number]->mark2+stud_ptr[number]->mark3+stud_ptr[number]->mark4+stud_ptr[number]->mark5;
return sum/5;
}
void OutputStudentsListGoodSrBall(Student **st_arr, int sz, bool var)
{
float sr_bal=SrBal(st_arr, sz);
cout<<"Srednii bal= "<<sr_bal<<endl;
cout<<"List of students that have mark <"<<sr_bal<<" :"<<endl;
for(int i=0; i<sz; i++)
{
float sr_stud=SrBalStudenta(st_arr,i);
if(sr_stud>sr_bal)
if(var)
OutputStudent(st_arr,i+1);
else
OutputStudent(st_arr,0);
}
}


int main(int argc, char* argv[])
{


Student *stud[size]; // массив указателей типа Student

int num=0; // количество студентов

int current=size; // индекс текущего студента

char sym;

for( int i=0; i<size; i++)
stud[size]=NULL;

while(true)
{

cout<<"Menu:"<<endl;

cout<<"1. Input students"<<endl;
cout<<"2. Output students "<<endl;
cout<<"3. Add new student "<<endl;
cout<<"4. Search student"<<endl;
cout<<"5. Delete selected student"<<endl;
cout<<"6. List od students that have good then sr ball"<<endl;
cout<<"8. Output students by index"<<endl;

cout<<"7. Exit"<<endl;

cout<<"Input number of command: ";

int command;
cin>>command;

cout<<endl<<endl;

switch(command)
{
case 1: cout<<"Input list of students:"<<endl;
num=InputStudentsList(stud, size);

break;

case 2: cout<<"Output list of students :"<<endl;
OutputStudentsList(stud, num,true);

break;
case 8: cout<<"Output list of students index :"<<endl;
OutputStudentsListIndex(stud, num,true);

break;

case 3: cout<<"Add new student:"<<endl;
AddNewStudent(stud, size, &num);
break;

case 4: cout<<"Search student"<<endl;
current=SearchStudent(stud, size, num);
if(current!=size)
OutputStudent(stud[current],0);
break;

case 5: cout<<"Delete current student"<<endl;
if(current!=size)
{
OutputStudent(stud[current],0);
cout<<"Are you sure, You want delete this student? (Y/N): ";
char sym='N';

cin>>sym;
if((sym=='Y')||(sym=='y'))
{
if(DeleteCurrentStudent(stud, size,&num, current))
cout<<"Operation complete!"<<endl;
else
cout<<"Unpossible operation!"<<endl;

current=size;
}
}
else
cout<<"You must select student for delete!"<<endl;
break;

case 6: OutputStudentsListGoodSrBall(stud, num,false);
break;

case 7: exit(1);
break;

default: cout<<"Wrong coomand number"<<endl;

};

if(command!=8)
{
cout<<"Continue (Y):";
cin>>sym;
}

}



return 0;

}
75K
18 апреля 2012 года
zitxbit
43 / / 03.04.2012
По индексу поиск выглядит следующим образом. st_arr[index].familia, где index - индекс.
Совет, заберите из SearchStudent двойной указатель:
int SearchStudent(Student *st_arr, int sz, int n) - вот так.
81K
25 апреля 2012 года
scratches
2 / / 18.04.2012
Цитата: zitxbit
По индексу поиск выглядит следующим образом. st_arr[index].familia, где index - индекс.
Совет, заберите из SearchStudent двойной указатель:
int SearchStudent(Student *st_arr, int sz, int n) - вот так.



не получается :(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог