vannista
12-10-2008, 10:34 PM
Mình đang làm một bài tập về phần quản lý danh sách ở C , nhưng mình không tìm được cách tìm tên của một người trong sách sách cho trước ( tên mà mình đã nhập và lưu vào file ở hàm nhập phía trên) nó nằm ở danh sách i mà mình đã tạo.
bi h mình muốn tìm ai đó bàng cách nhập tên hoặc 1 từ trong tên thôi thì làm thế nào. ví dụ mình tìm NGUYỄN VĂN A thì mình chỉ nhập A chẳng hạn thì TRẦN VĂN A, NGUYỄN VĂN A hay gì đó cũng hiện ra trong list liệt kê thì làm sao ? Bạn nào chỉ giúp mình với mình đang rất cần. MÌNH CÁM ƠN NHIỀU.
đây là hàm xoá() của mình viết, cao thủ nào chỉnh giùm mình tính năng trên với, tức là khi mình nhập ten cần xoá: chẳng hạn A, thì trong list liẹt kê nhưng người mốn xoá có cả nguyen van a, trần văn a... GIÚP MÌNH NHA.
void xoa()
{
t1:
system("cls");
fflush(stdin);
printf("\3-------------\3");
printf("\n DELETE STUDENT ");
printf("\n\3_____________\3");
int i, done = 0, found, dump[MAX];
char hoten[35], hotentmp[35];
while (!done)
{
if (numrecords != 0)
{
printf("\n\nNHAP HO TEN SINH VIEN MUON XOA : ");
gets(hoten);
if (strlen(hoten) == 0) goto t1;
else
{
i = found = 0;
do {
strcpy(hotentmp,danhsach[i].hoten);
if (strcmp(strupr(hoten), strupr(hotentmp)) == 0)
dump[found++] = i;
i++;
} while (i<numrecords);
if (!found)
printf("\nKHONG TIM THAY SINH VIEN CO TEN: %s", strupr(hoten));
else
{
printf("\n+-----+-------------------------------+-------+------+------+------+------+------+------+------+");
printf("\n| STT | NAME OF STUDENT | CLASS |T.ANH | LSD | G.T | V.L | LTC | CDG | CNXH | ");
printf("\n+-----+-------------------------------+-------+------+------+------+------+------+------+------+");
for (i=0; i<found; i++)
{
printf("\n|%3d |%-23s |%3s |%4.1f |%4.1f |%4.1f |%4.1f |%4.1f |%4.1f |%4.1f |", i+1, strupr(danhsach[dump[i]].hoten),strupr(danhsach[dump[i]].lop),
danhsach[dump[i]].giaitich, danhsach[dump[i]].vatly, danhsach[dump[i]].cdg,danhsach[dump[i]].ta,danhsach[dump[i]].cnxh,danhsach[dump[i]].lsd,danhsach[dump[i]].ltc);
}
printf("\n+-----+-------------------------------+-------+------+------+------+------+------+------+------+");
printf("\n\nTIM THAY %d SINH VIEN TEN: \3 %s \3.", found,hoten);
printf("\n\nCHON SINH VIEN MUON XOA THEO SO THU TU");
printf("\n\nNEU MUON HUY BO THI CHON 1 SO BAT KI LON HON THU TU -> ENTER !\n");
scanf("%d", &i);
if (i >= 1 && i <= found)
{
for (found=dump[i-1]; found<numrecords-1; found++)
danhsach[found] = danhsach[found+1];
numrecords--;
printf("\nDELETE STUDENT THANH CONG !");
}
else
printf("\nVIEC XOA SINH VIEN BI HUY BO !");
}
done = 1;
}
char ch;
t2:
printf("\n\nBAN CO MUON TIEP TUC XOA SINH VIEN KHONG ?");
printf("\n\nCHON 'Y' DE TIEP TUC HOAC 'N' DE THOAT !");
do
{
ch=getch();
if(ch=='y'||ch=='Y') goto t1;
else if(ch=='N'||ch=='n') break;
else goto t2;
}while(ch);
}
}
}
mình paste nên dòng hơi lệch. AI GIÚP MÌNH VỚI ! THANKS !
bi h mình muốn tìm ai đó bàng cách nhập tên hoặc 1 từ trong tên thôi thì làm thế nào. ví dụ mình tìm NGUYỄN VĂN A thì mình chỉ nhập A chẳng hạn thì TRẦN VĂN A, NGUYỄN VĂN A hay gì đó cũng hiện ra trong list liệt kê thì làm sao ? Bạn nào chỉ giúp mình với mình đang rất cần. MÌNH CÁM ƠN NHIỀU.
đây là hàm xoá() của mình viết, cao thủ nào chỉnh giùm mình tính năng trên với, tức là khi mình nhập ten cần xoá: chẳng hạn A, thì trong list liẹt kê nhưng người mốn xoá có cả nguyen van a, trần văn a... GIÚP MÌNH NHA.
void xoa()
{
t1:
system("cls");
fflush(stdin);
printf("\3-------------\3");
printf("\n DELETE STUDENT ");
printf("\n\3_____________\3");
int i, done = 0, found, dump[MAX];
char hoten[35], hotentmp[35];
while (!done)
{
if (numrecords != 0)
{
printf("\n\nNHAP HO TEN SINH VIEN MUON XOA : ");
gets(hoten);
if (strlen(hoten) == 0) goto t1;
else
{
i = found = 0;
do {
strcpy(hotentmp,danhsach[i].hoten);
if (strcmp(strupr(hoten), strupr(hotentmp)) == 0)
dump[found++] = i;
i++;
} while (i<numrecords);
if (!found)
printf("\nKHONG TIM THAY SINH VIEN CO TEN: %s", strupr(hoten));
else
{
printf("\n+-----+-------------------------------+-------+------+------+------+------+------+------+------+");
printf("\n| STT | NAME OF STUDENT | CLASS |T.ANH | LSD | G.T | V.L | LTC | CDG | CNXH | ");
printf("\n+-----+-------------------------------+-------+------+------+------+------+------+------+------+");
for (i=0; i<found; i++)
{
printf("\n|%3d |%-23s |%3s |%4.1f |%4.1f |%4.1f |%4.1f |%4.1f |%4.1f |%4.1f |", i+1, strupr(danhsach[dump[i]].hoten),strupr(danhsach[dump[i]].lop),
danhsach[dump[i]].giaitich, danhsach[dump[i]].vatly, danhsach[dump[i]].cdg,danhsach[dump[i]].ta,danhsach[dump[i]].cnxh,danhsach[dump[i]].lsd,danhsach[dump[i]].ltc);
}
printf("\n+-----+-------------------------------+-------+------+------+------+------+------+------+------+");
printf("\n\nTIM THAY %d SINH VIEN TEN: \3 %s \3.", found,hoten);
printf("\n\nCHON SINH VIEN MUON XOA THEO SO THU TU");
printf("\n\nNEU MUON HUY BO THI CHON 1 SO BAT KI LON HON THU TU -> ENTER !\n");
scanf("%d", &i);
if (i >= 1 && i <= found)
{
for (found=dump[i-1]; found<numrecords-1; found++)
danhsach[found] = danhsach[found+1];
numrecords--;
printf("\nDELETE STUDENT THANH CONG !");
}
else
printf("\nVIEC XOA SINH VIEN BI HUY BO !");
}
done = 1;
}
char ch;
t2:
printf("\n\nBAN CO MUON TIEP TUC XOA SINH VIEN KHONG ?");
printf("\n\nCHON 'Y' DE TIEP TUC HOAC 'N' DE THOAT !");
do
{
ch=getch();
if(ch=='y'||ch=='Y') goto t1;
else if(ch=='N'||ch=='n') break;
else goto t2;
}while(ch);
}
}
}
mình paste nên dòng hơi lệch. AI GIÚP MÌNH VỚI ! THANKS !