简易图书借还系统
实验题目006:图书借还系统
一、实验内容
已知学生名单保存在006_1.txt中,数据结构是:学号,姓名;库存图书信息保存在006_2.txt中,数据结构是:编号,书名,出版社,库存数量。
模拟图书馆的借阅图书业务,实现对图书借阅的管理。借阅有如下限制:
① 每人每次最多允许借2本,累计最多3本。
②一次可以还书多本。
③能够查询书库库存情况。
④能够查询某学生目前借阅了哪几本书。
要求:软件至少应具有“读入学生名单和书库信息”、“借书”、“还书”、“退出”4项菜单。
问题分析
数据储存
对于txt文档而言,需要使用文件读取,同时管理读者和图书信息,可以通过建立结构体来进行储存数据。对于用户而言,还需要记录所借书的编号和数量便于还书,以及查看借了哪些书和多少本书。
本身题目限制了一次最多借阅两本书,一个用户最多只能借阅三本书,故对于数量和编号的限制会多一些。这就更需要使用结构体的储存来进行操作了。
对于学生信息和图书信息的数据结构如下:
typedef struct stu
{
char code[25];
char name[25];
int num[3],list[3];
}Stu;
Stu student[8]={
0,0,0};//学生信息
typedef struct book
{
int num;
char list[6];
char name[25],fm[20];
}Book;
Book rbook[5]={
0,0,0,0};//书籍信息
读入信息并储存
对于上述结构体数组的空间大小是依据所给的txt文档确定的,所以具有局限性。但是对于本题而言,足够使用了。fscanf仅仅是读取一个字符串,依据循环变量i来寻找信息的对应并储存。代码如下:
//读取并储存学生信息和图书信息
int put(){
FILE *fp;
int i=0;
fp=fopen("D:/006_12.txt","r");//读取学生信息文本
for(i=0;i<18;++i){
fscanf(fp,"%s",buff);
if(i%2==0){
strcpy(student[i/2].code,buff);//i为偶数时,读取的为学号
}
else if(i%2==1){
strcpy(student[i/2].name,buff);//i为奇数时,读取的为姓名
}
}
fclose(fp);
fp=fopen("D:/006_22.txt","r");//读取图书信息
for(i=0;i<20;++i){
fscanf(fp,"%s",buff);
if(i%4==0){
strcpy(rbook[i/4].list,buff);//储存图书的编号
}
else if (i%4==1){
strcpy(rbook[i/4].name,buff);//储存书名
}
else if (i%4==2){
strcpy(rbook[i/4].fm,buff);//储存出版社
}
else if (i%4==3){
rbook[i/4].num=buff[0]-'0';//储存馆内该图书数目
}
}
fclose(fp);
return 0;
}
借书和还书
对于借书,要在学生信息的结构体中储存该书的信息,由于本题限制了没人最多借三本书,因此声明的储存空间相对局限了些。借书的同时还要将图书馆内的对应图书数量减少。
还书和借书相反操作即可。
代码实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//全局变量,读取文件的缓冲区
char buff[127];
//学生信息数据结构和图书信息数据结构
typedef struct stu
{
char code[