国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言課設(shè):圖書管理系統(tǒng)

這篇具有很好參考價值的文章主要介紹了C語言課設(shè):圖書管理系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、系統(tǒng)功能

?????? 圖書管理系統(tǒng)要求實(shí)現(xiàn)圖書管理的基本功能,包括圖書的錄入、刪除、查找和導(dǎo)入/導(dǎo)出等。圖書的屬性包括書號、書名、第一作者、版次、出版社、出版年等信息。

1.創(chuàng)建:創(chuàng)建圖書管理系統(tǒng),用逐條輸入的方式;

2.顯示:分屏顯示圖書管理系統(tǒng)中的所有記錄;

3.插入:向圖書管理系統(tǒng)中插入一條記錄;

4.刪除:刪除一條已經(jīng)存在的記錄項;

5.排序:以編號為依據(jù)升序排列所有記錄項;

6.查找:根據(jù)用戶輸入的屬性值查找符合條件的記錄項;

7.導(dǎo)入/導(dǎo)出:可以從文件讀入已有的圖書管理系統(tǒng),也可將系統(tǒng)中的圖書信息導(dǎo)出到文件;

8.反序:以編號為依據(jù)將按序排列的記錄項反序排列;

9.刪除相同記錄。

C語言課設(shè):圖書管理系統(tǒng)

?????? 構(gòu)建菜單系統(tǒng),程序執(zhí)行過程為:循環(huán)顯示主菜單,用戶在Give your choice:處輸入選項,即按照功能列表輸入0~10中的任意一個數(shù)字,按回車后,執(zhí)行相應(yīng)的功能。功能執(zhí)行完畢,返回菜單。

二、菜單功能

?????? 各菜單項功能如下:

?????? (1)Input Records(建立有序表)

?????? 從鍵盤上一次輸入一條圖書記錄(書號、書名、第一作者、版次、出版社、出版年),以“書號”為序建立有序表。插入一條記錄后,顯示提示信息:確認(rèn)是否輸入下一條記錄,如確認(rèn),繼續(xù)輸入,否則,退出輸入功能。

?????? (2)Display All Records(顯示所有結(jié)點(diǎn)記錄)

?????? 按順序顯示表中所有記錄,每屏顯示10條記錄,按<Enter>鍵繼續(xù)顯示下一屏。

?????? (3)Insert a Record(插入一條結(jié)點(diǎn)記錄)

?????? 在以“書號”為序排列的表中插入一條記錄,插入后,表仍有序。輸出插入成功的信息。

?????? (4)Delete a Record(按“書號”查找,找到后刪除該條結(jié)點(diǎn)記錄)

?????? 輸入待刪除記錄的“書號”,顯示提示信息,讓用戶再次確認(rèn)是否要刪除。確認(rèn)后,將該“書號”的記錄刪除。

?????? (5) Sort(排序)

?????? 以“書號”為升序排列表中的記錄。

?????? (6)Query(查找并顯示一個結(jié)點(diǎn)記錄)

?????? 輸入“書號”,查找該記錄,找到后顯示記錄信息。

?????? (7)Add Records from a Text File(從文件中添加數(shù)據(jù)到系統(tǒng)中)

?????? 用戶可事前建立一個文件data.txt,存放多條待加入的記錄。提示輸入文件的文件名,然后從該文件中一次性加入多條圖書記錄。文件data.txt格式如下(可以使用英文或拼音表示中文信息):

C語言課設(shè):圖書管理系統(tǒng)

?????? (8)Write to a Text File(將系統(tǒng)中記錄寫入文件)

?????? 將圖書管理系統(tǒng)中的全部記錄寫入文件records.txt,要求文件格式和文件data.txt相同。

?????? (9)Reverse List(將表反序)

?????? 將表中的所有結(jié)點(diǎn)按“書號”反序存放。

?????? (10)Delete the Same Records(刪除相同記錄)

?????? 刪除書名、第一作者、版次、出版社、出版年均相同的記錄。

?????? (0)Quit(退出圖書管理系統(tǒng)程序)

?????? 退出圖書管理系統(tǒng)程序。

三、程序?qū)崿F(xiàn)

?????? 1. 數(shù)據(jù)結(jié)構(gòu)

???? 用結(jié)構(gòu)體數(shù)組實(shí)現(xiàn)圖書信息的記錄和管理。每個數(shù)組元素為一個結(jié)構(gòu)體變量,其結(jié)構(gòu)如下:

C語言課設(shè):圖書管理系統(tǒng)

?????? 在主函數(shù)中定義結(jié)構(gòu)體數(shù)組Bookinfo books[NUM];用作記錄存儲。

?????? 2. 各主要功能函數(shù)

?????? (1)數(shù)據(jù)輸入

?????? int Input(Bookinfo dictList[],int n);

?????? 從鍵盤輸入若干條記錄,依次存放到結(jié)構(gòu)體數(shù)組dictList中,n為數(shù)組原有記錄數(shù),函數(shù)返回最后的記錄數(shù)。

?????? (2)輸出數(shù)據(jù)

?????? void Diplay(Bookinfo dictList[],int n);

?????? 顯示所有圖書信息,每10本暫停一次,n為數(shù)組元素個數(shù)。

?????? (3)插入一條結(jié)點(diǎn)記錄

?????? int Insert(Bookinfo dictList[],int n, Bookinfo *s);

?????? 按書號序插入記錄s,返回記錄個數(shù)。

???????? int Insert_a_record(Bookinfo dictList[],int n);

?????? 輸入待插入的圖書書號、書名、作者、版本號、出版社名、出版年等圖書信息,調(diào)用Insert函數(shù)按書號作有序插入,輸出插入成功信息,返回記錄個數(shù)。

?????? (4)刪除一條結(jié)點(diǎn)記錄

?????? int Delete(Bookinfo dictList[],int n, char *book);

?????? 刪除書名為book的第一條圖書記錄,返回數(shù)組中的記錄數(shù)。

?????? int Delete_a_record(Bookinfo dictList[],int n);

?????? 輸入待刪除的書名,經(jīng)確認(rèn)后調(diào)用Delete函數(shù),同時列出同一書名的所有書目,輸入待刪除書目的書號,提示是否刪除,確認(rèn)后,輸出刪除成功與否的信息,返回數(shù)組中的記錄數(shù)。

?????? (5)排序

?????? void Sort_by_ISBN(Bookinfo dictList[],int n);

?????? 數(shù)組按書號升序排列。

?????? (6)查詢數(shù)據(jù)

?????? int Query(Bookinfo dictList[],int n, char *book);

?????? 查找并顯示書名為book的所有記錄,查找成功返回該書名記錄個數(shù),否則返回-1。

?????? void Query_a_record(Bookinfo dictList[], int n);

?????? 輸入待查找的書名,調(diào)用Query函數(shù)查找該書的記錄,輸出查找成功與否的信息和該書名的所有記錄。

?????? (7)從文件中整批輸入數(shù)據(jù)

?????? int AddfromText(Bookinfo dictList[],int n, char *filename);

?????? 從文件filename添加一批記錄到數(shù)組中,調(diào)用Insert()函數(shù)作有序插入,返回添加記錄后的新記錄數(shù)。

?????? (8)將記錄寫到文件

?????? void WriteText(Bookinfo dictList[],int n,char *filename);

?????? 將數(shù)組中的記錄全部寫入文件filename中。

?????? (9)將表反序存放

?????? void? Reverse(Bookinfo dictList[]);

?????? 按書號反序存放表。

?????? (10)刪除雷同記錄

?????? int DeleteSame(Bookinfo dictList[], int n);

?????? 刪除數(shù)組中書名、作者、版本號、出版社名、出版年均相同的記錄,n為數(shù)組原有記錄數(shù),函數(shù)返回最后的記錄數(shù)。

?????? (0)退出管理系統(tǒng)

?????? void Quit(Bookinfo dictList[]);

?????? 退出系統(tǒng)

程序代碼如下

#pragma warning(disable:4996)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>

#define NUM 100 // * 最大的書籍信息數(shù)量
#define NUM1 20
#define NUM2 60

// * 定義結(jié)構(gòu)體
typedef struct
{
	char ISBN[10];		// * 書號
	char book[30];		// * 書名
	char author[20];	// * 作者
	int edition;		// * 版本號
	char press[50];		// * 出版社名
	int year;			// * 出版年
} Bookinfo;


//**************************************************************************************************************************************
// 
// * 一.界面設(shè)計函數(shù)

void Enter();// * 1.輸入回車控制

void Space();// * 2.輸入20個空格

void Star();// * 3.輸入星形

void Beauty(); // * 4.美化界面

void BigSpace();// * 5.兩個空格

//**********************************************************************************************************************************

// * 二. 菜單函數(shù)

void Menu();// * 1.開始界面


// ******************************************************************************************************************************
// 
// * 三. 主要的操作函數(shù)

int Input(Bookinfo dictList[], int n);// * 在原來數(shù)組后面加一個數(shù)組

void Display(Bookinfo dictList[], int n);// * 顯示所有的圖書信息

int Insert(Bookinfo dictList[], int n, Bookinfo* s);// * 插入一條結(jié)點(diǎn)記錄(按書號插入) // * 返回數(shù)組中的記錄數(shù)

int Insert_a_record(Bookinfo dictList[], int n);// * 輸入待插入的信息,調(diào)用Insert函數(shù)插入

int Delete(Bookinfo dictList[], int n, char* book);	// * 刪除一條結(jié)點(diǎn)記錄

int Delete_a_record(Bookinfo dictList[], int n);// * 輸入書名,調(diào)用Delete列出,然后選擇刪除的書號

void Sort_by_ISBN(Bookinfo dictList[], int n);// * 數(shù)組按照書號進(jìn)行升序排序

int Query(Bookinfo dictList[], int n, char* book);// * 查詢數(shù)據(jù)

void Query_a_record(Bookinfo dictList[], int n);// * 輸入要查找的書名,調(diào)用Query查詢記錄,輸出查找成功與否的信息和該書名的所有記錄

int AddfromText(Bookinfo dictList[], int n, char* filename);// * 從文件中添加一批數(shù)據(jù)記錄到數(shù)組之中,同時調(diào)用Insert函數(shù)作有序插入
														   // * 返回記錄數(shù)量

void WriteText(Bookinfo dictList[], int n, char* filename);// * 將記錄寫回文件

void Reverse(Bookinfo dictList[]);// * 將表反序存放

int DeleteSame(Bookinfo* dictList[], int n);// * 刪除雷同記錄

int Quit(Bookinfo* dictList[], int n);// * 釋放空間,退出系統(tǒng)

// ******************************************************************************************************************************

// * 四. 輔助函數(shù)

Bookinfo InputBookInformation();	// * 1. 用來輸入一本書的信息,返回值是這個信息

void OutputBookInformation(Bookinfo book);	// * 2. 輸出書籍的信息

