最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++使用鏈表實現(xiàn)圖書管理系統(tǒng)

 更新時間:2022年03月12日 12:47:08   作者:唄  
這篇文章主要介紹了C++使用鏈表實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue + element ui實現(xiàn)錨點定位的具體代碼,供大家參考,具體內(nèi)容如下

一、程序?qū)崿F(xiàn)功能

1.錄入書籍:將書籍錄入圖書管理系統(tǒng)

2.瀏覽書籍:查看圖書管理系統(tǒng)里的所有書籍

3.借閱書籍:書籍存在可以借閱,庫存-1,書的庫存不足則無法借閱

4.歸還書籍:庫存+1,如果該書不是圖書館里的書籍,則無法錄入

5.刪除書籍:以書名為基礎(chǔ)從圖書管理系統(tǒng)中刪除該書籍

6.查找書籍:按書名查找書籍,顯示書籍的基本信息

7.排序書籍:按價格將書籍排序(降序)

二、要求

使用函數(shù)、指針和鏈表編寫。

三、程序功能圖

四、具體函數(shù)

五、程序代碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
?
struct bookinfo
{
?? ?char name[20]; ? //書名
?? ?char author[10]; //作者
?? ?char date[20]; ? //出版日期
?? ?float price; ? ? //價格
?? ?int num; ? ? ? ? //數(shù)量
};
?
struct Node
{
?? ?struct bookinfo data;
?? ?struct Node* next;
};
?
/*全局鏈表*/
struct Node* list = NULL;
?
/*創(chuàng)建表頭*/
struct Node* createhead()
{
?? ?/*動態(tài)內(nèi)存申請*/
?? ?struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
? ? headNode->next = NULL;
?? ?return headNode;
}
?
/*創(chuàng)建節(jié)點*/
struct Node* createNode(struct bookinfo data)
{
?? ?struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
?? ?newNode->data = data;
?? ?newNode->next = NULL;
?? ?return newNode;
}
?
void printList();
void display_menu();
void savebookfile();
void insertbook();
void readbookfile();
void deletebook();
struct Node* searchbook();
void sortbook();
void selectkey();
?
/*打印鏈表*/
void printList(struct Node* headNode)
{
?? ?struct Node* Bmove = headNode->next;
?? ?printf("書名\t作者\t出版日期\t價格\t庫存\n");
?? ?while(Bmove != NULL)
?? ?{
?? ??? ?printf("%s\t%s\t%s\t%.1f\t%d\n",Bmove->data.name,Bmove->data.author,Bmove->data.date,Bmove->data.price,Bmove->data.num);
?? ??? ?Bmove = Bmove->next;
?? ?}
?
}
?
/*菜單登錄界面*/
void display_menu()
{
?? ?char str[100];
?? ?FILE *fp;
?? ?char *txt;
?? ?fp = fopen("menu.txt","r");
?? ?txt = fgets(str,100,fp);
?? ?while(txt != NULL)
?? ?{
? ? printf("%s",str);
?? ?txt = fgets(str,100,fp);
?? ?}
?? ?fclose(fp);
}
?
/*將信息存到文件中*/
void savebookfile(const char* filename,struct Node* headNode)
{
?? ?FILE* fp = fopen(filename,"w");
? ? struct Node* Bmove = headNode->next;
?? ?while(Bmove != NULL)
?? ?{
?? ??? ?fprintf(fp,"%s\t%s\t%s\t%.1f\t%d\n",Bmove->data.name,Bmove->data.author,Bmove->data.date,Bmove->data.price,Bmove->data.num);
?? ? ? ?Bmove = Bmove->next;
?? ?}
?? ?fclose(fp);
}
?
/*錄入書籍*/
void insertbook(struct Node* headNode,struct bookinfo data)
{
?? ?struct Node* newNode = createNode(data);
?? ?newNode->next = headNode->next;
?? ?headNode->next = newNode;
?
}
?
/*讀取文件*/
void readbookfile(const char* filename, struct Node* headNode)
{ ??
?? ?FILE* fp = fopen(filename,"r");
? ? if(fp == NULL)
?? ?{
?? ??? ?fp = fopen(filename,"w+");
?? ?}
?? ?struct bookinfo tempinfo;
?? ?while(fscanf(fp, "%s\t%s\t%s\t%.1f\t%d\n",tempinfo.name,&tempinfo.author,&tempinfo.date,&tempinfo.price,&tempinfo.num ) != EOF)
?? ?{
?? ??? ?insertbook(list,tempinfo);
?? ?}
?? ?fclose(fp);
}
?
/*刪除書籍*/
void deletebook(struct Node* headNode,char *bookname)
{
?? ?struct Node* leftNode = headNode;
?? ?struct Node* rightNode = headNode->next;
?? ?while(rightNode != NULL && strcmp(rightNode->data.name,bookname))
?? ?{
?? ??? ?leftNode = rightNode;
?? ??? ?rightNode = leftNode->next;
?? ?}
?? ?if(leftNode == NULL)
?? ?{
?? ??? ?return;
?? ?}
?? ?else
?? ?{
? ? ? ? printf("刪除書籍成功!\n");
?? ??? ?leftNode->next = rightNode->next;
?? ??? ?free(rightNode);
?? ??? ?rightNode = NULL;
?? ?}
}
?
/*查找書籍*/
struct Node* searchbook(struct Node* headNode, char* bookname)
{
?? ?struct Node* rightNode = headNode->next;
?? ?while (rightNode != NULL && strcmp(rightNode->data.name, bookname))
?? ?{
?? ??? ?rightNode = rightNode->next;
?? ?}
?? ?return rightNode;
}
?
/*排序書籍*/
void sortbook(struct Node* headNode)
{
?? ?for(struct Node* i = headNode->next; i != NULL; i = i->next)
?? ?{
?? ??? ?for(struct Node* j = headNode->next;j->next != NULL;j = j->next)
?? ??? ?{
?? ??? ??? ?/*排序書籍(按價格降序)*/
?? ??? ??? ?if (j->data.price < j->next->data.price)?
?? ??? ??? ?{
?? ??? ??? ??? ?/*交換值*/
?? ??? ??? ??? ?struct bookinfo tempdata = j->data;
?? ??? ??? ??? ?j->data = j->next->data;
?? ??? ??? ??? ?j->next->data = tempdata;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?/*排序后查看效果*/
?? ?printList(headNode);
}
?
/*交互界面*/
void selectkey()
{
?? ?int userkey = 0;
?? ?struct bookinfo tempbook; ?//生成一個臨時的變量存儲書籍信息
?? ?struct Node* searchname = NULL; //生成一個臨時變量存儲查找的書名
?? ?struct Node* borrowbook = NULL; //生成一個臨時變量存儲要借閱的書名
? ? struct Node* returnbook = NULL; //生成一個臨時變量存儲要歸還的書名
?? ?scanf("%d",&userkey);
?? ?switch(userkey)
?? ?{
?? ?case 1:
?? ??? ?printf("[ 錄入書籍 ]\n");
?? ??? ?printf("輸入書籍的信息(name,author,date,price,num):");
? ? ? ? scanf("%s%s%s%f%d",tempbook.name,&tempbook.author,&tempbook.date,&tempbook.price,&tempbook.num);
?? ??? ?insertbook(list,tempbook);
?? ??? ?/*把書籍信息保存到booksinfo文本文件里*/
?? ??? ?savebookfile("bookinfo.txt",list);
?? ??? ?break;
?? ?case 2:
?? ??? ?printf("[ 瀏覽書籍 ]\n");
?? ??? ?printList(list);
?? ??? ?break;
?? ?case 3:
?? ??? ?printf("[ 借閱書籍 ]\n"); ? /*書籍存在可以借閱,庫存-1,書的庫存不足則無法借閱*/
?? ??? ?printf("請輸入要借閱的書名:");
? ? ? ? scanf("%s",tempbook.name);
?? ??? ?borrowbook = searchbook(list,tempbook.name);
?? ??? ?if(borrowbook == NULL)
?? ??? ?{
?? ??? ??? ?printf("不存在該書,無法借閱!\n");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?if(borrowbook->data.num > 0)
?? ??? ??? ?{
?? ??? ??? ??? ?borrowbook->data.num--;
?? ??? ??? ??? ?printf("借閱成功!\n");
? ? ? ? ? ? ? ? printList(list);
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?printf("當(dāng)前書籍庫存不足,借閱失敗!\n");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?break;
?? ?case 4:
?? ??? ?printf("[ 歸還書籍 ]\n"); ?//庫存+1
?? ??? ?printf("請輸入要歸還的書名:");
? ? ? ? scanf("%s",tempbook.name);
?? ??? ?returnbook = searchbook(list,tempbook.name);
?? ??? ?if(returnbook == NULL)
?? ??? ?{
?? ??? ??? ?printf("該書不是圖書館里的書籍!\n");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?returnbook->data.num++;
?? ??? ??? ?printf("書籍歸還成功!\n");
?? ??? ??? ?printList(list);
?? ??? ?}
?? ??? ?break;
?? ?case 5:
?? ??? ?printf("[ 刪除書籍 ]\n");
?? ??? ?printf("請輸入要刪除的書名:");
?? ??? ?scanf("%s",tempbook.name);?
? ? ? ? deletebook(list,tempbook.name); ? ?/*按書名刪除書籍*/
?? ??? ?printList(list);
?? ??? ?break;
?? ?case 6:
?? ??? ?printf("[ 查找書籍 ]\n");
?? ??? ?printf("請輸入要查詢的書名:");
?? ??? ?scanf("%s",tempbook.name);
?? ??? ?searchname = searchbook(list,tempbook.name);
?? ??? ?if(searchname == NULL)
?? ??? ?{
?? ??? ??? ?printf("不存在該書,請加購錄入!\n");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?/*輸出該書的信息*/
?? ??? ??? ?printf("書名\t作者\t出版日期\t價格\t庫存\n");
?? ??? ??? ?printf("%s\t%s\t%s\t%.1f\t%d\n",searchname->data.name,searchname->data.author,searchname->data.date,searchname->data.price,searchname->data.num);
?? ??? ?}
?? ??? ?break;
?? ?case 7:
?? ??? ?printf("[ 排序書籍 ]\n"); /*按價格排序(降序)*/
? ? ? ? sortbook(list);
?? ??? ?break;
?
?? ?case 8:
?? ??? ?printf("[ 退出系統(tǒng) ]\n");
?? ??? ?printf("退出成功\n");
?? ??? ?system("pause");
?? ??? ?exit(0); ? ? ? ? ? ? /*關(guān)閉整個程序*/
?? ??? ?break;
?? ?default:
?? ??? ?printf("[ 錯誤 ]\n");
?? ??? ?break;
?? ?}
}
?
/*主界面*/
int main()
{
?? ?list = createhead();
?? ?readbookfile("bookinfo.txt",list);
?? ?while(1)
?? ?{
?? ??? ?display_menu();
?? ??? ?selectkey();
?? ??? ?system("pause");
?? ??? ?system("cls");
?? ?}
? ? system("pause");
?? ?return 0;
}

六、效果

1.錄入書籍

2.瀏覽書籍

3.借閱書籍

存在該書時,借閱成功,庫存-1:

不存在該書時,無法借閱:

4.歸還書籍

當(dāng)圖書管理系統(tǒng)里本不存在該書,則歸還失?。?/p>

5.查找書籍

不存在該書時,則查找失?。?/p>

6.排序書籍

再錄入書籍:

排序(降序):

7.刪除書籍

以上為該程序的所有功能。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++中約數(shù)定理的實例詳解

    C++中約數(shù)定理的實例詳解

    這篇文章主要介紹了C++中約數(shù)定理的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C++?setw()函數(shù)的具體使用

    C++?setw()函數(shù)的具體使用

    本文主要介紹了C++?setw()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 使用C語言編寫鋼琴小程序

    使用C語言編寫鋼琴小程序

    這篇文章主要為大家詳細介紹了使用C語言編寫鋼琴小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • C/C++函數(shù)參數(shù)傳遞機制詳解及實例

    C/C++函數(shù)參數(shù)傳遞機制詳解及實例

    這篇文章主要介紹了C/C++函數(shù)參數(shù)傳遞機制詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 將Deepseek接入本地Vscode的圖文步驟

    將Deepseek接入本地Vscode的圖文步驟

    本文主要介紹了將Deepseek接入本地Vscode的圖文步驟,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 詳解C++ 內(nèi)存對齊

    詳解C++ 內(nèi)存對齊

    這篇文章主要介紹了C++ 內(nèi)存對齊的相關(guān)資料,幫助大家更好的理解和使用c++編程語言,感興趣的朋友可以了解下
    2021-01-01
  • C++類中如何使用定義的類型別名

    C++類中如何使用定義的類型別名

    這篇文章主要介紹了C++類中如何使用定義的類型別名,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++可變參數(shù)的函數(shù)與模板實例分析

    C++可變參數(shù)的函數(shù)與模板實例分析

    這篇文章主要介紹了C++可變參數(shù)的函數(shù)與模板,非常重要的概念,需要的朋友可以參考下
    2014-08-08
  • 淺析C++11新特性的Lambda表達式

    淺析C++11新特性的Lambda表達式

    C++11 新增了很多特性,lambda 表達式是其中之一,本文涉及到C++11這次更新中較為重要的lambda表達式。有需要的朋友們可以參考學(xué)習(xí)。
    2016-08-08
  • C語言中函數(shù)與指針的應(yīng)用總結(jié)

    C語言中函數(shù)與指針的應(yīng)用總結(jié)

    本篇文章是對C語言中函數(shù)與指針的應(yīng)用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

溧水县| 台山市| 兴义市| 陵川县| 南靖县| 贺兰县| 阆中市| 平南县| 和林格尔县| 莫力| 庆城县| 腾冲县| 南江县| 沂源县| 铁岭市| 岑巩县| 沈阳市| 蓝山县| 白河县| 湘乡市| 济源市| 蓬安县| 普兰县| 双辽市| 新竹市| 探索| 余干县| 永福县| 涪陵区| 安陆市| 绩溪县| 美姑县| 营山县| 石狮市| 秦安县| 宜春市| 灵武市| 渑池县| 鞍山市| 安龙县| 广元市|