概述
主要包括圖書的庫存信息,每一本書的借閱信息以及每個人的借書信息。
系統功能:
(1)借閱資料管理(對相關資料進行添加,刪除,修改,查詢等操做)
(2)借閱管理(包括借出操做,還書操做)
(3)讀者管理(讀者等級:可分爲教師,學生。並定義每類讀者可借書數量)
(4)統計分析(當前借閱和相關資料狀態。統計分析借閱排行榜,資料狀態統計,借閱統計,顯示全部至當日到期未還書信息等功能分析)(感謝同窗的支持)數組
若是喜歡鏈表的能夠參考https://blog.csdn.net/qq_30253757/article/details/85340411緩存
#include <stdio.h> #include <stdlib.h> #include <string.h> FILE *fp;//定義文件指針fp,指向文件的起始地址 struct bbb { char name[10]; char writer[10]; char num[12]; char addr[8]; char time [8]; char price[8]; }book; int main() { int t,i=1; char menu();//菜單 void list();//顯示 void input();//輸入 void search1();//按書名查詢 void search2();//按做者名查詢 void modify();//修改 void del();//刪除 void jieyue();//借閱 printf("請輸入登陸號(1):\n");//登陸號爲1; scanf("%d",&t); if(t==1) { while(1) { switch(menu()) { case '0':t=1;break; case '1':input();break; case '2':list();break; case '3':search1();break;//bookname search case '4':search2();break;//writer search case '5':modify();break; case '6':del();break; case '7':exit(0);break; case '8':jieyue();break; default :break; } } } else printf("登陸名錯誤!請從新輸入:\n");main();//exit(1); return 0; } char menu()//顯示菜單界面並 { char n; printf("歡迎使用圖書管理系統**************\n"); printf("1.輸入圖書信息;\n"); printf("2.顯示圖書信息;\n"); printf("3.按書名查找圖書信息;\n"); printf("4.按做者查找圖書信息;\n"); printf("5.修改圖書信息;\n"); printf("6.刪除圖書記錄;\n"); printf("7.退出圖書管理系統;\n"); printf("8.查看可借閱量和時間;\n"); printf("************************************************\n"); printf(" 請選擇菜單命令: "); while(1) { do { fflush(stdin);//清除緩存 printf("\n輸入菜單(1--8):"); scanf("%c",&n); } while(n <'0' || n >'9'); //不知足條件繼續從新輸入,知足條件跳出循環結構程序流程向下 return n;//返回值返回給主函數,用以選擇功能模塊 } } void input()//錄入 { char ch; int i=0; struct bbb cache[5005]; FILE *xi=fopen("book.txt","rb+"); while(fread(&cache[i],sizeof(book),1,xi) == 1) { i++; } int huan=i; fclose(xi); do { //fflush(stdin); printf("請輸入書名:"); scanf("%s",book.name); printf("請輸入做者:"); scanf("%s",book.writer); printf("請輸入圖書編號:"); scanf("%s",book.num); printf("請輸入出版社:"); scanf("%s",book.addr); printf("請輸入出版時間:"); scanf("%s",book.time); printf("請輸入價格:"); scanf("%s",book.price); printf("---------------------------------------------------------"); int flag=0; for(i=0;i<huan;i++) { if(strcmp(cache[i].num,book.num)==0) { printf("\n已有此圖書\n"); flag=1; break; } } if(flag==1) { ch=='y'; } else cache[huan++]=book; printf("\n是否繼續輸入新的圖書信息?\n"); printf("請選擇(Y/N):"); getchar(); ch=getchar(); }while(ch == 'y' || ch == 'Y'); getchar(); fp = fopen("book.txt","wb");//以覆蓋方式打開文件,若是文件不存在則創建該文件 for(int m=0;m<huan;m++) { fwrite(&cache[m],sizeof(book),1,fp); } printf("按回車鍵返回主菜單"); getchar(); fclose(fp);//關閉文件防止數據丟失 } void list()//顯示 { fp = fopen("book.txt","rb");//以只讀方式(r) printf(" 書名 做者 分類號 出版單位 時間 價格\n"); while(fread(&book,sizeof(book),1,fp) == 1) { printf("%10s%8s",book.name,book.writer); printf("%10s%8s%12s%10s\n",book.num,book.addr,book.time,book.price ); } getchar(); printf("按回車鍵返回主菜單!"); getchar();//等待用戶查看命令,按回車鍵返回 fclose(fp);//關閉文件 } void search1()//bookname search { char name[10]; printf("請輸入要查找的書名:"); fflush(stdin);//清除緩存 gets(name); fp = fopen("book.txt","rb");//以二進制只讀方式打開文件 while(!feof(fp))//判斷文件是否到達末尾 { fread(&book,sizeof(book),1,fp); if(strcmp(name,book.name) == 0) { printf("已找到目標圖書:\n"); printf(" 書名 做者 分類號 出版單位 時間 價格\n"); printf("%10s%10s ",book.name,book.writer); printf("%10s%8s%10s%10s\n ",book.num,book.addr,book.time,book.price ); printf("\n按回車鍵返回主菜單\n"); getchar();//等待用戶查看命令,按回車鍵流程向下 break;//跳出此條件語句 } } if(feof(fp))//判斷文件指針是否指向文件末尾 { printf("您所查詢的圖書不存在"); getchar();//等待用戶查看信息,按回車鍵流程向下 } fclose(fp); //關閉文件 fflush(stdin);//清除緩存 } void search2()//writer search { char writer[10]; printf("請輸入要查找的做者名:\n"); fflush(stdin);//清除緩存 gets(writer); fp = fopen("book.txt","rb");//以二進制只讀方式打開文件 while(!feof(fp))//判斷文件是否到達末尾 { fread(&book,sizeof(book),1,fp); if(strcmp(writer,book.writer) == 0) { printf("已找到目標圖書:\n"); printf(" 書名 做者 分類號 出版單位 時間 價格\n"); printf("%10s%10s ",book.name,book.writer); printf("%10s%8s%10s%10s\n ",book.num,book.addr,book.time,book.price ); printf("\n按回車鍵返回主菜單"); getchar();//等待用戶查看命令,按回車鍵流程向下 break;//跳出此條件語句 } } if(feof(fp))//判斷文件指針是否指向文件末尾 { printf("您所查詢的圖書不存在"); getchar();//等待用戶查看信息,按回車鍵流程向下 } fclose(fp); //關閉文件 fflush(stdin);//清除緩存 } void modify()//修改 { char modname[10],name[10],writer[10],numx[12],addrx[8],time[8],price[8];//定義臨時的數組用來存放臨時數據 int a,b,c,d,f,g=1; int flag; char ch; FILE *fp1,*fp2;//聲明兩個文件指針fp1,fp2 printf("請輸入修改的圖書名:\n"); fflush(stdin);//清除緩存 gets(modname); do { if((fp1 = fopen("book.txt","rb")) == NULL)//用只讀方式打開一個二進制文件,若是返回的指針爲空 { printf("\n不能打開 book.txt文件"); getchar(); exit(1);//跳出此條件語句 } if((fp2 = fopen("temp.txt","wb")) == NULL)//用只寫方式打開一個二進制文件,若是返回的指針爲空 { printf("\n不能打開 book.txt文件"); getchar(); exit(1);//跳出此條件語句 } printf("請輸入要改的圖書名\n"); gets(modname); flag=0; while(fread(&book,sizeof(book),1,fp1) == 1) { if(strcmp(book.name,modname) == 0) { printf("修改圖書名嗎?(1)"); scanf("%d",&a); getchar(); if(a == 1) { printf("請輸入圖書名:"); gets(name); strcpy(book.name, name); } printf("修改做者嗎?(2)"); scanf("%d",&b); getchar();//等待用戶確認 if(b == 2) { printf("請輸入做者:"); gets(writer); strcpy(book.writer,writer); } printf("修改分類號嗎?(3)"); scanf("%d",&c); getchar();//等待用戶確認 if(c == 3) { printf("請輸入分類號:"); gets(numx); strcpy(book.num,numx); } printf("修改出版單位嗎?(4)"); scanf("%d",&d); getchar(); if(d == 4) { printf("請輸入出版單位:"); gets(addrx); strcpy(book.addr,addrx); } printf("修改出版時間嗎?(5)"); scanf("%d",&f); getchar(); if(f == 5) { printf("請輸入出版時間:"); gets(time); strcpy(book.time,time); } printf("修改價格嗎?(6)"); scanf("%d",&g); getchar(); if(g == 6) { printf("請輸入價格:"); gets(price); strcpy(book.price,price); } flag=1; } fwrite(&book,sizeof(book),1,fp2);//將數據做爲一個總體一次性寫入磁盤文件 } fclose(fp1); fclose(fp2); if(flag == 1) { printf("修改爲功"); remove("book.txt");//刪除原文件 rename("temp.txt","book.txt");//將臨時文件命名爲book.txt } else { printf("找不到此記錄"); getchar(); } printf("繼續修改嗎?(y/n)"); ch=getchar();//接受字符 getchar(); }while(ch == 'Y' || ch == 'y'); } void del()//刪除 { char name[10]; int flag; char ch; FILE *fp1,*fp2;//聲明兩個文件指針fp1,fp2 do { if((fp1 = fopen("book.txt","rb")) == NULL) { printf("\n不能打開 book.txt文件"); getchar(); exit(1); } if((fp2 = fopen("temp.txt","wb")) == NULL) { printf("\n不能打開 book.txt文件"); getchar(); exit(1); } printf("請輸入要刪除的圖書名:"); fflush(stdin);//清除緩存 gets(name); flag = 0; while(!feof(fp1))//判斷文件fp1是否指向文件末尾 { fread(&book,sizeof(book),1,fp1); if(strcmp(name,book.name) == 0) { flag = 1; } else { fwrite(&book,sizeof(book),1,fp2);//將數據做爲一個總體一次性寫入磁盤文件 } } fclose(fp1);//關閉文件 fclose(fp2);//關閉文件 if(flag == 1) { remove("book.txt");//移除文件 rename("temp.txt","book.txt"); printf("刪除成功!\n"); } else { printf("找不到圖書名"); remove("temp.txt");//移除文件 } printf("繼續刪除其餘圖書名嗎?(y/n)"); fflush(stdin);//清除緩存 ch = getchar(); getchar(); }while(ch == 'y' || ch == 'Y'); fflush(stdin);//清除緩存 } void jieyue() { char ch; int n; printf("請選擇您的身份:1.教師 2.學生\n"); scanf("%d",&n); switch(n) { case 1: printf("您可借閱圖書數目爲8本,可借閱時間爲4周\n"); break; case 2: printf("您可借閱圖書數目爲4本,可借閱時間爲2周\n"); break; default: printf("不存在此身份\n"); break; } ch=getchar(); }