Code quản lý Sinh viên dùng Struct – danh sách liên kết đơn:
- Tạo 1 struct
- Thêm đầu/cuối danh sách
- Tìm theo tên và chèn 1 SV vào sau tên đó
- Xóa SV đầu danh sách
- Đếm số SV trong danh sách
- Tìm SV trong khoảng điểm
- Sắp xếp theo mã số
Cách 1:
/*
Le Quoc Nam
Lop 10cth01
Compiler: C-free 4.0 pro, Windows 7 Home Premium x64 OA
*/
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define MAX 100
//———————————————————————————————-
typedef struct sinhvien{
char masv[15];
char hoten[31];
float dtb;
};
typedef struct node{
sinhvien* data;
struct node *next;
};
//———————————————————————————————-
node *head;
node create(sinhvien *g){
node *p= new node;
if (p==NULL) return 0;
p->data=g;
p->next=NULL;
return p;
}
//———————————————————————————————-
sinhvien createSV(){
sinhvien* sv=new sinhvien;
float temp;
fflush(stdin);
printf("Nhap ma SV: "); gets(sv->masv);
printf("Nhap ten: "); gets(sv->hoten);
printf("Nhap diem tb: "); scanf("%f",&temp);
sv->dtb=temp;
return sv;
}
//———————————————————————————————-
void insertFirst(node &head, sinhvien *g){
node *p= create(g);
if(head==NULL) head=p;
else
{
p->next=head;
head=p;
}
}
//———————————————————————————————-
void insertEnd(node *&head, sinhvien *g){
node *p= create(g);
if(head==NULL)
head=p;
else
{
node *temp=head;
while(temp->next!=NULL)
temp=temp->next;
temp->next=p;
}
}
//———————————————————————————————-
void xuat(node head){
if(head==NULL)
printf("Danh sach rong.\n");
else
printf("Danh sach SV la \n");
for(node* p=head;p!=NULL;p=p->next)
{
printf("Ma SV: %s",p->data->masv);
printf("\nHo ten: %s",p->data->hoten);
printf("\nDiem trung binh: %f",p->data->dtb);
printf("\n—————————\n");
}
}
//———————————————————————————————-
node* searchsv(node* phead){
char x[15];
printf("Nhap ma so SV can tim: ");
fflush(stdin);
gets(x);
for(nodep=phead;p!=NULL;p=p->next)
if ((strcmp(p->data->masv,x)==0))
return p;
return NULL;
}
//———————————————————————————————-
void insertAfterX(node *&head, node *&p, sinhvien *g){
if(p==NULL) printf("KHong the them");
else
{
node *temp = create(g);
temp->next=p->next;
p->next=temp;
}
}
//———————————————————————————————-
void deleteFirst(node *&head){
if(head==NULL)
printf("Rong, ko the xoa");
else
{
node p=head;
head = head->next;
delete p;
}
}
//———————————————————————————————-
int tongSV(node* head, sinhvien g){
int s=0;
for(node p=head;p!=NULL;p=p->next)
s++;
return s;
}
//———————————————————————————————-
int chckdiem(node* head){
for(node*p=head; p!=NULL; p=p->next)
if(p->data->dtb>5 && p->data->dtb<8)
return 1;
return 0;
}
void svdtb(node *head){
for(node *p=head; p!=NULL; p=p->next)
{
if(p->data->dtb>5 && p->data->dtb<8)
{
printf("Ma SV: %s",p->data->masv);
printf("\nHo ten: %s",p->data->hoten);
printf("\nDiem trung binh: %f",p->data->dtb);
printf("\n—————————\n");
}
}
}
//———————————————————————————————-
void swap(sinhvien* &a, sinhvien* &b){
sinhvien* tem = a;
a=b;
b=tem;
}
void sapxep(node head){
for(node p=head;p!=NULL;p=p->next)
for(node* q=p->next;q!=NULL;q=q->next)
if(stricmp(p->data->masv , q->data->masv)>0)
swap(p->data,q->data);
}
//———————————————————————————————-
void main()
{
int x, n;
int chon, tt=1, s;
sinhvien *g;
do{
printf("\n");
printf("———————————————————–\n");
printf("\nHay chon chuc nang can thuc hien: \n");
printf("0. Thoat\n");
printf("1. Them mot SV vao dau\n");
printf("2. Them mot SV vao cuoi\n");
printf("3. Tim SV, sau do chen 1 SV vao sau SV do\n");
printf("4. Xoa SV dau\n");
printf("5. Tong so SV la bao nhieu\n");
printf("6. Xuat ra danh sach\n");
printf("7. Xuat ra SV co 5<dbt<8\n");
printf("8. Xep tang them ma SV\n");
printf("———————————————————–\n");
scanf("%d", &chon);
switch(chon)
{
case 1:
{
printf("Nhap thong tin 1 Sv can them dau\n");
g=createSV();
insertFirst(head,g);
printf("Danh sach sau khi them la:\n");
xuat(head);
break;
}
case 2:
{
printf("Nhap thong tin 1 Sv can them cuoi\n");
g=createSV();
insertEnd(head, g);
printf("Danh sach sau khi them la:\n");
xuat(head);
break;
}
case 3:
{
node *p=searchsv(head);
if(p==NULL) printf("Ko tim thay!");
else
{
printf("Da tim thay, nhap thong tin 1 SV can them:\n");
g=createSV();
insertAfterX(head, p,g);
printf("Danh sach sau khi them la:\n");
xuat(head);
break;
}
}
case 4:
{
deleteFirst(head);
printf("Da xoa SV dau danh sach\n");
printf("Danh sach sau khi xoa la:\n");
xuat(head);
break;
}
case 5:
{
printf("Tong so SV co trong danh sach %d\n", tongSV(head, g));
break;
}
case 6:
{
xuat(head);
break;
}
case 7:
{
int ch=chckdiem(head);
if(ch==1)
{
printf("SV co 5 <dtb<8 \n");<br=""> svdtb(head);
}
else
printf("Ko co SV nao co 5 <dtb<8\n");
break;
}
case 8:
{
printf("Danh sach sau khi sap xep: \n");
sapxep(head);
xuat(head);
break;
}
case 0:
{
tt=0;
break;
}
};
}while(tt==1);
getch();
}
Cách 2:
/*
Nguyen Huynh Thanh Tinh
Lop : 10CTH02.
Borland C
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
typedef struct SINHVIEN
{
char hoten[40];
char masv[10];
float dtb;
}SV;
typedef struct NODE
{
SV info;
struct NODE *next;
}node;
void init(node *&phead)
{
phead=NULL;
}
void createSV(SV &sv)
{
printf("\nHo va ten: ");fflush(stdin);gets(sv.hoten); puts(sv.hoten);
printf("\nMa so : ");fflush(stdin);gets(sv.masv);
float tb;
printf("\nDiem TB : ");scanf("%f",&tb);sv.dtb=tb;
}
node *createNO(SV sv)
{
node *Node=new node;
Node->info=sv;
Node->next=NULL;
return Node;
}
void insertFi(node *&phead,SV sv)
{
node *p=createNO(sv);
if(phead==NULL)
{
phead=p;
}
else
{
p->next=phead;
phead=p;
}
}
node *searchNE(node *phead,char s[40])
{
node *p=phead;
while(p!=NULL)
{
if(stricmp(p->info.hoten,s)==0)
return p;
p=p->next;
}
return NULL;
}
void insertEN(node *&phead,SV sv)
{
node *p=phead;
node *q=createNO(sv);
if(phead==NULL)
{
phead=q;
}
while(p->next!=NULL)
p=p->next;
p->next=q;
}
void insertAF(node *&phead,SV sv,char s[40])
{
node *q=searchNE(phead,s);
if(q==NULL)
{
printf("\nKhong ton tai sinh vien %s\n",s);
textcolor(RED);
cprintf("khong the chen……");
}
else
{
printf("\nThem sinh vien: \n");
createSV(sv);
node *p=createNO(sv);
p->next=q->next;
q->next=p;
}
}
void showNO(node *phead)
{
SV sv=phead->info;
printf("\nHo ten : %s",sv.hoten);
printf("\nMa so : %s",sv.masv);
printf("\nDiem TB: %0.2f",sv.dtb);
}
void deleteFI(node &phead)
{
if(phead==NULL)
printf("\nList rong.");
else
{
nodep=phead;
phead=phead->next;
delete p;
}
}
int countNO(node *phead)
{
node *p=phead;
int count=0;
while(p!=NULL)
{
count++;
p=p->next;
}
return count;
}
void showLI(node *phead)
{
node *p=phead;
if(p==NULL)
{
printf("\nList rong.");
return;
}
while(p!=NULL)
{
showNO(p);
p=p->next;
}
}
int showcondition(node *phead,float d1,float d2)
{
node *p=phead;
int add=0;
while(p!=NULL)
{
if(p->info.dtb>d1 && p->info.dtb<d2)
{
showNO(p);
add++;
}
p=p->next;
}
return (add>0)?add:0;
}</d2)
void swap(SV &sv1,SV &sv2)
{
SV sv3=sv1;
sv1=sv2;
sv2=sv3;
}
void sortcode(node *phead)
{
node *p=phead;
while(p!=NULL)
{
node *q=phead;
while(q!=NULL)
{
if(stricmp(q->info.masv,p->info.masv)>0)
swap(q->info,p->info);
q=q->next;
}
p=p->next;
}
}
void main()
{
SV sv;
node *phead=NULL;
int n;
do{
do{
clrscr();
textcolor(YELLOW);
cprintf("——————MOI LUA CHON CHUC NANG———————");printf("\n");
textcolor(WHITE);
printf("\n\t1.Them sinh vien vao dau danh sach.");
printf("\n\t2.Them sinh vien vao cuoi danh sach.");
printf("\n\t3.Tim theo ten va chen sau.");
printf("\n\t4.Xoa sinh vien dau danh sach.");
printf("\n\t5.Dem so sinh vien trong danh sach.");
printf("\n\t6.Tim sinh vien theo khoang diem.");
printf("\n\t7.Sap xep sinh vien theo ma so.");
printf("\n\t0.Thoat.");
printf("\n\n");
printf("\nList hien tai: \n");
showLI(phead);printf("\n");
cprintf("Nhap so tuong ung: ");
scanf("%d",&n);
if(n<0 || n>7)
printf("nhap sai!\nXin nhap lai!");
}while(n<0 || n>7);
switch(n)
{
case 1:
createSV(sv);
insertFi(phead,sv);
break;
case 2:
createSV(sv);
insertEN(phead,sv);
break;
case 3:
char s[40];
printf("\nNhap ten sinh vien can tim: ");
scanf("%s",s);
insertAF(phead,sv,s);
break;
case 4:
deleteFI(phead);
break;
case 5:
int count=countNO(phead);
if(count!=0)
printf("\nSo sv hien tai: %d",count);
else
printf("\nDanh sach rong….");
break;
case 6:
int d1,d2;
printf("\nTim sinh vien theo DK: ");
printf("\nNhap khoang diem (d1->d2): ");
scanf("%d%d",&d1,&d2);
if(!showcondition(phead,d1,d2))
printf("\nKhong tim thay!");
break;
case 7:
sortcode(phead);
break;
case 0:
break;
}
printf("\n");
cprintf("Cap nhap lai: ");printf("\n");
showLI(phead);
getch();
}while(n!=0);
getch();
}
@ITHUTECH 2012
Last modified on November 20th, 2023 at 3:19 am
Nam Le
lequocnam
0 responds