⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 图书管理系统,可以查询,借书,统计借书时间日期,功能较为全面,但比较简单.
💻 C
字号:

#include "myStd.h"
#include "main.h"
#include "util.h"
#include "dataProcess.h"

int g_nState = STA_MAINMENU;
ListNode* pAllBooks = NULL;

void test()
{
	GetDays2Now("2004/12/12");
}

void main()
{
	char ch;
	int nSelect = -1;

	test();
	pAllBooks = GetAllBooks(pAllBooks);

	while (TRUE)
	{
		DataProcess(g_nState);
		PrintMenu(g_nState);	
		
		ch = getch();
		
		nSelect = ch-'0';
		
		ProcessSel(nSelect);
	}
}

void PrintMenu(int nState)
{
	
	switch(g_nState)
	{
	case STA_MAINMENU:
		system("cls");
		printf(STR_MAINMENU);
		printf("\nPlease Input Num: ");
		break;

	case STA_MAIN_INPUT:
		printf(STR_MAIN_INPUT);
		break;
	
	case STA_MAIN_SORT:
		system("cls");
		printf(STR_MAIN_SORT);
		printf("\nPlease Input Num: ");
		break;

	case STA_MAIN_QUERY:
		system("cls");
		printf(STR_MAIN_QUERY);
		printf("\nPlease Input Num: ");
		break;

	case STA_MAIN_BORROW:
		system("cls");
		
		PrintBook4Lent();
		printf(STR_MAIN_BORROW);
		printf("\nPlease Input Num: ");
		break;

	case STA_MAIN_STATIC:
		system("cls");
		//printf(STR_MAIN_STATIC);
		PrintStatic();
		printf("\nPress any key to Main Menu: ");
		break;

	default:
		break;
	}
}

void ProcessSel(nSel)
{
	if(STA_MAINMENU == g_nState)
	{
		if(1 == nSel)
		{
			g_nState = STA_MAIN_INPUT;
		}
		else if(2 == nSel)
		{
			g_nState = STA_MAIN_SORT;
		}
		else if(3 == nSel)
		{
			g_nState = STA_MAIN_QUERY;
		}
		else if(4 == nSel)
		{
			g_nState = STA_MAIN_BORROW;
		}
		else if(5 == nSel)
		{
			g_nState = STA_MAIN_STATIC;
		}
		else if(6 == nSel)
		{
			exit(0);
		}
		else
		{
			g_nState = STA_MAINMENU;
		}
	}
	else if(STA_MAIN_SORT == g_nState)
	{
		if(1 == nSel)
		{
			g_nState = STA_MAIN_SORT_1;
		}
		else if(2 == nSel)
		{
			g_nState = STA_MAIN_SORT_2;
		}
		else if(3 == nSel)
		{
			g_nState = STA_MAIN_SORT_3;
		}
		else
		{
			g_nState = STA_MAINMENU;
		}
	}
	else if(STA_MAIN_QUERY == g_nState)
	{
		if(1 == nSel)
		{
			g_nState = STA_MAIN_QUERY_1;
		}
		else if(2 == nSel)
		{
			g_nState = STA_MAIN_QUERY_2;
		}
		else if(3 == nSel)
		{
			g_nState = STA_MAIN_QUERY_3;
		}
		else if(4 == nSel)
		{
			g_nState = STA_MAIN_QUERY_4;
		}
		else
		{
			g_nState = STA_MAINMENU;
		}
	}
	else if(STA_MAIN_BORROW == g_nState)
	{
		if(1 == nSel)
		{
			g_nState = STA_MAIN_BORROW_1;
		}
		else
		{
			g_nState = STA_MAINMENU;
		}
	}
	else
	{
		g_nState = STA_MAINMENU;
	}
}