Bookinfo freadBookInformation(FILE* fp); // * 3. 從文件中讀取信息

int FILEOutputBookInformation(Bookinfo book, FILE* fp);// * 4. 把數(shù)組的信息儲存到文件之中

int DeleteByISBN(Bookinfo dictList[], int n, char ISBN[]);// * 5. 根據(jù)書號刪除相應(yīng)的圖書

void OutputBookHead();// * 6.輸出書籍的表頭信息

int DeleteByISBNAndName(Bookinfo dictList[], int n, char ISBN[], char bookname[]);// * 7. 根據(jù)書號和姓名刪除相應(yīng)的圖書
// * 和第五個類似,但是加了一些限制條件

int JudgeSameName(Bookinfo dictList[], int n, char bookname[]);// * 8. 判斷是否有相同的書名, 是返回1,否返回0(和7類似)

int Ask(); // * 9.在寫入文件的時候進(jìn)行詢問是否寫入

void Signin();// * 10.judge登錄系統(tǒng)

// *************************************************************************************************************************

// * 主函數(shù)
int main()
{
	//system("color 02");
	int i;

	char filename[20];

	strcpy(filename, "data.txt");

	Bookinfo books[100];// * 建立有動態(tài)儲存空間的數(shù)組

	int n = 0;	// * 儲存書籍的數(shù)量

	int choice;	// * 用來選擇

	Signin();

	while (1)
	{
		// * 先把數(shù)組里所有的沒有數(shù)據(jù)的edition變成0,便于找到數(shù)組終止的地方
		for (i = n; i < NUM; i++)
		{
			books[i].edition = 0;
		}

		Menu();

		scanf("%d", &choice);	// * 從鍵盤中讀取字符

		getchar();// * 消化換行符
		switch (choice)
		{
		case 1: n = Input(books, n);
			break;
		case 2: Display(books, n);
			break;
		case 3: n = Insert_a_record(books, n);
			break;
		case 4: n = Delete_a_record(books, n);
			break;
		case 5: Sort_by_ISBN(books, n);
			break;
		case 6: Query_a_record(books, n);
			break;
		case 7: n = AddfromText(books, n, filename);
			break;
		case 8: WriteText(books, n, filename);
			break;
		case 9: Reverse(books);
			break;
		case 10: n = DeleteSame(books, n);
			break;
		case 0: Quit(books, n);
			break;
		}

		//system("pause");
		system("cls");
	}
	return 0;
}

// ******************************************************************************************************
// 
// 和菜單有關(guān)的函數(shù)
// 
// * 輸入回車控制
void Enter()
{
	int i;

	for (i = 0; i < 3; i++)
	{
		printf("\n");
	}
}
//輸入20個空格
void Space()
{
	int i;
	for (i = 0; i < NUM1; i++)
	{
		printf(" ");
	}
}


//輸入星形
void Star()
{
	int i;
	Space();
	for (i = 0; i < NUM2; i++)
	{
		printf("*");
	}
	printf("\n\n");

}

// * 美化界面,差不多可以讓輸出到控制臺的中心
void Beauty()
{
	Enter();
	Space();
	Space();
}

// * 輸入四十個空格
void BigSpace()
{
	Space();
	Space();
}

//開始界面
void Menu()
{
	Star();
	BigSpace();
	printf("The Book Management System\n\n");
	Star();
	BigSpace();
	printf("         Menu\n\n");
	Star();
	BigSpace();
	printf("1.Input Records\n");
	BigSpace();
	printf("2.Display All Records\n");
	BigSpace();
	printf("3.Insert a Record\n");
	BigSpace();
	printf("4.Delete a Record\n");
	BigSpace();
	printf("5.Sort\n");
	BigSpace();
	printf("6.Query\n");
	BigSpace();
	printf("7.Add Record from a Text File\n");
	BigSpace();
	printf("8.Write to a Text File\n");
	BigSpace();
	printf("9.Reverse List\n");
	BigSpace();
	printf("10.Delete the Same Records\n");
	BigSpace();
	printf("0.Quit\n\n");
	Star();
	BigSpace();
	printf("\b\b\bGive Your Choice(1~10):");
}




// * **************************************************************************************************

// * 和操作有關(guān)的函數(shù)

// * 輸入一個書籍的信息
int Input(Bookinfo dictList[], int n)
{
	system("cls");
	char judge;	// * 用來判斷是否繼續(xù)輸入
	while (1)
	{
		dictList[n] = InputBookInformation();	// * 輸入書籍信息并錄入數(shù)組

		// * 還是設(shè)置可以插入相同的書吧不然功能10就失業(yè)了
		/*if (JudgeSameISBN(dictList, n, dictList[n].ISBN))
		{
			printf("已存在相同的書號的書?。?!\n");
			system("pause");
			return n;
		}*/

		n++;
		while (1)
		{
			system("cls");
			Beauty();
			
			printf("是否繼續(xù)輸入(y/n):");
			judge = getch();	// * 消化換行符

			system("cls");
			// * 判斷是否正確輸入
			if (judge == 'y' || judge == 'n' || 
				judge == 'Y' || judge == 'N')
				break;
		}

		// * 判斷是否退出
		if (judge == 'y' || judge == 'Y')
			continue;

		return n;
	}
}

