};
/*图书索引结构*/ struct Index {
char BookID[10];/*图书编号*/ Index *pNext;/*下一个索引指针*/ };
/*借阅信息结构*/ struct Borrow {
char BookID[10]; /*借阅图书编号*/ char BookName[512]; /*书名*/ unsigned long StuID; /*图书证号*/ char ReturnTime[512];/*归还日期*/ Borrow *pNext; /*下一个借阅信息*/ };
/*获取输入字符串*/
void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber = false); /*显示主菜单 并返回选择*/ int ShowMainMenu();
/*图书入库操作,传入参数为图书列表头指针的指针和索引信息的头指针的指针,因为在此函数内部可能会改变头指针的值*/
void PutBookInLib(Book **pHead,Index **pIndex); /*查询图书馆库存,查询不改变数据,故传入指针即可*/ void QueryBookLib(Book *pHead); /*借阅图书*/
void BorrowBook(Borrow **pBorrow,Book *pHead); /*查询借阅*/
void QueryBorrow(Borrow *pBorrow); /*归还图书*/
4
void ReturnBook(Borrow **pBorrow,Book *pHead); /*释放图书链表及索引链表及借阅信息链表*/ void DeleteBookList(Book **pHead); void DeleteIndexList(Index **pIndex); void DeleteBorrowList(Borrow **pBorrow); int main() {
/*图书列表头指针*/ Book *pBookHead = NULL; /*图书索引头指针*/ Index *pIndexHead = NULL; /*借阅信息头指针*/
Borrow *pBorrowHead = NULL; /*用来保存当前用户的输入*/ int ChoosedNum = -1; while ( true ) {
ChoosedNum = ShowMainMenu(); switch(ChoosedNum) {
case 0 :/*退出*/ {
return 0; break; }
case 1:/*图书入库*/ {
PutBookInLib(&pBookHead,&pIndexHead); break; }
5
case 2:/*查询库存*/ {
QueryBookLib(pBookHead); printf(\按回车键继续...\ fflush(stdin); getchar(); system(\ break; }
case 3:/*借阅图书*/ {
QueryBookLib(pBookHead);
BorrowBook(&pBorrowHead,pBookHead); break; }
case 4:/*查询借阅*/ {
QueryBorrow(pBorrowHead); printf(\按回车键继续...\ fflush(stdin); getchar(); system(\ break; }
case 5:/*归还图书*/ {
QueryBorrow(pBorrowHead);
ReturnBook(&pBorrowHead,pBookHead); break; }
6
} }
DeleteBookList(&pBookHead); DeleteIndexList(&pIndexHead); DeleteBorrowList(&pBorrowHead); fflush(stdin); getchar(); return 0; }
/*获取输入字符串*/
void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber) {
memset(pInOutStr,0x0,StrLen); fflush(stdin); int Count = 0; while ( true ) {
char TmpC = 0;
fread(&TmpC,1,1,stdin); if ( 10 == TmpC ) { break; }
if ( OnlyGetNumber && TmpC >= '0' && TmpC <= '9' ) {
pInOutStr[Count] = TmpC; Count++; } else {
7

