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