// * 在翻頁的功能上還需要完善一下
// * 完善好了,可以自由翻頁了
void Display(Bookinfo dictList[], int n)
{
	system("cls");

	int i;
	int page;// * 記錄當(dāng)前頁碼
	int page_all = n / 10 + 1; // * 記錄顯示的總頁數(shù)

	if (n == 0)
	{
		Beauty();
		printf("系統(tǒng)中沒有錄入圖書!\n");
		system("pause");
		return;
	}


	// * 防止書的數(shù)量是10的倍數(shù)出錯
	if (n % 10 == 0)
		page_all = n / 10 ;
	else
		page_all = n / 10 + 1;
	
	OutputBookHead();	// * 輸出表頭信息
	// * 列出書籍信息的功能
	for (i = 0; i < n; i++)
	{
		OutputBookInformation(dictList[i]);

		// * 每十本書暫停一次,或者到達(dá)末尾暫停一次
		if ((i + 1) % 10 == 0 || i == n - 1)
		{
			page = (i / 10) + 1;
			// * 輸出頁碼標(biāo)識
			printf("\n\n第 %d 頁 \\\ 共 %d 頁(一共 %d 條記錄)\n", page, page_all, n);
			Space();
			printf("按左方向鍵返回前一頁,右方向鍵來到下頁, enter退出顯示功能");


			switch (getch())
			{
			case 224:                    //方向鍵區(qū)的ASCII碼
				switch (getch())
				{
				case 75: if (i >= 19) i -= (i % 10 + 11);
					   else i = -1;
					break;// * 按左方向鍵執(zhí)行
				case 77: if (page == page_all) i = (page - 1) * 10 - 1;// * 到達(dá)最后一頁的i往后退,減1防止后面i++
					break;// * 按右方向鍵執(zhí)行
				default:
					i -= (i % 10 + 1);// * 輸入其他按鍵不改變原來輸入的值,把i歸位
				}
				break;
			case '\r': return;// * 打enter鍵退出

			default:
				i -= (i % 10 + 1);// * 輸入其他按鍵不改變原來輸入的值,把i歸位
			}

			system("cls");
			OutputBookHead();
		}

	}

}

// * 插入一條結(jié)點(diǎn)記錄(按書號插入)
// * 返回數(shù)組中的記錄數(shù)
int Insert(Bookinfo dictList[], int n, Bookinfo* s)
{
	int i, j;
	int judge = 1; // * 判斷是否沒有比它大的書號

	// * 判斷要插入的書號是否重復(fù)
	// * 感覺不要判斷重復(fù)因?yàn)?0的功能就是刪除重復(fù)
	/*if (JudgeSameISBN(dictList, n, s->ISBN))
	{
		return n;
	}*/

	// * 插入圖書
	for (i = 0; i < n; i++)
	{
		// * 判斷插入條件->書號是剛好小于后面那個
		if (strcmp(dictList[i].ISBN, s->ISBN) == 1)
		{
			// * 把所有之后的結(jié)點(diǎn)后移一位再插入
			for (j = n; j > i; j--)
			{
				dictList[j] = dictList[j - 1];
			}
			dictList[i] = *s;

			judge = 0;// * 證明有符合條件的,不用插最后了
			break; // * 完成插入了不要循環(huán)了
		}
	}
	// * 如果沒插入就放在最后
	if (judge)
	{
		dictList[n] = *s;
	}

	return n + 1;
}

// * 傳入待插入的信息,調(diào)用Insert函數(shù)插入
int Insert_a_record(Bookinfo dictList[], int n)
{
	system("cls");

	int temp = n;// * 緩存n的值以判斷是否是相同書號的書籍

	Bookinfo book = InputBookInformation();

	n = Insert(dictList, n, &book);

	// * 判斷要插入的書號是否重復(fù)
	// 
// * 感覺不要判斷是否重復(fù)插入因?yàn)?0的功能就是刪除重復(fù)
	/*if (n == temp)
	{
		BigSpace();
		printf("已存在相同的書號的書!?。n");
		system("pause");
	}*/

	return n;
}

// * 列出符合書名的圖書并刪除一條結(jié)點(diǎn)記錄
int Delete(Bookinfo dictList[], int n, char* book)
{
	system("cls");

	int i;
	char ISBN[10];// * 輸入書號
	int temp = n;// * 儲存n原來的值,如果改變了證明刪除成功了

	// * 輸出符合條件的書名的書籍信息
	Enter();
	OutputBookHead();
	for (i = 0; i < n; i++)
	{
		if (!strcmp(book, dictList[i].book))
		{
			OutputBookInformation(dictList[i]);
		}
	}


	BigSpace();
	printf("\n\n請輸入你要刪除的書號:");
	gets(ISBN);

	BigSpace();
	if ((n = DeleteByISBNAndName(dictList, n, ISBN, book)) < temp)
	{
		printf("刪除成功!");
	}
	else printf("刪除失?。?原因可能是因?yàn)闀栞斎胗姓`)\n");

	system("pause");

	return n;
}

// * 輸入書名,調(diào)用Delete列出,然后選擇刪除的書號
int Delete_a_record(Bookinfo dictList[], int n)
{
	system("cls");

	Beauty();

	char bookname[30];

	printf("請輸入要刪除的圖書名字:");
	gets(bookname);

	// * 判斷數(shù)組中是否有相同的圖書名
	if (!JudgeSameName(dictList, n, bookname))
	{
		printf("\n\n");
		BigSpace();
		printf("輸入的圖書不存在!\n");
		system("pause");
		return n;
	}

	n = Delete(dictList, n, bookname);

	return n;
}


