01/10/2018, 10:33
Quản lý sinh viên sử dụng danh sách liên kết đôi
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("
Nhap ma sinh vien: ");
scanf("%d",&mssv);
if(mssv != 0){
fflush(stdin);
printf("
Nhap ma lop: ");
gets(mlop);
fflush(stdin);
printf("
Nhap ho ten: ");
gets(hoten);
fflush(stdin);
printf("
Nhap diem k1 ( < 10 ): ");
scanf("%f", &diem1);
printf("
Nhap 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
");
while(p!=NULL)
{
printf("
");
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
");
in(m);
// while(m != NULL)
// {
// printf("
");
// 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
");
while(p!=NULL)
if (strcmp(p->malop,kt) == 0)
{
printf("
");
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("
Khong co!!!");
}
int main()
{
DList a;
Newlist(a);
int n,x;
printf("
Nhap so sv : ");
scanf("%d",&n);
createList(a, n-1);
printf("
+++++++++++++++++++++++++++++++++++++++++");
printf("
+ Cac thu tuc ban muon xu li +");
printf("
+++++++++++++++++++++++++++++++++++++++++");
printf("
+1.In toan bo danh sach +");
printf("
+2.Danh sach sinh vien theo ma lop +");
printf("
+3.Sap xep theo diem +");
while(1){
printf("
+++++++++++++++++++++++++++++++++++++++++");
printf("
+Hay nhap lua chon cua ban +");
printf("
+++++++++++++++++++++++++++++++++++++++++
");
scanf("%d",&x);
switch(x)
{
case 1: in(a); break;
case 2: kt(a); break;
case 3: sxten(a); break;
}
}
getch();
}
Bài liên quan
Bạn format code lại để dễ xem hơn bằng cách
```cpp
```
Cám ơn bạn,mình vừa sửa lại rồi
Hi mai.
Mình không hiểu & dùng làm gì ?
Khởi tạo DSLK mới bằng cách gán đầu và đuôi bằng NULL, size = 0.