图书管理系统VC60程序设计.docx

上传人:b****6 文档编号:9146431 上传时间:2023-02-03 格式:DOCX 页数:44 大小:466.31KB
下载 相关 举报
图书管理系统VC60程序设计.docx_第1页
第1页 / 共44页
图书管理系统VC60程序设计.docx_第2页
第2页 / 共44页
图书管理系统VC60程序设计.docx_第3页
第3页 / 共44页
图书管理系统VC60程序设计.docx_第4页
第4页 / 共44页
图书管理系统VC60程序设计.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

图书管理系统VC60程序设计.docx

《图书管理系统VC60程序设计.docx》由会员分享,可在线阅读,更多相关《图书管理系统VC60程序设计.docx(44页珍藏版)》请在冰豆网上搜索。

图书管理系统VC60程序设计.docx

图书管理系统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;idata.ReaderCount;++i)/*遍历每个读者所借的所有书籍*/

if(pr->data.ReaderBorrow[i]==pt->next->data.Bo

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1