圖書館管理系統的c實現

來源:互聯網
上載者:User

/*主要功能:
1. 新進圖書基本資料的輸入。
2. 顯示全部記錄
3. 按圖書名稱查詢圖書基本資料。
4. 根據圖書名稱對撤消的圖書資訊進行刪除。
5. 按圖書名稱從小到大排序。
6. 統計某價格以上的圖書數量。
7. 列出所有未借出去的圖書資訊。
基本資料:圖書編號、圖書名稱、單價、作者、存在狀態、借書人姓名、性別、學號等*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include<conio.h>
typedef int BOOL;

typedef struct bookinfo
{
    char number[15];/*產品編號*/
    char name[30];/*產品名稱*/
    float price;/*單價*/
    char auther[20];/*作者*/
    BOOL isExit;/*存在狀態*/
    char lendername[20];/*借書人姓名*/
    char lendersex[2];/*借書人性別*/
    char lendernum[15];/*借書人學號*/
}BOOKINFO;

void menu()
{
    printf("\n\n\n\n\n\n\n");
    printf("\t\t\t圖書管理系統\n");
    printf("\t\t\t1:新進圖書基本資料的輸入\n");
    printf("\t\t\t2:顯示全部記錄\n");
    printf("\t\t\t3:根據圖書名稱查詢圖書基本資料\n");
    printf("\t\t\t4:根據圖書名稱對撤銷的圖書資訊進行刪除\n");
    printf("\t\t\t5:按照圖書名稱從小大到排序\n");
    printf("\t\t\t6:統計某價格以上的圖書數量\n");
    printf("\t\t\t7:列出所有未借出去的圖書資訊\n");
    printf("\t\t\t8:退出\n");
    }
void choice_1_input_new()/*輸入新進的圖書資訊*/
{
    char choice;
    FILE *p;
    BOOKINFO newbook;

    system("cls");
    while(1)
      {
      printf("輸入圖書編號:");
      gets(newbook.number);
         
      printf("輸入圖書名稱:");
      gets(newbook.name);   
     
      printf("輸入圖書單價:");
      scanf("%f",&newbook.price);
      while(getchar()!='\n');
         
      printf("輸入圖書的作者:");
      gets(newbook.auther);   
     
      printf("輸入借書人姓名:");
      gets(newbook.lendername);   
     
      printf("輸入借書人性別:");
      gets(newbook.lendersex);   
     
      printf("輸入借書人學號:");
      gets(newbook.lendernum);
     
      printf("是否儲存該條書目?(Y/N)\n");
      choice=getch();
      while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
        choice=getch();
      if(choice=='Y'||choice=='y')
        {
        newbook.isExit=1;/*將圖書狀態設定成1,表示沒有借出*/
       
        p=fopen("c:\\bookinfo.data","ab");
        fwrite(&newbook,sizeof(BOOKINFO),1,p);
        fclose(p);   
       
        printf("\n該條書目已添加到c:\\bookinfo.data檔案中!\n");
        }    
      else 
        {
        printf("\n本條書目未儲存!\n");   
        }
      printf("\n是否繼續添加書目?(Y/N)\n");
      choice=getch();
      while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
        choice=getch();
      if(choice=='Y'||choice=='y')
        continue;
      else
        break;     
      }
    }
void choice_2_display_all()/*顯示全部圖書資訊*/
{
    FILE *p;
    int n;
    BOOKINFO bookinfo[100];
    int booknumber=0;

    system("cls");
    p=fopen("c:\\bookinfo.data","rb");
    while(!feof(p))
      {
      fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
      booknumber++;   
      }
    /*booknumber--;使用feof()函數會多讀一行,因此需要booknumber自減一次,使書目的數量正確*/
    fclose(p); 
    booknumber--;
    if(booknumber==0)
      {
      printf("沒有任何圖書資訊!\n\n");
      }
    else
      {
      n=0;
      printf("                              圖書資訊如下\n");
      printf("                   圖書資訊                |         借書人資訊   \n");
      printf("編號  名稱        單價    作者    圖書狀態 | 姓名        性別    學號\n");
      while(n<booknumber)
        {
        printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
                                        bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
                                        bookinfo[n].lendersex,bookinfo[n].lendernum);
        n++;                                   
        }
      } 
    printf("\n\n按任意鍵回到主菜單!\n");
    getch();     
}

