[ create a new paste ] login | about

Link: http://codepad.org/16DM90bm    [ raw code | output | fork ]

C, pasted on May 6:
/*		ĐỀ THI TUYỂN SINH
	LỚP HOÀN CHỈNH ĐẠI HỌC KHÓA 2001
		  MÔN THI:CƠ SỞ
		Thời gian:180 phút					*/

/* Phần 2:CẤU TRÚC DỮ LIỆU */

/* Câu 1:Hãy khai báo kiểu dữ liệu danh sách liên kết đơn mà mỗi phần tử chứa thông tin về một quyển sách bao gồm các trường:mã số sách (số nguyên 4 byte),tên sách (chuỗi tối đa 40 ký tự),tác giả (chuỗi tối đa 30 ký tự),năm xuất bản (số nguyên 2 byte).
Với kiểu dữ liệu vừa khai báo,hãy xây dựng các hàm sau:
	- Hàm đếm số sách xuất bản năm X.
	- Hàm sắp xếp danh sách theo mã số sách .
656.cpp */
/* 

Tác giả: Nguyễn Việt Nam Sơn
Trung tâm đào tạo tin học - Thiết kế phần mềm - Sơn Đẹp Trai: www.SonDepTrai.com

Nguồn source code này Tôi viết vào năm 2012 lúc mới bắt đầu học lập trình C/C++ nên một số cách sẽ không được tối ưu - Bạn chỉ nên dùng trên tinh thần tham khảo thôi nhé.
Mong giúp đỡ được Bạn trên con đường Học Lập Trình.
TẤT CẢ VÌ SỰ THÀNH CÔNG CỦA BẠN

*/
// Các thư viện sử dụng trong chương trình .
#include "stdio.h"
#include "conio.h"
#include "Windows.h"
#include "time.h"

// Khai báo cấu trúc dữ liệu danh sách liên kết đơn .
struct sach
{
	int MaSoSach;
	char TenSach[40];
	char TacGia[30];
	short NamXuatBan;
};
typedef struct sach SACH;

struct node
{
	SACH Data;
	node*pNext;
};
typedef struct node NODE;

struct list
{
	NODE*pHead;
	NODE*pTail;
};
typedef struct list LIST;

// Khởi tạo danh sách liên kết đơn .
void INit(LIST &l)
{
	l.pHead=NULL;
	l.pTail=NULL;
}

// Tạo Node trong danh sách liên kết đơn .
NODE*getnode(SACH x)
{
	NODE*p;
	p=new NODE;
	if(p==NULL)
		return NULL;
	p->Data=x;
	p->pNext=NULL;
	return p;
}

// Thêm vào cuối danh sách liên kết đơn .
void AddTail(LIST &l,NODE*new_ele)
{
	if(l.pHead==NULL)
	{
		l.pHead=new_ele;
		l.pTail=l.pHead;
	}
	else
	{
		l.pTail->pNext=new_ele;
		l.pTail=new_ele;
	}
}

// Nhập dữ liệu danh sách liên kết đơn .
void InPut(LIST &l)
{
	int n;
	quaylai:printf("\nNhap vao so luong sach co trong danh sach:");
	scanf("%d",&n);
	if(n<0)
	{
		printf("\nSo luong khong hop le!Xin vui long nhap lai!");
		goto quaylai;
	}
	INit(l);
	for(int i=1;i<=n;i++)
	{
		SACH x;
		printf("\n>>>>>>>>>>>>>> Nhap Vao Thong Tin Cuon Sach Thu %d <<<<<<<<<<<<<<<<<<\n",i);
		printf("\n");
		printf("\nNhap vao Ma So Sach:");
		scanf("%d",&x.MaSoSach);
		fflush(stdin);
		printf("\nNhap vao Ten Sach:");
		gets(x.TenSach);
		printf("\nNhap vao Tac Gia:");
		gets(x.TacGia);
		printf("\nNhap vao Nam Xuat Ban:");
		scanf("%hd",&x.NamXuatBan);
		NODE*p=getnode(x);
		AddTail(l,p);
	}
}

