Mọi người giúp em với
Đây là bài toán quản lý danh sách sinh viên,em mới hoàn thành được chức năng nhập dữ liệu vào danh sách , in ra danh sách ,tìm kiếm danh sách theo 1 mã lớp.Chức năng sắp xếp tên theo thứ tự tên ,và sắp xếp theo điểm trung bình em chưa là được .Mọi người có thể vào xem giúp em với,em cảm ơn.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct DNode
{
int masv;
char malop[12];
char ht[30];
float diemk1;
float diemk2;
float diemtb;
struct DNode *next,*back;
}DNODE;
typedef struct DList
{
DNODE *head,*tail;
}DLIST;
void Newlist(DLIST &L)
{
L.head=L.tail=NULL;
}
void addtail(DList &L,DNODE *p)
{
if(p==NULL) return;
if(L.head==NULL)
{
p->next=p->back=NULL;
L.head=p;
L.tail=L.head;
}
else
{
p->back=L.tail;
p->next=NULL;
L.tail->next=p;
L.tail=p;
}
}
DNode* createNode(int mssv,char mlop[],char hoten[],float diem1, float diem2)
{
float diemtrungbinh = (diem1+diem2)/2;
DNode *p = (DNODE *) malloc(sizeof(DNODE));
if(!p) return NULL;
p->masv = mssv;
strcpy(p->malop,mlop);
strcpy(p->ht,hoten);
p->diemk1 = diem1;
p->diemk2 = diem2;
p->diemtb = diemtrungbinh;
p->next=p->back=NULL;
return p;
}
void createList(DLIST &l, int n){
DNode *p;
int mssv;
char hoten[30],mlop[12];
float diem1, diem2;
fflush(stdin);
do {
fflush(stdin);
printf("\nNhap ma sinh vien: ");
scanf("%d",&mssv);
if(mssv != 0){
fflush(stdin);
printf("\nNhap ma lop: ");
gets(mlop);
fflush(stdin);
printf("\nNhap ho ten: ");
gets(hoten);
fflush(stdin);
printf("\nNhap diem k1 ( < 10 ): ");
scanf("%f", &diem1);
printf("\nNhap diem k2 ( 10 ): ");
scanf("%f", &diem2);
p = createNode(mssv, mlop, hoten, diem1, diem2);
if(!p) return;
addtail(l,p);
n--;
}
}while(n >= 0);
}
void in(DList l)
{
DNode *p;
p=l.head;
printf("MASV Malop Ho ten Diemk1 Diemk2 Diemtb\n");
while(p!=NULL)
{
printf("\n\n\n");
printf("%d",p->masv);
printf("%10s",p->malop);
printf("%20s",p->ht);
printf("%10.2f",p->diemk1);
printf("%10.2f",p->diemk2);
printf("%10.2f",p->diemtb);
p=p->next;
}
}
void sxten(DList l)
{
DNode *p,*q;
DNode *k ;
p = l.head;
while (p!=NULL)
{
for (q=p->next;q!=NULL;q=q->next)
if((p->diemtb)<(q->diemtb))
{
k = q;
// k->masv = p->masv;
// strcmp(k->malop,p->malop);
// strcmp(k->ht , p->ht);
// k->diemk1 = p->diemk1;
// k->diemk2 = p->diemk2;
// k->diemtb = p->diemtb;
//
// p->masv = q->masv;
// strcmp(p->malop , q->malop);
// strcmp(p->ht , q->ht);
// p->diemk1 = q->diemk1;
// p->diemk2 = q->diemk2;
// p->diemtb = q->diemtb;
//
// q->masv = k->masv;
// strcmp(q->malop , k->malop);
// strcmp(q->ht ,k->ht);
// q->diemk1 = k->diemk1;
// q->diemk2 = k->diemk2;
// q->diemtb = k->diemtb;
}
if(k->diemtb != p->diemtb)
{
}
p = p->next;
}
DNode *m;
m = l.head;
printf("MASV Malop Ho ten Diemk1 Diemk2 Diemtb\n");
in(m);
// while(m != NULL)
// {
// printf("\n\n\n");
// printf("%d",p->masv);
// printf("%10s",p->malop);
// printf("%20s",p->ht);
// printf("%10.2f",p->diemk1);
// printf("%10.2f",p->diemk2);
// printf("%10.2f",p->diemtb);
// p=p->next;
// }
}
void kt(DList l)
{
char kt[10];
DNode *p;
int found=0;
p=l.head;
fflush(stdin);
printf("Nhap ma lop muon tim");
gets(kt);
printf("MASV Malop Ho ten Diemk1 Diemk2 Diemtb\n");
while(p!=NULL)
if (strcmp(p->malop,kt) == 0)
{
printf("\n\n\n");
printf("%d",p->masv);
printf("%10s",p->malop);
printf("%20s",p->ht);
printf("%10.2f",p->diemk1);
printf("%10.2f",p->diemk2);
printf("%10.2f",p->diemtb);
found++;
p=p->next;
}
else
p = p->next;
if (!found)
printf("\n\n\nKhong co!!!");
}
int main()
{
DList a;
Newlist(a);
int n,x;
printf("\nNhap so sv : ");
scanf("%d",&n);
createList(a, n-1);
printf("\n +++++++++++++++++++++++++++++++++++++++++");
printf("\n + Cac thu tuc ban muon xu li +");
printf("\n +++++++++++++++++++++++++++++++++++++++++");
printf("\n +1.In toan bo danh sach +");
printf("\n +2.Danh sach sinh vien theo ma lop +");
printf("\n +3.Sap xep theo diem +");
while(1){
printf("\n +++++++++++++++++++++++++++++++++++++++++");
printf("\n +Hay nhap lua chon cua ban +");
printf("\n +++++++++++++++++++++++++++++++++++++++++\n");
scanf("%d",&x);
switch(x)
{
case 1: in(a); break;
case 2: kt(a); break;
case 3: sxten(a); break;
}
}
getch();
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?