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

C語言實(shí)現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)

 更新時(shí)間:2022年03月11日 10:16:43   作者:ztaiyizzz  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論