Как найти строку списка по индексу в SearchStudent(Student **st_arr, int sz, int n)-- это по фамилии, а как переделать, чтобы по индексу?
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;
}
Совет, заберите из SearchStudent двойной указатель:
int SearchStudent(Student *st_arr, int sz, int n) - вот так.
Цитата: zitxbit
По индексу поиск выглядит следующим образом. st_arr[index].familia, где index - индекс.
Совет, заберите из SearchStudent двойной указатель:
int SearchStudent(Student *st_arr, int sz, int n) - вот так.
Совет, заберите из SearchStudent двойной указатель:
int SearchStudent(Student *st_arr, int sz, int n) - вот так.
не получается :(