图书管理系统VC程序设计Word下载.doc
《图书管理系统VC程序设计Word下载.doc》由会员分享,可在线阅读,更多相关《图书管理系统VC程序设计Word下载.doc(47页珍藏版)》请在冰点文库上搜索。
47
两图书管理系统
1.了解并掌握C语言的程序设计方法,具备初步的独立分析和设计能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;
1.了解并掌握C语言程序设计的一般方法,具备初步的独立分析和设计能力;
个人电脑
硬件环境:
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<
stdio.h>
stdlib.h>
string.h>
windows.h>
conio.h>
time.h>
/*定义图书有关的数据结构*/
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+"
/*追加的方式打开一个二进制文件*/
fpbook)
文件打开失败\n"
while(!
feof(fpbook))
pb=(BookNode*)malloc(sizeof(BookNode));
/*申请空间*/
if(!
pb)
{
printf("
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));
/*头指针*/
preader)
preader->
rr=preader;
fpreader=fopen("
.\\reader.txt"
/*追加的方式打开一个二进制文件*/
fpreader)
while(!
feof(fpreader))
pr=(ReaderNode*)malloc(sizeof(ReaderNode));
pr)
if(fread(pr,sizeof(ReaderNode),1,fpreader)==1)
pr->
rr->
next=pr;
rr=pr;
/*rr指针向后移一位*/
++allRBnum.rnum;
/*读者数目+1*/
fclose(fpreader);
拥有有所读者数:
%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;
/*用于临时报号*/
提示:
当书号为0时,结束图书录入!
________________________________________________________________\n"
现在正在进行第%d本书登记.\n"
i++);
书号:
"
scanf("
%d"
&
(pr->
data.BookNum));
/*书号*/
while(pr->
data.BookNum!
=0)
书名:
scanf("
%s"
pr->
data.BookName);
/*书名*/
作者名:
data.BookAuthor);
/*作者名*/
pr->
data.nowCount=1;
/*现存量初始化为1*/
data.allCount=1;
/*总存储量初始化为1*/
while(pt->
next!
=NULL)
if(pr->
=pt->
data.BookNum)
pt=pt->
else/*说明该图书已经存在*/
{
pt->
data.nowCount+=1;
/*现存书目+1*/
data.allCount+=1;
/*总数目+1*/
break;
}
if(pt->
next==NULL)/*图书还未入库则入库*/
pr->
next=NULL;
pb->
next=pr;
/*将新建的结点插入链表尾部*/
pb=pr;
else
操作成功.\n"
pr=(BookNode*)malloc(sizeof(BookNode));
/*申请下一个空间*/
pt=pbook;
/*pt临时指针移动到头指针位置*/
SaveBook(pbook);
/*图书信息保存*/
\n>
图书入库完毕<
--按任意键回主菜单>
getch();
system("
cls"
return;
/*图书保存*/
voidSaveBook(BookNode*pbook)
BookNode*pb=pbook->
w"
/*只写的方式打开文件*/
while(pb!
if(fwrite(pb,sizeof(BookNode),1,fpbook)==1)/*每次写一条记录*/
pb=pb->
/*读者信息保存*/
voidSaveReader(ReaderNode*preader)
ReaderNode*pr=preader->
while(pr!
if(fwrite(pr,sizeof(ReaderNode),1,fpreader)==1)/*每次写一条记录*/
pr=pr->
/*图书借阅*/
voidBorrowBook(BookNode*pbook,ReaderNode*preader)
读者图书借阅<
intbooknum=0,flag=0,time=3,i=2;
/*图书临时指针*/
ReaderNode*rt=NULL;
/*读者临时指针*/
ReaderNode*rr=(ReaderNode*)malloc(sizeof(ReaderNode));
/*读者登陆临时节点*/
/*********