// Xuất dữ liệu danh sách liên kết đơn .
void OutPut(LIST l)
{
	int dem=0;
	printf("\nSTT\tMa So Sach\tTen Sach\tTac Gia\t\t\tNam Xuat Ban");
	for(NODE*p=l.pHead;p!=NULL;p=p->pNext)
	{
		dem++;
		printf("\n%d\t%d\t%s\t%s\t%hd",dem,p->Data.MaSoSach,p->Data.TenSach,p->Data.TacGia,p->Data.NamXuatBan);
	}
}

// Đếm số sách xuất bản năm X .
void DemSoSachXuatBanNamX(LIST l)
{
	NODE*pNode;
	LIST Prs;
	INit(Prs);
	short x;
	int dem=0;
	printf("\nNhap vao mot nam can kiem tra:");
	scanf("%hd",&x);
	for(pNode=l.pHead;pNode!=NULL;pNode=pNode->pNext)
	{
		if(pNode->Data.NamXuatBan==x)
		{
			dem++;
		}
	}
	printf("\nSo Luong Sach Xuat Ban Nam %hd La:%d",x,dem);
}

// Sắp danh sách liên kết đơn tăng dần .
void TangDan(LIST &l)
{
    NODE *p,*q;
    SACH temp;
	for(p=l.pHead;p!=NULL;p=p->pNext)
	{
		for(q=p->pNext;q!=NULL;q=q->pNext)
		{
			if(p->Data.MaSoSach>q->Data.MaSoSach)
			{
				temp=p->Data;
				p->Data=q->Data;
				q->Data=temp;
			}
		}
	}
}

// Sắp danh sách liên kết đơn giảm dần .
void GiamDan(LIST &l)
{
	NODE *p,*q;
	SACH temp;
	for(p=l.pHead;p!=NULL;p=p->pNext)
	{
		for(q=p->pNext;q!=NULL;q=q->pNext)
		{
			if(p->Data.MaSoSach<q->Data.MaSoSach)
			{
				temp=p->Data;
				p->Data=q->Data;
				q->Data=temp;
			}
		}
	}
}

// Sắp xếp danh sách theo mã số sách .
void SapXepDanhSach(LIST l)
{
	NODE*pNode;
	NODE*q;
	LIST Prs;
	INit(Prs);
	int w;
	printf("\n>>>>>>>>>>>>> Sap Xep Danh Sach Theo Ma So Sach <<<<<<<<<<<<<<<<<<\n");
	printf("\n------------ Bang Lua Chon ------------");
	printf("\n1.Sap Danh Sach Tang Dan Theo Ma So Sach");
	printf("\n2.Sap Danh Sach Giam Dan Theo Ma So Sach");
	printf("\n---------------------------------------");
	quaylai:printf("\nNhap vao lua chon o day:");
	scanf("%d",&w);
	if(w!=1&&w!=2)
	{
		printf("\nLua chon khong hop le!Xin nhap lai!");
		goto quaylai;
	}
	if(w==1)
	{
		TangDan(l);
		printf("\n>>>>>>>> Sap Tang Dan Theo Ma So Sach <<<<<<<<<<<<<\n");
		OutPut(l);
	}
	else if(w==2)
	{
		GiamDan(l);
		printf("\n>>>>>>>> Sap Giam Dan Theo Ma So Sach <<<<<<<<<<<<<\n");
		OutPut(l);
	}
}

// Hàm tăng kích cỡ của khung CMD
void resizeConsole(int width, int height)
{
	HWND console = GetConsoleWindow();
	RECT r;
	GetWindowRect(console, &r);
	MoveWindow(console, r.left, r.top, width, height, TRUE);
}

// Hàm lấy tọa độ vị trí .
void gotoxy(int x,int y)
{
	HANDLE hstdout=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD position = {x,y};
	SetConsoleCursorPosition(hstdout,position);
}

// Hàm tô màu .
void textcolor(int x)
{
	HANDLE mau;
	mau=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(mau,x);
}

// Hàm hiển thị lời chào .
void Thanks()
{
	system("cls"); // Xóa đi mọi dữ liệu đã làm trước đó .
	srand(time(NULL));
	for(int j=1;j<=20;j++)
	{
		int color=rand()%15+1; // Khởi tạo màu chạy ngẫu nhiên trong đoạn thang màu [1,15].
		Sleep(300);
		gotoxy(j-1,40);
		printf("			");
		gotoxy(j,40);
		textcolor(color);
		printf("\nThanks You For Using The Program ! Goodbye And See You Later !\n"); // Khi người dùng thoát chương trình sẽ hiển thị lời chào !
	}
	textcolor(15);
	getch();
	gotoxy(3,42);
}

// Hàm MeNu .
void MeNu()
{
	resizeConsole(800,500); // Tăng kích cỡ của khung CMD lên thành chiều rộng 800,chiều cao 500 .
	int w;
	LIST lst;
	printf("\n");
	quaylai:InPut(lst);
	printf("\n>>>>>>>>>>>>>>>>>>>>>Xuat Ra Danh Sach Thong Tin Cac Cuon Sach:<<<<<<<<<<<<<<<<<<<<<<<<\n");
	printf("\n");
	OutPut(lst);
	printf("\n");
	do{
		// Bảng MeNu đưa ra cho người dùng các sự lựa chọn .
		printf("\n-------------------------------------MeNu---------------------------------------\n");
		printf("\n");		
		printf("\n 1.Dem So Sach Xuat Ban Nam X ");
		printf("\n");
		printf("\n 2.Sap Xep Danh Sach Theo Ma So Sach ");
		printf("\n");
		printf("\n 3.Cap Nhat Lai Thong Tin Cac Cuon Sach ");
		printf("\n");
		printf("\n 0.Thoat chuong trinh ");
		printf("\n");
		printf("\n--------------------------------------------------------------------------------\n");
		printf("\n");
		printf("\nChon:");
		scanf("%d",&w);
		printf("\nKet qua:\n");
		printf("\n");		
		// Cấu trúc switch-case .
		switch(w)
		{								
		case 1:
			{
				DemSoSachXuatBanNamX(lst);
				break; 
			}
		case 2: 
			{
				SapXepDanhSach(lst);
				break;
			}
		case 3:
			{
				system("cls");
				goto quaylai;
				break;
			}
		case 0: 
			{
				Thanks();
			}
		}
	}while(w!=0);
}

// Hàm chính .
void main()
{
	MeNu();
}


Output:
Line 18: error: conio.h: No such file or directory
Line 20: error: Windows.h: No such file or directory
Line 42: error: expected specifier-qualifier-list before 'node'
Line 54: error: expected ';', ',' or ')' before '&' token
In function 'getnode':
Line 64: error: 'new' undeclared (first use in this function)
Line 64: error: (Each undeclared identifier is reported only once
Line 64: error: for each function it appears in.)
Line 64: error: expected ';' before 'NODE'
Line 68: error: 'NODE' has no member named 'pNext'
t.c: At top level:
Line 73: error: expected ';', ',' or ')' before '&' token
Line 88: error: expected ';', ',' or ')' before '&' token
In function 'OutPut':
Line 123: error: 'for' loop initial declaration used outside C99 mode
Line 123: error: 'NODE' has no member named 'pNext'
In function 'DemSoSachXuatBanNamX':
Line 140: error: 'NODE' has no member named 'pNext'
t.c: At top level:
Line 151: error: expected ';', ',' or ')' before '&' token
Line 170: error: expected ';', ',' or ')' before '&' token
In function 'resizeConsole':
Line 225: error: 'HWND' undeclared (first use in this function)
Line 225: error: expected ';' before 'console'
Line 226: error: 'RECT' undeclared (first use in this function)
Line 226: error: expected ';' before 'r'
Line 227: error: 'console' undeclared (first use in this function)
Line 227: error: 'r' undeclared (first use in this function)
Line 228: error: 'TRUE' undeclared (first use in this function)
In function 'gotoxy':
Line 234: error: 'HANDLE' undeclared (first use in this function)
Line 234: error: expected ';' before 'hstdout'
Line 235: error: 'COORD' undeclared (first use in this function)
Line 235: error: expected ';' before 'position'
Line 236: error: 'hstdout' undeclared (first use in this function)
Line 236: error: 'position' undeclared (first use in this function)
In function 'textcolor':
Line 242: error: 'HANDLE' undeclared (first use in this function)
Line 242: error: expected ';' before 'mau'
Line 243: error: 'mau' undeclared (first use in this function)
Line 243: error: 'STD_OUTPUT_HANDLE' undeclared (first use in this function)
In function 'Thanks':
Line 252: error: 'for' loop initial declaration used outside C99 mode
In function 'main':
Line 326: warning: return type of 'main' is not 'int'


Create a new paste based on this one


Comments: