图书管理系统VC60程序设计.docx
- 文档编号:30306389
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:53
- 大小:466.20KB
图书管理系统VC60程序设计.docx
《图书管理系统VC60程序设计.docx》由会员分享,可在线阅读,更多相关《图书管理系统VC60程序设计.docx(53页珍藏版)》请在冰豆网上搜索。
图书管理系统VC60程序设计
福建农林大学计算机与信息学院
计算机类
课程设计报告
课程名称:
程序设计基础
课程设计题目:
图书管理系统
姓名:
曾碧滢
系:
数学系
专业:
信息与计算科学
年级:
13级
学号:
3136003038
指导教师:
林耀海
福建农林大学计算机与信息学院计算机类
课程设计结果评定
评语:
成绩:
指导教师签字:
任务下达日期:
评定日期:
两图书管理系统
一、课程设计的目的:
1.了解并掌握C语言的程序设计方法,具备初步的独立分析和设计能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;
二、课程设计的要求:
1.了解并掌握C语言程序设计的一般方法,具备初步的独立分析和设计能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
三、实习地点:
个人电脑
四、主要仪器设备(实验用的软硬件环境):
硬件环境:
PC机,软件环境:
vc6.0
五、算法的思想
本程序用文件来储存图书信息和读者信息。
∙Step1:
程序运行预处理,读取图书库文件和读者库文件信息,获取系统时间。
读取文件的方法:
通过函数fread()每次读取一个结点的信息,同时储存进链表的结点中,然后每读取一个结点,就依次在链表后面添加一个结点。
∙Step2:
弹出菜单
oStep2.1:
1. 浏览图书信息 Step2.2:
2. 浏览读者信息
oStep2.3:
3. 图书登记入库 Step2.4:
4. 读者证件办理
oStep2.5:
5. 读者图书借阅 Step2.6:
6. 读者图书归还
oStep2.7:
7. 读者信息查询 Step2.8:
8. 读者信息修改
oStep2.9:
9. 图书信息修改 Step2.10:
10. 图书资源搜索
∙Step3:
浏览图书信息
o通过遍历单链表来实现打印所有的图书信息
∙Step4:
浏览读者信息
o通过遍历单链表来实现打印所有读者信息,浏览前验证管理员权限
∙Step5:
图书登记入库
o图书登记入库相当于单链表结点的添加,每登记一本图书,就插入一个结点。
∙Step6:
读者证件办理
o读者证件办理相当于往读者链表里头添加结点,新增一个读者信息,就在读者链表尾部添加一个结点。
办理证件前先验证管理员权限。
∙Step7:
读者信息查询
o先读者登录,登录相当于在读者链表中找与之登录匹配的信息,匹配成功则登录成功,登录完成后,打印出读者的所有注册和借书信息。
∙Step8:
读者信息修改
o先登录,完成后,进行读者信息修改。
∙Step9:
图书信息修改
o同读者信息修改一样的实现方法。
不过在修改前先验证管理员权限。
∙Step10:
图书信息搜索
o这里支持图书名搜索,图书作者搜索,索书号搜索。
实现原理:
遍历图书链表。
∙Step11:
退出图书系统
o退出前调用图书信息保存函数和读者信息保存函数。
将链表信息储存进文件中。
然后调用退出函数exit(0)。
六、设计流程图
七、程序代码:
//图书管理系统
#include
#include
#include
#include
#include
#include
/*定义图书有关的数据结构*/
structbook
{
intBookNum;/*图书编号*/
charBookName[20];/*图书名字*/
charBookAuthor[15];/*图书作者*/
intnowCount;/*图书现存量*/
intallCount;/*图书库存量*/
};
/*定义与读者有关的数据结构*/
structreader
{
intReaderNum;/*读者编号*/
charReaderName[20];/*读者的姓名*/
charReaderSex[8];/*读者的性别*/
intReaderAge;/*读者的年龄*/
charReaderTel[15];/*读者的电话*/
intReaderCount;/*读者目前已经借阅的数目*/
charpassword[16];/*读者证件密码*/
chardate[10][100];/*读者借阅日期*/
intReaderBorrow[10];/*当前已经借阅的图书编号*/
charBorrowName[10][40];/*已经借阅的图书名字*/
};
/*定义与每条图书纪录有关的数据结构*/
typedefstructbooknode
{
structbookdata;/*数据域*/
structbooknode*next;/*指针域*/
}BookNode;
/*定义与每条读者纪录有关的数据结构*/
typedefstructreadernode
{
structreaderdata;/*数据域*/
structreadernode*next;/*指针域*/
}ReaderNode;
/*定义图书馆中读者和藏书的总数目*/
structrbnum
{
intrnum;/*读者总个数*/
intbnum;/*书籍总本数*/
}allRBnum;
/*******************************************/
/*函数声明*/
BookNode*OpenBook();/*打开图书库文件*/
ReaderNode*OpenReader();/*打开读者库文件*/
voidInBook(BookNode*pbook);/*图书录入*/
voidSaveBook(BookNode*pbook);/*图书信息保存*/
voidSaveReader(ReaderNode*preader);/*读者信息保存*/
voidBorrowBook(BookNode*pbook,ReaderNode*preader);/*图书借阅*/
voidReturnBook(BookNode*pbook,ReaderNode*preader);/*图书归还*/
voidLookBook(BookNode*pbook);/*浏览图书库*/
voidLookReader(ReaderNode*preader);/*浏览读者库*/
voidInReader(ReaderNode*preader);/*借书证办理*/
voidFindReaderAll(ReaderNode*preader);/*读者信息查询*/
ReaderNode*LoginReader(ReaderNode*preader);/*读者登陆验证*/
intLoginAdmin();/*管理员登陆验证*/
voidModifyReader(ReaderNode*preader);/*修改读者信息*/
voidModifyBook(BookNode*pbook);/*修改图书信息*/
voidGotoXY(intx,inty);/*光标定位*/
voiderase(intn);/*擦除菜单选项*/
voidmenu(intn);/*菜单选项*/
voidFindBook(BookNode*pbook);/*图书搜索*/
voidLocalTime(char*strTime);/*获取系统本地时间*/
/*******************************************/
/*打开图书文件book,将其存入链表中*/
BookNode*OpenBook()
{
FILE*fpbook;
BookNode*pb=NULL,*rb=NULL;
allRBnum.bnum=0;/*初始化藏书0本*/
BookNode*pbook=(BookNode*)malloc(sizeof(BookNode));/*头指针*/
if(!
pbook)
{
printf("空间申请失败\n");
exit(0);
}
pbook->next=NULL;
rb=pbook;
fpbook=fopen(".\\book.txt","a+");/*追加的方式打开一个二进制文件*/
if(!
fpbook)
{
printf("文件打开失败\n");
exit(0);
}
while(!
feof(fpbook))
{
pb=(BookNode*)malloc(sizeof(BookNode));/*申请空间*/
if(!
pb)
{
printf("空间申请失败\n");
exit(0);
}
if(fread(pb,sizeof(BookNode),1,fpbook)==1)
{
pb->next=NULL;
rb->next=pb;
rb=pb;/*rb指针向后移一位*/
allRBnum.bnum+=pb->data.allCount;/*总图书数目统计*/
}
}
fclose(fpbook);/*关闭文件*/
//printf("打开文件成功!
图书馆总共藏书:
%d本\n",allRBnum.bnum);
returnpbook;
}
/*打开读者文件reader,将其存入链表中*/
ReaderNode*OpenReader()
{
FILE*fpreader;
ReaderNode*pr=NULL,*rr=NULL;
allRBnum.rnum=0;/*初始化读者人数0位*/
ReaderNode*preader=(ReaderNode*)malloc(sizeof(ReaderNode));/*头指针*/
if(!
preader)
{
printf("空间申请失败\n");
exit(0);
}
preader->next=NULL;
rr=preader;
fpreader=fopen(".\\reader.txt","a+");/*追加的方式打开一个二进制文件*/
if(!
fpreader)
{
printf("文件打开失败\n");
exit(0);
}
while(!
feof(fpreader))
{
pr=(ReaderNode*)malloc(sizeof(ReaderNode));/*申请空间*/
if(!
pr)
{
printf("空间申请失败\n");
exit(0);
}
if(fread(pr,sizeof(ReaderNode),1,fpreader)==1)
{
pr->next=NULL;
rr->next=pr;
rr=pr;/*rr指针向后移一位*/
++allRBnum.rnum;/*读者数目+1*/
}
}
fclose(fpreader);/*关闭文件*/
//printf("打开文件成功!
拥有有所读者数:
%d位\n",allRBnum.rnum);
returnpreader;
}
/*图书录入*/
voidInBook(BookNode*pbook)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>>图书登记入库<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
BookNode*pb=pbook;
BookNode*pt=pbook;/*pt临时指针用于遍历整个图书库*/
BookNode*pr=(BookNode*)malloc(sizeof(BookNode));
while(pb->next!
=NULL)/*找到链表的尾部开始添加书目*/
{
pb=pb->next;
}
inti=1;/*用于临时报号*/
printf("提示:
当书号为0时,结束图书录入!
\n");
printf("________________________________________________________________\n");
printf("现在正在进行第%d本书登记.\n",i++);
printf("书号:
");
scanf("%d",&(pr->data.BookNum));/*书号*/
while(pr->data.BookNum!
=0)
{
printf("书名:
");
scanf("%s",pr->data.BookName);/*书名*/
printf("作者名:
");
scanf("%s",pr->data.BookAuthor);/*作者名*/
pr->data.nowCount=1;/*现存量初始化为1*/
pr->data.allCount=1;/*总存储量初始化为1*/
while(pt->next!
=NULL)
{
if(pr->data.BookNum!
=pt->data.BookNum)
pt=pt->next;
else/*说明该图书已经存在*/
{
pt->data.nowCount+=1;/*现存书目+1*/
pt->data.allCount+=1;/*总数目+1*/
break;
}
}
if(pt->next==NULL)/*图书还未入库则入库*/
{
if(pr->data.BookNum!
=pt->data.BookNum)
{
pr->next=NULL;
pb->next=pr;/*将新建的结点插入链表尾部*/
pb=pr;
}
else
{
pt->data.nowCount+=1;/*现存书目+1*/
pt->data.allCount+=1;/*总数目+1*/
}
}
printf("操作成功.\n");
pr=(BookNode*)malloc(sizeof(BookNode));/*申请下一个空间*/
printf("现在正在进行第%d本书登记.\n",i++);
printf("书号:
");
scanf("%d",&(pr->data.BookNum));/*书号*/
pt=pbook;/*pt临时指针移动到头指针位置*/
}
printf("________________________________________________________________\n");
SaveBook(pbook);/*图书信息保存*/
printf("\n>>>图书入库完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*图书保存*/
voidSaveBook(BookNode*pbook)
{
BookNode*pb=pbook->next;
FILE*fpbook;
fpbook=fopen(".\\book.txt","w");/*只写的方式打开文件*/
if(!
fpbook)
{
printf("文件打开失败\n");
exit(0);
}
while(pb!
=NULL)
{
if(fwrite(pb,sizeof(BookNode),1,fpbook)==1)/*每次写一条记录*/
{
pb=pb->next;
}
}
fclose(fpbook);
return;
}
/*读者信息保存*/
voidSaveReader(ReaderNode*preader)
{
ReaderNode*pr=preader->next;
FILE*fpreader;
fpreader=fopen(".\\reader.txt","w");/*只写的方式打开文件*/
if(!
fpreader)
{
printf("文件打开失败\n");
exit(0);
}
while(pr!
=NULL)
{
if(fwrite(pr,sizeof(ReaderNode),1,fpreader)==1)/*每次写一条记录*/
{
pr=pr->next;
}
}
fclose(fpreader);
return;
}
/*图书借阅*/
voidBorrowBook(BookNode*pbook,ReaderNode*preader)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>>读者图书借阅<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
intbooknum=0,flag=0,time=3,i=2;
BookNode*pt=pbook;/*图书临时指针*/
ReaderNode*rt=NULL;/*读者临时指针*/
ReaderNode*rr=(ReaderNode*)malloc(sizeof(ReaderNode));/*读者登陆临时节点*/
/******************************************/
if((rt=LoginReader(preader))==NULL)/*读者登陆验证*/
{
printf("读者验证失败.\n");
return;
}
/******************************************/
printf("________________________________________________________________\n");
printf("输入要借阅书籍的索书号:
");
scanf("%d",&booknum);
while(pt->next!
=NULL)
{
if(pt->data.BookNum==booknum)
{
if(pt->data.nowCount>=1)
{
printf("该书现存量:
%d本,可以借阅.\n",pt->data.nowCount);
LocalTime(rt->data.date[rt->data.ReaderCount]);/*登记当前借阅图书的日期*/
rt->data.ReaderBorrow[rt->data.ReaderCount]=pt->data.BookNum;/*纪录当前图书编号*/
strcpy(rt->data.BorrowName[rt->data.ReaderCount],pt->data.BookName);/*纪录当前图书名字*/
--pt->data.nowCount;/*图书现在库存-1*/
++rt->data.ReaderCount;/*读者借阅本数+1*/
printf(">>>借书成功<<<\n");
printf("提醒:
请在30天之内归还本书!
!
!
超期按每天0.1元收费!
!
!
\n");
SaveBook(pbook);/*图书信息保存*/
SaveReader(preader);/*读者信息保存*/
printf("________________________________________________________________\n");
printf("\n>>>图书借阅完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
printf(">>>很遗憾!
该本图书库存目前为空,不可借阅<<<\n");
printf("________________________________________________________________\n");
printf("\n>>>图书借阅失败<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
pt=pt->next;/*遍历图书库*/
}
if(pt->next==NULL)
{
printf(">>>很遗憾!
没有找到该图书<<<\n");
}
printf("________________________________________________________________\n");
printf("\n>>>图书借阅失败<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*图书归还*/
voidReturnBook(BookNode*pbook,ReaderNode*preader)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>>读者图书归还<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
intbooknum=0,i=0;
BookNode*pt=pbook;
ReaderNode*pr=preader;
printf("________________________________________________________________\n");
printf("归还索书号:
");
scanf("%d",&booknum);
while(pt->next!
=NULL)/*遍历图书库*/
{
if(pt->next->data.BookNum==booknum)
{
while(pr->next!
=NULL)/*读者借书信息修改*/
{
for(i=0;i
if(pr->data.ReaderBorrow[i]==pt->next->data.Bo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 VC60 程序设计