void DataProcess(int nState)
{
	
	if(STA_MAIN_INPUT == nState)
	{
		system("cls");
		InputBookInfo();
	}
	else if(STA_MAIN_SORT_1 == nState)
	{
		system("cls");
		SortByID();
	}
	else if(STA_MAIN_SORT_2 == nState)
	{
		system("cls");
		SortByLend();
	}
	else if(STA_MAIN_SORT_3 == nState)
	{
		system("cls");
		SortByStore();
	}
	else if(STA_MAIN_QUERY_1== nState)
	{
		system("cls");
		Query1();
	}
	else if(STA_MAIN_QUERY_2 == nState)
	{
		system("cls");
		Query2();
	}
	else if(STA_MAIN_QUERY_3 == nState)
	{
		system("cls");
		Query3();
	}
	else if(STA_MAIN_QUERY_4 == nState)
	{
		system("cls");
		Query4();
	}
	else if(STA_MAIN_BORROW_1 == nState)
	{
		BorrowBook();
	}
}


void InputBookInfo()
{
	//input data
	char ch[20];
	int n=0;
	BookRec newBook;

	printf("Input Book ID: ");
	scanf("%s", ch);

	while(FindBook(pAllBooks, ch) >= 0)
	{
		printf("You have a same ID, Please Input another ID: ");
		scanf("%s", ch);
	}
	
	strcpy(newBook.ID, ch);

	printf("Input Book Name: ");
	scanf("%s", ch);
	strcpy(newBook.Name, ch);

	printf("Input Book Author: ");
	scanf("%s", ch);
	strcpy(newBook.Author, ch);

	printf("Input Lent Num: ");
	scanf("%d", &n);
	newBook.nLentNum = n;

	printf("Input Storage Num: ");
	scanf("%d", &n);
	newBook.nStoreNum = n;

	printf("Input Book Sort: ");
	scanf("%s", ch);
	strcpy(newBook.Sort, ch);

	printf("Input publish com. : ");
	scanf("%s", ch);
	strcpy(newBook.PublishCom, ch);

	//add data to list
	if(pAllBooks == NULL)
	{
		pAllBooks = ListGenerate(&newBook, sizeof(BookRec));
	}
	else
	{
		ListAddTail(pAllBooks, &newBook, sizeof(BookRec));
	}

	SaveAllBooks(pAllBooks);
}

void SortByID()
{
	ListNode* pNewBooks = NULL;
	ListNode* pTmp = pAllBooks;

	BookRec* pBook = NULL;
	char chId[20];

	while(pTmp != NULL)
	{
		ListNode* pTmp01 = pTmp->pNext;
		pBook = pTmp->pData;
		memcpy(chId, pBook->ID, 20);
		
		while(pTmp01 != NULL)
		{
			char chId01[20];
			memcpy(chId01, ((BookRec*)(pTmp01->pData))->ID, 20);

			if(strcmp(chId, chId01)>0)
			{
				strcpy(chId, chId01);
				pBook = pTmp01->pData;
			}
			pTmp01 = pTmp01->pNext;
		}
		
		if(pNewBooks == NULL)
		{
			pNewBooks = ListGenerate(pBook, sizeof(BookRec));
		}
		else
		{
			ListAddTail(pNewBooks, pBook, sizeof(BookRec));
		}

		pTmp = ListDeleteNode(pTmp, pBook, sizeof(BookRec));
	}

	pAllBooks = pNewBooks;
	
	//print result
	{
		ListNode* pTmp02 = pAllBooks;

		printf("ID\tName\n\n");

		while(pTmp02 != NULL)
		{
			printf("%s\t%s\n", ((BookRec*)(pTmp02->pData))->ID, ((BookRec*)(pTmp02->pData))->Name);
			pTmp02 = pTmp02->pNext;
		}

		printf(STR_MAIN_INPUT);
	}

	//save result
	{
		ListNode* pTmp03 = pAllBooks;
		if(NULL != pTmp03)
		{
			FILE* stream = fopen(STR_FILE_SORT1, "w+");
			
			if(stream != NULL)
			{
				fprintf(stream, "ID\tName\n\n");
				
				while(pTmp03 != NULL)
				{
					fprintf(stream, "%s\t%s\n", ((BookRec*)(pTmp03->pData))->ID, 
						((BookRec*)(pTmp03->pData))->Name);
					pTmp03 = pTmp03->pNext;
				}
				
				fclose(stream);
			}		
		}
	}
}

