PDA

View Full Version : اضافه کردن جست و جو به برنامه دریافت مشخصات دانشجو



alivazirinia
یک شنبه 05 خرداد 1392, 15:40 عصر
سلام دوستان من کد زیر نوشتم جست و جو هم نوشتم براش ولی زمانی که توی منو یعنی کیس شماره 5 که جست و جو رو میاره فراخانی میکنم ایراد میگیره لطفا راهنمایی کنید ممنون



#include <iostream>
#include <conio.h>
#include<string.h>
using namespace std;


class student {
public:
char name[10];
char family[20];
float ave;
char st_num[10];
void getinfo(student st[],int n);
void search(student st[],char key[],int n);
void sort (student st[],int n);
void printinfo(student st[],int n);
void sortbyname (student st[],int n);
};

void student :: search(student st[],char key[],int n)
{
int i;
for (i=0;i<n;i++)
if(st[i].name==key)
cout<<"found in "<<i;
else if (i==n-1)
cout<<"not found";
}

void student :: sortbyname(student st[],int n)
{
int i,j;
student temp;
for (i=n-1;i>=0;i--)
for(j=0;j<i;j++)
if(strcmp(st[j].name,st[j+1].name)>0)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
cout<<"\n sort is :";
for(i=0;i<n;i++)

cout<<"\t"<<st[i].name;
}
}
void student :: getinfo (student st[],int n)
{
int i;
for (i=0;i<n;i++)
{
cout<<"\n";
cout<<"enter name["<<i+1<<"]: ";
cin>>st[i].name;
cout<<"enter family["<<i+1<<"]: ";
cin>>st[i].family;
cout<<"enter avrage["<<i+1<<"]: ";
cin>>st[i].ave;
cout<<"enter student number["<<i+1<<"]: ";
cin>>st[i].st_num;
cout<<"\n";
}
}
void student :: sort(student st[],int n)
{
int i,j;
student temp;
for(i=n-1;i>0;i--)
{
for(j=0;j<i;j++)
if (st[j].ave<st[j+1].ave)
{
temp= st[j];
st[j]=st[j+1];
st[j+1]=temp;

cout<<"\n sort is :";
for(i=0;i<n;i++)

cout<<"\t"<<st[i].ave;
}

}
}
void student :: printinfo(student st[], int n)
{
int i;
cout<<"\n";
cout<<"name family avrage student number\n\n";
for(i=0;i<n;i++)
{
cout<<"\n";

cout<<st[i].name<<"\t";
cout<<st[i].family<<"\t";
cout<<st[i].ave<<"\t";
cout<<st[i].st_num<<"\t";
cout<<endl;
cout<<"\n";
}
}


int main()
{
student st[2],s;
int n;
n=sizeof (st)/sizeof(student);



int menu();
int m;

while (1)
{

m = menu();
switch (m)
{
case 1:s.getinfo(st,n);
break;
case 2:s.printinfo(st,n);
break;
case 3:s.sort(st,n);
break;
case 4:s.sortbyname(st,n);
break;
case 5:s.search(st,n);
break;
case 6:return 0;
default:
cout<<"\n";
cout<< "yek adad az 1 ta 4 vared konid \n";
cout<<"\n";
getch();
}
}
}
int menu()
{
int x;
cout<<"\n";
cout<<"1-vared kardan moshakhasat\n";
cout<<"2-namayesh moshakhasat\n";
cout<<"3-sort \n";
cout<<"4-sort by name \n";
cout<<"5-search \n";
cout<<"6-exit\n\n";
cout<<"yeki az adad x(1.2.3.4.5) vared konid = ";
cin>>x;
cout<<"\n";
return x;
}

saied_hacker
یک شنبه 05 خرداد 1392, 17:31 عصر
شما تابعی که تعریف کردید به این صورت هست
void search(student st[],char key[],int n);

ولی برای فراخوانی اون به این شکل عمل کردید

s.search(st, n);

تکلیف اون char key[] چی میشه ؟؟؟
خطا برای همینه ... شما اسم رو که باید جستجو بشه ( احتمالا کل کد رو نخوندم ) را در تابع باید قرار دهید.

alivazirinia
یک شنبه 05 خرداد 1392, 18:49 عصر
نشد باز شما خودتون کامپایل کنید ببینید

saied_hacker
یک شنبه 05 خرداد 1392, 19:15 عصر
شما در C++‎ برای مقایسه دو ارایه از کاکترها نمی تونید از == استاده کنید
if(strcmp(st[i].name,key) == 0 )

0 : برابر
-1 : اولی کوچکتر
1 : اولی بزرگتر

void student :: search(student st[],char key[],int n)
{
int i;
for (i=0; i<n; i++)
{
if(strcmp(st[i].name,key) == 0 )
{
//cout <<st[i].name;
cout<<"found in "<<i;
return;
}
}
cout << "not found";

}


case 5:
{
char yu[] = "ali";
s.search(st,yu, n);
break;
}

این کد الان به خوبی کار میکنه فقط در case 5 باید مقدار مورد نظر رو به اریه yu بدید همین