C语言课程设计图书管理系统.docx
- 文档编号:16824112
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:28
- 大小:18.53KB
C语言课程设计图书管理系统.docx
《C语言课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计图书管理系统.docx(28页珍藏版)》请在冰点文库上搜索。
C语言课程设计图书管理系统
C语言课程设计——图书管理系统
/*
**程序名称:
图书管理入口
**程序作者:
XXX
**创建日期:
2014/5/2
**最后修改:
2014/5/30
*/
#include
#include
#include
voidprint_to_memory();
voidprint_to_file();
voidaddBook();
voiddelBook();
voidfixBook();
voidfindBook();
voidborrowBook();
voidreturnBook();
//主函数
intmain()
{
boolbRun=true;
print_to_memory();//先将文件中的信息输入到内存
printf("欢迎使用图书管理系统!
");
while(bRun)
{
charuserInput[20],commend;
printf("\n====================\n");
printf("1-增加图书\n");
printf("2-删除图书\n");
printf("3-修改图书\n");
printf("4-查找图书\n");
printf("5-借阅图书\n");
printf("6-归还图书\n");
printf("0-退出系统\n");
printf("====================\n");
printf("选择需要进行操作的编号:
");
commend=gets(userInput)[0];
switch(commend)
{
case'1':
addBook();
break;
case'2':
delBook();
break;
case'3':
fixBook();
break;
case'4':
findBook();
break;
case'5':
borrowBook();
break;
case'6':
returnBook();
break;
case'0':
print_to_file();//结束程序时将内存中的信息输出到文件
printf("感谢您的使用!
\n");
bRun=false;
break;
default:
printf("您的输入有误!
\n");
}
}
system("PAUSE");
return0;
}
/*
**程序名称:
图书管理类
**程序作者:
XXX
**创建日期:
2014/5/2
**最后修改:
2014/5/30
*/
#defineLENsizeof(Nodebook)//定义Nodebook的长度
//定义书的节点
typedefstructNodebook
{
charbook_name[20];
charbook_author[20];
charbook_ISBN[30];
intbook_number;
boolisBorrow;
structNodebook*nextNode;
}Nodebook;
intbookNum=0;//书本的数量
Nodebook*head=NULL,*tail=NULL,*tp=NULL;//链表的头指针和尾指针
FILE*fbook;//指向文件的指针
//将文件内的信息输到内存
voidprint_to_memory()
{
if((fbook=fopen("book.dat","rb"))==NULL)//需要建一个"book.dat"文件在当前目录下
{
printf("没有'book.dat'文件!
\n");
exit(0);
}
voidprintBook(Nodebook*book);
tp=(Nodebook*)malloc(LEN);
while(fread(tp,LEN,1,fbook)!
=0)
{
if(head==NULL)
{
head=tp;
tail=head;
}
else
{
tail->nextNode=tp;
tail=tp;
}
bookNum++;
//printBook(tp);//用于测试输出到内存
tp=(Nodebook*)malloc(LEN);
}
fclose(fbook);
//printf("输出成功\n======================\n");
}
//将信息输到文件保存
voidprint_to_file()
{
if((fbook=fopen("book.dat","wb"))==NULL)
{
printf("没有'book.dat'文件!
\n");
exit(0);
}
if(head!
=NULL)
{
tp=head;
inti;
for(i=0;i { fwrite(tp,LEN,1,fbook); tp=tp->nextNode; } } fclose(fbook); //printf("\n======================\n保存成功\n"); } //输出书本的信息 voidprintBook(Nodebook*book) { printf("书名: "); puts(book->book_name); printf("作者: "); puts(book->book_author); printf("ISBN: "); puts(book->book_ISBN); printf("编号: %d\n",book->book_number); if(book->isBorrow) printf("是否外借: 已外借\n"); else printf("是否外借: 未外借\n"); } //添加一本书 voidaddBook() { Nodebook*tmp; tmp=(Nodebook*)malloc(LEN); bookNum++; printf("请输入书名: "); gets(tmp->book_name); printf("请输入作者: "); gets(tmp->book_author); printf("请输入ISBN: "); gets(tmp->book_ISBN); tmp->book_number=bookNum; tmp->isBorrow=false; tmp->nextNode=NULL; if(bookNum==1) { head=tmp; tail=head; } else { tail->nextNode=tmp; tail=tmp; } printf("添加成功! \n"); } //通过书的编号查找返回指向书结构体的指针 Nodebook*find_Bynumber(intsnumber) { Nodebook*p,*ret; p=head; boolbFind=false; if(snumber>bookNum||snumber<1) printf("您输入的书籍编号有误! \n"); else { while(p! =NULL) { if(p->book_number==snumber) { printBook(p); ret=p; bFind=true; break; } else ret=NULL; p=p->nextNode; } if(! bFind) printf("没有找到您要的书籍! \n"); } returnret; } //通过书名或书的作者查找返回指向书结构体的指针 Nodebook*find_Byname(charsname[],boolbState) { Nodebook*p,*ret; ret=NULL; boolbFind; if(bookNum<1) printf("当前没有书籍! \n"); else { if(bState) { p=head; while(p! =NULL) { if(strcmp(p->book_name,sname)==0) { printBook(p); ret=p; bFind=true; break; } else bFind=false; p=p->nextNode; } } else { p=head; while(p! =NULL) { if(strcmp(p->book_author,sname)==0) { printBook(p); ret=p; bFind=true; break; } else bFind=false; p=p->nextNode; } } if(! bFind) printf("没有找到您要的书籍! \n"); } returnret; } //删除一本书 voiddelBook() { voidcutBook(Nodebook*); boolbRun=true; Nodebook*book; charuserInput[20],sname[20],commend; intsnumber; while(bRun) { printf("1-按编号查找删除\n"); printf("2-按书名查找删除\n"); printf("3-按作者查找删除\n"); printf("0-退出删除\n"); printf("请选择需要进行操作的编号: "); commend=gets(userInput)[0]; switch(commend) { case'1': printf("请输入编号: "); snumber=atoi(gets(sname)); book=find_Bynumber(snumber); if(book! =NULL) cutBook(book); break; case'2': printf("请输入书名: "); gets(sname); book=find_Byname(sname,true); if(book! =NULL) cutBook(book); break; case'3': printf("请输入作者: "); gets(sname); book=find_Byname(sname,false); if(book! =NULL) cutBook(book); break; case'0': bRun=false; break; default: printf("您的输入有误! \n"); } } } //执行删除 voidcutBook(Nodebook*book) { voidtrue_cut(Nodebook*); charuserInput[20],commend; if(book->isBorrow) printf("书籍已外借,不能删除! \n"); else { printf("1-确认删除\n"); printf("2-取消删除\n"); printf("请选择需要进行的操作: "); commend=gets(userInput)[0]; switch(commend) { case'1': true_cut(book); break; case'2': break; default: printf("您的输入有误! \n"); } } } //确认删除 voidtrue_cut(Nodebook*book) { Nodebook*p,*tmp,*ret; if(book->book_number==1) { tmp=head; head=head->nextNode; p=head; while(p! =NULL) { p->book_number-=1; p=p->nextNode; } free(tmp); } elseif(book->book_number==bookNum) { tmp=tail; p=head; while(p! =NULL) { if(p->book_number==bookNum-2) { tail=p->nextNode; break; } p=p->nextNode; } free(tmp); } else { p=head; while(p! =NULL) { if(p->book_number==book->book_number) { ret->nextNode=p->nextNode; tmp=p->nextNode; while(tmp! =NULL) { tmp->book_number-=1; tmp=tmp->nextNode; } free(p); break; } ret=p; p=p->nextNode; } } printf("删除成功! \n"); bookNum--; } //修改书的信息 voidfixBook() { voidmodifyBook(Nodebook*); boolbRun=true; Nodebook*book; charuserInput[20],sname[20]; intsnumber; while(bRun) { printf("1-按编号查找修改\n"); printf("2-按书名查找修改\n"); printf("3-按作者查找修改\n"); printf("0-退出修改\n"); printf("请选择需要进行操作的编号: "); charcommend=gets(userInput)[0]; switch(commend) { case'1': printf("请输入编号: "); snumber=atoi(gets(sname)); book=find_Bynumber(snumber); if(book! =NULL) modifyBook(book); break; case'2': printf("请输入书名: "); gets(sname); book=find_Byname(sname,true); if(book! =NULL) modifyBook(book); break; case'3': printf("请输入作者: "); gets(sname); book=find_Byname(sname,false); if(book! =NULL) modifyBook(book); break; case'0': bRun=false; break; default: printf("您的输入有误! \n"); } } } //执行修改 voidmodifyBook(Nodebook*book) { voidtrue_modify(char[],Nodebook*,int); boolbRun=true; charuserInput[20],newinfo[20]; if(book->isBorrow) printf("书籍已外借,不能修改! \n"); else { while(bRun) { printf("1-修改书名\n"); printf("2-修改作者\n"); printf("3-修改ISBN\n"); printf("0-退出修改\n"); printf("请选择需要进行操作的编号: "); charcommend=gets(userInput)[0]; switch(commend) { case'1': printf("请输入书名: "); gets(newinfo); true_modify(newinfo,book,1); break; case'2': printf("请输入作者: "); gets(newinfo); true_modify(newinfo,book,2); break; case'3': printf("请输入ISBN: "); gets(newinfo); true_modify(newinfo,book,3); break; case'0': bRun=false; break; default: printf("您的输入有误! \n"); } } } } //确认修改 voidtrue_modify(charnewinfo[],Nodebook*book,intnum) { charuserInput[20],commend; printf("1-确认修改\n"); printf("2-取消修改\n"); printf("选择需要进行操作的编号: "); commend=gets(userInput)[0]; switch(commend) { case'1': switch(num) { case1: strcpy(book->book_name,newinfo); break; case2: strcpy(book->book_author,newinfo); break; case3: strcpy(book->book_ISBN,newinfo); break; } printf("修改成功! \n"); break; case'2': break; default: printf("您的输入有误! \n"); } } //查找书籍 voidfindBook() { boolbRun=true; charuserInput[20],sname[20]; intsnumber; while(bRun) { printf("1-按编号查找\n"); printf("2-按书名查找\n"); printf("3-按作者查找\n"); printf("0-退出查找\n"); printf("选择需要进行操作的编号: "); charcommend=gets(userInput)[0]; switch(commend) { case'1': printf("请输入编号: "); snumber=atoi(gets(sname)); find_Bynumber(snumber); break; case'2': printf("请输入书名: "); gets(sname); find_Byname(sname,true); break; case'3': printf("请输入作者: "); gets(sname); find_Byname(sname,false); break; case'0': bRun=false; break; default: printf("您的输入有误! \n"); } } } //借阅书籍 voidborrowBook() { voidtrueBorrow(Nodebook*); boolbRun=true; charuserInput[2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 图书 管理 系统