?? tushuguan.cpp.txt
字號:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "time.h"
#define N 10
struct Book
{
int BID;
char name[50];
char writer[50];
char publisher[50];
int num;
int left;
struct Book *prev;
struct Book *next;
};
struct Student
{
int SID;
char name[50];
char Class[50];
int borrow;
int bookID[N];
struct Student *prev;
struct Student *next;
};
struct Record
{
int RID;
int bookID;
int studentID;
time_t lendTime;
time_t returnTime;
struct Record *prev;
struct Record *next;
};
typedef struct Book BOOK;
typedef struct Student STUDENT;
typedef struct Record RECORD;
BOOK *book_head;
STUDENT *student_head;
RECORD *record_head;
int book_id=1;
int student_id=1;
int record_id=1;
void InitDataEntries()
{
book_head=(BOOK *)malloc(sizeof(BOOK));
book_head->prev=book_head;
book_head->next=book_head;
student_head=(STUDENT *)malloc(sizeof(STUDENT));
student_head->next=student_head;
student_head->prev=student_head;
record_head=(RECORD *)malloc(sizeof(RECORD));
record_head->next=record_head;
record_head->prev=record_head;
}
BOOK *AddBook()
{
BOOK *newBook;
BOOK *pB=book_head->next;
newBook=(BOOK *)malloc(sizeof(BOOK));
printf("請輸入書名:");
scanf("%s",newBook->name);
printf("請輸入作者:");
scanf("%s",newBook->writer);
printf("請輸入出版商:");
scanf("%s",newBook->publisher);
printf("請輸入書的數(shù)量:");
scanf("%d",&newBook->num);
while(pB!=book_head)
{
if(((strcmp(pB->name,newBook->name))==0) && ((strcmp(pB->writer,newBook->writer))==0)
&& ((strcmp(pB->publisher,newBook->publisher))==0))
{
pB->num+=newBook->num;
return pB;
}
pB=pB->next;
}
newBook->left=newBook->num;
newBook->BID=book_id;
newBook->next=book_head;
newBook->prev=book_head->prev;
book_head->prev->next=newBook;
book_head->prev=newBook;
book_id++;
printf("\n插入成功!!!");
return newBook;
}
BOOK *LookBook(int BID)
{
BOOK *pB=book_head->next;
while(pB!=book_head)
{
if(pB->BID==BID)
{
printf("編號:%d\n書名:%s\n作者:%s\n出版商:%s\n數(shù)量:%d\n剩余:%d\n",
BID,pB->name,pB->writer,pB->publisher,pB->num,pB->left);
return pB;
}
pB=pB->next;
}
return NULL;
}
BOOK *LookNameB(char Name[])
{
BOOK *pB=book_head->next;
while(pB!=book_head)
{
if((strcmp(pB->name,Name))==0)
{
printf("編號:%d\n書名:%s\n作者:%s\n出版商:%s\n數(shù)量:%d\n剩余:%d\n",
pB->BID,pB->name,pB->writer,pB->publisher,pB->num,pB->left);
return pB;
}
pB=pB->next;
}
return NULL;
}
void DeleteBook()
{
int Bid;
BOOK *pB;
RECORD *pR;
int choice;
printf("請輸入要刪除的書的編號");
scanf("%d",&Bid);
pB=LookBook(Bid);
if(pB!=NULL)
{
printf("你確定要刪除嗎?是的請按1:");
scanf("%d",&choice);
if(choice==1)
{
pB->next->prev=pB->prev;
pB->prev->next=pB->next;
free(pB);
pR=record_head->next;
while(pR!=record_head)
{
if(pR->bookID==Bid)
{
pR->next->prev=pR->prev;
pR->prev->next=pR->next;
free(pR);
}
pR=pR->next;
}
printf("刪除完成");
}
}
}
STUDENT *AddStudent()
{
STUDENT *newStudent;
newStudent=(STUDENT *)malloc(sizeof(STUDENT));
printf("請輸入姓名:");
scanf("%s",newStudent->name);
printf("請輸入班別:");
scanf("%s",newStudent->Class);
newStudent->SID=student_id;
newStudent->borrow=0;
newStudent->next=student_head;
newStudent->prev=student_head->prev;
student_head->prev->next=newStudent;
student_head->prev=newStudent;
student_id++;
printf("\n插入成功!!!");
return newStudent;
}
STUDENT *LookStudent(int SID)
{
STUDENT *pS=student_head->next;
int i;
while(pS!=student_head)
{
if(pS->SID==SID)
{
printf("學號:%d\n姓名:%s\n班級:%s\n借書數(shù):%d\n",
pS->SID,pS->name,pS->Class,pS->borrow);
printf("\n借的書的ID:");
for(i=0;i<pS->borrow;i++)
printf("%d\t",pS->bookID[i]);
return pS;
}
pS=pS->next;
}
return NULL;
}
STUDENT *LookNameS(char Name[])
{
STUDENT *pS=student_head->next;
int i;
while(pS!=student_head)
{
if((strcmp(pS->name,Name))==0)
{
printf("學號:%d\n姓名:%s\n班級:%s\n借書數(shù):%d\n",
pS->SID,pS->name,pS->Class,pS->borrow);
printf("\n借的書的ID:");
for(i=0;i<pS->borrow;i++)
printf("%d\t",pS->bookID[i]);
return pS;
}
pS=pS->next;
}
return NULL;
}
void LookClassS(char ClassName[])
{
STUDENT *pS=student_head->next;
int i;
while(pS!=student_head)
{
if((strcmp(pS->Class,ClassName))==0)
{
printf("學號:%d\n姓名:%s\n班級:%s\n借書數(shù):%d\n",
pS->SID,pS->name,pS->Class,pS->borrow);
printf("\n借的書的ID:");
for(i=0;i<pS->borrow;i++)
printf("%d\t",pS->bookID[i]);
}
pS=pS->next;
}
return ;
}
void DeleteStudent()
{
STUDENT *pS;
int id;
int choice;
printf("輸入要刪除的學生學號:");
scanf("%d",&id);
pS=LookStudent(id);
if(pS!=NULL)
{
printf("你確定要刪除?是的請按1");
scanf("%d",&choice);
if(choice==1)
{
pS->prev->next=pS->next;
pS->next->prev=pS->prev;
free(pS);
printf("刪除完成\n");
return;
}
}
printf("沒找到對應的學生!\n");
}
void Lend()
{
BOOK *pB;
STUDENT *pS;
RECORD *pR;
int iBook;
int iStudent;
printf("請輸入要借的書的編號:");
scanf("%d",&iBook);
pB=LookBook(iBook);
if(pB==NULL)
{
printf("沒有找到這本書");
return;
}
else
{
if(pB->left==0)
{
printf("這本書已經(jīng)借完了\n");
return;
}
printf("請輸入要借書的學生學號:");
scanf("%d",&iStudent);
pS=LookStudent(iStudent);
if(pS==NULL)
{
printf("這個學號的學生不存在!\n");
return;
}
if(pS->borrow>=N)
{
printf("\n你借的書數(shù)超過上限了");
return;
}
pS->bookID[pS->borrow]=pB->BID;
pS->borrow++;
pB->left--;
pR=(RECORD *)malloc(sizeof(RECORD));
pR->RID=record_id++;
pR->bookID=pB->BID;
pR->studentID=iStudent;
time(&(pR->lendTime));
pR->returnTime=0;
pR->prev=record_head->prev;
pR->next=record_head;
pR->prev->next=pR;
record_head->prev=pR;
printf("\n借書成功!");
}
}
void Return()
{
BOOK *pB;
RECORD *pR;
STUDENT *pS;
int iBook,istudent,i,j;
struct tm *theTime;
int choice;
printf("請輸入要歸還的書的編號:");
scanf("%d",&iBook);
pB=LookBook(iBook);
printf("請輸入借書人ID:");
scanf("%d",&istudent);
pS=LookStudent(istudent);
if(pB==NULL)
{
printf("此書不存在\n");
return;
}
if(pB->left==pB->num)
{
printf("此書尚未借出\n");
return;
}
pR=record_head->prev;
while(pR!=record_head)
{
if(pR->bookID==iBook && pR->returnTime==0)
{
theTime=localtime(&(pR->lendTime));
printf("借閱人:\n");
pS=LookStudent(pR->studentID);
printf("借閱時間:%d-%d-%d %d:%d\n",theTime->tm_year+1900,theTime->tm_mon+1,theTime->tm_mday,theTime->tm_hour,theTime->tm_min,theTime->tm_sec);
printf("確定要歸還?是的請按1:");
scanf("%d",&choice);
if(choice==1)
{
time(&(pR->returnTime));
pB->left++;
for(i=0;i<N;i++)
{
if(pS->bookID[i]==pB->BID)
{
for(j=i;j<pS->borrow-1;j++)
{
pS->bookID[j]=pS->bookID[j+1];
}
break;
}
}
pS->borrow--;
printf("已經(jīng)歸還\n");
}
/* free(theTime); */
return;
}
}
}
void LookBookIDR(int ID)
{
RECORD *pR;
BOOK *pB;
int i=0;
struct tm *theTime;
pB=LookBook(ID);
printf("借閱記錄:\n\n");
pR=record_head->prev;
while(pR!=record_head)
{
if(pR->bookID==ID)
{
theTime=localtime(&(pR->lendTime));
printf("借閱人:\n");
LookStudent(pR->studentID);
printf("借閱時間:%d-%d-%d %d:%d\n",theTime->tm_year+1900,theTime->tm_mon+1,theTime->tm_mday,theTime->tm_hour,theTime->tm_min,theTime->tm_sec);
if(pR->returnTime==0)
{
printf("歸還時間:尚未歸還\n");
}
else
{
theTime=localtime(&(pR->returnTime));
printf("歸還時間:%d-%d-%d %d:%d\n",theTime->tm_year+1900,theTime->tm_mon+1,theTime->tm_mday,theTime->tm_hour,theTime->tm_min,theTime->tm_sec);
}
printf("\n");
i++;
}
}
printf("總共%d條借閱記錄",i);
}
void LookStudentIDR(int ID)
{
RECORD *pR;
STUDENT *pS;
int i=0;
struct tm *theTime;
pS=LookStudent(ID);
printf("借閱記錄:\n\n");
pR=record_head->prev;
while(pR!=record_head)
{
if(pR->studentID==ID)
{
theTime=localtime(&(pR->lendTime));
printf("借閱書籍:\n");
LookBook(pR->bookID);
printf("借閱時間:%d-%d-%d %d:%d\n",theTime->tm_year+1900,theTime->tm_mon+1,theTime->tm_mday,theTime->tm_hour,theTime->tm_min,theTime->tm_sec);
if(pR->returnTime==0)
{
printf("歸還時間:尚未歸還\n");
}
else
{
theTime=localtime(&(pR->returnTime));
printf("歸還時間:%d-%d-%d %d:%d\n",theTime->tm_year+1900,theTime->tm_mon+1,theTime->tm_mday,theTime->tm_hour,theTime->tm_min,theTime->tm_sec);
}
printf("\n");
i++;
}
}
printf("總共%d條借閱記錄",i);
}
void LookAllR()
{
RECORD *pR;
int i=0;
struct tm *theTime;
pR=record_head->prev;
while(pR!=record_head)
{
theTime=localtime(&(pR->lendTime));
printf("借閱人:\n");
LookStudent(pR->studentID);
printf("借閱書籍:\n");
LookBook(pR->bookID);
printf("借閱時間:%d-%d-%d %d:%d\n",theTime->tm_year+1900,theTime->tm_mon+1,theTime->tm_mday,theTime->tm_hour,theTime->tm_min,theTime->tm_sec);
if(pR->returnTime==0)
{
printf("歸還時間:尚未歸還\n");
}
else
{
theTime=localtime(&(pR->returnTime));
printf("歸還時間:%d-%d-%d %d:%d\n",theTime->tm_year+1900,theTime->tm_mon+1,theTime->tm_mday,theTime->tm_hour,theTime->tm_min,theTime->tm_sec);
}
printf("\n");
i++;
}
printf("總共%d條借閱記錄",i);
}
void LookNOReturnR()
{
RECORD *pR;
int i=0;
struct tm *theTime;
printf("借閱記錄:\n\n");
pR=record_head->prev;
while(pR!=record_head)
{
if(pR->returnTime==0)
{
theTime=localtime(&(pR->lendTime));
printf("借閱人:\n");
LookStudent(pR->studentID);
printf("借閱書籍:\n");
LookBook(pR->bookID);
printf("借閱時間:%d-%d-%d %d:%d\n",theTime->tm_year+1900,theTime->tm_mon+1,theTime->tm_mday,theTime->tm_hour,theTime->tm_min,theTime->tm_sec);
printf("\n");
i++;
}
}
printf("總共%d條借閱記錄\n",i);
}
void Save()
{
FILE *fp;
BOOK *pB;
STUDENT *pS;
RECORD *pR;
fp=fopen("library.txt","wb");
fwrite(&book_id,sizeof(int),1,fp);
fwrite(&student_id,sizeof(int),1,fp);
fwrite(&record_id,sizeof(int),1,fp);
for(pB=book_head->next;pB!=book_head;pB=pB->next)
{
fwrite(pB,sizeof(BOOK),1,fp);
}
for(pS=student_head->next;pS!=student_head;pS=pS->next)
{
fwrite(pS,sizeof(STUDENT),1,fp);
}
for(pR=record_head->next;pR!=record_head;pR=pR->next)
{
fwrite(pR,sizeof(RECORD),1,fp);
}
fclose(fp);
printf("存儲完畢!\n");
return ;
}
int Load()
{
FILE *fp;
BOOK *pB;
STUDENT *pS;
RECORD *pR;
int i;
fp=fopen("library.txt","rb");
if(fp==NULL) return 0;
fread(&book_id,sizeof(int),1,fp);
fread(&student_id,sizeof(int),1,fp);
fread(&record_id,sizeof(int),1,fp);
for(i=0;i<book_id;i++)
{
pB=(BOOK *)malloc(sizeof(BOOK));
fread(pB,sizeof(BOOK),1,fp);
pB->next=book_head;
pB->prev=book_head->prev;
pB->prev->next=pB;
book_head->prev=pB;
}
for(i=0;i<student_id;i++)
{
pS=(STUDENT *)malloc(sizeof(STUDENT));
fread(pS,sizeof(STUDENT),1,fp);
pS->next=student_head;
pS->prev=student_head->prev;
pS->prev->next=pS;
student_head->prev=pS;
}
for(i=0;i<record_id;i++)
{
pR=(RECORD *)malloc(sizeof(RECORD));
fread(pR,sizeof(RECORD),1,fp);
pR->next=record_head;
pR->prev=record_head->prev;
pR->prev->next=pR;
record_head->prev=pR;
}
fclose(fp);
printf("\n讀取成功!!!");
return 1;
}
void menuView()
{
int select;
BOOK *pB;
STUDENT *pS;
int iBuf;
char sBuf[50];
do
{
printf("\n -----=====查看數(shù)據(jù)=====-----\n");
printf("\n1.按編號找書 2.按書名找書\n");
printf("\n3.按學號找學生 4.按姓名找學生\n");
printf("\n5.按班級找學生 6.列出未歸還的記錄\n");
printf("\n7.按書的ID列出記錄 8.按學生ID列出記錄\n");
printf("\n9.列出全部的記錄 0.返回\n");
printf("\n請做出選擇(0-9):");
scanf("%d",&select);
switch(select)
{
case 1:
printf("請輸入編號:");
scanf("%d",&iBuf);
pB=LookBook(iBuf);
if(pB==NULL)
{
printf("沒有找到這本書!\n");
}
break;
case 2:
printf("請輸入書名:");
scanf("%s",sBuf);
LookNameB(sBuf);
break;
case 3:
printf("請輸入學生的學號");
scanf("%d",&iBuf);
pS=LookStudent(iBuf);
if(pS==NULL)
{
printf("沒有找到此學生");
}
break;
case 4:
printf("請輸入學生姓名:");
scanf("%s",sBuf);
pS=LookNameS(sBuf);
if(pS==NULL)
{
printf("沒有找到此學生");
}
break;
case 5:
printf("請輸入學生班級:");
scanf("%s",sBuf);
LookClassS(sBuf);
break;
case 6:
LookNOReturnR();
break;
case 7:
printf("請輸入書的ID:");
scanf("%d",&iBuf);
LookBookIDR(iBuf);
case 8:
printf("請輸入學生的ID:");
scanf("%d",&iBuf);
LookStudentIDR(iBuf);
break;
case 9:
LookAllR();
break;
}
}
while(select!=0);
return ;
}
void main()
{
int select=1;
InitDataEntries();
if(Load()==0)
{
printf("\n文件為空!");
}
do
{
printf("\n -----=====圖書館管理系統(tǒng)=====-----\n");
printf("\n1.借書 2.還書\n");
printf("\n3.添加書 4.刪除書\n");
printf("\n5.添加學生 6.刪除學生\n");
printf("\n7.查看數(shù)據(jù) 8.保存數(shù)據(jù)\n");
printf("\n0.退出 \n");
printf("\n請做選擇(0-8):");
scanf("%d",&select);
switch(select)
{
case 1:
Lend();
break;
case 2:
Return();
break;
case 3:
AddBook();
break;
case 4:
DeleteBook();
break;
case 5:
AddStudent();break;
case 6:
DeleteStudent();
break;
case 7:
menuView();
break;
case 8:
Save();
break;
case 0:
Save();
exit(0);
}
}
while(select!=0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -