首頁 > 軟體

C語言實現圖書管理系統課程設計

2022-07-22 14:00:35

本文範例為大家分享了C語言實現圖書管理系統的具體程式碼,供大家參考,具體內容如下

設計要求

設計圖書管理系統

要求如下:

1.對書名,作者,編號,出版單位,出版日期,類別,存放位置進行新增、刪除、修改
2.查詢相關資訊
3.儲存所有資訊

實現程式碼

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
typedef struct book                                             /*定義結構體*/
{
    char bookname[100] ;        /*書名*/
    char writer[100];           /*作者*/
    char classnumber[100];      /*編號*/
    char publisher[100];        /*出版單位*/

    char time[100];             /*出版日期*/
    char  type[100];                /*類別*/ 
    char   place[100];              /*存放位置*/
      struct  book *next;
}Book;

int mima()
{
    int i=0;
    char user[10]="aa";
    char Code[10]="123456";
    char getuser[10];
    char Getskey[10];

    while(1)
    {
        printf("ttt請輸入賬號:");
        scanf("%s",getuser);
        printf("ttt請輸入密碼:");
        while(1)
        {
            Getskey[i]=getch();
            if(Getskey[i]=='r')
                break;
            else if(Getskey[i]=='b')
            {
                if(i==0)
                    continue;
                printf("b");
                printf(" ");
                printf("b");
                i--;
            }
            else
            {
                printf("*");
                i++;
            }
        }
        Getskey[6]='';
        if(strcmp(user, getuser)==0&&strcmp(Code, Getskey)==0)
            return 1;
        else
        {
            printf("nnttt賬號不存在或密碼輸入錯誤,請重新輸入n");
            i = 0;
        }
    }
}

void showmenu1()                                                /*顯示管理員選單*/ 
{
    system("cls");
    printf("nnnnn");

    printf("t                                                          n");
    printf("t                 歡迎來到圖書資訊管理系統                 n");
    printf("t                                                          n");
    printf("t                                                          n");
    printf("t                          主選單                          n");
    printf("t                                                          n");
    printf("t                     1.錄入圖書資訊                       n");
    printf("t                                                          n");
    printf("t                     2.刪除圖書資訊                       n");          
    printf("t                                                          n");
    printf("t                     3.修改圖書資訊                       n");
    printf("t                                                          n");
    printf("t                     4.查詢圖書資訊                       n");
    printf("t                                                          n");
    printf("t                     5.顯示所有圖書資訊                   n");        
    printf("t                                                          n");
    printf("t                     6.返回登入介面                       n");
    printf("t                                                          n");
    printf("t                     7.儲存資料並退出系統                 n"); 
    printf("t                                                          n");
}

void showmenu2()                                                /*顯示遊客選單*/ 
{
    system("cls");
    printf("nnnnn");
       printf("t                                                          n");
       printf("t                 歡迎來到圖書資訊管理系統                 n");
       printf("t                                                          n");
       printf("t                                                          n");
    printf("t                          主選單                          n");
    printf("t                                                          n");
    printf("t                     1.查詢圖書資訊                       n");
    printf("t                                                          n");
    printf("t                     2.顯示所有圖書資訊                   n");        
       printf("t                                                          n");
       printf("t                     3.返回登入介面                       n");
       printf("t                                                          n");
    printf("t                     4.退出系統                           n"); 
       printf("t                                                          n");
}

int savebookdata(Book *head)                                    /*將資料儲存到檔案中*/
{
    Book *p;
    FILE*fp;
    fp=fopen("D:\java\zuoye.txt","w");
    p=head->next;
    do
    {
        fprintf(fp,"%st",p->bookname);         /* 把這個結點的資料全部寫入至檔案內由於next指標不需要寫入至檔案,*/
        fprintf(fp,"%st",p->writer);          /*因此,資料大小就是sizeof(book)-sizeof(book*)總資料大小減去指標的大小 */
        fprintf(fp,"%st",p->classnumber);
        fprintf(fp,"%st",p->publisher);
        fprintf(fp,"%st",p->time);
        fprintf(fp,"%st",p->type);
        fprintf(fp,"%stn",p->place);
        fprintf(fp,"n");
        p=p->next;                 /*轉換到下一個結點*/
    }while(p!=NULL);
    fclose(fp);
    return 0;
}

void addnewbook(Book **head)                                    /*錄入圖書資訊*/
{
    int i;
    Book *p,*s;
    system("cls");
    if(*head == NULL) {                 /* 如果表頭為空,先為它分配記憶體 */
        *head = (Book *)calloc(1, sizeof(Book));
        p = *head;
    } else {                            /* 否則,就說明有內容,直接切換到尾結點 */
        p = *head;
        while(p->next) 
        p = p->next; 
    }
    printf("nnn");
    printf("t※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
    printf("ttt請問新增幾本書:"); 
    scanf("%d",&i);
    printf("t--------------------------------------------------------n");
    while(i)
    {
        s = (Book *)calloc(1, sizeof(Book));                        /*為這個結點分配記憶體 */
        printf("ttt請輸入書名:");
        scanf("%s",s->bookname);
        printf("t--------------------------------------------------------n");
        printf("ttt請輸入作者:");
        scanf("%s",s->writer);
        printf("t--------------------------------------------------------n");
        printf("ttt請輸入編號:");
        scanf("%s",s->classnumber);
        printf("t--------------------------------------------------------n");
        printf("ttt請輸入出版單位:");
        scanf("%s",s->publisher);
        printf("t--------------------------------------------------------n");
        printf("ttt請輸入出版日期:");
        scanf("%s",s->time);
        printf("t--------------------------------------------------------n");
        printf("ttt請輸入類別:");
        scanf("%s",s->type);
        printf("t--------------------------------------------------------n");
        printf("ttt請輸入存放位置:");
        scanf("%s",s->place);
        printf("t--------------------------------------------------------n");

        printf("n");
        printf("t--------------------------------------------------------n");
        i--;
            
        p->next=s;    /*儲存輸進去的這個結點*/
        p=p->next;    /*切換到下一個結點*/ 
        p->next=NULL; /*最後一個結點為NULL*/
    }
            
    printf("ttt圖書新增成功!!!n");
    system("pause");
}

int readbookdata(Book **head)                                   /*將資料從檔案中讀取*/ 
{
    int n;
    Book *s, *p;
    FILE *fp;
    
    fp=fopen("d:\java\zuoye.txt","r");
    /* 如果檔案開啟失敗,就返回-1 */
    if(NULL == fp) { 
        *head = NULL; 
        return -1;
    } 
     
    *head = (Book *)calloc(1, sizeof(Book));
    p = *head; 
     
      while (!feof(fp))
    {
        s = (Book *)calloc(1, sizeof(Book));                    /* 為下個結點分配記憶體空間 */
        fscanf(fp,"%s",s->bookname);
        fscanf(fp,"%s",s->writer);
        fscanf(fp,"%s",s->classnumber);
        fscanf(fp,"%s",s->publisher);
        fscanf(fp,"%s",s->time);
        fscanf(fp,"%s",p->type);
        fscanf(fp,"%sn",p->place);
        p->next=s;   /*儲存該結點*/
        p=p->next;   /*切換到下一個結點*/
        p->next=NULL; /*保證最後一個結點為NULL*/
    }
     
    fclose(fp);/* 關閉檔案 */
    return 0; 
}

void deletebook(Book *head)                                     /*刪除圖書資訊*/
{
    system("cls");
    int flag=0;
    char name[100],ch[10];
    Book *p,*t;
    
    /* 如果表頭為空 */
    if(head == NULL || head->next == NULL) {
        printf("沒有記錄圖書資訊!n");
        system("pause");
        return;
    }
    
    p=head;
    printf("nnn");
    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
    printf("請輸入要刪除的書名;");
    scanf("%s",&name);
    printf("----------------------------------------------------------------------n");
    printf("書名tt作者名tt編號t出版單位t出版時間t類別t存放位置n");   
    printf("----------------------------------------------------------------------n");                                                                                                                                    
    while(p->next)
    {
        t=p;
        p=p->next;                                               /*轉換到下一個結點*/
        if(strcmp(name,p->bookname)==0)
        {
            flag=1;
            printf("%st%st%st%st%st%st%sn",p->bookname,p->writer,p->classnumber,p->publisher,p->time,p->type,p->place);
            break;
        }
    }
     
    if(flag==1)
    {
        printf("是否刪除該本圖書資訊(y/n)");
        scanf("%s",ch);
        printf("----------------------------------------------------------------------n");
        if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
        {
            t->next=p->next;
            printf("該書已刪除!n");
        }
        else
            return;
    }
    else if(flag==0)
        printf("沒找到那本書!n");
    
    system("pause");
}

void modifybook(Book *head)                                     /*修改圖書資訊*/
{
    system("cls");
    int flag=0;
    char name[100],ch[10];
    Book *p,*t;
    
    /* 如果表頭為空 */
    if(head == NULL || head->next == NULL) {
        printf("沒有記錄圖書資訊!n");
        system("pause");
        return ;
    }
    
    p=head;
    
    printf("nnn");
    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
    printf("請輸入要修改的書名:");
    scanf("%s",name);
    printf("--------------------------------------------------------------------n");

    while(p->next)
    {
        p=p->next;                 /*切換到下一個結點*/
        if(strcmp(name,p->bookname)==0)
        {
            flag=1;
            t=p;
            printf("書名tt作者名tt編號t出版單位t出版時間t類別t存放位置n");   
            printf("--------------------------------------------------------------------n");
            printf("%st%st%st%st%st%st%snn",p->bookname,p->writer,p->classnumber,p->publisher,p->time,p->type,p->place);
        }
    }
    
    if(flag==1)
    {
        printf("--------------------------------------------------------------------n");
        printf("tt是否修改該本圖書資訊(y/n):");
        scanf("%s",ch);
        printf("t--------------------------------------------------------------------n");
        if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
        {
            int c;
            printf("tt【1】書名n");
            printf("--------------------------------------------------------------------n");
            printf("tt【2】作者n");
            printf("--------------------------------------------------------------------n");
            printf("tt【3】編號n");
            printf("--------------------------------------------------------------------n");
            printf("tt【4】出版單位n");
            printf("--------------------------------------------------------------------n");
            printf("tt【5】出版日期n");
            printf("--------------------------------------------------------------------n");
            printf("tt【6】類別n");
            printf("--------------------------------------------------------------------n");
            printf("tt【7】存放位置n");
            printf("--------------------------------------------------------------------n");

            printf("t請輸入你要修改的內容;");
            scanf("%d",&c);
            printf("--------------------------------------------------------------------n");
            p=t;
            switch(c)
            {
                case 1:
                    printf("t請輸入書名:");
                    scanf("%s",p->bookname);
                    break;
                case 2:
                    printf("t請輸入作者:");
                    scanf("%s",p->writer);
                    break;
                case 3:
                    printf("t請輸入編號:");
                    scanf("%s",p->classnumber);
                    break;
                case 4:
                    printf("t請輸入出版單位:");
                    scanf("%s",p->publisher);
                    break;
                case 5:
                    printf("t請輸入出版日期:");
                    scanf("%s",p->time);
                    break;
                case 6:
                    printf("t請輸入類別:");
                    scanf("%s",p->type);
                    break;
                     case 7:
                    printf("t請輸入存放位置:");
                    scanf("%s",p->place);
                    break;
            }
            printf("--------------------------------------------------------------------n");
            printf("t恭喜大佬修改成功!!!n");
        }
    }
    
    else if(flag==0)
        printf("對不起,該書庫沒有該書n");
        system("pause");
}

void searchbook(Book *head)                                     /*查詢圖書資訊*/
{
    system("cls");
    int choose,flag=0;
    Book *p;
    char b[100];
    
    /* 如果表頭為空 */
    if(head == NULL || head->next == NULL) {
        printf("沒有記錄圖書資訊!n");
        system("pause");
        return ;
    }
    
    do
    {
        system("cls");
        printf("nnn");
        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
        printf("tt1.按書名查詢n");
        printf("----------------------------------------------------------------------n");
        printf("tt2.按作者名查詢n");
        printf("----------------------------------------------------------------------n");
        printf("tt3.按編號查詢n");
        printf("----------------------------------------------------------------------n");
        printf("tt4.按出版單位查詢n");
        printf("----------------------------------------------------------------------n");
        printf("tt返回主選單(其他數位)n");
        printf("----------------------------------------------------------------------n");
        printf("tt請輸入您的選擇:");
        scanf("%d",&choose);
        printf("----------------------------------------------------------------------n");
        p=head;
        
        if(choose==1)
        {
            printf("輸入所查書名:");
            scanf("%s",b);
            printf("----------------------------------------------------------------------nn");
            while(p->next)
            {
                p=p->next;                           /*轉換到下一個結點*/
                if(strcmp(b,p->bookname)==0)         /*判斷是否找到並輸出*/
                {
                     flag=1;
                     printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
                     printf("書名t作者名t編號t出版單位t出版時間t類別t存放位置n");   
                         printf("----------------------------------------------------------------------n");
                     printf("%st%st%st%st%st%st%sn",p->bookname,p->writer,p->classnumber,p->publisher,p->time,p->type,p->place);
                }
            }
            if(flag==0)
                     printf("不存在該資訊n");
        }
        
        else if(choose==2)
        {
            printf("輸入所查作者名:");
            scanf("%s",b);
            printf("----------------------------------------------------------------------nn");
            while(p->next)
            {
                p=p->next;                         /*轉換到下一個結點*/
                if(strcmp(b,p->writer)==0)         /*判斷是否找到並輸出*/
                {
                    flag=1;
                    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
                    printf("書名t作者名t編號t出版單位t出版時間t類別t存放位置n");   
                    printf("----------------------------------------------------------------------n");
                    printf("%st%st%st%st%st%st%sn",p->bookname,p->writer,p->classnumber,p->publisher,p->time,p->type,p->place);
                }
            }
            if(flag==0)
                    printf("不存在該資訊n");
        }
        else if(choose==3)
        {
            printf("輸入所查編號:");
            scanf("%s",b);
            printf("----------------------------------------------------------------------nn");
            while(p->next)
            {
                p=p->next;                         /*轉換到下一個結點*/
                if(strcmp(b,p->classnumber)==0)         /*判斷是否找到並輸出*/
                {
                    flag=1;
                    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
                    printf("書名t作者名t編號t出版單位t出版時間t類別t存放位置n");   
                    printf("----------------------------------------------------------------------n");
                    printf("%st%st%st%st%st%st%sn",p->bookname,p->writer,p->classnumber,p->publisher,p->time,p->type,p->place);
                }
            }
            if(flag==0)
                    printf("不存在該資訊n");
        }
        else if(choose==4)
        {
            printf("輸入所查出版單位:");
            scanf("%s",b);
            printf("----------------------------------------------------------------------nn");
            while(p->next)
            {
                p=p->next;                         /*轉換到下一個結點*/
                if(strcmp(b,p->publisher)==0)         /*判斷是否找到並輸出*/
                {
                    flag=1;
                    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
                    printf("書名t作者名t編號t出版單位t出版時間t類別t存放位置n");   
                    printf("----------------------------------------------------------------------n");
                    printf("%st%st%st%st%s%st%sn",p->bookname,p->writer,p->classnumber,p->publisher,p->time,p->type,p->place);
                }
            }
            if(flag==0)
                    printf("不存在該資訊n");
        }        
        else
            return;
        system("pause");
    }while(1);
}

int printfbook(Book *head)                                     /*顯示所有圖書資訊*/          
{
    Book *p;
    system("cls");
    
    /* 如果表頭為空 */
    if(head == NULL || head->next == NULL) {
        printf("沒有記錄圖書資訊!n");
        system("pause");
        return 0;
    }
    
    p=head->next;
    printf("nnn");
    printf("**********************************************************************************n");
    printf("                                       圖書列表                                   n");
    printf("----------------------------------------------------------------------------------n");
    printf("書名t作者t編號t出版單位t出版時間t類別t存放位置n");   
    printf("----------------------------------------------------------------------------------n");
    
    do
    {
        printf("%st%st%st%st%st%st%snn",p->bookname,p->writer,p->classnumber,p->publisher,p->time,p->type,p->place);
        p=p->next;                           /*轉換到下一個結點*/
    }while(p!=NULL);
    
    system("pause");
}

int main(void)
{
    system("cls");
    Book *head=NULL;
    readbookdata(&head);
    int choice,z,c;
    printf("nnn");
    printf("t※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
    printf("ttt歡迎光臨圖書資訊管理系統n");
    printf("t--------------------------------------------------------n");
    printf("ttt【1】遊客n");
    printf("ttt【2】管理員n");
    printf("ttt【3】退出系統n");
    printf("t--------------------------------------------------------n");
    while(printf("ttt請選擇身份:")&&scanf("%d",&c)!=EOF)
    {
        if(c==1)
        {
            showmenu2();
            while (printf("t請輸入選擇項(1-3):")&&scanf("%d",&choice)!=EOF)
            {
                switch (choice)
                {
                    case 1:                                                /*查詢圖書資訊*/
                        searchbook(head);
                        break;
                    case 2:                                                /*顯示所有圖書資訊*/
                        printfbook(head);
                        break; 
                    case 3:                                                /*返回登入介面*/
                        main();
                        break;
                    case 4:
                        exit(0); 
                    default:
                        printf("t輸入錯誤!!!n");
                        system("pause");
                        break;
                }
                showmenu2();
            }
        }
        else if(c==2)
        {
            z=mima();
            showmenu1();
            while (printf("t請輸入選擇項(1-6):")&&z==1&&scanf("%d",&choice)!=EOF)
            {
                switch (choice)
                {
                    case 1:                                                /*錄入圖書資訊*/
                        addnewbook(&head);
                        break;  
                    case 2:                                                /*刪除圖書資訊*/
                        deletebook(head);
                        break;
                    case 3:                                                /*修改圖書資訊*/
                        modifybook(head);
                            break;
                    case 4:                                                /*查詢圖書資訊*/
                        searchbook(head);
                        break;
                    case 5:                                                /*顯示所有圖書資訊*/
                        printfbook(head);
                        break;
                    case 6:                                                /*返回登入介面*/
                        main();
                        break; 
                    case 7:                                                /*儲存資料並退出系統*/
                        savebookdata(head);
                        exit(0);
                    default:
                        printf("t輸入錯誤!!!n");
                        system("pause");
                        break;
                }
                showmenu1();
            }
        }
        else if(c==3)
            exit(0);
        else
        {
            printf("ttt輸入錯誤!!!nn");
        }
    }
    return 0;
}

執行結果

這裡提供的是管理員身份

這裡提供遊客身份(供選擇的功能相對管理員少)

後面大家就可以自行輸入對應功能前的序號,實現此係統的功能

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com