Tìm thông tin sinh viên thông qua tên của Sinh viên?

Tìm thông tin sinh viên thông qua tên của SV thì làm sao mọi người

#include<stdio.h>
#include<conio.h>
struct SinhVien
{
	char TenSV[30]; //Khi khai báo 1 chiểu bao giờ cũng khai báo chiều dài của chuỗi
	int MSSV;
	float diemtoan,diemanh,diemlaptrinh;
};
/*=========================Nhập Dữ Liệu========================*/
void nhapdulieu(SinhVien x[],int &n)
{
	printf("\n------------------------------------------------");
	for(int i=0;i<n;i++)
	{
		fflush(stdin);
		printf("\nNhap ten SV: ");
		gets(x[i].TenSV);
		fflush(stdin);
		printf("\nNhap ten MSSV: ");
		scanf("%d",&x[i].MSSV);
		printf("\nNhap diem toan: ");
		scanf("%f",&x[i].diemtoan);
		printf("\nNhap diem anh: ");
		scanf("%f",&x[i].diemanh);
		printf("\nNhap diem lap trinh: ");
		scanf("%f",&x[i].diemlaptrinh);
		printf("\n------------------------------------------------");
	
	}
}
//===============================================================//
/*=========================Xuất Dữ Liệu=========================*/
void xuatdulieu(SinhVien x[],int n)
{
	printf("\n------------------------------------------------");
	for(int i=0;i<n;i++)
	{
	
		printf("\nTen SV: %s",x[i].TenSV);
		printf("\nMSSV: %d",x[i].MSSV);
		printf("\nDiem toan: %.2f",x[i].diemanh);
		printf("\nDiem toan: %.2f",x[i].diemanh);
		printf("\nDiem toan: %.2f",x[i].diemlaptrinh);
		printf("\n------------------------------------------------");
	}
}
//===============================================================//
/*=======================Tìm SV thông qua MSSV===================*/
void timsv_MSSV(SinhVien x[],int n,int maso)
{
	for(int i=0;i<n;i++)
	{
		if(maso==x[i].MSSV)
		{
		printf("\nTen SV: %s",x[i].TenSV);
		printf("\nMSSV: %d",x[i].MSSV);
		printf("\nDiem toan: %.2f",x[i].diemtoan);
		printf("\nDiem toan: %.2f",x[i].diemanh);
		printf("\nDiem toan: %.2f",x[i].diemlaptrinh);
		}

	}
}
//===============================================================//
/*=======================Tính Trung Bình Cộng===================*/
void tbc(SinhVien x[],int n)
{
	float trungbinhcong;
	for(int i=0;i<n;i++)
	{
		trungbinhcong=(x[i].diemanh+x[i].diemlaptrinh+x[i].diemtoan)*1.0/3;
		printf("\nDiem TBC cua SV: %s la: %.2f",x[i].TenSV,trungbinhcong);
	}

}

//==================================================================//
/*=======================Tìm Max Trung Bình Cộng====================*/
void timmaxtbc(SinhVien x[],int n)
{
	float max=(x[0].diemtoan+x[0].diemanh+x[0].diemlaptrinh);
		for(int i=0;i<n;i++)
		{
			if(x[i].diemanh+x[i].diemlaptrinh+x[i].diemtoan>max)
			{
			max=x[i].diemanh+x[i].diemlaptrinh+x[i].diemtoan;
			printf("\nSV %s co diem trung binh cao nhat: %.2f",x[i].TenSV,max/3);
			}
		}
}
//=================================================================//
/*===============Liệt Kê SV Theo 1 danh sách bất kì================*/
/*
Danh sách Họ Tên in ra tên thôi

*/

//=================================================================//
void timsv_Ten(SinhVien x[],int n,char TenSV[30])
{
 for(int i=0;i<n;i++)
 {
	 if(TenSV==x[i].TenSV)
	 {
		printf("\nTen SV: %s",x[i].TenSV);
		printf("\nMSSV: %d",x[i].MSSV);
		printf("\nDiem toan: %.2f",x[i].diemtoan);
		printf("\nDiem toan: %.2f",x[i].diemanh);
		printf("\nDiem toan: %.2f",x[i].diemlaptrinh);
	 }
 }
}




