// Library_botao.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #define ElemType Book //宏定义 #define LIST_INT_SIZE 1 //改为1,改用ListInsert增加空间 #include#include #include #include "malloc.h" #include using namespace std; void bookFirst(); //先初始化书籍 void bookOut(); //输出 //定义一个结构体,表示书籍的信息 struct Book { int bookId; char bookName[20]; char bookAuthor[20]; //作者 int bookCount; //char bookLender[20]; //借阅者 }; //每次初始化书籍时,给定一本书固定的bookId号,不会改变 //同一种书用同一个书号 /************************************************************************/ /* 定义线性表,用于对图书号建索引,加快查询速度 */ /************************************************************************/ //定义一个顺序表 struct Sqlist{ ElemType *elem; int length; int listsize; }L={NULL,0,0}; //定义一个枚举类型,让所有的函数返回一个枚举类型的结果 enum status { OK,FAILED,EMPTY,NOTINIT,OVERFLOW1,NULLHEAD//OVERFLOW在visual studio无法使用,改为OVERFLOW1 }; void bookFirst() { ofstream of("book.dat",ios::out|ios::binary); //定义文件输出流,文件不存在时创建文件 if (!of) { cout<<"The file open error!"< >book->bookId; cout<<"bookName:"; cin>>book->bookName; cout<<"bookAuthor:"; cin>>book->bookAuthor; cout<<"bookCount:"; cin>>book->bookCount; of.write((char*)book,sizeof(Book)); } of.close(); ofstream of1("book.dat",ios::app|ios::binary); Book *book1=new Book; cout<<"bookId:"; cin>>book1->bookId; cout<<"bookName:"; cin>>book1->bookName; cout<<"bookAuthor:"; cin>>book1->bookAuthor; cout<<"bookCount:"; cin>>book1->bookCount; of1.write((char*)book1,sizeof(Book)); of1.close(); } void bookOut() { ifstream inFile("book.dat",ios::in|ios::binary); if (! inFile) { cout<<"The file open error"< bookId; cout<<" "<<"bookNname:"< bookName; cout<<" "<<"bookAuthor:"< bookAuthor; cout<<" "<<"bookCunt:"< bookCount; cout< next=NULL; strcpy((head->book).bookName,""); //初始化头结点 (head->book).bookCount=0; (head->book).bookId=0; // cout<<"LinkList已初始化......."< next!=NULL) //让指针指到最后 q=q->next; //ElemType e; //从文件中读取 for循环 ifstream inFile("book.dat",ios::in|ios::binary); if (!inFile) { cout<<"Open File error!"< next=(Lnode *)malloc(sizeof(Lnode)); strcpy(q->next->book.bookName,b->bookName); strcpy(q->next->book.bookAuthor,b->bookAuthor); q->next->book.bookId=b->bookId; q->next->book.bookCount=b->bookCount; b=new Book; q=q->next; q->next=NULL; } inFile.close(); } return OK; } status search(LinkList head,ElemType e) //查询书籍 { LinkList q; q=head; int n=0; while(NULL!=q->next) { if (strcmp(q->next->book.bookName,e.bookName)==0) { n++; cout<<"您要查询的书籍为:"< next->book.bookId<<" "< next->book.bookId<<" "< next->book.bookAuthor<<" "< next->book.bookCount< next; } if (n==0) { cout<<"不好意思,本馆暂时没有你们要借的书。。。。。。。。。。。。"< next!=NULL) { if (strcmp(q->next->book.bookName,e.bookName)==0) { n++; q->next->book.bookCount++; } q=q->next; } if (n==0) //说明以前图书馆不存在该书 { q->next=(Lnode *)malloc(sizeof(Lnode)); q->next->book=e; q->next->book.bookCount=1; //图书馆有了这样的书 1本 } q->next->next=NULL; return OK; } //借书 status LinkList_Lend(LinkList head, ElemType e) { //遍历链表看要借的书是否在管中,若在,返回书籍,不在返回信息 LinkList q; q=head; int n=0; while(q->next!=NULL) { if (strcmp(q->next->book.bookName,e.bookName)==0) { n++; if (q->next->book.bookCount>0) //图书馆中还有该书,返回该书信息,修改书籍信息 { q->next->book.bookCount--; cout<<"您要借的书:"< next->book.bookId<<" "< next->book.bookName<<" "< next->book.bookAuthor< next; } if (n==0) { cout<<"不好意思,您要的书本馆暂时没有。。。。"< next) { if (strcmp(q->next->book.bookName,e.bookName)==0) { n++; q->next->book.bookCount++; } q=q->next; } if (n==0) { cout<<"对不起,您借的书不是本馆的书........"< next) { cout<<"单链表中没有元素!"< next; int i=0; while(NULL!=p) { cout<book.bookId<<" "< book.bookName<<" "< book.bookAuthor<<" "< book.bookCount< next; } } status AddFile(LinkList head) //将修改后的图书馆信息重新写回文件 { ofstream outf("book.dat",ios::out|ios::binary); //打开文件输出流 LinkList p; p=head; if (!outf) { cout<<"Open Flie error......"< next) { (*b)=p->next->book; //将链表中的Book信息赋给(*b) outf.write((char *)b,sizeof(Book)); b=new Book; p=p->next; } outf.close(); } return OK; } status select_L(LinkList head) //系统选择函数 { //InitList_sq(L,5); //线性表完成加载 //ListInput_Sq(L); cout<<" Welcome to Library"< >n; cout< >book.bookName; search(head ,book); select_L(head); break; case 3: //借书 。。。。。。。。。 cout<<"请输入您要借的书的名字:"< >book.bookName; LinkList_Lend(head,book); AddFile(head); //将借书后的书籍信息重新再写到文件中 select_L(head); break; case 4: //还书 。。。。。。。。。。。 cout<<"请输入您想还的书的名字:"< >book.bookName; LinkList_Return(head,book); AddFile(head); select_L(head); break; case 5: //新书采编入库............... cout<<"输入新书的名字和书号:"< >book.bookId; cout<<"bookName:"< >book.bookName; cout<<"bookAuthor:"< >book.bookAuthor; LinkList_Add(head,book); AddFile(head); select_L(head); break; case 6: exit(0); break; default: break; } return OK; } int main() { // bookFirst(); // bookOut(); LinkList head=LinkListInit(); //初始化一个带头结点的链表 ElemType e; strcpy(e.bookName,"J+++"); strcpy(e.bookAuthor,"boo"); e.bookId=1001; e.bookCount=1; LinkList_Creat(head,e); cout<<"图书馆信息已加载........."<
网页名称:简单图书管理系统
标题网址:http://www.cdkjz.cn/article/psgojd.html