c語言圖書館管理系統----學會使用結構體

一粒程式米發表於2020-12-23

題目:
一本書的關鍵資訊有ISBN編碼、書名、作者、價格、出版社,設計書的結構體型別,然後設計如下函式:
(1)設計函式input(struct books mybook) (struct是前面設計的書結構體型別)從鍵盤讀入1本書的資訊。
(2)設計排序函式sort(struct books mybook[ ],int low,int high),將3本書按照價格排序。
(3)主函式通過3次迴圈呼叫input輸入3本書的資訊,然後使用sort函式對這3本書進行排序,最後輸出排序結果。

實驗程式碼:

#include <stdio.h>
#include <windows.h>
#include<string.h>
#include <locale.h>

#define NUM 3
struct books{
	int ISBN;//編號
	char book_name[20];//書名
	char name[20];//作者
	int price;//價格
	char chubanshe[20];//出版社
};
 int j;
void input(struct books mybook[NUM])
{
	int i;
	for(i=0;i<NUM;i++)
	{
		printf("請輸入編號、書名、作者、價格、出版社\n");
		
		scanf("%d %s %s %d %s",&mybook[i].ISBN,&mybook[i].book_name,&mybook[i].name,&mybook[i].price,&mybook[i].chubanshe);
	//	printf("編號%d 書名%s 作者%s 價格%d  出版社%s ",mybook[i].ISBN,mybook[i].book_name,mybook[i].name,mybook[i].price,mybook[i].chubanshe);
	}
	
}
void swap(struct books *p1,struct books *p2)	//交換兩個結構體變數
{
	struct books temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

void sort(struct books p[],int low,int high)//遞迴實現快速排序
{
	int i,j;

	i=low;
	j=high;
	
	if(low<high)
	{
		while(i<j)
		{
			while(i<j )
				j--;
			if(i < j) 
				swap(&p[i++],&p[j]);
				// num[i++]=num[j];
			while(i<j )
				i++;
			if(i < j) 
				swap(&p[i],&p[j--]);
				// num[j--]=num[i];
		}
		
		sort(p,low,i-1);
		sort(p,i+1,high);
	}
}


void main()
{
	struct books mybook[NUM];
	input(mybook);
	sort(mybook,0,NUM-1);

	printf("按照價格排序\n");
	for(j=0;j<NUM;j++)
	{
		printf("編號%d 書名%s 作者%s 價格%d  出版社%s \n",mybook[j].ISBN,mybook[j].book_name,mybook[j].name,mybook[j].price,mybook[j].chubanshe);
	}

}

記錄:
為什麼要有結構體?

因為在實際問題中,一組資料往往有很多種不同的資料型別。例如,登記學生的資訊,可能需要用到 char型的姓名,int型或 char型的學號,int型的年齡,char型的性別,float型的成績。又例如,對於記錄一本書,需要 char型的書名,char型的作者名,float型的價格。在這些情況下,使用簡單的基本資料型別甚至是陣列都是很困難的。而結構體(類似Pascal中的“記錄”),則可以有效的解決這個問題。
結構體本質上還是一種資料型別,但它可以包括若干個“成員”,每個成員的型別可以相同也可以不同,也可以是基本資料型別或者又是一個構造型別。
結構體的優點:結構體不僅可以記錄不同型別的資料,而且使得資料結構是“高內聚,低耦合”的,更利於程式的閱讀理解和移植,而且結構體的儲存方式可以提高CPU對記憶體的訪問速度。

相關文章