30/09/2018, 20:42
Chương trình chạy bị lỗi tại thư viện #include<alloc.h> và clrscr() và flushall();
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<alloc.h>
#include<ctype.h>
#define TRUE 1
#define FALSE 0
struct sinhvien
{
int mssv;
char ho[30];
char ten[10];
};
struct node
{
sinhvien sv;
struct node*next;
};
typedef node *NODEPTR;
NODEPTR First;
sinhvien sv;
NODEPTR p;
// phep toan new_node: ccap phat nut cho dslk
NODEPTR New_node(void)
{
NODEPTR p;
p=(NODEPTR)malloc(sizeof(struct node));
return(p);
}
/*tac vu nodepointer:xac dinh con tro cua nut i trong danh sach lien ket
(i=2,....)*/
NODEPTR nodepoiter(NODEPTR First, int i)
{
NODEPTR p;
int vitri=1;
p=First;
while(p!=NULL &&vitri<i)
{
p=p->next;
vitri++;
}
return(p);
}
//tac vu position: xac dinh vi tri cac nut p trong danh sach lien ket
int positoion(NODEPTR First, NODEPTR p)
{
int vitri;
NODEPTR q;
p=First;
vitri=1;
while(q!=NULL &&q!=p)
{
q=q->next;
vitri++;
}
if(q==NULL)
return(-1);
return(vitri);
}
//phep toan initialize : khoi dong tao danh sach lien ket
void initialize(NODEPTR &First)
{
First=NULL;
}
//tac vu empty : khoi dong danh sach lien ket
int Empty(NODEPTR First)
{
return(First==NULL?TRUE: FALSE);
}
// phep toan insert_first: them nut ms vao dau danh sach lien ket
void Insert_first(NODEPTR &First, sinhvien x)
{
NODEPTR p;
p=New_node();
p->sv=x;
p->next=First;
First=p;
}
//phep toan insert_after :them nut moi sau nut co dia chi p
void Insert_after(NODEPTR p, sinhvien x)
{
NODEPTR q;
if(p==NULL)
printf ("khong them sinh vien vao danh sach duoc");
else
{
q=New_node();
q->sv=x;
q->next=p->next;
p->next=q;
}
}
//phep toan delete_first xoa nut dau danh sach lien ket
void Delete_first(NODEPTR &First)
{
NODEPTR p;
if(Empty(First))
printf("khong co sinh vien trong danh sach");
else
{
p=First;//nut can xoa la nut dau
First=p->next;
free(p);
}
}
//tac vu delete_after: xoa 1 nut sau p
void Delete_after(NODEPTR p)
{
NODEPTR q;
//nue p la null hoac p tro toi nut cuoi
if((p==NULL)||(p->next==NULL))
printf ("khong xoa sinh vien nay duoc");
else
{
q=p->next;// q chi nut can xoa
p->next=q->next;
free(q);
}
}
/*phep toan insert_order chi su dung khi them nut vao danh sach da co phan tu*/
void Insert_Order(NODEPTR &Frist, sinhvien x)
{
NODEPTR p,q;// q la nut truoc p la nut sau
q=NULL;
for(p=First; p!=NULL&&p->sv.mssv<x.mssv;p=p->next)
q=p;
if(q==NULL)// them nut vao dau danh sach lien ket
Insert_first(First, x);
else // them nut vao sau nut q
Insert_after(q,x);
}
//phep toan clearlist: xoa tac ca cac nut trong danh sach lien ket
void clearlist( NODEPTR &First)
{
NODEPTR p, q; // q la nuut truoc, p la nut sau
p=First;
while(First!=NULL)
{
p=First;
First=First->next;
free(p);
}
}
// phep toan traverse: duyet danh sach lien ket
void traverse(NODEPTR First)
{
NODEPTR p;
int stt=0;
p=First;
if(p==NULL)
printf("
(Khong co sinh vien trong dach)");
while(p!=NULL)
{
printf("
%5d %8d %-30s %-10s, ++stt, p->sv.mssv, p->sv.ho, p->sv.ten");
p=p->next;
}
}
//tac vu selection: sap sep danh sach lien ket theo mssv
void selectionsort(NODEPTR &First)
{
NODEPTR p, q, pmin;
sinhvien min;
for(q=First;p->next!=NULL; p=p->next)
{
min=p->sv;
pmin=p;
for(q=First;p->next!=NULL; q=q->next)
if (min.mssv>q->sv.mssv)
{
min=q->sv;
pmin=q;
}
//hoan doi truong info cua 2 nut p va pmin
pmin->sv=p->sv;
p->sv=min;
}
}
char menu()
{
char chucnang;
do
{clrscr();
printf("
CHUONG TRINH QUAN LY DANH SACH SINH VIEN ");
printf("
Cac chuc nang cua chuong trinh:
");
printf("1: Cac chuc nang cua chuong trinh:
");
printf("2: Tao danh sach sinh vien
");
printf("3: Xem danh sach sinh vien
");
printf("4: Hieu chinh danh sach sinh vien
");
printf("5:Xoa sinh vien trong danh sach
");
printf("6: Tim kiem sinh vien theo MSSV
");
printf("7: Sap xep danh sach theo MSSV
");
printf("8: Them sinh vien vao danh sach da co thu tu
");
printf("9: Xoa toan bo danh sach sinh vien
");
printf("0: Ket thuc chuong trinh
");
printf("Chuc nang ban da chon : ");
chucnang=getche();
}
while(chucnang<'0'||chucnang>'9');
return chucnang;
}
void Create_list(NODEPTR &First)
{
NODEPTR Last,p;
sinhvien sv;
char maso[5],c;
clearlist(First);
printf("Ma so sinh vien:");
gets(maso);
sv.mssv=atoi(maso);
while(sv.mssv!=0)
{
printf("Ho sinh vien:");
gets(sv.ho);
printf("Ten sinh vien:");
gets(sv.ten);
p=New_node();
p->sv=sv;
if(First==NULL)
First=p;
else
Last->next=p;
Last=p;
p->next=NULL;
printf("Ma so sinh vien moi:");
gets(maso);
sv.mssv=atoi(maso);
}
}
//chuong trinh chinh
int main()
{
int vitri;
char chucnang, c, maso[5], c_vitri[5];
//khoi dong danh sach lien ket
initialize(First);
do
{
chucnang=menu();
flushall();
switch(chucnang)
{
case'1':
{
Create_list(First);
break;
}
case '2':
{
printf("
Vi tri them(1,2,...):");
gets(c_vitri);
vitri=atoi(c_vitri);
p= nodepointer(First, vitri-1);//p chi nut truoc nut can them
if(vitri<=0||p==NULL)
{
printf("Vi tri khong le");
getche();
}
else
{
printf("Ma so sinh vien:");
gets(maso);
sv.mssv=atoi(maso);
printf("Ho sinh vien:");
gets(sv.ho);
printf("Ten sinh vien:");
gets(sv.ten);
if(vitri==1)
Insert_frist(First,sv);
else
Insert_after(p,sv);
}
break;
}
case '3':
{
printf("
Danh sach sinh vien:");
printf("
STT MSSV HOTEN");
traverse(First);
getche();
break;
}
case'4':
{
printf("
Vi tri hieu chinh(1, 2, 3...):");
gets(c_vitri);
vitri=atoi(c_vitri);
p=nodepointer(Frist, vitri);//p chi nut can hieu chinh
if(p==NULL)
{
printf("Vi tri khong phu hop");
getche();
}
else
{
printf("
STT:% d MSSV:%d HO:%s TEN:%s,")
vitri, p->sv.mssv, p->sv.ho, p->sv.ten;
printf("
Ma so sinh vien moi:");
gets(maso);
sv.mssv=atoi(maso);
printf("Ho sinh vien moi:");
gets(sv.ho);
printf("Ten sv moi:");
gets(sv.ten);
p->sv=sv;
}
break;
}
case'5':
{
printf("
Vi tri xoa ( 1, 2 ,3...):");
gets(c_vitri);
vitri=atoi(c_vitri);
p=nodepointer(First, vitri-1);//p chi nut truoc can xoa
if(vitri<=0||p=NULL)
{
printf("Vi tri khong hop le");
getche();
}
else
if(vitri==1)
Detele_Frist(Frist);
else
Delete_after(p);
break;
}
case'6':
{
printf("
Ma so sinh vien tim:");
gets(maso);
sv.mssv=atoi(maso);
p=search_info(Frist, sv.mssv);
if(p==NULL)
printf("Khong co sinh vien co MSSV %d trong danh sach,sv.mssv");
else
printf ("Tim thay o vi tri %d trong danh sach", position(Frist,p));
getche();
break;
}
case'7':
{
printf("
Ban co chac khong?(c/k):");
c=toupper(getche());
if(c=='C')
selectionsort(First);
break;
}
case'8':
{
printf("
Ban nho sap xep danh sach truoc. Nhan phim bat ku...");
getche();
printf("
Ma so sinh vien:");
gets(maso);
sv.mssv=atoi(maso);
printf("Ho sinh vien:");
gets(sv.ho);
printf("Ten sinh vien:");
gets(sv.ten);
Isert_Order(Frist, sv);
break;
}
case'9':
{
printf("
Ban co chac khong (c/k):");
c=getche();
if(c=='c'||c=='C')
clearlist(Frist);
break;
}
}
} while(chucnang!='0')
// Xoa tac ca cac nut tren danh sach lien ket
clearlist(Frist);
}
Bài liên quan
Mình hay chạy chương trình trên Dev C++ 5.9.2 khi khai báo alloc.h thì báo lỗi không tìm thấy thư viện này, chắc không hỗ trợ nữa (mà chả cần nó đâu, ví dụ như cấp phát bộ nhớ thì thư viện stdlib.h là đủ rồi), còn lệnh clrscr() cũng không hỗ trợ luôn, cậu thay bằng
system("cls");
xem sao