PDA

View Full Version : [Need help] Giúp mình về thủ tục tìm tên trong một dạnh sách nha! Mình cảm ơn!



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 !

CoT
12-10-2008, 11:48 PM
Thực ra việc này ko có j là khó, mình đoán chắc bạn mới học về lập trình, và ở đây là C

nếu QLDSHS, bạn nên tạo 1 structt định nghĩa cho 1 SV, ví dụ

struct sinhvien{
char hoten[30];
int mssv;
}

thì như vậy khi quản lí dssv bạn chỉ cần tạo 1 mảng dssv[i] thì i sẽ đại diện cho SV thứ i.

vấn đề bạn hỏi là tìm theo tên, vậy khi khai báo struct bạn tên tách ra họ và tên như vậy việc tìm cũng thuận lợi hơn.

còn nếu bạn đã lỡ, và đã có 1 dữ liệu khá lớn thì sao, lúc này bạn fải viết thêm 1 hàm con để tách tên từ chuỗi họ tên, hàm này khá đơn giản và chạy từ cuối mảng, đến khoảng trắng đầu tiên thì stop -> tên.

khi đã có tên rồi, bạn duyệt dssv, tìm cái thỏa mãn và del :D

chúc bạn thành công

P.S: lập trình bạn kiêng dùng goto [lable] nhé.

vannista
13-10-2008, 03:25 PM
Mình đang làm thử, dù kết quả thế nào cũng cám ơn bạn đã giúp :)

CoT
13-10-2008, 06:57 PM
Mình đang làm thử, dù kết quả thế nào cũng cám ơn bạn đã giúp :)

cảm ơn thì hành động chứ đừng nói suông \:D/

bạn chia các hàm rõ ràg,theo mục đích thì hàm nào có vấn đề sẽ dễ sửa hơn :D