// * 數(shù)組按照書號進(jìn)行升序排序
void Sort_by_ISBN(Bookinfo dictList[], int n)
{
	system("cls");

	int i, j;// * 冒泡排序的循環(huán)變量
	Bookinfo temp;// * 交換的中間變量

	// * 冒泡排序
	for (i = 0; i < n - 1; i++)
	{
		for (j = 0; j < n - 1 - i; j++)
		{
			if (strcmp(dictList[j].ISBN, dictList[j + 1].ISBN) == 1)
			{
				temp = dictList[j];
				dictList[j] = dictList[j + 1];
				dictList[j + 1] = temp;
			}
		}
	}

	Beauty();

	printf("排序完成!一共對 %d 個圖書信息進(jìn)行了排序!\n", n);	// * 輸出排序完成的提示信息

	system("pause");
}


// * 查詢數(shù)據(jù)
// * 顯示book所有的記錄,返回其個數(shù)(如果沒有就返回0)
int Query(Bookinfo dictList[], int n, char* book)
{
	int num = 0;// * 計數(shù)器
	int i;

	printf("\n\n");
	OutputBookHead(); // * 輸入表頭
	for (i = 0; i < n; i++)
	{
		if (!strcmp(dictList[i].book, book))
		{
			OutputBookInformation(dictList[i]);	// * 輸出圖書的信息
			num++;
		}
	}

	return num;
}

// * 輸入要查找的書名,調(diào)用Query查詢記錄,輸出查找成功與否的信息和該書名的所有記錄
void Query_a_record(Bookinfo dicList[], int n)
{
	system("cls");

	char bookname[30];

	int num;// * 記錄搜索到的書籍個數(shù)

	Beauty();
	printf("請輸入要查詢的書籍名稱:");
	gets(bookname);

	// * 判斷num是否為0,為0輸出沒有該書,非0輸出書籍個數(shù)
	if (num = Query(dicList, n, bookname))
	{
		printf("\n\n搜索到 %d 個相同結(jié)果\n\n", num);
	}
	else
	{
		system("cls");
		Beauty();

		printf("書庫中沒有該書!\n");
	}
	system("pause");
}


// * 從文件中添加一批數(shù)據(jù)記錄到數(shù)組之中,同時調(diào)用Insert函數(shù)作有序插入
// * 返回記錄數(shù)量
int AddfromText(Bookinfo dictList[], int n, char* filename)
{
	system("cls");

	Beauty();// * 美化界面
	
	FILE* fp;
	int num = n;	// * 記錄添加圖書的數(shù)量,有相同書號不添加

	Bookinfo booktemp; // * 用來過渡文件中的數(shù)據(jù)

	// * 打開文件并判斷打開是否成功
	if ((fp = fopen(filename, "r")) == NULL)
	{
		printf("文件打開失?。。?!\n");
		system("pause");
		fclose(fp);
		return n;
	}

	while (1)
	{
		booktemp = freadBookInformation(fp);
		// * "end" 是在freadBookInformation 函數(shù)里面設(shè)置的,為了在文件末尾終止循環(huán)
		if (!strcmp(booktemp.ISBN, "end"))
		{
			break;
		}
		n = Insert(dictList, n, &booktemp);
	}

	num = n - num;	// * 記錄現(xiàn)有文件和原來文件的差值

	printf("成功從文件錄入了 %d 本圖書?。ü?%d 本)\n", num, n);	// * 錄入成功的提示信息
	fclose(fp);


	system("pause");

	return n;
}


// * 將記錄寫回文件
void WriteText(Bookinfo dictList[], int n, char* filename)
{
	system("cls");
	Beauty();

	// * 文件寫入會破壞原文件,所以在這里提示一下
	if (!Ask())
	{
		return;
	}

	FILE* fp;

	// * 打開并判斷文件打開是否失敗
	if ((fp = fopen(filename, "w")) == NULL)
	{
		printf("文件打開失敗?。?!\n");
		return;
	}
	int i;// * 循環(huán)變量

	for (i = 0; i < n; i++)
	{
		// * 判斷文件寫入是否成功
		if (!FILEOutputBookInformation(dictList[i], fp))
		{
			printf("文件寫入失??!\n");
			system("pause");
			return;
		}
	}
	Beauty();
	printf("    文件寫入成功!\n\n");
	BigSpace();
	printf("   寫入了 %d 個文件\n", n);
	system("pause");

	fclose(fp);
}


// * 將表反序存放
void Reverse(Bookinfo dictList[])
{
	system("cls");

	Bookinfo temp[NUM];	// * 同樣定義一個數(shù)組,和原數(shù)組長度相同,用來存放原來數(shù)組信息的信息
	int i;
	int n; // * 記錄數(shù)組長度

	// * 先用temp儲存數(shù)組原來信息
	for (i = 0; dictList[i].edition != 0; i++)
	{
		temp[i] = dictList[i];
	}
	n = i;
	// * 反序存放
	for (i = 0; i < n; i++)
	{
		dictList[i] = temp[n - i - 1];
	}

	Beauty();
	printf("反序存放成功!\n");
	system("pause");
}

// * 刪除雷同記錄
int DeleteSame(Bookinfo dictList[], int n)
{
	int temp = n; // * 記錄原來的數(shù)目
	int i, j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			if (!strcmp(dictList[i].ISBN, dictList[j].ISBN) && i != j)
			{
				n = DeleteByISBN(dictList, n, dictList[j].ISBN);
				j--;// * 刪除之后再判斷一次這個點(diǎn),防止如果兩個要刪的連在一起后面那個刪不了
			}
		}
	}

	Beauty();
	printf("成功刪除了 %d 本書!\n", temp - n);
	system("pause");

	return n;
}

