1、功能描述
- 新进图书基本信息的输入
- 图书借本信息的查询
- 对撤销图书的删除
- 办理借书手续
- 办理还书手续
- 提供使用文件方式存储数据
2、设计思想
- 新进图书的输入,首先要输入要添加的书的基本信息,如:书名、书号、价格、作者,再通过fprintf()函数将输入的信息写入文件中
- 图书信息的查询可分为两种方式,第一是查询文件中的全部数据,采用的方法是利用fscanf()函数读出文件中的数据到指定的变量,再将数据全部打印出来。第二是查询用户输入的书名的指定的数据,采用的方法是先输入要查询的书的名字,再用fscanf()函数将文件中的内容读取到指定的变量,再对其与输入的书名一一比较,相同则打印出该书的全部信息(本系统默认所有的书名不能相同)
- 图书信息的删除采用的方法是输入要删除的书的信息,然后通过fscanf()函数读取出文件中的所有信息,并将其存放再预先定义好的数组中,再利用循环对存储的数据的书名和输入的书名比对,直到找到对应的图书信息,并删除。删除后数组中存储该数据的位置就空出了一位,所以需要将后面的数据依次向前移动一位。(方法是将数组中要删除的信息的下一个元素的值赋给要删除的那个元素,依次类推,直到最后一个元素完成前移)删除完成之后,将剩下的数据采用fprintf()函数再次存入文件中
- 办理借书手续采用的方式fscnf()函数将文件内容读取出来,再与输入的要借的书名一一比对,找到对应的书之后,需要输入借书人的姓名、学号、和性别,并将这些信息写在图书信息的后面,并将图书状态改为“已借出”
- 办理还书手续与借书手续基本相同,只是清除了借书人的信息,并把图书的状态改为“在馆”。
3、界面和执行结果展示
1、主菜单界面:
文章来源地址https://uudwc.com/A/eqvm
文章来源:https://uudwc.com/A/eqvm
2、执行增加新图书界面
执行的结果展示:代码执行后会自动在D盘的根目录下生成一个book文件夹(这里文件夹的生成位置和名称都可以更改),如果文件夹存在,就不用生成
3、执行删除操作的界面展示:
执行结果展示
4、执行查询图书操作展示:(为了展示效果,这里又增加了两本书)
5、办理借书手续操作展示:
执行结果展示:
6、办理还书手续操作展示:
执行结果展示:
4、代码展示
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
typedef struct Book{
char book_name[20];//书名 默认情况下书名不能重复
char number[20];//书号
char price[10];//价格
char auther[20];//作者
char status[10];//1为在图书馆,0表示已经借出
char borrow_name[20];//借书人的姓名
char sex[10];//借书人的性别
char id[20];//借书人的学号
}Information;
//读取文件行数的函数
int count_lines() {
int count = 0;
char c;
FILE *fp;
if((fp=fopen("d:\\book.txt","r"))==NULL){
printf("cannot open file strike any key exit!");
exit(1);
}
while ((c = fgetc(fp)) != EOF) {
if (c == '\n') {
count++;
}
}
fclose(fp);
return count;
}
//增加新图书
int add(){
Information book_data;
FILE *fp;
int a=1,line;
if((fp=fopen("d:\\book.txt","a"))==NULL){
printf("cannot open file strike any key exit!");
exit(1);
}
line=count_lines();
while(a){
printf("请分别输入要添加的书的书名、书号、价格和作者,之间用空格隔开:");
scanf("%s%s%s%s",book_data.book_name,book_data.number,book_data.price,book_data.auther);
memcpy(book_data.status,"在馆",10);//book_data.status=1;
memcpy(book_data.borrow_name,"无",20);
memcpy(book_data.sex,"空",10);
memcpy(book_data.id,"空",20);//book_data.id="空";
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s",book_data.book_name,book_data.number,book_data.price,book_data.auther,book_data.status,book_data.borrow_name,book_data.sex,book_data.id);
fputs("\n",fp);
printf("是否继续增加新的图书:\n");
printf("--------------------------\n");
printf(" 1、是 2、否 \n");
printf("--------------------------\n");
scanf("%d",&a);
if(a==2){
a=0;
fclose(fp);
}
}
return OK;
}
//删除图书
int deletebook(){
Information book_data[20];
char a[20];
FILE *fp;
int line;
line=count_lines();
fp=fopen("d:\\book.txt","r");
for(int i=0;i<line;i++){
fscanf(fp,"%s%s%s%s%s%s%s%s",book_data[i].book_name,book_data[i].number,book_data[i].price,book_data[i].auther,book_data[i].status,book_data[i].borrow_name,book_data[i].sex,book_data[i].id);
}
printf("请输入要删除的书籍名称:");
scanf("%s",a);
for(int j=0;j<line;j++){
if(strcmp(a,book_data[j].book_name)==0){
while(j<line-1){ //此处可能存在错误
book_data[j]=book_data[j+1];
j++;
}
break;
}
}
fp=fopen("d:\\book.txt","w");
for(int k=0;k<line-1;k++){
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t",book_data[k].book_name,book_data[k].number,book_data[k].price,book_data[k].auther,&book_data[k].status,book_data[k].borrow_name,book_data[k].sex,book_data[k].id);
fputs("\n",fp);
}
fclose(fp);
printf("删除成功!\n");
return OK;
}
//查询书籍
int search(){
FILE *fp;
Information book_data;
char b[20];
int a,line;
line=count_lines();
printf("-------------------------------------------------\n");
printf(" 1、查询全部图书信息 2、查询指定图书信息 \n");
printf("-------------------------------------------------\n");
printf("请输入查询方式:");
scanf("%d",&a);
if(a==1){
fp=fopen("d:\\book.txt","r");
for(int i=0;i<line;i++){
fscanf(fp,"%s%s%s%s%s%s%s%s",book_data.book_name,book_data.number,book_data.price,book_data.auther,book_data.status,book_data.borrow_name,book_data.sex,book_data.id);
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",book_data.book_name,book_data.number,book_data.price,book_data.auther,book_data.status,book_data.borrow_name,book_data.sex,book_data.id);
}
} else {
fp=fopen("d:\\book.txt","r");
printf("请输入要查询的书的书名:");
scanf("%s",b);
for(int j=0;j<line;j++){
fscanf(fp,"%s%s%s%s%s%s%s%s",book_data.book_name,book_data.number,book_data.price,book_data.auther,book_data.status,book_data.borrow_name,book_data.sex,book_data.id);
if(strcmp(book_data.book_name,b)==0){
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",book_data.book_name,book_data.number,book_data.price,book_data.auther,book_data.status,book_data.borrow_name,book_data.sex,book_data.id);
break;
}
}
if(j>=line){
printf("不存在该书!");
}
}
fclose(fp);
return OK;
}
//办理借书手续
int borrow(){
FILE *fp;
Information data[20];
char a[20],name1[20],sex1[10],id1[20];
int line;
line=count_lines();
printf("请分别输入借书人的姓名,性别,学号:");
scanf("%s%s%s",name1,sex1,id1);
printf("请输入要借的书的书名:");
scanf("%s",a);
fp=fopen("d:\\book.txt","r");
for(int i=0;i<line;i++){
fscanf(fp,"%s%s%s%s%s%s%s%s",data[i].book_name,data[i].number,data[i].price,data[i].auther,data[i].status,data[i].borrow_name,data[i].sex,data[i].id);
}
for(int j=0;j<line;j++){
if(strcmp(data[j].book_name,a)==0){
memcpy(data[j].status,"已借出",10);//data[j].status=0;
memcpy(data[j].borrow_name,name1,20);//data[j].borrow_name=name1;
memcpy(data[j].sex,sex1,10);//data[j].sex=sex1;
memcpy(data[j].id,id1,20);//data[j].id=id1;
break;
}
}
fp=fopen("d:\\book.txt","w");
for(int k=0;k<line;k++){
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t",data[k].book_name,data[k].number,data[k].price,data[k].auther,data[k].status,data[k].borrow_name,data[k].sex,data[k].id);
fputs("\n",fp);
}
fclose(fp);
printf("借书成功!\n");
return OK;
}
//办理还书手续
int returnbook(){
FILE *fp;
Information data[20];
char a[20];
int line;
line=count_lines();
printf("请输入要还的书的书名:");
scanf("%s",a);
fp=fopen("d:\\book.txt","r");
for(int i=0;i<line;i++){
fscanf(fp,"%s%s%s%s%s%s%s%s",data[i].book_name,data[i].number,data[i].price,data[i].auther,data[i].status,data[i].borrow_name,data[i].sex,data[i].id);
}
for(int j=0;j<line;j++){
if(strcmp(data[j].book_name,a)==0){
memcpy(data[j].status,"在馆",10);//data[j].status=1;
memcpy(data[j].borrow_name,"无",20);//data[j].borrow_name="无";
memcpy(data[j].sex,"空",10);//data[j].sex="空";
memcpy(data[j].id,"空",20);//data[j].id="空";
break;
}
}
fp=fopen("d:\\book.txt","w");
for(int k=0;k<line;k++){
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t",data[k].book_name,data[k].number,data[k].price,data[k].auther,data[k].status,data[k].borrow_name,data[k].sex,data[k].id);
fputs("\n",fp);
}
fclose(fp);
printf("还书成功!\n");
return OK;
}
//主函数
void main(){
int a=0,line=0,selection;
while(a==0){
printf("---------------------------------\n");
printf("| 图书管理系统 |\n");
printf("---------------------------------\n");
printf("| |\n");
printf("| 1、增加新图书 |\n");
printf("| |\n");
printf("| 2、删除图书 |\n");
printf("| |\n");
printf("| 3、查询图书 |\n");
printf("| |\n");
printf("| 4、办理借书手续 |\n");
printf("| |\n");
printf("| 5、办理还书手续 |\n");
printf("| |\n");
printf("| 6、退出系统 |\n");
printf("| |\n");
printf("---------------------------------\n");
printf("请输入操作:");
scanf("%d",&selection);
switch(selection){
case 1:
{
add();
}
break;
case 2:
{
deletebook();
}
break;
case 3:
{
search();
}
break;
case 4:
{
borrow();
}
break;
case 5:
{
returnbook();
}
break;
case 6:
{
a=1;
}
break;
}
}
}