void choice_3_search_according_name()/*根據圖書名稱顯示圖書的資訊*/
{
    char search[20]="";/*search用來存放要查詢的書名*/
    int n;
    FILE *p;
    char choice;
    BOOKINFO bookinfo[100];
    int booknumber=0;
   
    system("cls");
    p=fopen("c:\\bookinfo.data","rb");
    while(!feof(p))
      {
      fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
      booknumber++;   
      }
    booknumber--;/*使用feof()函數會多讀一行,因此需要booknumber自減一次,使書目的數量正確*/
    fclose(p);
    while(1)
    {
    printf("輸入要查詢的書本名稱:");
    gets(search);
    if(booknumber==0)
      {
      printf("書庫中沒有任何資訊!\n\n");
      printf("按任意鍵回到主菜單!\n\n");
      getch();
      break;   
      }/*if結束*/
    else
      {
      for(n=0;n<booknumber;n++)
        if(strcmp(bookinfo[n].name,search)==0)
          {
          printf("該書的詳細資料如下:\n");
          printf("                   圖書資訊                |         借書人資訊   \n");
          printf("編號  名稱        單價    作者    圖書狀態 | 姓名        性別    學號\n");
          printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
                                        bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
                                        bookinfo[n].lendersex,bookinfo[n].lendernum);
          break;                           
          }
      if(n>=booknumber)
        printf("沒有尋找該書的任何資訊!\n");
      printf("\n\n是否繼續查詢?(Y/N)\n");
      choice=getch();
      while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
         choice=getch();
      if(choice=='Y'||choice=='y')
        continue;
      else
        break;             
        }/*else結束*/
      }/*while(1)結束*/ 
    }
void choice_4_delete_according_name()/*根據圖書名稱對圖書資訊進行刪除*/
{
    char search[20]="";/*search用來存放要刪除的書名*/
    int n,i;
    FILE *p;
    char choice;
    BOOKINFO bookinfo[100];
    int booknumber;
   
    system("cls");
    while(1)
      {
      printf("輸入要刪除的書本名稱:");
      gets(search);
      p=fopen("c:\\bookinfo.data","rb");
      booknumber=0;
      while(!feof(p))
        {
        fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
        booknumber++;   
        }
      booknumber--;/*使用feof()函數會多讀一行,因此需要booknumber自減一次,使書目的數量正確*/
      fclose(p);
      if(booknumber==0)
        {
        printf("書庫中沒有任何資訊!\n\n");
        printf("按任意鍵回到主菜單!\n\n");
        getch();
        break;  
        }/*if結束*/
      else
        {   
        for(n=0;n<booknumber;n++)
          if(strcmp(bookinfo[n].name,search)==0)
            {
            break;
            }
        if(n>=booknumber)
           printf("沒有尋找該書的任何資訊!\n");
        else
           {
           printf("是否確認需要刪除該條書目?(Y/N)");
           choice=getch();
             while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
             choice=getch();
           if(choice=='Y'||choice=='y')     
             {
             for(i=n;i<booknumber-1;i++)
               bookinfo[i]=bookinfo[i+1];   
             booknumber--;
          
             p=fopen("c:\\bookinfo.data","wb");
             for(n=0;n<booknumber;n++)
               fwrite(&bookinfo[n],sizeof(BOOKINFO),1,p);
             fclose(p);
          
             printf("刪除成功!\n");
             }
           else
              printf("\n\n該條書目沒有被刪除!");
           }   
         printf("\n\n是否繼續進行刪除操作?(Y/N)\n");
         choice=getch();
         while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
           choice=getch();
         if(choice=='Y'||choice=='y')
           continue;
         else
           break;             
        }/*else結束*/
      }/*while(1)結束*/
    }
void choice_5_sort_according_name()/*根據圖書名稱排序*/
{
    FILE *p;
    int m,n;
    BOOKINFO temp;
    BOOKINFO bookinfo[100];
    int booknumber;
   
    p=fopen("c:\\bookinfo.data","rb");
    booknumber=0;
    system("cls");
    while(!feof(p))
      {
      fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
      booknumber++;   
      }
    booknumber--;/*使用feof()函數會多讀一行,因此需要booknumber自減一次,使書目的數量正確*/
    fclose(p); 
    if(booknumber==0)
      {
      printf("沒有任何圖書資訊!\n\n");
      }
    else
      {
      for(m=0;m<booknumber-1;m++)
        for(n=m+1;n<booknumber;n++)
          if(strcmp(bookinfo[m].name,bookinfo[n].name)>0)
            {
            temp=bookinfo[m];
            bookinfo[m]=bookinfo[n];
            bookinfo[n]=temp;   
            }
      p=fopen("c:\\bookinfo.data","wb");
      for(m=0;m<booknumber;m++)
        fwrite(&bookinfo[m],sizeof(BOOKINFO),1,p);
      fclose(p);       
      printf("\n\n完成排序!\n\n");     
      }
    printf("按任意鍵回到主菜單!\n");
    getch(); 
}

void choice_6_display_high_price()/*根據價格列出圖書資訊*/
{
    float price;
    FILE *p;
    int n;
    int count=0;
    BOOKINFO bookinfo[100];
    int booknumber;
   
    system("cls");
    printf("請輸入價格:");
    scanf("%f",&price);
    p=fopen("c:\\bookinfo.data","rb");
    booknumber=0;
    while(!feof(p))
      {
      fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
      booknumber++;   
      }
    booknumber--;/*使用feof()函數會多讀一行,因此需要booknumber自減一次,使書目的數量正確*/
    fclose(p); 
    if(booknumber==0)
      {
      printf("沒有任何圖書資訊!\n\n");
      }
    else
      {
      for(n=0;n<booknumber;n++)
        {
        if(bookinfo[n].price>=price)
          count++;
        }
      if(count==0)
        printf("書庫中沒有比%.1f$價格高的圖書!",price);
      else
        {
        printf("                          價格高於%.1f$的圖書資訊如下\n",price);
        printf("                   圖書資訊                |         借書人資訊   \n");
        printf("編號  名稱        單價    作者    圖書狀態 | 姓名        性別    學號\n");
        for(n=0;n<booknumber;n++)
          {
          if(bookinfo[n].price>=price)
            printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
                                        bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
                                        bookinfo[n].lendersex,bookinfo[n].lendernum);                                   

          }
        }
      } 
    printf("\n\n按任意鍵回到主菜單!\n");
    getch(); 
    }
void choice_7_display_according_exitflag()/*根據存在狀態列出圖書資訊*/
{
    FILE *p;
    int n;
    int count=0;
    BOOKINFO bookinfo[100];
    int booknumber;
   
    system("cls");
    booknumber=0;
    p=fopen("c:\\bookinfo.data","rb");
    while(!feof(p))
      {
      fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
      booknumber++;   
      }
    booknumber--; 
    fclose(p);
    if(booknumber==0)
      {
      printf("書庫中沒有任何書目存在!\n");
      }   
    else
      {
      for(n=0;n<booknumber;n++)
        if(bookinfo[n].isExit==1)
          count++;
      if(count==0)
        printf("書庫中的書籍全部借出!\n");       
      else
        {
        printf("書庫中未被借出的圖書資訊如下:\n\n");
        printf("                   圖書資訊                |         借書人資訊   \n");
        printf("編號  名稱        單價    作者    圖書狀態 | 姓名        性別    學號\n");
        for(n=0;n<booknumber;n++)
          if(bookinfo[n].isExit==1)
            {
            printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
                                        bookinfo[n].auther,bookinfo[n].isExit,bookinfo[n].lendername,
                                        bookinfo[n].lendersex,bookinfo[n].lendernum);   

            }   
        }  
      } 
    printf("\n按任意鍵返回主菜單!\n");
    getch(); 
}

void main()
{
    char choice;
    clock_t tm;
    FILE *p;
    if((p=fopen("c:\\bookinfo.data","rb"))==NULL)
      {
      p=fopen("c:\\bookinfo.data","wb");  
      fclose(p);
      }
    while(1)
      {
      system("cls");
      menu();
      choice=getch();
      switch(choice)
        {
        case '1':choice_1_input_new();break;/*輸入新進的圖書資訊*/
        case '2':choice_2_display_all();break;/*顯示全部圖書資訊*/
        case '3':choice_3_search_according_name();break;/*根據圖書名稱顯示圖書的資訊*/
        case '4':choice_4_delete_according_name();break;/*根據圖書名稱對圖書資訊進行刪除*/
        case '5':choice_5_sort_according_name();break;/*根據圖書名稱排序*/
        case '6':choice_6_display_high_price();break;/*根據價格列出圖書資訊*/
        case '7':choice_7_display_according_exitflag();break;/*根據存在狀態列出圖書資訊*/
        case '8':printf("\n\n\t\t\t謝謝使用,再見!\n\t\t\t按任意鍵退出!\n");getch();return;
        default:
                printf("\n\n\t\t\t請輸入菜單中的數字!(1~8)");   
                tm=clock();
                while(clock()<tm+1800);
                break;
        }   
      }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.