// * 退出系統(tǒng)
int Quit(Bookinfo* dicList[], int n)
{
	system("cls");
	
	int judge;// * 用來判斷的變量
	Enter();
	Space();
	printf("             是否退出程序?(y/n)");
	while (1)
	{
		judge = getch();
		if (judge == 'y' || judge == 'Y')
		{
			system("cls");
			Beauty();

			printf("GOOD BYE!\n\n\n\n\n");
			exit(0);
		}
		else if (judge == 'n' || judge == 'N') return 0;
	}

	
	exit(0);
}


//****************************************************************************************************************

// * 這里面寫的是一些輔助的函數(shù)


// * 用來輸入一本書的信息
Bookinfo InputBookInformation()
{
	Beauty();
	Bookinfo book;
	printf("請輸入書號:");
	gets(book.ISBN);
	BigSpace();
	printf("請輸入書名:");
	gets(book.book);
	BigSpace();
	printf("請輸入作者:");
	gets(book.author);
	BigSpace();
	printf("請輸入版本號:");
	scanf("%d", &book.edition);
	getchar();// * 消化掉scanf帶來的換行符
	BigSpace();
	printf("請輸入出版社名:");
	gets(book.press);
	BigSpace();
	printf("請輸入出版年:");
	scanf("%d", &book.year);
	getchar();// * 消化掉scanf帶來的換行符

	return book;
}

// * 輸出書籍的信息
void OutputBookInformation(Bookinfo book)
{
	printf("%-15s%-15s%-15s%-10d%-30s%-10d\n",
		book.ISBN,
		book.book,
		book.author,
		book.edition,
		book.press,
		book.year);

	return;
}

// * 從文件中讀取一本書的信息
Bookinfo freadBookInformation(FILE* fp)
{
	Bookinfo book;

	fscanf(fp, "%s", book.ISBN);
	// * 判斷是否到達(dá)結(jié)尾
	
	// * 因?yàn)榈浇Y(jié)尾的時候還有一行是空的,所以book里面會多讀一個數(shù)據(jù)
	// * 這里讓book.ISBN消化了那個數(shù)據(jù)后再判定終止條件
	if (feof(fp))
	{
		strcpy(book.ISBN, "end");
		return book;
	}
	fscanf(fp, "%s", book.book);
	fscanf(fp, "%s", book.author);
	fscanf(fp, "%d", &book.edition);
	fscanf(fp, "%s", book.press);
	fscanf(fp, "%d", &book.year);

	return book;
}

// * 輸出書籍的信息到文件中
int FILEOutputBookInformation(Bookinfo book, FILE* fp)
{
	int judge = fprintf(fp, "%-15s%-15s%-15s%-10d%-30s%-10d\n",
		book.ISBN,
		book.book,
		book.author,
		book.edition,
		book.press,
		book.year);
	// * 判斷是否輸入成功
	if (judge <= 0)
	{
		return 0;
	}

	return 1;
}


// * 根據(jù)書號刪除相應(yīng)的圖書
int DeleteByISBN(Bookinfo dictList[], int n, char ISBN[])
{
	int i, j;
	for (i = 0; i < n; i++)
	{
		if (!strcmp(ISBN, dictList[i].ISBN))
		{
			// * 之后的都前移一位
			for (j = i; j < n - 1; j++)
			{
				dictList[j] = dictList[j + 1];
			}
			n--;
		}
	}
	return n;
}

// * 根據(jù)書號和姓名刪除相應(yīng)的圖書
int DeleteByISBNAndName(Bookinfo dictList[], int n, char ISBN[], char bookname[])
{
	int i, j;
	for (i = 0; i < n; i++)
	{
		if (!strcmp(ISBN, dictList[i].ISBN) && !strcmp(bookname, dictList[i].book))
		{
			for (j = i; j < n - 1; j++)
			{
				dictList[j] = dictList[j + 1];
			}
			i--;
			n--;
		}
	}
	return n;
}
// * 管理員登錄
void Signin()
{
	int i;// * 用來循環(huán)輸入密碼便于隱藏
	int j = 0;
	char account[40];


	while (1)
	{
		char password[50] = { '\0' };// * 初始化密碼數(shù)組

		Star();
		Space();
		Space();
		printf("The Book Management System\n\n");
		Star();
		Space();
		Space();
		printf("account:");
		scanf("%s", account);
		getchar();// * 消化掉換行符
		Space();
		Space();
		printf("\npassword:");
		system("cls");

		i = 0;// * 隱藏密碼
		while (1)
		{
			Star();
			BigSpace();
			printf("The Book Management System\n\n");
			Star();
			BigSpace();
			printf("account:");
			printf("%s\n\n", account);
			BigSpace();
			printf("password:");

			for (j = 0; j < i; j++)
				printf("*");

			password[i] = getch();


			if (password[i] == '\r')
				break;


			// * 輸入backspace的時侯刪除字符串中的字符
			if (password[i] == '\b')
			{
				password[i] = '\0';
				i--;

				// * 防止減多了
				if (i != -1)
					i--;
			}
			system("cls");
			i++;

			if (i > 20)
			{
				break;
			}
		}



		// * 比較是否一致
		if (!strcmp(account, "admin") && !strcmp(password, "123456\r"))
		{
			system("cls");
			return;
		}

		printf("\n\n\n");
		Space();
		printf("the account number or password entered is incorrect\n\n\n\n");
		BigSpace();

		system("pause");
		system("cls");

	}
}

// * 輸出書籍的表頭信息
void OutputBookHead()
{
	Enter();
	printf("%-15s%-15s%-15s%-10s%-30s%-10s\n\n",
		"書號",
		"書名",
		"作者",
		"版本號",
		"出版社名",
		"出版年份");
}

// * 判斷是否有相同的書名, 是返回1,否返回0
int JudgeSameName(Bookinfo dictList[], int n, char bookname[])
{
	int i;
	for (i = 0; i < n; i++)
	{
		if (!strcmp(dictList[i].book, bookname))
		{
			return 1;
		}
	}
	return 0;
}


// * 在寫入文件之前進(jìn)行詢問
int Ask()
{
	int judge;// * 用來判斷的變量
	Enter();
	Space();
	printf("             該操作可能會破壞原有文件,是否繼續(xù)寫入?(y/n)");
	while (1)
	{
		judge = getch();
		if (judge == 'y' || judge == 'Y')
		{
			system("cls");
			return 1;
		}
		else if(judge == 'n' || judge == 'N') return 0;
	}
}

程序優(yōu)點(diǎn)

1)美化了界面,定義了四個函數(shù)用來控制控制臺顯示的位置,使得每一步的提示信息都盡可能的居中

C語言課設(shè):圖書管理系統(tǒng)

C語言課設(shè):圖書管理系統(tǒng)

C語言課設(shè):圖書管理系統(tǒng)

2)在進(jìn)入操作的程序之前設(shè)置了一個登錄的界面,只有輸入正確的賬號密碼才能進(jìn)行使用

(賬號:admin,密碼:123456)同時在輸入密碼時也將輸入的字符用*替代,保證了輸入的安全性與系統(tǒng)的安全性

C語言課設(shè):圖書管理系統(tǒng)

3)在Display功能中,每十個數(shù)據(jù)進(jìn)行輸出時,巧妙的使它擁有了翻頁功能 而不只是把文件顯示十個停頓,導(dǎo)致如果按的速度過快只能重新進(jìn)行一次,提高了使用程序的效率

C語言課設(shè):圖書管理系統(tǒng)

4)程序清晰易懂,可讀性高,程序所有的細(xì)節(jié)都寫好了注釋,且每個函數(shù)相對獨(dú)立,不會對其他函數(shù)造成很大影響和,定義了9個輔助操作的函數(shù),將讀取所有數(shù)據(jù)的操作變成一個一個數(shù)據(jù)進(jìn)行讀取,將讀取一個文件,寫入一個文件等操作作為一個單獨(dú)的函數(shù)寫出來,提升了程序的可讀性

5)全程序使用了很多的提示語句,在關(guān)鍵的位置都有語句提示,保證了使用的便捷

如:

C語言課設(shè):圖書管理系統(tǒng)C語言課設(shè):圖書管理系統(tǒng)

C語言課設(shè):圖書管理系統(tǒng)

C語言課設(shè):圖書管理系統(tǒng)C語言課設(shè):圖書管理系統(tǒng)

C語言課設(shè):圖書管理系統(tǒng)

C語言課設(shè):圖書管理系統(tǒng)

C語言課設(shè):圖書管理系統(tǒng)

C語言課設(shè):圖書管理系統(tǒng)

6)程序在翻頁、選擇是否繼續(xù)等操作時,都設(shè)定了按其他按鍵不反應(yīng)的功能,可以有效地防止誤觸文章來源地址http://www.zghlxwxcb.cn/news/detail-514861.html

到了這里,關(guān)于C語言課設(shè):圖書管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)庫課設(shè)】圖書館資源管理系統(tǒng) 源碼+流程圖+結(jié)構(gòu)設(shè)計(借還圖書 逾期罰款 圖書管理 讀者管理 信息查詢)python實(shí)現(xiàn)

    【數(shù)據(jù)庫課設(shè)】圖書館資源管理系統(tǒng) 源碼+流程圖+結(jié)構(gòu)設(shè)計(借還圖書 逾期罰款 圖書管理 讀者管理 信息查詢)python實(shí)現(xiàn)

    一個管理員編號對應(yīng)一個密碼,且需要有管理員注冊密匙。 可以在圖書信息表中錄入、修改、刪除圖書。 可以在圖書信息表中查詢書籍。 可以編輯圖書借閱、歸還信息。 可以編輯欠款信息。 可以編輯讀者信息表。 圖書館注冊,獲得讀者編號。 可以在圖書信息表中查閱書籍

    2024年02月10日
    瀏覽(25)
  • 課設(shè)——C語言學(xué)生成績管理系統(tǒng)

    ????????相信許多同學(xué)在大學(xué)期間,學(xué)習(xí)計算機(jī)相關(guān)課程的時候,都有一個令人頭疼的問題——課程設(shè)計。那么本片文章就詳細(xì)的分享一個用C語言實(shí)現(xiàn)一個簡單學(xué)生成績管理系統(tǒng),供同學(xué)們學(xué)習(xí)和參考(文章最后會附上源程序)。 1.建立一張學(xué)生成績表,每個學(xué)生包含 學(xué)

    2024年02月11日
    瀏覽(91)
  • 【大學(xué)生體質(zhì)】圖書管理系統(tǒng)(Vue+SpringBoot2)-完整部署教程【課設(shè)OR畢設(shè)提供API接口文檔、數(shù)據(jù)庫文件、README.MD、部署視頻】

    【大學(xué)生體質(zhì)】圖書管理系統(tǒng)(Vue+SpringBoot2)-完整部署教程【課設(shè)OR畢設(shè)提供API接口文檔、數(shù)據(jù)庫文件、README.MD、部署視頻】

    本項目擁有完整的API后臺接口文檔(文尾) 項目部署視頻正在錄制 如果項目對您有所幫助,可以Star?一下,受到鼓勵的我會繼續(xù)加油。 項目在線演示地址 項目前端地址 項目后端地址 項目部署視頻 ??前端主要技術(shù)棧 技術(shù) 作用 版本 Vue 提供前端交互 2.6.14 Vue-Router 路由式編

    2024年01月18日
    瀏覽(68)
  • C語言圖書管理系統(tǒng)

    C語言圖書管理系統(tǒng)

    操作系統(tǒng):windows10, windows11, linux, mac等。 開發(fā)工具:Qt, vscode, visual studio等 開發(fā)語言:c 這個功能的主要任務(wù)是保存和管理圖書的所有信息。這應(yīng)該包括: 添加新書:輸入新書的信息,包括書名、作者、出版社、ISBN、庫存數(shù)量等,并將其添加到數(shù)據(jù)庫中。 修改書籍信息:如果

    2024年02月16日
    瀏覽(18)
  • 圖書管理系統(tǒng)【C語言】

    圖書管理系統(tǒng)【C語言】

    咱就是說這太令人絕望了! ??! 這是一個平平無奇的系統(tǒng)。 一、系統(tǒng)要求 1、實(shí)現(xiàn)以下基本功能? ? ? 1.添加圖書? ? ? ? ??2.刪除圖書? ? ??3.保存圖書?? ? ? ? ?4.圖書列表? ? ? 5.修改圖書? ? ?? ? ?6.查找圖書?? ? ? 7.圖書排序? ? ? ? ? 8.圖書統(tǒng)計? ? ?? ? ? ?

    2024年02月02日
    瀏覽(16)
  • 圖書管理系統(tǒng)(C語言實(shí)現(xiàn))

    設(shè)計并實(shí)現(xiàn)一個簡單的圖書管理系統(tǒng) 本次實(shí)訓(xùn)內(nèi)容主要在于訓(xùn)練學(xué)生的C語言的基本編程能力,通過C語言輸入輸出、循環(huán)語句、子函數(shù)設(shè)計、數(shù)組、結(jié)構(gòu)體等知識點(diǎn),完成一個簡單圖書管理系統(tǒng)的設(shè)計開發(fā)。實(shí)現(xiàn)錄入圖書、刪除指定圖書、修改指定圖書和查詢指定圖書的基本

    2024年02月12日
    瀏覽(16)
  • 數(shù)據(jù)結(jié)構(gòu)課設(shè)—C語言實(shí)現(xiàn)通訊錄管理系統(tǒng)(順序表實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)課設(shè)—C語言實(shí)現(xiàn)通訊錄管理系統(tǒng)(順序表實(shí)現(xiàn))

    這個項目是我大一時期數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計,在我潛心研究下出來的,對于當(dāng)時的我來說算是非常滿意啦,哈哈哈哈哈哈哈哈哈哈☆*: .?. o(≧▽≦)o .?.:*☆ 目錄 一、引言 1.目的: 2.意義: 3.主要任務(wù): 4.程序功能: 5.編譯工具: 二、正文 1.系統(tǒng)模塊: 2.算法流程圖: 3.各

    2024年02月02日
    瀏覽(98)
  • C語言課程設(shè)計-圖書管理系統(tǒng)

    C語言課程設(shè)計-圖書管理系統(tǒng)

    需求分析: ??為了滿足圖書管理的要求,通過計算機(jī)技術(shù)給圖書管理人員和讀者借、還書帶來便利。使用c語言編寫了圖書管理系統(tǒng)。本系統(tǒng)主要實(shí)現(xiàn)圖書信息管理的功能,通過此系統(tǒng)可對圖書館庫存圖書信息進(jìn)行管理和維護(hù)操作。實(shí)現(xiàn)了圖書館內(nèi)管理的一般功能,包括查詢

    2024年02月04日
    瀏覽(30)
  • 圖書管理系統(tǒng)——C語言課程設(shè)計

    圖書管理系統(tǒng)——C語言課程設(shè)計

    新進(jìn)圖書基本信息的輸入 圖書借本信息的查詢 對撤銷圖書的刪除 辦理借書手續(xù) 辦理還書手續(xù) 提供使用文件方式存儲數(shù)據(jù) 新進(jìn)圖書的輸入,首先要輸入要添加的書的基本信息,如:書名、書號、價格、作者,再通過fprintf()函數(shù)將輸入的信息寫入文件中 圖書信息的查詢可分為

    2024年02月09日
    瀏覽(25)
  • 【C語言課程設(shè)計】圖書管理系統(tǒng)

    【C語言課程設(shè)計】圖書管理系統(tǒng)

    引言 : 圖書管理系統(tǒng)是一個重要的信息管理系統(tǒng),對于圖書館和書店等機(jī)構(gòu)來說,它能夠方便地管理圖書的錄入、顯示、查詢、修改和刪除等操作。本實(shí)驗(yàn)基于C語言開發(fā)了一個簡單的圖書管理系統(tǒng),通過賬戶名和密碼進(jìn)行系統(tǒng)訪問和權(quán)限控制,并實(shí)現(xiàn)了上述功能。在本實(shí)驗(yàn)

    2024年02月15日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包