void SortByLend()
{
	ListNode* pNewBooks = NULL;
	ListNode* pTmp = pAllBooks;
	
	BookRec* pBook = NULL;
	//char chId[20];
	int nn = -1;
	
	while(pTmp != NULL)
	{
		ListNode* pTmp01 = pTmp->pNext;
		pBook = pTmp->pData;
		//memcpy(chId, pBook->ID, 20);
		nn = pBook->nLentNum;
		
		while(pTmp01 != NULL)
		{
			//char chId01[20];
			int nn1 = -1;
			//memcpy(chId01, pTmp01->pData->ID, 20);
			nn1 =  ((BookRec*)(pTmp01->pData))->nLentNum;
			
			//if(strcmp(chId, chId01)>0)
			if(nn1<nn)
			{
				//strcpy(chId, chId01);
				nn = nn1;
				pBook = pTmp01->pData;
			}
			pTmp01 = pTmp01->pNext;
		}
		
		if(pNewBooks == NULL)
		{
			pNewBooks = ListGenerate(pBook, sizeof(BookRec));
		}
		else
		{
			ListAddTail(pNewBooks, pBook, sizeof(BookRec));
		}
		
		pTmp = ListDeleteNode(pTmp, pBook, sizeof(BookRec));
	}
	
	pAllBooks = pNewBooks;
	
	//print result
	{
		ListNode* pTmp02 = pAllBooks;
		
		printf("ID\tName\tLendNum\n\n");
		
		while(pTmp02 != NULL)
		{
			printf("%s\t%s\t%d\n", ((BookRec*)(pTmp02->pData))->ID, 
				((BookRec*)(pTmp02->pData))->Name,
				((BookRec*)(pTmp02->pData))->nLentNum);
			pTmp02 = pTmp02->pNext;
		}
		
		printf(STR_MAIN_INPUT);
	}
	
	//save result
	{
		ListNode* pTmp03 = pAllBooks;
		if(NULL != pTmp03)
		{
			FILE* stream = fopen(STR_FILE_SORT2, "w+");
			
			if(stream != NULL)
			{
				fprintf(stream, "ID\tName\tLendNum\n\n");
				
				while(pTmp03 != NULL)
				{
					fprintf(stream, "%s\t%s\t%d\n", 
						((BookRec*)(pTmp03->pData))->ID, 
						((BookRec*)(pTmp03->pData))->Name, 
						((BookRec*)(pTmp03->pData))->nLentNum);
					pTmp03 = pTmp03->pNext;
				}
				
				fclose(stream);
			}		
		}
	}
	
}

void SortByStore()
{
	ListNode* pNewBooks = NULL;
	ListNode* pTmp = pAllBooks;
	
	BookRec* pBook = NULL;
	//char chId[20];
	int nn = -1;
	
	while(pTmp != NULL)
	{
		ListNode* pTmp01 = pTmp->pNext;
		pBook = pTmp->pData;
		//memcpy(chId, pBook->ID, 20);
		nn = pBook->nStoreNum;
		
		while(pTmp01 != NULL)
		{
			//char chId01[20];
			int nn1 = -1;
			//memcpy(chId01, pTmp01->pData->ID, 20);
			nn1 =  ((BookRec*)(pTmp01->pData))->nStoreNum;
			
			//if(strcmp(chId, chId01)>0)
			if(nn1<nn)
			{
				//strcpy(chId, chId01);
				nn = nn1;
				pBook = pTmp01->pData;
			}
			pTmp01 = pTmp01->pNext;
		}
		
		if(pNewBooks == NULL)
		{
			pNewBooks = ListGenerate(pBook, sizeof(BookRec));
		}
		else
		{
			ListAddTail(pNewBooks, pBook, sizeof(BookRec));
		}
		
		pTmp = ListDeleteNode(pTmp, pBook, sizeof(BookRec));
	}
	
	pAllBooks = pNewBooks;
	
	//print result
	{
		ListNode* pTmp02 = pAllBooks;
		
		printf("ID\tName\tStore\n\n");
		
		while(pTmp02 != NULL)
		{
			printf("%s\t%s\t%d\n", ((BookRec*)(pTmp02->pData))->ID,
				((BookRec*)(pTmp02->pData))->Name,
				((BookRec*)(pTmp02->pData))->nStoreNum);
			pTmp02 = pTmp02->pNext;
		}
		
		printf(STR_MAIN_INPUT);
	}
	
	//save result
	{
		ListNode* pTmp03 = pAllBooks;
		if(NULL != pTmp03)
		{
			FILE* stream = fopen(STR_FILE_SORT3, "w+");
			
			if(stream != NULL)
			{
				fprintf(stream, "ID\tName\tStore\n\n");
				
				while(pTmp03 != NULL)
				{
					fprintf(stream, "%s\t%s\t%d\n", ((BookRec*)(pTmp03->pData))->ID,
						((BookRec*)(pTmp03->pData))->Name,
						((BookRec*)(pTmp03->pData))->nStoreNum);
					pTmp03 = pTmp03->pNext;
				}
				
				fclose(stream);
			}		
		}
	}
	
}

void Query1()
{
	char ch[20];
	ListNode* pTmp = pAllBooks;
	printf("Please Enter Name: ");
	
	scanf("%s", ch);
	
	while(pTmp != NULL)
	{
		if(strcmp(((BookRec*)(pTmp->pData))->Name, ch) == 0)
		{
			PrintBookInfo(pTmp->pData);
		}
		pTmp = pTmp->pNext;
	}
	
	printf(STR_MAIN_INPUT);
}

void Query2()
{
	char ch[20];
	ListNode* pTmp = pAllBooks;
	printf("Please Enter Sort: ");
	
	scanf("%s", ch);
	
	while(pTmp != NULL)
	{
		if(strcmp(((BookRec*)(pTmp->pData))->Sort, ch) == 0)
		{
			PrintBookInfo(pTmp->pData);
		}
		pTmp = pTmp->pNext;
	}
	
	printf(STR_MAIN_INPUT);
}

void Query3()
{
	char ch[20];
	ListNode* pTmp = pAllBooks;
	printf("Please Enter Author: ");
	
	scanf("%s", ch);
	
	while(pTmp != NULL)
	{
		if(strcmp(((BookRec*)(pTmp->pData))->Author, ch) == 0)
		{
			PrintBookInfo(pTmp->pData);
		}
		pTmp = pTmp->pNext;
	}
	
	printf(STR_MAIN_INPUT);
}

void Query4()
{
	char ch[20];
	ListNode* pTmp = pAllBooks;
	printf("Please Enter Publish: ");
	
	scanf("%s", ch);
	
	while(pTmp != NULL)
	{
		if(strcmp(((BookRec*)(pTmp->pData))->PublishCom, ch) == 0)
		{
			PrintBookInfo(pTmp->pData);
		}
		pTmp = pTmp->pNext;
	}
	
	printf(STR_MAIN_INPUT);
}

void PrintBookInfo(BookRec* pBook)
{
	printf("////////////////////////\n");

	printf("Book ID: %s\n", pBook->ID);
	printf("Book Name: %s\n", pBook->Name);
	printf("Book Author: %s\n", pBook->Author);
	printf("Lent Num: %d\n", pBook->nLentNum);
	printf("Store Num: %d\n", pBook->nStoreNum);
	printf("Book Sort: %s\n", pBook->Sort);
	printf("Company: %s\n\n", pBook->PublishCom);
}

