欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

3.借閱書(shū)籍:書(shū)籍存在可以借閱,庫(kù)存-1,書(shū)的庫(kù)存不足則無(wú)法借閱

4.歸還書(shū)籍:庫(kù)存+1,如果該書(shū)不是圖書(shū)館里的書(shū)籍,則無(wú)法錄入

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

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

7.排序書(shū)籍:按價(jià)格將書(shū)籍排序(降序)

二、要求

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

三、程序功能圖

四、具體函數(shù)

五、程序代碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
?
struct bookinfo
{
?? ?char name[20]; ? //書(shū)名
?? ?char author[10]; //作者
?? ?char date[20]; ? //出版日期
?? ?float price; ? ? //價(jià)格
?? ?int num; ? ? ? ? //數(shù)量
};
?
struct Node
{
?? ?struct bookinfo data;
?? ?struct Node* next;
};
?
/*全局鏈表*/
struct Node* list = NULL;
?
/*創(chuàng)建表頭*/
struct Node* createhead()
{
?? ?/*動(dòng)態(tài)內(nèi)存申請(qǐng)*/
?? ?struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
? ? headNode->next = NULL;
?? ?return headNode;
}
?
/*創(chuàng)建節(jié)點(diǎn)*/
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("書(shū)名\t作者\(yùn)t出版日期\t價(jià)格\t庫(kù)存\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);
}
?
/*錄入書(shū)籍*/
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);
}
?
/*刪除書(shū)籍*/
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("刪除書(shū)籍成功!\n");
?? ??? ?leftNode->next = rightNode->next;
?? ??? ?free(rightNode);
?? ??? ?rightNode = NULL;
?? ?}
}
?
/*查找書(shū)籍*/
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;
}
?
/*排序書(shū)籍*/
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)
?? ??? ?{
?? ??? ??? ?/*排序書(shū)籍(按價(jià)格降序)*/
?? ??? ??? ?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; ?//生成一個(gè)臨時(shí)的變量存儲(chǔ)書(shū)籍信息
?? ?struct Node* searchname = NULL; //生成一個(gè)臨時(shí)變量存儲(chǔ)查找的書(shū)名
?? ?struct Node* borrowbook = NULL; //生成一個(gè)臨時(shí)變量存儲(chǔ)要借閱的書(shū)名
? ? struct Node* returnbook = NULL; //生成一個(gè)臨時(shí)變量存儲(chǔ)要?dú)w還的書(shū)名
?? ?scanf("%d",&userkey);
?? ?switch(userkey)
?? ?{
?? ?case 1:
?? ??? ?printf("[ 錄入書(shū)籍 ]\n");
?? ??? ?printf("輸入書(shū)籍的信息(name,author,date,price,num):");
? ? ? ? scanf("%s%s%s%f%d",tempbook.name,&tempbook.author,&tempbook.date,&tempbook.price,&tempbook.num);
?? ??? ?insertbook(list,tempbook);
?? ??? ?/*把書(shū)籍信息保存到booksinfo文本文件里*/
?? ??? ?savebookfile("bookinfo.txt",list);
?? ??? ?break;
?? ?case 2:
?? ??? ?printf("[ 瀏覽書(shū)籍 ]\n");
?? ??? ?printList(list);
?? ??? ?break;
?? ?case 3:
?? ??? ?printf("[ 借閱書(shū)籍 ]\n"); ? /*書(shū)籍存在可以借閱,庫(kù)存-1,書(shū)的庫(kù)存不足則無(wú)法借閱*/
?? ??? ?printf("請(qǐng)輸入要借閱的書(shū)名:");
? ? ? ? scanf("%s",tempbook.name);
?? ??? ?borrowbook = searchbook(list,tempbook.name);
?? ??? ?if(borrowbook == NULL)
?? ??? ?{
?? ??? ??? ?printf("不存在該書(shū),無(wú)法借閱!\n");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?if(borrowbook->data.num > 0)
?? ??? ??? ?{
?? ??? ??? ??? ?borrowbook->data.num--;
?? ??? ??? ??? ?printf("借閱成功!\n");
? ? ? ? ? ? ? ? printList(list);
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?printf("當(dāng)前書(shū)籍庫(kù)存不足,借閱失?。n");
?? ??? ??? ?}
?? ??? ?}
?? ??? ?break;
?? ?case 4:
?? ??? ?printf("[ 歸還書(shū)籍 ]\n"); ?//庫(kù)存+1
?? ??? ?printf("請(qǐng)輸入要?dú)w還的書(shū)名:");
? ? ? ? scanf("%s",tempbook.name);
?? ??? ?returnbook = searchbook(list,tempbook.name);
?? ??? ?if(returnbook == NULL)
?? ??? ?{
?? ??? ??? ?printf("該書(shū)不是圖書(shū)館里的書(shū)籍!\n");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?returnbook->data.num++;
?? ??? ??? ?printf("書(shū)籍歸還成功!\n");
?? ??? ??? ?printList(list);
?? ??? ?}
?? ??? ?break;
?? ?case 5:
?? ??? ?printf("[ 刪除書(shū)籍 ]\n");
?? ??? ?printf("請(qǐng)輸入要?jiǎng)h除的書(shū)名:");
?? ??? ?scanf("%s",tempbook.name);?
? ? ? ? deletebook(list,tempbook.name); ? ?/*按書(shū)名刪除書(shū)籍*/
?? ??? ?printList(list);
?? ??? ?break;
?? ?case 6:
?? ??? ?printf("[ 查找書(shū)籍 ]\n");
?? ??? ?printf("請(qǐng)輸入要查詢的書(shū)名:");
?? ??? ?scanf("%s",tempbook.name);
?? ??? ?searchname = searchbook(list,tempbook.name);
?? ??? ?if(searchname == NULL)
?? ??? ?{
?? ??? ??? ?printf("不存在該書(shū),請(qǐng)加購(gòu)錄入!\n");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?/*輸出該書(shū)的信息*/
?? ??? ??? ?printf("書(shū)名\t作者\(yùn)t出版日期\t價(jià)格\t庫(kù)存\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("[ 排序書(shū)籍 ]\n"); /*按價(jià)格排序(降序)*/
? ? ? ? sortbook(list);
?? ??? ?break;
?
?? ?case 8:
?? ??? ?printf("[ 退出系統(tǒng) ]\n");
?? ??? ?printf("退出成功\n");
?? ??? ?system("pause");
?? ??? ?exit(0); ? ? ? ? ? ? /*關(guān)閉整個(gè)程序*/
?? ??? ?break;
?? ?default:
?? ??? ?printf("[ 錯(cuò)誤 ]\n");
?? ??? ?break;
?? ?}
}
?
/*主界面*/
int main()
{
?? ?list = createhead();
?? ?readbookfile("bookinfo.txt",list);
?? ?while(1)
?? ?{
?? ??? ?display_menu();
?? ??? ?selectkey();
?? ??? ?system("pause");
?? ??? ?system("cls");
?? ?}
? ? system("pause");
?? ?return 0;
}

六、效果

1.錄入書(shū)籍

2.瀏覽書(shū)籍

3.借閱書(shū)籍

存在該書(shū)時(shí),借閱成功,庫(kù)存-1:

不存在該書(shū)時(shí),無(wú)法借閱:

4.歸還書(shū)籍

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

5.查找書(shū)籍

不存在該書(shū)時(shí),則查找失敗:

6.排序書(shū)籍

再錄入書(shū)籍:

排序(降序):

7.刪除書(shū)籍

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

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

相關(guān)文章

  • C語(yǔ)言中花式退出程序的方式總結(jié)

    C語(yǔ)言中花式退出程序的方式總結(jié)

    在本篇文章當(dāng)中主要給大家介紹C語(yǔ)言當(dāng)中一些不常用的特性,比如在main函數(shù)之前和之后設(shè)置我們想要執(zhí)行的函數(shù),以及各種花式退出程序的方式,需要的可以參考一下
    2022-10-10
  • CLion安裝、漢化、配置圖文詳解

    CLion安裝、漢化、配置圖文詳解

    這篇文章主要介紹了CLion安裝、漢化、激活、配置圖文詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 深入理解C/C++中的寫(xiě)時(shí)拷貝

    深入理解C/C++中的寫(xiě)時(shí)拷貝

    這篇文章主要給大家介紹了C/C++中寫(xiě)時(shí)拷貝的相關(guān)資料,所謂寫(xiě)時(shí)拷貝也就是拖延版的深拷貝,下面文章中介紹的非常清楚,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2017-03-03
  • C++實(shí)例輸入多行數(shù)字到數(shù)組

    C++實(shí)例輸入多行數(shù)字到數(shù)組

    這篇文章主要介紹了C++實(shí)例輸入多行數(shù)字到數(shù)組的相關(guān)資料,這里提供實(shí)例代碼幫助大家學(xué)習(xí)理解,需要的朋友可以參考下
    2016-12-12
  • C語(yǔ)言fprintf()函數(shù)和fscanf()函數(shù)的具體使用

    C語(yǔ)言fprintf()函數(shù)和fscanf()函數(shù)的具體使用

    本文主要介紹了C語(yǔ)言fprintf()函數(shù)和fscanf()函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++文件依存關(guān)系介紹

    C++文件依存關(guān)系介紹

    如果現(xiàn)在你做的C++項(xiàng)目(課題)包含的文件沒(méi)有超過(guò)1000個(gè),你可以選擇略過(guò)此文,不過(guò)建議繼續(xù)瀏覽
    2013-01-01
  • opencv3/C++圖像邊緣提取方式

    opencv3/C++圖像邊緣提取方式

    今天小編就為大家分享一篇opencv3/C++圖像邊緣提取方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 詳解C語(yǔ)言中rand函數(shù)的使用

    詳解C語(yǔ)言中rand函數(shù)的使用

    在編程時(shí)我們有時(shí)總希望自己產(chǎn)生一個(gè)隨機(jī)數(shù)字,以供使用,那么下面介紹rand函數(shù)的使用,有需要的可以參考學(xué)習(xí)。
    2016-08-08
  • C/C++ 編譯器優(yōu)化介紹

    C/C++ 編譯器優(yōu)化介紹

    這篇文章主要涉及了C/C++ 編譯器優(yōu)化的簡(jiǎn)單介紹,具有一定參考價(jià)值。如有不對(duì)之處,歡迎指出。
    2017-09-09
  • 變量定義與聲明的區(qū)別詳細(xì)解析

    變量定義與聲明的區(qū)別詳細(xì)解析

    外部變量(全局變量)的"定義"與外部變量的"聲明"是不相同的,外部變量的定義只能有一次,它的位置是在所有函數(shù)之外,而同一個(gè)文件中的外部變量聲明可以是多次的,它可以在函數(shù)之內(nèi)(哪個(gè)函數(shù)要用就在那個(gè)函數(shù)中聲明)也可以在函數(shù)之外(在外部變量的定義點(diǎn)之前)
    2013-09-09

最新評(píng)論