图书馆管理系统.docx
- 文档编号:29643353
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:45
- 大小:284.84KB
图书馆管理系统.docx
《图书馆管理系统.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统.docx(45页珍藏版)》请在冰豆网上搜索。
图书馆管理系统
课程设计(论文)任务书
学院
理学院
专业
光信息科学与技术
学生姓名
丁漪
学号
1109020202
课程设计
(论文)题目
图书管理系统
设计要求(技术参数):
进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
设计任务:
在图书管理系统中要实现—图书查阅,图书借阅,图书管理,还书,这四个大的功能。
同时实现按书名,作者查找,图书增加,图书删除,会员卡管理等一系列的子功能。
使本系统成为初步完善的图书管理系统。
进度安排:
第一周查阅资料
第二周第一、二天程序设计;第三、四天程序调试与测试;第五天答辩
成绩:
指导教师(签字):
年月日
专业负责人(签字):
年月日
学院院长(签字):
年月日
目录
一摘要…………………………………………………………………………………………3
二总体模块图………………………………………………………………………………4
三流程图……………………………………………………………………………………5
3.1总体流程图………………………………………………………………………………5
3.2chabook()查询图书函数模块…………………………………………………………6
3.3lendbook()借书模块…………………………………………………………………8
3.4huanbook()还书函数模块……………………………………………………………9
3.5lendcount()借书统计函数模块……………………………………………………10
3.6delcar()删除会员卡的函数模块……………………………………………………11
3.7carcount()会员统计函数模块………………………………………………………12
3.8addbook()增加图书函数模块………………………………………………………12
3.9delbook()删除图书函数模块………………………………………………………13
3.10changebook()修改图书信息函数模块……………………………………………14
3.11bookcount()图书统计函数模块……………………………………………………15
四源程序……………………………………………………………………………………16
五程序运行结果…………………………………………………………………………30
5.1主函数运行界面………………………………………………………………………30
5.2查阅图书界面…………………………………………………………………………30
5.3进入借书系统…………………………………………………………………………31
5.4还书界面………………………………………………………………………………31
5.5退出系统………………………………………………………………………………32
5.6进入管理系统…………………………………………………………………………32
5.7会员管理系统…………………………………………………………………………33
5.8图书统计………………………………………………………………………………33
5.9卡号统计………………………………………………………………………………34
5.10增加图书………………………………………………………………………………34
5.11删除图书………………………………………………………………………………35
5.12修改图书………………………………………………………………………………35
六总结………………………………………………………………………………………36
七参考文献…………………………………………………………………………………36
一摘要
本图书管理系统主要利用c语言的文件操作能力设计开发一个小型的管理信息系统,至少具有如下功能:
图书入库,按书名、出版社、价格、作者进行查询和分类统计。
数据结构主要采用了链表。
链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。
线形表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一元素。
链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。
链表的最大的优点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储学生相关信息。
关键词:
C语言;文件;数据结构;链表
二总体模块图
功能说明:
查询图书用于查找存储的图书信息
借阅图书用于借阅存储的图书
管理图书可用于对图书的增加,删除,统计和修改并对会员进行管理
会员管理系统能对会员进行增加,删除和借阅统计
部分模块间关系:
经过管理系统对图书的处理,查询图书和借阅图书的功能才能得以实现
经过会员管理系统的处理,才能实现对会员的查询和统计
三流程图
3.1总体流程图
主函数是程序入口,采用模块化设计。
首先在主程序中打印欢迎界面,定义一些必要变量,作一无限循环程序,循环体为一开关语句,该语句设置一个断点,其条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应的功能函数,同时设置一个断点,当返回值为一定条件时结束程序。
3.2chabook()查询图书函数模块
在这个模块中又分为两个子模块:
按书名查找模块和按作者查找。
1、按书名查找:
在这个子函数里使用指向文件的指针变量,定义指针变量fp,fp指向文件名为“book.txt”的首地址,如果不存在,则自动建立。
从键盘输入书名,依次移动指针地址,直到找到输入的文件名,找到后显示图书信息,再判断状态值是否为1,真的话就显示“此书现在无人借阅”,假就显示“这本书已经有人借出!
”,关闭文件,然后按任意键返回。
如果找到最后一个地址仍没找到,就显示“没有你要查询的书籍!
”。
关闭文件。
关键代码:
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
2、按作者查找:
原理同上
关键代码:
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
3.3lendbook()借书模块
定义文件指针变量fp,fp2。
fp指向“car.txt(会员卡记录文件)”首地址,从键盘输入卡号,与文件中保存的依次比较,如果一致,就找到这个地址,并赋给变量i。
关闭这个文件。
开始借书,输入要借的书,这时指针地址指向“book.txt”,以只读的方式打开,依次找与输入书名一致的图书,如果找到,又分两种情况:
状态值为1,则把书借出,把此书的状态值改为0.否则,显示“书已被借出”。
如故找不到,显示“不存在这样的书”,关闭文件,返回。
关键代码:
fwrite(&student[n],sizeof(structstudent),1,fp);
3.4huanbook()还书函数模块
同样定义两个指针变量:
fp,fp2。
先从键盘输入要还图书者会员卡卡号,然后是还书人名字,与文件中的相对照,都一致就进入还书过程,删除掉所还图书的借书记录,将还的书的原来状态设为无人借阅的。
如果没找到图书就显示“你没有借这样的书,任意键返回...”,如果没找到所输卡号,则显示“没这样的卡,和管理员联系,按任意键返回...”。
还书过程结束。
关键代码:
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)
3.5lendcount()借书统计函数模块
定义指向文件的指针变量fp,并使fp指向“record.text”,以只写的方式打开文件,从首地址读取,找到借书信息,就把统计借出书个数的变量i的值加1。
并显示借出的每一本书的信息。
关键代码:
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)
3.6delcar()删除会员卡的函数模块
定义指向文件的指针变量fp,和fp2。
分别以写入的方式打开“car.txt”,
“bookl.txt”。
从键盘输入要删除的会员卡卡号,然后把有关信息删除。
关键代码:
for(i=0;fread(&car[i],sizeof(structcar),1,fp2)!
=0;i++)
{
fwrite(&car[i],sizeof(structcar),1,fp);
}
3.7carcount()会员统计函数模块
定义指向文件的指针变量fp,使其指向“car.txt”,以只读的方式打开,依次读取里面数据,把会员个数赋给表示会员个数的变量n,并输出每个会员信息
关键代码:
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)
3.8addbook()增加图书函数模块
定义指向文件的指针变量fp,使其指向“book.txt”并以追加的方式打开文件,依次从键盘读入图书的各个信息,写入文件,然后关闭文件。
关键代码:
while(choice=='y'||choice=='Y')
3.9delbook()删除图书函数模块
定义两个文件指针,fp,fp2.从键盘输入图书名字。
然后在文件中查找,找到后删除掉有关记录,找不到则报错。
关键代码:
if(strcmp(bookname,book[i].bookname)!
=0)
{
fwrite(&book[i],sizeof(structbook),1,fp2);
}
3.10changebook()修改图书信息函数模块
定义两个文件指针,fp,fp2.从键盘输入要修改的图书名。
然后从文件中找一致的,找到后询问修改哪一部分。
在进入修改。
完成后关闭文件
关键代码:
if(strcmp(book[i].bookname,bookname)==0)
3.11bookcount()图书统计函数模块
定义文件指针fp,并使之指向“book.txt”依次从里面读取数据,并输出
关键代码:
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i
四源程序清单
#include
#include
#include
#include
#include
#defineSTACK_INIT_SIZE10
#defineOK1
#defineTRUE1
#defineERROR0
structstudent
{
intcarnum;
charlendbook[10];
}student[1000];
structbook
{
intbooknum;
charbookname[20];
floatbookprice;
charbookcreat[20];
intturefalse;
}book[1000];
structcar
{
intcarnum;
charsex[5];
charstudentname[20];
intstudentclass;
}car[1000];
findbook()
{
FILE*fp;
charbookname[10];
inti;
fp=fopen("book.txt","r");
printf("请输入你要查找的书名:
\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf("书号书名作者\n%d%s%s\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("此书现在无人借阅\n按任意键返回\n");}
else{printf("这本书已经有人借出\n");fclose(fp);return0;
}
fclose(fp);
return0;
}
}
printf("抱歉无此书!
\n");
fclose(fp);
return0;
}
findbook1()
{
FILE*fp;
charbookcreat[10];
inti;
fp=fopen("book.txt","r");
printf("请输入作者名:
\n");
scanf("%s",bookcreat);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookcreat,book[i].bookcreat)==0)
{
if(book[i].turefalse==1)
{
printf("书号书名作者\n%d%s%s\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("此书现在无人借阅\n按任意键返回\n")
}
else{
printf("此书已借出!
\n");fclose(fp);
return0;
}
fclose(fp);
return0;
}
}
printf("没有此书籍\n");
fclose(fp);
return0;
}
chabook()
{
charch5;
do
{
printf("!
!
!
欢迎进入图书查询系统!
!
!
\n");
printf("1:
按书名查找\n");
printf("2:
按作者查找\n");
printf("0:
返回\n");
printf("请输入0━2:
\n");
ch5=getch();
switch(ch5)
{
case'1':
findbook();getch();break;
case'2':
findbook1();getch();break;
case'0':
break;
default:
printf("无此操作!
\n");getch();break;
}
}while(ch5!
='0');
return0;
}
lendbook()
{
FILE*fp,*fp2;
inti,n;
intcarnum;
system("cls");
printf("\t\t*****欢迎进入借书系统*****\n\n");
printf("请输入借书人的:
\n卡号:
\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)
{
if(car[i].carnum==carnum)
{
n=i;
fclose(fp);
printf("书名:
\n");
scanf("%s",student[n].lendbook);
fp=fopen("book.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
if(book[i].turefalse==0){printf("对不起,此书有人借出,请借其他书\n");fclose(fp);getch();return0;
}
else
fclose(fp);
fp=fopen("record.txt","a+");
student[n].carnum=carnum;
fwrite(&student[n],sizeof(structstudent),1,fp);
fclose(fp);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
book[i].turefalse=0;
fwrite(&book[i],sizeof(structbook),1,fp2);
continue;
}
fwrite(&book[i],sizeof(structbook),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");
fclose(fp2);
printf("借书完毕,按任意键返回...\n");
getch();
return0;
}
}
printf("不存在这样的书,任意键返回...\n");
fclose(fp);
getch();
return0;
}
}
printf("你的卡号不存在,请申请新卡,按任意键返回...\n");
fclose(fp);
getch();
return0;
}
huanbook()
{
FILE*fp,*fp2;inti,n;
intcarnum;
charlendbook[10];
system("cls");
printf("\t\t@@@@欢迎进入还书界面@@@@");
printf("\n请你输入你的\n卡号:
\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)
{
if(car[i].carnum==carnum)
{
n=i;
fclose(fp);
printf("请输入你要还的书的名字:
\n");
scanf("%s",lendbook);
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++){
if(strcmp(student[i].lendbook,lendbook)==0)
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue;
}
fwrite(&student[i],sizeof(structstudent),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp2)!
=0;i++)
{
fwrite(&student[i],sizeof(structstudent),1,fp);
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");
fclose(fp2);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(structbook),1,fp2);continue;
}
fwrite(&book[i],sizeof(structbook),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");
fclose(fp2);
printf("还书完毕,按任意键返回...\n");
getch();
return1;
}
}
printf("你没有借这样的书,任意键返回...\n");/*出错提示*/
fclose(fp);
getch();
return0;
}
}
printf("没这样的卡,和管理员联
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 管理 系统