30/09/2018, 16:17

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("
------------------------------------------------");
	for(int i=0;i<n;i++)
	{
		fflush(stdin);
		printf("
Nhap ten SV: ");
		gets(x[i].TenSV);
		fflush(stdin);
		printf("
Nhap ten MSSV: ");
		scanf("%d",&x[i].MSSV);
		printf("
Nhap diem toan: ");
		scanf("%f",&x[i].diemtoan);
		printf("
Nhap diem anh: ");
		scanf("%f",&x[i].diemanh);
		printf("
Nhap diem lap trinh: ");
		scanf("%f",&x[i].diemlaptrinh);
		printf("
------------------------------------------------");
	
	}
}
//===============================================================//
/*=========================Xuất Dữ Liệu=========================*/
void xuatdulieu(SinhVien x[],int n)
{
	printf("
------------------------------------------------");
	for(int i=0;i<n;i++)
	{
	
		printf("
Ten SV: %s",x[i].TenSV);
		printf("
MSSV: %d",x[i].MSSV);
		printf("
Diem toan: %.2f",x[i].diemanh);
		printf("
Diem toan: %.2f",x[i].diemanh);
		printf("
Diem toan: %.2f",x[i].diemlaptrinh);
		printf("
------------------------------------------------");
	}
}
//===============================================================//
/*=======================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("
Ten SV: %s",x[i].TenSV);
		printf("
MSSV: %d",x[i].MSSV);
		printf("
Diem toan: %.2f",x[i].diemtoan);
		printf("
Diem toan: %.2f",x[i].diemanh);
		printf("
Diem 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("
Diem 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("
SV %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("
Ten SV: %s",x[i].TenSV);
		printf("
MSSV: %d",x[i].MSSV);
		printf("
Diem toan: %.2f",x[i].diemtoan);
		printf("
Diem toan: %.2f",x[i].diemanh);
		printf("
Diem toan: %.2f",x[i].diemlaptrinh);
	 }
 }
}




int main()
{
	int n;
	SinhVien x[100];
	printf("
Nhap so luong SV: ");
	scanf("%d",&n);
	nhapdulieu(x,n);
	/*
	xuatdulieu(x,n);
	int MStim;
	printf("
Nhap MSSV can tim: ");
	scanf("%d",&MStim);
    timsv_MSSV(x,n,MStim);
	*/
    char tensvtim[30];
	fflush(stdin);
	printf("
Nhap ten sv can tim: ");
	gets(tensvtim);
	timsv_Ten(x,n,tensvtim);
	getch();
}
Gió viết 18:21 ngày 30/09/2018

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
       }
    }
}
Kelvin Nguyễn viết 18:19 ngày 30/09/2018
if(strcmp(x[i].TenSV,TenSV)==0)

chổ này sao bằng 0

Minh Hoàng viết 18:23 ngày 30/09/2018

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

TTmagic viết 18:33 ngày 30/09/2018

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

Kelvin Nguyễn viết 18:19 ngày 30/09/2018
#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

Minh Hoàng viết 18:30 ngày 30/09/2018

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

Kelvin Nguyễn viết 18:22 ngày 30/09/2018

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

Thực tế khắc nghiệt viết 18:34 ngày 30/09/2018
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

Trần Hồng Phong viết 18:32 ngày 30/09/2018

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

đậu tuấn sanh viết 18:26 ngày 30/09/2018

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

Gấu Lớn viết 18:33 ngày 30/09/2018

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

Bài liên quan
0