int main()
{
	int n;
	SinhVien x[100];
	printf("\nNhap so luong SV: ");
	scanf("%d",&n);
	nhapdulieu(x,n);
	/*
	xuatdulieu(x,n);
	int MStim;
	printf("\nNhap MSSV can tim: ");
	scanf("%d",&MStim);
    timsv_MSSV(x,n,MStim);
	*/
    char tensvtim[30];
	fflush(stdin);
	printf("\nNhap ten sv can tim: ");
	gets(tensvtim);
	timsv_Ten(x,n,tensvtim);
	getch();
}
2 Likes

Bạn nên dùng strcmp trong thư viện <string.h> để so sánh tên SV

//Vi du


void timsv_Ten(SinhVien x[],int n,char TenSV[30]){
    int i;
    for(i=0;i<n;++i){
       if(strcmp(x[i].TenSV,TenSV)==0){
           /// lam gi đó nếu tìm thấy
       }
    }
}
6 Likes
if(strcmp(x[i].TenSV,TenSV)==0)

chổ này sao bằng 0

1 Like

nếu 2 chuỗi giống nhau thì bằng 0

1 Like

viết là if(x[i].TenSV==TenSV) luôn có đc ko nhỉ :3

1 Like
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct SinhVien
{
	char TenSV[30]; //Khi khai báo 1 chiểu bao giờ cũng khai báo chiều dài của chuỗi
	int MSSV;
	float diemtoan,diemanh,diemlaptrinh;
};
/*=========================Nhập Dữ Liệu========================*/
void nhapdulieu(SinhVien x[],int &n)
{
	printf("\n------------------------------------------------");
	for(int i=0;i<n;i++)
	{
		fflush(stdin);
		printf("\nNhap ten SV: ");
		gets(x[i].TenSV);
		fflush(stdin);
		printf("\nNhap ten MSSV: ");
		scanf("%d",&x[i].MSSV);
		printf("\nNhap diem toan: ");
		scanf("%f",&x[i].diemtoan);
		printf("\nNhap diem anh: ");
		scanf("%f",&x[i].diemanh);
		printf("\nNhap diem lap trinh: ");
		scanf("%f",&x[i].diemlaptrinh);
		printf("\n------------------------------------------------");
	
	}
}
//===============================================================//
/*=========================Xuất Dữ Liệu=========================*/
void xuatdulieu(SinhVien x[],int n)
{
	printf("\n------------------------------------------------");
	for(int i=0;i<n;i++)
	{
	
		printf("\nTen SV: %s",x[i].TenSV);
		printf("\nMSSV: %d",x[i].MSSV);
		printf("\nDiem toan: %.2f",x[i].diemanh);
		printf("\nDiem toan: %.2f",x[i].diemanh);
		printf("\nDiem toan: %.2f",x[i].diemlaptrinh);
		printf("\n------------------------------------------------");
	}
}
//===============================================================//
/*=======================Tìm SV thông qua MSSV===================*/
void timsv_MSSV(SinhVien x[],int n,int maso)
{
	for(int i=0;i<n;i++)
	{
		if(maso==x[i].MSSV)
		{
		printf("\nTen SV: %s",x[i].TenSV);
		printf("\nMSSV: %d",x[i].MSSV);
		printf("\nDiem toan: %.2f",x[i].diemtoan);
		printf("\nDiem toan: %.2f",x[i].diemanh);
		printf("\nDiem toan: %.2f",x[i].diemlaptrinh);
		}

	}
}
//===============================================================//
/*=======================Tính Trung Bình Cộng===================*/
void tbc(SinhVien x[],int n)
{
	float trungbinhcong;
	for(int i=0;i<n;i++)
	{
		trungbinhcong=(x[i].diemanh+x[i].diemlaptrinh+x[i].diemtoan)*1.0/3;
		printf("\nDiem TBC cua SV: %s la: %.2f",x[i].TenSV,trungbinhcong);
	}

}