void BorrowBook()
{
	BorrowRec borrow;
	time_t tNow;
	char ch[20];

	time(&tNow);
	
	GetCurDate(tNow, ch);
	memcpy(borrow.BorrowTime, ch, 20);
	
	tNow = TimeAddDays(tNow, 90);
	GetCurDate(tNow, ch);
	memcpy(borrow.ReturnTime, ch, 20);

	printf("\n\nBorrow Date: %s\n", borrow.BorrowTime);
	printf("Return Date: %s\n", borrow.ReturnTime);
	printf("Input Book ID: ");

	scanf("%s", ch);

	if(FindBook(pAllBooks, ch) >= 0)
	{
		ListNode* pTmp = pAllBooks;
		int i;
		int nCount = FindBook(pAllBooks, ch);

		for(i=0; i<nCount; i++)
		{
			pTmp = pTmp->pNext;
		}
		
		if(strcmp(((BookRec*)(pTmp->pData))->ID, ch) == 0)
		{
			if(((BookRec*)(pTmp->pData))->nStoreNum > 0)
			{
				strcpy(borrow.BookID, ch);
				printf("Input Card ID: ");
				scanf("%s", ch);
				strcpy(borrow.CardID, ch);
				printf("Input Borrower Name: ");
				scanf("%s", ch);
				strcpy(borrow.Borrower, ch);

				//save to file
				{
					FILE* stream = fopen(STR_FILE_LENT, "a");
					if(stream != NULL)
					{
						fprintf(stream, "Book ID: %s\n", borrow.BookID);
						fprintf(stream, "Card ID: %s\n", borrow.CardID);
						fprintf(stream, "Borrower: %s\n", borrow.Borrower);
						fprintf(stream, "Borrow Date: %s\n", borrow.BorrowTime);
						fprintf(stream, "Return Date: %s\n", borrow.ReturnTime);
						fprintf(stream, "\n\n");
						fclose(stream);
					}
				}

			}
			else
			{
				printf("All the books loaned.\n");
			}
		}
	}
	else
	{
		printf("Can not find this book.\n");
	}

	printf("Press any key to Main Menu: ");

}

void PrintBook4Lent()
{
	ListNode* pList = pAllBooks;
	printf("ID\tName\tStore\n\n");

	while(pList != NULL)
	{
		printf("%s\t%s\t%d\n", ((BookRec*)(pList->pData))->ID,
			((BookRec*)(pList->pData))->Name,
			((BookRec*)(pList->pData))->nStoreNum);
		pList = pList->pNext;
	}
}

void PrintStatic()
{
	ListNode* pLstBorrow = NULL;
	FILE* stream = NULL;
	stream = fopen(STR_FILE_STATIC, "w+");


	pLstBorrow = GetAllBorrow(pLstBorrow);

	{
		//ListNode* pLstTmp = pLstBorrow;
		
		while (pLstBorrow != NULL)
		{
			ListNode* pLstTmp = pLstBorrow;
			BorrowRec* pBorrow;
			char chBorrower[20];
			int nCount = 0;
			
			pBorrow = pLstBorrow->pData;
			strcpy(chBorrower, pBorrow->Borrower);
			
			printf("Borrower: %s\n\n", chBorrower);
			if(stream != NULL)
			{
				fprintf(stream, "Borrower: %s\n\n", chBorrower);
			}
			
			while(pLstTmp != NULL)
			{
				pBorrow = pLstTmp->pData;

				if(strcmp(pBorrow->Borrower, chBorrower) == 0)
				{
					char ch01[20];
					int n = 0;
					GetBookName(pAllBooks, pBorrow->BookID, ch01);
					printf("Book Name: %s\n", ch01);
					if(stream != NULL)
					{
						fprintf(stream, "Book Name: %s\n", ch01);
					}

					printf("Borrow Time: %s\n", pBorrow->BorrowTime);
					if(stream != NULL)
					{
						fprintf(stream, "Borrow Time: %s\n", pBorrow->BorrowTime);
					}

					pLstTmp = pLstTmp->pNext;
					pLstBorrow = ListDeleteNode(pLstBorrow, pBorrow, sizeof(BorrowRec));
					nCount++;
				}
				else
				{
					pLstTmp = pLstTmp->pNext;
				}
				
			}
			printf("\nBorrowed Book Num: %d", nCount);
			printf("\n/////////////////////////////////\n\n");
			if(stream != NULL)
			{
				fprintf(stream, "\nBorrowed Book Num: %d", nCount);
				fprintf(stream, "\n/////////////////////////////////\n\n");
			}
		}
			
	}
	
	printf("\n\n");
	if(stream != NULL)
	{
		fclose(stream);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -