C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)(文件數(shù)據(jù)庫(kù))
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
簡(jiǎn)介
c語(yǔ)言的一個(gè)大作業(yè),發(fā)上來(lái)紀(jì)念下嘿嘿。寫(xiě)的不是很好,很多東西都揉在一起來(lái),不過(guò)注釋寫(xiě)的也挺多,希望能幫到有需要的朋友。
題目要求
簡(jiǎn)單文件數(shù)據(jù)庫(kù)-模擬圖書(shū)館管理系統(tǒng)
涉及知識(shí)點(diǎn):文件讀寫(xiě)、內(nèi)存管理、結(jié)構(gòu)體定義、基本數(shù)據(jù)結(jié)構(gòu)、高級(jí)格式化輸入輸出
要求:
編寫(xiě)一個(gè)程序模擬圖書(shū)管理系統(tǒng)。用戶(hù)分為管理員和讀者兩類(lèi),分別顯示不同文本格式菜單,通過(guò)菜單項(xiàng)對(duì)應(yīng)數(shù)字進(jìn)行選擇。讀者菜單包括借書(shū)、還書(shū)、查詢(xún)等功能。管理員菜單包括圖書(shū)和讀者信息錄入、修改和刪除。圖書(shū)信息至少應(yīng)包括:編號(hào)、書(shū)名、數(shù)量,讀者信息至少應(yīng)包括:編號(hào)、姓名、所借圖書(shū)??筛鶕?jù)圖書(shū)名稱(chēng)或編號(hào)進(jìn)行圖書(shū)信息查詢(xún),可查詢(xún)某本書(shū)現(xiàn)在被哪些讀者借走。
命令行參數(shù)如下:
Libsim –a(-u) xxxx
第一個(gè)參數(shù)為可執(zhí)行程序名稱(chēng);第二個(gè)參數(shù)為用戶(hù)身份,-a表示管理員,-u表示讀者;第三個(gè)參數(shù)為用戶(hù)名
實(shí)現(xiàn)的功能
1. 管理員:
- 對(duì)圖書(shū)進(jìn)行管理:添加圖書(shū),修改圖書(shū)名稱(chēng)、數(shù)量,刪除圖書(shū)。
- 對(duì)讀者進(jìn)行管理:添加讀者,修改讀者名稱(chēng),刪除讀者.
- 一鍵查看全部書(shū)籍信息(序號(hào),書(shū)名,剩余數(shù)量)
- 一鍵查看全部讀者信息(序號(hào),讀者名,所借閱書(shū)籍)
- 單本圖書(shū)詳情查詢(xún):可根據(jù)序號(hào)和書(shū)名查找,向管理員展示圖書(shū)序號(hào)、名稱(chēng)、剩余數(shù)量和借閱了此書(shū)的讀者。
2. 讀者:
- 借閱圖書(shū)(只能同時(shí)借閱一本書(shū))
- 還回圖書(shū)
- 一鍵查看全部書(shū)籍信息(序號(hào),書(shū)名,剩余數(shù)量)
readme
需要從cmd命令行運(yùn)行程序,如圖(注意格式)
管理員名:Zhang
進(jìn)入管理員菜單格式:可執(zhí)行程序名 -a Zhang (只設(shè)置了一個(gè)管理員,沒(méi)有添加管理員的功能)
進(jìn)入讀者菜單格式:可執(zhí)行程序名 -u 讀者名 (需要先通過(guò)管理員添加讀者)
默認(rèn)生成的文件放在d盤(pán)根目錄下(有時(shí)中間的過(guò)渡文件可能會(huì)沒(méi)有被刪除)
- Book.txt :存放書(shū)籍信息
- Users.txt :存放讀者信息
代碼
#include<stdio.h> #include <io.h> int bookNumber = 1; ?//全局變量 表示圖書(shū)的序號(hào) int usersNumber = 1; ?//表示讀者編號(hào) char enter; ?//接收換行符 //添加圖書(shū)的函數(shù) void addBook(FILE *Book) ? { ? ? FILE *Book1; ?//當(dāng)文件和書(shū)本都存在時(shí)需要新建文件來(lái)更改信息 ? ? int judgeName = 0; ?//判斷此書(shū)是否已經(jīng)被存放 ? ? int num = 1, readNum, readNumber; ?//書(shū)本的數(shù)量 ?存放讀到的書(shū)本數(shù)量 ?讀到的書(shū)本序號(hào) ? ? char name[20] = {0}, readName[20] = {0}; ?//存放圖書(shū)名字 ?暫時(shí)存放讀到的字符串名 ? ? printf("請(qǐng)輸入要添加的圖書(shū)名:"); ? ? for(int i = 0; i<20; i++) ?//從輸入流取得需要添加的書(shū)本名字 ? ? { ? ? ? ? if(i==0) ? ? ? ? ? ? scanf("%c%c", &enter,&name[i]); ? ? ? ? else ? ? ? ? ? ? scanf("%c",&name[i]); ? ? ? ? if(name[i]==10) ?//將最后的換行符改為空 ? ? ? ? { ? ? ? ? ? ? name[i]=0; ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? ? if(access("d:/Book.txt",F_OK)==0) ?//access函數(shù)判斷文件是否存在,存在返回值為0 使用的頭文件為io ? ? { ? ? ? ? judgeName = 1; ? ? ? ? FILE *judge = fopen("d:/Book.txt", "r"); ?//讀取數(shù)據(jù)文件,查找是否已經(jīng)存在此書(shū) ? ? ? ? while(!feof(judge)) ? ? ? ? { ? ? ? ? ? ? fscanf(judge, "%d %s %d", &readNumber, readName, &readNum); //由于readName已經(jīng)表示地址,不需要取地址符 ? ? ? ? ? ? fscanf(judge,"\n"); ?//讀入換行符,準(zhǔn)備下一行的讀取 ? ? ? ? ? ? if(strcmp(name, readName)==0) ?//發(fā)現(xiàn)已經(jīng)存在此書(shū)后跳出循環(huán) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? judgeName = 2; ?//為2時(shí)表示已經(jīng)存在此書(shū),需要新建一個(gè)文件來(lái)更改信息 ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? fclose(judge); ?//關(guān)閉用于判斷而打開(kāi)的文件 ? ? ? ? bookNumber = readNumber+1; ? ? ? ? if(judgeName==1) ? ? ? ? ? ? Book = fopen("d:/Book.txt", "a"); ?//文件存在 且不存在相同書(shū)名時(shí)向后追加內(nèi)容 ? ? ? ? else if(judgeName==2) ? ? ? ? { ? ? ? ? ? ? Book1 = fopen("d:/Book1.txt", "w"); ?//新建一個(gè)文件暫存Book中的信息,最后再返回源文件中 ? ? ? ? ? ? Book = fopen("d:/Book.txt","r"); ?//只讀打開(kāi)原本的文件 ? ? ? ? } ? ? } ? ? else ? ? ? ? Book = fopen("d:/Book.txt","w"); ?//文件不存在時(shí)新建一個(gè)文件 ? ? if (judgeName<2) ? ? { ? ? ? ? ? fprintf(Book, "%d %s %d\n", bookNumber, name, num); ?//寫(xiě)入序號(hào) 書(shū)名 數(shù)量和換行符 ? ? ? ? bookNumber++;? ? ? ? ? fclose(Book); ? ? } ? ? else ? ? { ? ? ? ? while(!feof(Book)) ? ? ? ? { ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? ? ? if(strcmp(name, readName)==0) ? ? ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum+1); ?//寫(xiě)入序號(hào) 書(shū)名 數(shù)量+1和換行符 ? ? ? ? ? ? else ? ? ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum); ?//寫(xiě)入序號(hào) 書(shū)名 數(shù)量和換行符 ? ? ? ? ? ? ? ? ? ? } ? ? ? ? bookNumber++; ? ? ? ? fclose(Book); ?//關(guān)閉文件 ? ? ? ? fclose(Book1); ? ? ? ? Book1 = fopen("d:/Book1.txt", "r"); ? ? ? ? Book = fopen("d:/Book.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? ? ? while(!feof(Book1)) ? ? ? ? { ? ? ? ? ? ? fscanf(Book1, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? ? ? fprintf(Book, "%d %s %d\n", readNumber, readName, readNum); ? ? ? ? } ? ? ? ? fclose(Book); ? ? ? ? fclose(Book1); ? ? ? ? remove("d:/Book1.txt"); ?//刪除原文件 ? ? ? ? ? ? ? ? ? ? ? //rename("d:/Book1.txt", "d:/Book.txt"); ?//將更改后的文件改名為原數(shù)據(jù)文件 ? ? } ? ? printf("添加成功!\n"); } //修改圖書(shū)信息函數(shù) void changeBook(FILE *Book) ? { ? ? while(1) ? ? { ? ? ? ? char name[20] = {0}, readName[20] = {0}; ? ? ? ? printf(" ? ? ? ? ? Edit Book Information ? ? ? ? ? ?\n"); ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? printf("\t請(qǐng)選擇需要修改的信息:\n ?1.修改圖書(shū)名稱(chēng)\n ?2.修改圖書(shū)數(shù)量\n ?3.返回主菜單\n"); ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? int function, readNumber, readNum, find = 0; ?//功能選擇 讀取到的序號(hào) 讀取到的數(shù)量 是否找到此書(shū) ? ? ? ?? ? ? ? ? //判斷修改后的書(shū)名是否和原有的重復(fù) ? ? ? ? Book = fopen("d:/Book.txt","r"); ?//只讀打開(kāi)原文件 ? ? ? ? int ifNumber, ifNum; ? ? ? ? char ifName[20] = {0}; ? ? ? ? FILE *ifUserExisted = fopen("d:/Users1.txt","w"); ? ? ? ? while(!feof(Book)) ? ? ? ? { ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &ifNumber, ifName, &ifNum); ? ? ? ? ? ? fprintf(ifUserExisted, "%d %s %d\n", &ifNumber, ifName, ifNum); ? ? ? ? ? } ? ? ? ? fclose(ifUserExisted); ? ? ? ? fclose(Book); ? ? ? ? ? ? scanf("%d",&function); ? ? ? ? if(function == 3) ? ? ? ? { ? ? ? ? ? ? remove("d:/Book1.txt"); ?//有時(shí)會(huì)多余創(chuàng)造了文件,需要?jiǎng)h除? ? ? ? ? ? ? return; ? ? ? ? } ? ? ? ? Book = fopen("d:/Book.txt","r"); ?//只讀打開(kāi)原文件 ? ? ? ? FILE *Book1 = fopen("d:/Book1.txt", "w"); ?//先新建一個(gè)文件存儲(chǔ)更改后的信息 ? ? ? ? printf("請(qǐng)輸入需要更改的圖書(shū)名:"); ? ? ? ? for(int i = 0; i<20; i++) ?//從輸入流取得需要添加的書(shū)本名字 ? ? ? ? { ? ? ? ? ? ? if(i==0) ? ? ? ? ? ? ? ? scanf("%c%c", &enter,&name[i]); ? ? ? ? ? ? else ? ? ? ? ? ? ? ? scanf("%c",&name[i]); ? ? ? ? ? ? if(name[i]==10) ?//將最后的換行符改為空 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? name[i]=0; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if(function==1) ? ? ? ? { ? ? ? ? ? ? while(!feof(Book)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? ? ? ? ? if(strcmp(name, readName)==0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? find = 1; ?//找到了此書(shū) ? ? ? ? ? ? ? ? ? ? printf("您要將書(shū)名%s更改為:", name); ? ? ? ? ? ? ? ? ? ? char changeName[20] = {0}; ? ? ? ? ? ? ? ? ? ? for(int i = 0; i<20; i++) ?//從輸入流取得需要更改的書(shū)本名字 ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if(i==0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? scanf("%c",&changeName[i]); ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? scanf("%c",&changeName[i]); ? ? ? ? ? ? ? ? ? ? ? ? if(changeName[i]==10) ?//將最后的換行符改為空 ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? changeName[i]=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ifUserExisted = fopen("d:/Users1.txt","r"); ? //判斷更改后的名字是否會(huì)和已存在的書(shū)名沖突 ? ? ? ? ? ? ? ? ? ? while(!feof(ifUserExisted)) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? fscanf(ifUserExisted, "%d %s %d\n", &ifNumber, ifName, &ifNum); ? ? ? ? ? ? ? ? ? ? ? ? if (strcmp(changeName, ifName)==0) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("更改失?。阂汛嬖诿Q(chēng)為%s的圖書(shū)\n", changeName); ? ? ? ? ? ? ? ? ? ? ? ? ? ? fclose(ifUserExisted); ? ? ? ? ? ? ? ? ? ? ? ? ? ? fclose(Book); ?//關(guān)閉文件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? fclose(Book1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, changeName, readNum); ?//寫(xiě)入序號(hào) 更改后的書(shū)名 數(shù)量和換行符 ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum); ?//寫(xiě)入序號(hào) 書(shū)名 數(shù)量和換行符 ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? if(find==0) ?//若沒(méi)找到此書(shū) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? printf("沒(méi)有找到此書(shū)!請(qǐng)重新輸入\n"); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? ? ? fclose(Book); ?//關(guān)閉文件 ? ? ? ? ? ? fclose(Book1); ? ? ? ? ? ? Book1 = fopen("d:/Book1.txt", "r"); ? ? ? ? ? ? Book = fopen("d:/Book.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? ? ? ? ? while(!feof(Book1)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? fscanf(Book1, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? ? ? ? ? fprintf(Book, "%d %s %d\n", readNumber, readName, readNum); ? ? ? ? ? ? } ? ? ? ? ? ? fclose(Book); ? ? ? ? ? ? fclose(Book1); ? ? ? ? ? ? remove("d:/Book1.txt"); ?//刪除原文件 ? ? ? ? ? ? ? ? ? ? ? ? ? //rename("d:/Book1.txt", "d:/Book.txt"); ?//將更改后的文件改名為原數(shù)據(jù)文件 ?此方法成功率低?。?! ? ? ? ? ? ? printf("更改成功!\n"); ? ? ? ? } ? ? ? ? else if(function == 2) ? ? ? ? { ? ? ? ? ? ? while(!feof(Book)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? ? ? ? ? if(strcmp(name, readName)==0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? find = 1; ?//找到了此書(shū) ? ? ? ? ? ? ? ? ? ? printf("您要將數(shù)量%d更改為:", readNum); ? ? ? ? ? ? ? ? ? ? int newNum = 0; ? ? ? ? ? ? ? ? ? ? scanf("%d",&newNum); ? ? ? ? ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, newNum); ?//寫(xiě)入序號(hào) 書(shū)名 更改后的數(shù)量和換行符 ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum); ?//寫(xiě)入序號(hào) 書(shū)名 數(shù)量和換行符 ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? if(find==0) ?//若沒(méi)找到此書(shū) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? printf("沒(méi)有找到此書(shū)!請(qǐng)重新輸入"); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? ? ? fclose(Book); ?//關(guān)閉文件 ? ? ? ? ? ? fclose(Book1); ? ? ? ? ? ? Book1 = fopen("d:/Book1.txt", "r"); ? ? ? ? ? ? Book = fopen("d:/Book.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? ? ? ? ? while(!feof(Book1)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? fscanf(Book1, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? ? ? ? ? fprintf(Book, "%d %s %d\n", readNumber, readName, readNum); ? ? ? ? ? ? } ? ? ? ? ? ? fclose(Book); ? ? ? ? ? ? fclose(Book1); ? ? ? ? ? ? remove("d:/Book1.txt"); ?//刪除原文件 ? ? ? ? ? ? ? ? ? ? ? ? ? //rename("d:/Book1.txt", "d:/Book.txt"); ?//將更改后的文件改名為原數(shù)據(jù)文件 ?此方法易出現(xiàn)問(wèn)題?。。? ? ? ? ? ? ? printf("更改成功!\n"); ? ? ? ? } ? ? ? ? else ? ? ? ? { ? ? ? ? ? ? printf("輸入格式有誤,請(qǐng)重新輸入!"); ? ? ? ? ? ? break; ? ? ? ? } ? ? } } //刪除書(shū)籍的函數(shù) void delBook(FILE *Book) { ? ? while(1) ? ? { ? ? ? ? printf("請(qǐng)輸入您想刪除的圖書(shū)名:(輸入\"-r\"返回上一級(jí))"); ? ? ? ? char delName[20] = {0}; ? ? ? ? for(int i = 0; i<20; i++) ?//從輸入流取得需要?jiǎng)h除的書(shū)本名字 ? ? ? ? { ? ? ? ? ? ? //if(i==0) ? ? ? ? ? ? ? // ?scanf("%c%c", &enter,&delName[i]); ? ? ? ? ? ? //else ? ? ? ? ? ? ? ? scanf("%c",&delName[i]); ? ? ? ? ? ? if(delName[i]==10) ?//將最后的換行符改為空 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? delName[i]=0; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if(strcmp(delName, "-r")==0) ?//輸入返回上一級(jí)的指示后返回 ? ? ? ? ? ? return; ? ? ? ? int readNumber, readNum, find = 0; ? ? ? ? char readName[20] = {0}; ? ? ? ? Book = fopen("d:/Book.txt","r"); ? ? ? ? FILE *Book1 = fopen("d:/Book1.txt","w"); ? ? ? ? while (!feof(Book)) ? ? ? ? { ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? ? ? if(strcmp(delName, readName)==0) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? find = 1; ?//找到了此書(shū) ? ? ? ? ? ? ? ? //因?yàn)橐獎(jiǎng)h除此條信息,所以不再向新文件中輸出它 ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if(find==1) ? ? ? ? ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber-1, readName, readNum); ?//排在刪除后的寫(xiě)入-1的序號(hào) 書(shū)名 數(shù)量和換行符 ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum); ?//刪除前的寫(xiě)入的序號(hào) 書(shū)名 數(shù)量和換行符 ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? if(find==0) ?//若沒(méi)找到此書(shū) ? ? ? ? { ? ? ? ? ? ? printf("沒(méi)有找到此書(shū)!請(qǐng)重新輸入\n"); ? ? ? ? ? ? continue; ? ? ? ? } ? ? ? ? fclose(Book); ? ? ? ? fclose(Book1); ? ? ? ? Book1 = fopen("d:/Book1.txt", "r"); ? ? ? ? Book = fopen("d:/Book.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? ? ? while(!feof(Book1)) ? ? ? ? { ? ? ? ? ? ? fscanf(Book1, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? ? ? fprintf(Book, "%d %s %d\n", readNumber, readName, readNum); ? ? ? ? } ? ? ? ? fclose(Book); ? ? ? ? fclose(Book1); ? ? ? ? remove("d:/Book1.txt"); ?//刪除原文件 ? ? ? ? ? ? ? ? ? ? ? printf("刪除成功!\n"); ? ? } } //展示全部圖書(shū)的函數(shù) void showBook(FILE *Book) { ? ? printf(" ? ? ? ? ? ? ? ? ?Library ? ? ? ? ? ? ? ? ? \n"); ? ? printf("[------------------------------------------]\n"); ? ? printf("\t序號(hào)\t書(shū)名\t\t數(shù)量\n"); ? ? char readName[20] = {0}; ? ? int readNumber, readNum; ? ? Book = fopen("d:/Book.txt", "r"); ? ? while(!feof(Book)) ? ? { ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? printf("\t%d\t%s\t\t%d\n",readNumber, readName, readNum); ? ? ? ? ?? ? ? } ? ? fclose(Book); ? ? printf("[------------------------------------------]\n"); } //向管理員展示全部用戶(hù)的函數(shù) void showUsers(FILE *Users) { ? ? printf(" ? ? ? ? ? ? ? ? ? Users ? ? ? ? ? ? ? ? ? ?\n"); ? ? printf("[------------------------------------------]\n"); ? ? printf("\t序號(hào)\t姓名\t所借閱圖書(shū)\n"); ? ? char readName[20] = {0}, borrowBook[20] = {0}; ? ? int readNumber; ? ? Users = fopen("d:/Users.txt", "r"); ? ? while(!feof(Users)) ? ? { ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? printf("\t%d\t%s\t%s\n",readNumber, readName, borrowBook); ? ? ? ? ?? ? ? } ? ? fclose(Users); ? ? printf("[------------------------------------------]\n"); } //添加用戶(hù)函數(shù) ?? void addUsers(FILE *Users) { ? ? FILE *Users1; ?//當(dāng)文件和用戶(hù)都存在時(shí)需要新建文件來(lái)更改信息 ? ? int judgeName = 0; ?//判斷此用戶(hù)是否已經(jīng)存在 ? ? int num = 1, readNumber; ?// ?存放讀到的書(shū)本數(shù)量 ?讀到的用戶(hù)序號(hào) ? ? char name[20] = {0}, readName[20] = {0}, borrowBook[20] = {"None"},readBorrowBook[20] = {"None"}; ?//存放用戶(hù)名字 ?暫時(shí)存放讀到的字符串名 ? ? printf("請(qǐng)輸入要添加的用戶(hù)名:"); ? ? for(int i = 0; i<20; i++) ?//從輸入流取得需要添加的用戶(hù)名 ? ? { ? ? ? ? if(i==0) ? ? ? ? ? ? scanf("%c%c", &enter,&name[i]); ? ? ? ? else ? ? ? ? ? ? scanf("%c",&name[i]); ? ? ? ? if(name[i]==10) ?//將最后的換行符改為空 ? ? ? ? { ? ? ? ? ? ? name[i]=0; ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? ? if(access("d:/Users.txt",F_OK)==0) ?//access函數(shù)判斷文件是否存在,存在返回值為0 使用的頭文件為io ? ? {? ? ? ? ? judgeName = 1; ? ? ? ? FILE *judge = fopen("d:/Users.txt", "r"); ?//讀取數(shù)據(jù)文件,查找是否已經(jīng)存在此用戶(hù) ? ? ? ? while(!feof(judge)) ? ? ? ? { ? ? ? ? ? ? fscanf(judge, "%d %s %s", &readNumber, readName, readBorrowBook); //由于readName已經(jīng)表示地址,不需要取地址符 ? ? ? ? ? ? fscanf(judge,"\n"); ?//讀入換行符,準(zhǔn)備下一行的讀取 ? ? ? ? ? ? if(strcmp(name, readName)==0) ?//發(fā)現(xiàn)已經(jīng)存在此用戶(hù)后跳出循環(huán) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? printf("已經(jīng)存在此用戶(hù),無(wú)法添加。"); ?//已經(jīng)存在此用戶(hù),返回 ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? fclose(judge); ?//關(guān)閉用于判斷而打開(kāi)的文件 ? ? ? ? usersNumber = readNumber+1; ? ? ? ? if(judgeName==1) ? ? ? ? ? ? Users = fopen("d:/Users.txt", "a"); ?//文件存在 且不存在相同用戶(hù)時(shí)向后追加內(nèi)容 ? ? } ? ? else ? ? ? ? Users = fopen("d:/Users.txt","w"); ?//文件不存在時(shí)新建一個(gè)文件 ? ? fprintf(Users, "%d %s %s\n", usersNumber, name, borrowBook); ?//寫(xiě)入序號(hào) 用戶(hù)名 所借書(shū)和換行符 ? ? usersNumber++;? ? ? fclose(Users); ? ? printf("添加成功!\n"); } //修改讀者信息函數(shù) void changeUsers(FILE *Users) ? { ? ? while(1) ? ? { ? ? ? ? char name[20] = {0}, readName[20] = {0}, borrowBook[20] = {"None"}; ? ? ? ? printf(" ? ? ? ? ? ? ?Edit Reader Name ? ? ? ? ? ? ?\n"); ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? printf("\t請(qǐng)選擇需要修改的信息:\n ?1.修改讀者名稱(chēng)\n ?2.返回主菜單\n"); ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? int function, readNumber, find = 0; ?//功能選擇 讀取到的序號(hào) ?是否找到此書(shū) ? ? ? ? Users = fopen("d:/Users.txt","r"); ?//只讀打開(kāi)原文件 ? ? ? ? ?? ? ? ? ? //此處創(chuàng)建ifUserExisted,一會(huì)用于查找是否存在相同的名字 ? ? ? ? int ifNumber; ? ? ? ? char ifName[20] = {0}, ifBorrow[20] = {0}; ? ? ? ? FILE *ifUserExisted = fopen("d:/Book1.txt","w"); ? ? ? ? while(!feof(Users)) ? ? ? ? { ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &ifNumber, ifName, ifBorrow); ? ? ? ? ? ? fprintf(ifUserExisted, "%d %s %s\n", &ifNumber, ifName, ifBorrow); ? ? ? ? ? } ? ? ? ? fclose(ifUserExisted); ? ? ? ? fclose(Users); ? ? ? ? ? ? ? ? ? Users = fopen("d:/Users.txt","r"); ?//只讀打開(kāi)原文件 ? ? ? ? scanf("%d",&function); ? ? ? ? if(function == 2) ? ? ? ? { ? ? ? ? ? ? remove("d:/Users1.txt"); ?//有時(shí)會(huì)多余創(chuàng)造了文件,需要?jiǎng)h除? ? ? ? ? ? ? return; ? ? ? ? } ? ? ? ? FILE *Users1 = fopen("d:/Users1.txt", "w"); ?//先新建一個(gè)文件存儲(chǔ)更改后的信息 ? ? ? ? printf("請(qǐng)輸入需要更改的用戶(hù)名:"); ? ? ? ? for(int i = 0; i<20; i++) ?//從輸入流取得需要更改的讀者名字 ? ? ? ? { ? ? ? ? ? ? if(i==0) ? ? ? ? ? ? ? ? scanf("%c%c", &enter,&name[i]); ? ? ? ? ? ? else ? ? ? ? ? ? ? ? scanf("%c",&name[i]); ? ? ? ? ? ? if(name[i]==10) ?//將最后的換行符改為空 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? name[i]=0; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if(function==1) ? ? ? ? { ? ? ? ? ? ? while(!feof(Users)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? ? ? if(strcmp(name, readName)==0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? find = 1; ?//找到了此讀者 ? ? ? ? ? ? ? ? ? ? printf("您要將讀者名\"%s\"更改為:", name); ? ? ? ? ? ? ? ? ? ? char changeName[20] = {0}; ? ? ? ? ? ? ? ? ? ? for(int i = 0; i<20; i++) ?//從輸入流取得需要更改的用戶(hù)名字 ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if(i==0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? scanf("%c",&changeName[i]); ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? scanf("%c",&changeName[i]); ? ? ? ? ? ? ? ? ? ? ? ? if(changeName[i]==10) ?//將最后的換行符改為空 ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? changeName[i]=0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ifUserExisted = fopen("d:/Book1.txt","r"); ? //判斷更改后的名字是否會(huì)和存在的用戶(hù)名沖突 ? ? ? ? ? ? ? ? ? ? while(!feof(ifUserExisted)) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? fscanf(ifUserExisted, "%d %s %s\n", &ifNumber, ifName, ifBorrow); ? ? ? ? ? ? ? ? ? ? ? ? if (strcmp(changeName, ifName)==0) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("更改失敗:已存在名稱(chēng)為%s的讀者\(yùn)n", changeName); ? ? ? ? ? ? ? ? ? ? ? ? ? ? fclose(ifUserExisted); ? ? ? ? ? ? ? ? ? ? ? ? ? ? fclose(Users); ?//關(guān)閉文件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? fclose(Users1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, changeName, borrowBook); ?//寫(xiě)入序號(hào) 更改后的讀者名 所借書(shū)籍和換行符 ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, borrowBook); ?//寫(xiě)入序號(hào) 書(shū)名 數(shù)量和換行符 ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? if(find==0) ?//若沒(méi)找到此讀者 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? printf("沒(méi)有找到此讀者!請(qǐng)重新輸入\n"); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? ? ? fclose(Users); ?//關(guān)閉文件 ? ? ? ? ? ? fclose(Users1); ? ? ? ? ? ? Users1 = fopen("d:/Users1.txt", "r"); ? ? ? ? ? ? Users = fopen("d:/Users.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? ? ? ? ? while(!feof(Users1)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? fscanf(Users1, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? ? ? fprintf(Users, "%d %s %s\n", readNumber, readName, borrowBook); ? ? ? ? ? ? } ? ? ? ? ? ? fclose(Users); ? ? ? ? ? ? fclose(Users1); ? ? ? ? ? ? remove("d:/Users1.txt"); ?//刪除原文件 ? ? ? ? ? ? ? ? ? ? ? ? ? //rename("d:/Book1.txt", "d:/Book.txt"); ?//將更改后的文件改名為原數(shù)據(jù)文件 ?此方法成功率低!?。? ? ? ? ? ? ? printf("更改成功!\n"); ? ? ? ? } ? ? ? ? else ? ? ? ? { ? ? ? ? ? ? printf("輸入格式有誤,請(qǐng)重新輸入!\n"); ? ? ? ? ? ? break; ? ? ? ? } ? ? } } //刪除用戶(hù)的函數(shù) void delUsers(FILE *Users) { ? ? while(1) ? ? { ? ? ? ? printf("請(qǐng)輸入您想刪除的讀者名:(輸入\"-r\"返回上一級(jí))"); ? ? ? ? char delName[20] = {0}; ? ? ? ? for(int i = 0; i<20; i++) ?//從輸入流取得需要?jiǎng)h除的用戶(hù)名字 ? ? ? ? { ? ? ? ? ? ? //if(i==0) ? ? ? ? ? ? ? // ?scanf("%c%c", &enter,&delName[i]); ? ? ? ? ? ? //else ? ? ? ? ? ? ? ? scanf("%c",&delName[i]); ? ? ? ? ? ? if(delName[i]==10) ?//將最后的換行符改為空 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? delName[i]=0; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? if(strcmp(delName, "-r")==0) ?//輸入返回上一級(jí)的指示后返回 ? ? ? ? ? ? return; ? ? ? ? int readNumber, find = 0; ? ? ? ? char readName[20] = {0}, borrowBook[20] = {"None"}; ? ? ? ? Users = fopen("d:/Users.txt","r"); ? ? ? ? FILE *Users1 = fopen("d:/Users1.txt","w"); ? ? ? ? while (!feof(Users)) ? ? ? ? { ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? if(strcmp(delName, readName)==0) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? find = 1; ?//找到了此讀者 ? ? ? ? ? ? ? ? //因?yàn)橐獎(jiǎng)h除此條信息,所以不再向新文件中輸出它 ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if(find==1) ? ? ? ? ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber-1, readName, borrowBook); ?//排在刪除后的寫(xiě)入-1的序號(hào) 讀者名 所借書(shū)和換行符 ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, borrowBook); ?//刪除前的寫(xiě)入的序號(hào) 讀者名 所借書(shū)和換行符 ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? if(find==0) ?//若沒(méi)找到此讀者 ? ? ? ? { ? ? ? ? ? ? printf("沒(méi)有找到此讀者!請(qǐng)重新輸入\n"); ? ? ? ? ? ? continue; ? ? ? ? } ? ? ? ? fclose(Users1); ? ? ? ? fclose(Users); ? ? ? ? Users1 = fopen("d:/Users1.txt", "r"); ? ? ? ? Users = fopen("d:/Users.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? ? ? while(!feof(Users1)) ? ? ? ? { ? ? ? ? ? ? fscanf(Users1, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? fprintf(Users, "%d %s %s\n", readNumber, readName, borrowBook); ? ? ? ? } ? ? ? ? fclose(Users1); ? ? ? ? fclose(Users); ? ? ? ? remove("d:/Users1.txt"); ?//刪除原文件 ? ? ? ? ? ? ? ? ? ? ? printf("刪除成功!\n"); ? ? } } //借閱函數(shù) void borrowBooking(char readerName[]) { ? ? printf("請(qǐng)輸入您想借閱的圖書(shū)名:"); ? ? char name[20] = {0}; ? ? for(int i = 0; i<20; i++) ?//從輸入流取得圖書(shū)名 ? ? { ? ? ? ? if(i==0) ? ? ? ? ? ? scanf("%c%c", &enter,&name[i]); ? ? ? ? else ? ? ? ? ? ? scanf("%c",&name[i]); ? ? ? ? if(name[i]==10) ?//將最后的換行符改為空 ? ? ? ? { ? ? ? ? ? ? name[i]=0; ? ? ? ? ? ? break; ? ? ? ? } ? ? } ? ? char readName[20] = {0}; ? ? int readNumber, readNum, find = 0; ? ? //更改被借閱的圖書(shū)的信息 ? ? FILE *Book = fopen("d:/Book.txt", "r"); ? ? FILE *Book1 = fopen("d:/Book1.txt", "w"); ? ? while (!feof(Book)) ? ? { ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? if(strcmp(name, readName)==0) ? ? ? ? { ? ? ? ? ? ? ? find = 1; ? ? ? ? ? ? if(readNum<1) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? printf("借閱失敗:無(wú)剩余可借閱的%s!\n", readName); ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? } ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum-1); //若找到需要借閱的圖書(shū),則在此書(shū)數(shù)量上減1? ? ? ? ? }? ? ? ? ? else ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum); ?//刪除前的寫(xiě)入的序號(hào) 讀者名 所借書(shū)和換行符? ? ? } ? ? if(find==0) ?//若沒(méi)找到此書(shū) ? ? { ? ? ? ? printf("借閱失敗:沒(méi)有找到此書(shū)!\n"); ? ? ? ? return; ? ? } ? ? fclose(Book); ? ? fclose(Book1); ? ? Book1 = fopen("d:/Book1.txt", "r"); ? ? Book = fopen("d:/Book.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? while(!feof(Book1)) ? ? { ? ? ? ? fscanf(Book1, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? fprintf(Book, "%d %s %d\n", readNumber, readName, readNum); ? ? } ? ? fclose(Book1); ? ? fclose(Book); ? ? remove("d:/Book1.txt"); ?//刪除原文件? ? ? //更改讀者的信息 ? ? FILE *Users = fopen("d:/Users.txt", "r"); ? ? FILE *Users1 = fopen("d:/Users1.txt", "w"); ? ? char borrowBook[20] = {"None"}; ? ? while (!feof(Users)) ? ? { ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? if(strcmp(readerName, readName)==0) ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, name); //在讀者的借閱圖書(shū)上寫(xiě)上所借閱的圖書(shū)名? ? ? ? ? else ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, borrowBook);? ? ? } ? ? fclose(Users1); ? ? fclose(Users); ? ? Users1 = fopen("d:/Users1.txt", "r"); ? ? Users = fopen("d:/Users.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? while(!feof(Users1)) ? ? { ? ? ? ? fscanf(Users1, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? fprintf(Users, "%d %s %s\n", readNumber, readName, borrowBook); ? ? } ? ? fclose(Users1); ? ? fclose(Users); ? ? remove("d:/Users1.txt"); ?//刪除原文件 ?有時(shí)候還是刪不掉 ? ? printf("借閱成功!\n");? } //還書(shū)函數(shù) void returnBooking(char readerName[], char borrowBook[]) { ? ? char readName[20] = {0}; ? ? int readNumber, readNum, find = 0; ? ? //更改被還回的圖書(shū)的信息 ? ? FILE *Book = fopen("d:/Book.txt", "r"); ? ? FILE *Book1 = fopen("d:/Book1.txt", "w"); ? ? while (!feof(Book)) ? ? { ? ? ? ? fscanf(Book, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? if(strcmp(borrowBook, readName)==0) ? ? ? ? { ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum+1); //若找到被還的圖書(shū),則在此書(shū)數(shù)量上加1 ? ? ? ? ? ? ? find = 1; ? ? ? ? } ? ? ? ? else ? ? ? ? ? ? fprintf(Book1, "%d %s %d\n", readNumber, readName, readNum); //不是還回的書(shū)? ? ? } ? ? fclose(Book); ? ? fclose(Book1); ? ? Book1 = fopen("d:/Book1.txt", "r"); ? ? Book = fopen("d:/Book.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? while(!feof(Book1)) ? ? { ? ? ? ? fscanf(Book1, "%d %s %d\n", &readNumber, readName, &readNum); ? ? ? ? fprintf(Book, "%d %s %d\n", readNumber, readName, readNum); ? ? } ? ? bookNumber = readNumber+1; ? ? fclose(Book1); ? ? fclose(Book); ? ? remove("d:/Book1.txt"); ?//刪除原文件 ? ? if(find==0) ?//還書(shū)時(shí)沒(méi)有書(shū)城中沒(méi)有此書(shū),直接添加一本 ? ? { ? ? ? ? FILE *Book; ? ? ? ? Book = fopen("d:/Book.txt", "a"); ? ? ? ? ? fprintf(Book, "%d %s 1\n", bookNumber, borrowBook); ?//寫(xiě)入序號(hào) 書(shū)名 數(shù)量和換行符 ? ? ? ? bookNumber++;? ? ? ? ? fclose(Book); ? ? } ? ? //更改讀者的信息 ? ? FILE *Users = fopen("d:/Users.txt", "r"); ? ? FILE *Users1 = fopen("d:/Users1.txt", "w"); ? ? char rborrowBook[20] = {"None"}; ? ? while (!feof(Users)) ? ? { ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, rborrowBook); ? ? ? ? if(strcmp(readerName, readName)==0) ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, "None"); //還回書(shū)后所借閱圖書(shū)變?yōu)?None"? ? ? ? ? else ? ? ? ? ? ? fprintf(Users1, "%d %s %s\n", readNumber, readName, rborrowBook);? ? ? } ? ? fclose(Users1); ? ? fclose(Users); ? ? Users1 = fopen("d:/Users1.txt", "r"); ? ? Users = fopen("d:/Users.txt", "w+"); ? //刷新原文件,再次寫(xiě)入正確數(shù)據(jù) ? ? while(!feof(Users1)) ? ? { ? ? ? ? fscanf(Users1, "%d %s %s\n", &readNumber, readName, rborrowBook); ? ? ? ? fprintf(Users, "%d %s %s\n", readNumber, readName, rborrowBook); ? ? } ? ? fclose(Users1); ? ? fclose(Users); ? ? remove("d:/Users1.txt"); ?//刪除原文件 ?有時(shí)候還是刪不掉 ? ? printf("成功還回%s\n", borrowBook); } //單獨(dú)查詢(xún)功能,根據(jù)編號(hào)或書(shū)名查詢(xún)書(shū)被哪些人借走 void searchBook() { ? ? while (1) ? ? { ? ? ? ? int function = 0; ? ? ? ? FILE *Book = fopen("d:/Book.txt", "r"); ? ? ? ? FILE *Users = fopen("d:/Users.txt", "r"); ? ? ? ? char readerName[20] = {0}, bookName[20] = {0}, borrowBook[20] = {0}, name[20] = {0}; ? ? ? ? int bookNumber, bookNum, find = 0, readerNumber; ? ? ? ? printf(" ? ? ? ? ? ? ? ? ? Search ? ? ? ? ? ? ? ? ? \n"); ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? printf("\t\t請(qǐng)選擇查詢(xún)功能:\n\t1.根據(jù)編號(hào)查詢(xún)\n\t2.根據(jù)書(shū)名查詢(xún)\n\t3.返回主界面\n"); ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? scanf("%d",&function); // 輸入需要的功能 ? ? ? ? switch (function) ? ? ? ? { ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? printf("您要查找的書(shū)序號(hào)是:"); ? ? ? ? ? ? ? ? scanf("%d",&function); // 輸入需要查找的圖書(shū)編號(hào) ? ? ? ? ? ? ? ? while(!feof(Book)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &bookNumber, bookName, &bookNum); //由于bookName已經(jīng)表示地址,不需要取地址符 ? ? ? ? ? ? ? ? ? ? if(bookNumber==function) ?//發(fā)現(xiàn)查找的書(shū)后跳出循環(huán) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? find = 1;//找到書(shū) ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? printf("沒(méi)有找到編號(hào)為%d的圖書(shū)。\n",function); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? Search Result ? ? ? ? ? ? ? ?\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? find = 0;//需要在查找誰(shuí)借閱時(shí)再次使用 ? ? ? ? ? ? ? ? printf("\t編號(hào):\t\t%d\n\t書(shū)名:\t\t%s\n\t剩余數(shù)量:\t%d\n\t",bookNumber, bookName, bookNum); ? ? ? ? ? ? ? ? while (!feof(Users)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readerNumber, readerName, borrowBook);//遍歷讀者查找誰(shuí)借閱了這本書(shū) ?? ? ? ? ? ? ? ? ? ? ? if (strcmp(borrowBook, bookName)==0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? find = 1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("借閱此書(shū)的讀者:"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("%s",readerName); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf(" ,%s",readerName); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? ? ? printf("還沒(méi)有讀者借閱此書(shū)。\n"); ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? printf("\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? printf("輸入回車(chē)返回...\n"); ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? printf("您要查找的書(shū)名是:"); ? ? ? ? ? ? ? ? scanf("%s",name); // 輸入需要查找的圖書(shū)名 ? ? ? ? ? ? ? ? while(!feof(Book)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fscanf(Book, "%d %s %d\n", &bookNumber, bookName, &bookNum); //由于bookName已經(jīng)表示地址,不需要取地址符 ? ? ? ? ? ? ? ? ? ? if(strcmp(bookName, name)==0) ?//發(fā)現(xiàn)查找的書(shū)后跳出循環(huán) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? find = 1;//找到書(shū) ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? printf("沒(méi)有找到名稱(chēng)為%s的圖書(shū)。\n",name); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? Search Result ? ? ? ? ? ? ? ?\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? find = 0;//需要在查找誰(shuí)借閱時(shí)再次使用 ? ? ? ? ? ? ? ? printf("\t編號(hào):\t\t%d\n\t書(shū)名:\t\t%s\n\t剩余數(shù)量:\t%d\n\t",bookNumber, bookName, bookNum); ? ? ? ? ? ? ? ? while (!feof(Users)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readerNumber, readerName, borrowBook);//遍歷讀者查找誰(shuí)借閱了這本書(shū) ?? ? ? ? ? ? ? ? ? ? ? if (strcmp(borrowBook, bookName)==0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? find = 1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("借閱此書(shū)的讀者:"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("%s",readerName); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf(" ,%s",readerName); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if(find==0) ? ? ? ? ? ? ? ? ? ? printf("還沒(méi)有讀者借閱此書(shū)。\n"); ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? printf("\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? printf("輸入回車(chē)返回...\n"); ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? printf("您輸入的格式有誤,請(qǐng)重新輸入\n"); ? ? ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? fclose(Book); ? ? ? ? fclose(Users); ? ? } } int main(int argc, char *argv[]) ?//需要從命令行讀入?yún)?shù) { ? ? char identity1[] = "-u"; ?//讀者身份 ? ? char identity2[] = "-a"; ?//管理員身份 ? ? FILE *Book, *Users; ?//兩個(gè)文件分別存儲(chǔ)圖書(shū)信息和讀者信息。 ?? ?int function1, function2; //功能選項(xiàng) ? ? /*調(diào)試用 ? ? char readerName[20] = {0}; ? ? int test = 0; ? ? scanf("%d %s",&test, readerName); ? ? if(test==1) ? ? */ ? ? if(strcmp(argv[1], identity2)==0) ?//管理員操作界面 ? ? { ? ? ? ? char Administrator[20] = "Zhang"; ? ? ? ? if(strcmp(Administrator, argv[2])==0) ? ? ? ? { ? ? ? ? ? ? ? ? while(1) ? ? ? ? ? ? { ?? ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? ? ? ?menu ? ? ? ? ? ? ? ? ? ?\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? printf(" ? ? 管理員您好!請(qǐng)選擇您要使用的功能:\n ?1.新增或修改圖書(shū)信息\n ?2.新增或修改讀者信息\n ?3.查看全部館藏書(shū)籍\n ?4.查看全部讀者及其借閱信息\n ?5.圖書(shū)詳情查詢(xún)\n ?6.結(jié)束程序\n"); ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? scanf("%d",&function1); ? ? ? ? ? ? ? ? ? switch (function1) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? case 1: ?//更改圖書(shū)信息 ? ? ? ? ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? ? ?Books ? ? ? ? ? ? ? ? ? ? \n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("\t請(qǐng)選擇要對(duì)圖書(shū)進(jìn)行的操作:\n ?1.添加圖書(shū)信息\n ?2.修改圖書(shū)信息\n ?3.刪除圖書(shū)信息\n ?4.返回主菜單\n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? ? ? ? ? scanf("%d",&function2); ?//輸入第二級(jí)操作指令 ? ? ? ? ? ? ? ? ? ? ? ? switch (function2) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? addBook(Book); ?//調(diào)用添加圖書(shū)函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? changeBook(Book); ?//修改函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? scanf("%c",&enter); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delBook(Book); ?//刪除函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("輸入的值令有誤,請(qǐng)重新輸入"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 2: ?//更改讀者信息 ? ? ? ? ? ? ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? ? ?Readers ? ? ? ? ? ? ? ? ? \n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("\t請(qǐng)選擇要對(duì)用戶(hù)進(jìn)行的操作:\n ?1.添加用戶(hù)信息\n ?2.修改用戶(hù)信息\n ?3.刪除用戶(hù)信息\n"); ? ? ? ? ? ? ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? ? ? ? ? ? ? scanf("%d",&function2); ?//輸入第二級(jí)操作指令 ? ? ? ? ? ? ? ? ? ? ? ? switch (function2) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? addUsers(Users); ?//添加用戶(hù)信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 2: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? changeUsers(Users); ?//修改用戶(hù)信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? scanf("%c",&enter); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delUsers(Users); ?//刪除用戶(hù)信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("輸入的值令有誤,請(qǐng)重新輸入"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? ? ? showBook(Book); ? ? ? ? ? ? ? ? ? ? ? ? printf("輸入回車(chē)返回...\n"); ? ? ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? ? ? ? ? showUsers(Users); ? ? ? ? ? ? ? ? ? ? ? ? printf("輸入回車(chē)返回...\n"); ? ? ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 5: ? ? ? ? ? ? ? ? ? ? ? ? searchBook(); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? case 6: ? ? ? ? ? ? ? ? ? ? ? ? printf("感謝您的使用,再見(jiàn)!"); ? ? ? ? ? ? ? ? ? ? ? ? return 0; ? ? ? ? ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? ? ? ? ? printf("輸入格式有誤,請(qǐng)重新輸入!"); ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? else ? ? ? ? ? ? printf("管理員名有誤,請(qǐng)重新輸入!"); ? ? } ? ? /* ? ? else if(test == 2) ? ? */ ? ? ? ? ? ? ? ? ? ? ?? ? ? else if (strcmp(argv[1], identity1)==0) ?//讀者的操作界面 ? ? { ? ? ? ? char readName[20] = {0}, borrowBook[20] = {"None"}; ? ? ? ? int readNumber,find = 0; ? ? ? ? FILE *Users = fopen("d:/Users.txt","r"); ?//需要判斷是否存在此用戶(hù) ? ? ? ? while (!feof(Users)) ? ? ? ? { ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? if(strcmp(argv[2], readName)==0) ? ? ? ? ? ? { ?? ? ? ? ? ? ? ? ? find = 1; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? fclose(Users); ? ? ? ? if(find==0) ? ? ? ? { ? ? ? ? ? ? printf("不存在用戶(hù)名為%s的讀者!", argv[2]); ? ? ? ? ? ? return 0; ? ? ? ? } ? ? ? ? while (1) ? ? ? ? { ? ? ? ? ? ? FILE *Users = fopen("d:/Users.txt","r"); ?//刷新用戶(hù)的借閱信息 ? ? ? ? ? ? while (!feof(Users)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? fscanf(Users, "%d %s %s\n", &readNumber, readName, borrowBook); ? ? ? ? ? ? ? ? if(strcmp(argv[2], readName)==0) ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? ? ? fclose(Users); ? ? ? ? ? ? printf(" ? ? ? ? ? ? ? ? ? ?menu ? ? ? ? ? ? ? ? ? ?\n"); ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? printf("\t讀者%s您好!請(qǐng)選擇您要使用的功能:\n ?1.借閱圖書(shū)\n ?2.還回圖書(shū)\n ?3.查看全部館藏書(shū)籍\n ?4.結(jié)束程序\n", argv[2]); ? ? ? ? ? ? printf("[------------------------------------------]\n"); ? ? ? ? ? ? scanf("%d",&function1); ? ? ? ? ? ? ? switch (function1) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? case 1: ?//借閱圖書(shū) ? ? ? ? ? ? ? ? ? ? if(strcmp(borrowBook, "None")==0) ? ? ? ? ? ? ? ? ? ? ? ? borrowBooking(argv[2]); ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? printf("您已經(jīng)借閱圖書(shū),請(qǐng)先還書(shū)再進(jìn)行借閱操作。\n"); ? ? ? ? ? ? ? ? ? ? printf("輸入回車(chē)返回...\n"); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 2: ?//還書(shū) ? ? ? ? ? ? ? ? ? ? if(strcmp(borrowBook, "None")!=0) ? ? ? ? ? ? ? ? ? ? ? ? returnBooking(argv[2], borrowBook); ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? printf("您當(dāng)前還沒(méi)有借閱圖書(shū)。\n"); ? ? ? ? ? ? ? ? ? ? printf("輸入回車(chē)返回...\n"); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 3: ? ? ? ? ? ? ? ? ? ? showBook(Book); ? ? ? ? ? ? ? ? ? ? printf("輸入回車(chē)返回...\n"); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? enter = getchar(); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 4: ? ? ? ? ? ? ? ? ? ? printf("感謝您的使用,再見(jiàn)!"); ? ? ? ? ? ? ? ? ? ? return 0; ? ? ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? ? ? printf("輸入格式有誤,請(qǐng)重新輸入!"); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? else ? ? ? ? printf("您輸入的格式有誤,請(qǐng)重新輸入!"); ? ? return 0; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- C語(yǔ)言圖書(shū)管理系統(tǒng)簡(jiǎn)潔版
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單圖書(shū)管理系統(tǒng)
- C語(yǔ)言圖書(shū)管理系統(tǒng)課程設(shè)計(jì)
- C語(yǔ)言鏈表實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的圖書(shū)管理系統(tǒng)
- C語(yǔ)言設(shè)計(jì)圖書(shū)登記系統(tǒng)與停車(chē)場(chǎng)管理系統(tǒng)的實(shí)例分享
- C語(yǔ)言實(shí)現(xiàn)圖書(shū)館管理系統(tǒng)
- C語(yǔ)言單鏈表實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)開(kāi)發(fā)
相關(guān)文章
C++ OpenCV學(xué)習(xí)之圖像金字塔與圖像融合詳解
圖像金字塔分為兩種:高斯金字塔和拉普拉斯金字塔。圖像金字塔在保持細(xì)節(jié)的條件下進(jìn)行圖像融合等多尺度編輯操作非常有用。本文將利用圖像金字塔實(shí)現(xiàn)圖像融合,需要的可以參考一下2022-03-03用C語(yǔ)言遞歸實(shí)現(xiàn)火車(chē)調(diào)度算法詳解
本文主要介紹了用C語(yǔ)言遞歸實(shí)現(xiàn)火車(chē)調(diào)度算法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11c++統(tǒng)計(jì)文件中字符個(gè)數(shù)代碼匯總
本文給大家匯總介紹了3種使用C++實(shí)現(xiàn)統(tǒng)計(jì)文件中的字符個(gè)數(shù)的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-09-09C++優(yōu)先級(jí)隊(duì)列的使用指南與模擬實(shí)現(xiàn)
優(yōu)先級(jí)隊(duì)列是一種特殊的隊(duì)列,其中每個(gè)元素都有一個(gè)與之關(guān)聯(lián)的優(yōu)先級(jí),優(yōu)先級(jí)較高的元素會(huì)在隊(duì)列中較早地被處理,而優(yōu)先級(jí)較低的元素會(huì)在后續(xù)處理,本文給大家介紹C++優(yōu)先級(jí)隊(duì)列的使用指南與模擬實(shí)現(xiàn),需要的朋友可以參考下2023-09-09C++基礎(chǔ)知識(shí)之運(yùn)算符重載詳解
這篇文章主要為大家詳細(xì)介紹了C++基礎(chǔ)知識(shí)之運(yùn)算符重載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02C語(yǔ)言如何實(shí)現(xiàn)順序表(數(shù)據(jù)結(jié)構(gòu))
這篇文章主要介紹了C語(yǔ)言如何實(shí)現(xiàn)順序表(數(shù)據(jù)結(jié)構(gòu))問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08C++ Log日志類(lèi)輕量級(jí)支持格式化輸出變量實(shí)現(xiàn)代碼
這篇文章主要介紹了C++ Log日志類(lèi)輕量級(jí)支持格式化輸出變量實(shí)現(xiàn)代碼,需要的朋友可以參考下2019-04-04Qt?10進(jìn)制和16進(jìn)制轉(zhuǎn)換的使用示例
在編程過(guò)程中,處理16進(jìn)制字符串與10進(jìn)制數(shù)字之間的轉(zhuǎn)換是很常見(jiàn)的需求,本文主要介紹了Qt?10進(jìn)制和16進(jìn)制轉(zhuǎn)換的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09Matlab實(shí)現(xiàn)同步子圖視角的方法詳解
這篇文章主要和大家分享三個(gè)可以Matlab中更簡(jiǎn)便實(shí)現(xiàn)同步子圖視角的技巧,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-06-06