//==================================================================//
/*=======================Tìm Max Trung Bình Cộng====================*/
void timmaxtbc(SinhVien x[],int n)
{
	float max=(x[0].diemtoan+x[0].diemanh+x[0].diemlaptrinh);
		for(int i=0;i<n;i++)
		{
			if(x[i].diemanh+x[i].diemlaptrinh+x[i].diemtoan>max)
			{
			max=x[i].diemanh+x[i].diemlaptrinh+x[i].diemtoan;
			printf("\nSV %s co diem trung binh cao nhat: %.2f",x[i].TenSV,max/3);
			}
		}
}
//=================================================================//
/*===============Liệt Kê SV Theo 1 danh sách bất kì================*/
/*
Danh sách Họ Tên in ra tên thôi

*/

//=================================================================//
void timtensv(SinhVien x[],int n,char Ten[30])
{
 for(int i=0;i<n;i++)
 {
     if(strcmp(x[i].TenSV,Ten)==0)
	 {
		printf("\nTen SV: %s",x[i].TenSV);
		printf("\nMSSV: %d",x[i].MSSV);
		printf("\nDiem toan: %.2f",x[i].diemtoan);
		printf("\nDiem toan: %.2f",x[i].diemanh);
		printf("\nDiem toan: %.2f",x[i].diemlaptrinh);
	 }
 }
}
void themsv(SinhVien x[],int &n)
{
	for(int i=n;i<n+1;i++)
	{
		fflush(stdin);
		printf("\nNhap ten SV: ");
		gets(x[i].TenSV);
		fflush(stdin);
		printf("\nNhap ten MSSV: ");
		scanf("%d",&x[i].MSSV);
		printf("\nNhap diem toan: ");
		scanf("%f",&x[i].diemtoan);
		printf("\nNhap diem anh: ");
		scanf("%f",&x[i].diemanh);
		printf("\nNhap diem lap trinh: ");
		scanf("%f",&x[i].diemlaptrinh);
	}
	n++;
}
int main()
{
	int n;
	SinhVien x[100];
	char Timten[30];
	printf("\nNhap so luong SV: ");
	scanf("%d",&n);
	nhapdulieu(x,n);
	xuatdulieu(x,n);
    printf("\nNhap SV can tim: ");
	gets(Timten);
	timtensv(x,n,Timten);
	getch();
}

Sao em nhập tên SV cần tìm sao không cho nhập

1 Like

:3 so sánh 1 chuỗi với 1 cấu trúc à :3

1 Like

Vậy sữa lại làm sao cho đúng

1 Like
char *trichTen(char *hoten)
{
    int k = strlen(hoten) - 1;
    while (k >= 0 && hoten[k] != ' ') k--;
    return (hoten + k + 1);
}
 
void timTheoTen(char ten[10])
{
    printf("\nNhung sinh vien co ten '%s':\n", ten);
    Nut *p = dau;
    while (p != NULL)                       //duyệt danh sách
    {
        if (strcmp(trichTen(p->HoTen), ten) == 0)
            printf("- %s (%g diem)\n", p->HoTen, p->Diem);
        p = p->Tiep;
    }
}

cách này dùng với con trỏ nhé bạn

1 Like

Do bạn đang dùng chuỗi dạng mảng char[] nên hông so sánh như vậy được nhé, nó giống như bạn cũng không thể so sánh hai mảng int[] bằng cách đó được mà phải duyệt để so sánh từng phần tử. Cứ thử thì nó sẽ báo lỗi được hay không ngay ấy mà
Nếu bạn dùng kiểu string thì có thể dùng “==” để so sánh :wink:

1 Like

dùng string mà so sánh == thì auto kết quả trả về false nhé!

bạn dùm stricmp nó có thể so sánh cả ký tự thường và ký tự hoa
nếu 2 chuỗi giống nhau sẽ trả về giá trị 0

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?