今天控制臺寫一個完整的圖書館借閱系統(tǒng),上次小編寫了一個比較基礎(chǔ)的康谆,功能也不是很完善领斥,很簡單嫉到,這次把它完善了一下比較全面,功能齊全了戒突,可以借書 還書屯碴。下面的話代碼還是比較多的,所以說暫時不把所有的功能發(fā)出來膊存,如果全鋪在上面导而,肯定是有視覺疲勞的,先發(fā)一部分隔崎,后面的幾個點今艺,再說一下,各位就自己動手去做吧爵卒。
/************************************************************************************************************************************
文 件 名:201600406061ldy
文件描述:結(jié)構(gòu)體數(shù)組+文件實現(xiàn)圖書管理系統(tǒng)
編譯環(huán)境:VS 2013
最后修改:2017-01-06
修 改 人:Ldy
*************************************************************************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include
#include // 頭文件
#include
#define N 99//宏定義最大存儲圖書數(shù)量
#define M 50//宏定義最大存儲借書人
struct book//定義結(jié)構(gòu)體存儲圖書信息
{
int num;//圖書編號
char name[20];//圖書名字
char author[10];//圖書作者
float price;//圖書價格
char state[5];//圖書存在狀態(tài)
char borrower_name[10];//圖書借書人
};
struct book Book[N];//定義結(jié)構(gòu)體數(shù)組存儲圖書信息
struct reader//定義結(jié)構(gòu)體存儲注冊信息
{
char Name[10];//存 注冊者的名字
char StuNum[15];//存 注冊者的學(xué)號
char ClassGrade[15];//存 注冊者的班級
char College[25];//存 注冊者的學(xué)院
char Sex[4];//存 注冊者的性別
};
struct reader student[M];
FILE *fp;//定義文件指針
FILE *fp1;//定義文件指針
int tem = 5;//用于判斷是否借書
void add();
void find();
void delete();
void modifier();
void regist();
void borrowb();
void returnb();
void vers_nfo();
void add()//增加圖書
{
system("cls");//清屏
//system("color 7e");
int i, j, k;//i虚缎,j 控制循環(huán)、k記錄當(dāng)前圖書數(shù)量钓株,
int n = 0;//n記錄當(dāng)前圖書數(shù)量
if ((fp = fopen("圖書信息.txt", "a+")) == NULL)//打開文件
{
printf("Can not open file!");
return;
}
for (i = 0; fscanf(fp, "%d %s %s %f %s %s", &Book[i].num, Book[i].name, Book[i].author, &Book[i].price, Book[i].state, Book[i].borrower_name) != EOF; i++)
{
n++;//記錄當(dāng)前書數(shù)
}
printf(" 親 請您輸入新增圖書本數(shù):");
scanf("%d", &j); //輸入新增圖書本數(shù)
if (n == 0)
{
k = 0;
}
else
{
k = n;//插入的位置
}
for (i = 0; i < j; i++)//圖書信息的錄入
{
Book[k].num = ++n;
printf(" 親 請您根據(jù)提示完成信息的錄入实牡,圖書 %d:", i + 1);
printf(" Please Input name:");
scanf("%s", Book[k].name);//錄入書名
printf(" Please Input author:");
scanf("%s", Book[k].author);//錄入書作者
printf(" Please Input price:");
scanf("%f", &Book[k].price);//錄入書價格
strcpy(Book[k].borrower_name, "暫無");//初始化借書人
strcpy(Book[k].state, "存在");//初始化書存在狀態(tài)
//把圖書信息寫入文件
fprintf(fp, "%d %s %s %f %s %s", Book[k].num, Book[k].name, Book[k].author, Book[k].price, Book[k].state, Book[k].borrower_name);
}
fclose(fp);//關(guān)閉文件
if (i == 0)//判斷 錄入圖書為數(shù)目
{
printf(" 親 您錄入圖書數(shù)目為:0");
printf(" 按 任 意 鍵 退 繼 續(xù)......");
}
else
{
printf(" 恭喜您成功錄入 %d 本書, ", j);
printf(" 按 任 意 鍵 繼 續(xù)......");
}
getchar();//獲取一個字符,若有則進行下一步
getchar();
}
void find()//瀏覽
{
system("cls");
//system("color 7b");
printf(" 1. 全 部 書 查 詢");
printf(" 2. 書 編 號 查 詢");
printf(" 3. 書 名 字 查 詢");
printf(" 4. 書 作 者 查 詢");
int a, i, n = 0, j = 0;
char bname[20];
char bauthor[20];
if ((fp = fopen("圖書信息.txt", "r")) == NULL)//打開文件
{
printf("Can not open file!");
return;
}
for (i = 0; fscanf(fp, "%d %s %s %f %s %s", &Book[i].num, Book[i].name, Book[i].author, &Book[i].price, Book[i].state, Book[i].borrower_name) != EOF; i++)
{
n++;//記錄當(dāng)前書數(shù)
}
fclose(fp);//關(guān)閉文件
if (n == 0)//判斷是否已錄入圖書
{
printf(" 沒 有 圖 書 可 查 詢V岷稀4次搿!J芨稹题涨!");
printf(" 按 任 意 鍵 退 出!");
getchar();
//system("cls");
getchar();
}
else
{
printf(" 請輸入對應(yīng)查詢方式的編號:");
scanf("%d", &a);//從鍵盤輸入查詢方式的編號
if ((fp = fopen("圖書信息.txt", "r")) == NULL)//打開文件
{
printf("Can not open file!");
return;
}
switch (a)
{
case 1:
system("cls");
//從圖書信息文件讀取數(shù)據(jù)
for (i = 0; fscanf(fp, "%d %s %s %f %s %s", &Book[i].num, Book[i].name, Book[i].author, &Book[i].price, Book[i].state, Book[i].borrower_name) != EOF; i++)
{
if (i == 0)//在輸出第一個圖書信息前輸出下列信息
{
printf("圖書編號 圖書名字 圖書作者 圖書價格 存在狀態(tài) 圖書借書人");
}
//輸出圖書信息
fprintf(stdout, "%8d %8s %8s %8.2f %8s %10s", Book[i].num, Book[i].name, Book[i].author, Book[i].price, Book[i].state, Book[i].borrower_name);
}
printf(" 查詢成功, 按任意鍵繼續(xù)......");
getchar();
getchar();
system("cls");
break;
case 2:
system("cls");
printf(" 請輸入圖書編號:");
int num1;
scanf("%d", &num1);//從鍵盤輸入圖書的編號
//從文件中讀取圖書信息并與 從鍵盤輸入圖書的編號進行比較
for (i = 0; fscanf(fp, "%d %s %s %f %s %s", &Book[i].num, Book[i].name, Book[i].author, &Book[i].price, Book[i].state, Book[i].borrower_name) != EOF; i++)
{
if (num1 == i + 1)
{
printf("圖書編號 圖書名字 圖書作者 圖書價格 存在狀態(tài) 圖書借書人");
//輸出圖書信息
fprintf(stdout, "%8d %8s %8s %8.2f %8s %10s", Book[i].num, Book[i].name, Book[i].author, Book[i].price, Book[i].state, Book[i].borrower_name);
printf(" 查詢成功, 按任意鍵繼續(xù)......");
getchar();
getchar();
system("cls");
}
}
if (num1 >= i + 1)//判斷輸入的圖書編號是否存在
{
printf(" 查詢結(jié)果:你輸入的圖書編號不存在!!!!!!");
printf(" 按任意鍵繼續(xù).......");
getchar();
getchar();
}
break;
case 3:
system("cls");
printf(" 請輸入圖書的名字:");
getchar();
gets(bname);//輸入圖書的名字
//從文件中讀取圖書信息并與 從鍵盤輸入圖書的名字進行比較
for (i = 0; fscanf(fp, "%d %s %s %f %s %s", &Book[i].num, Book[i].name, Book[i].author, &Book[i].price, Book[i].state, Book[i].borrower_name) != EOF; i++)
{
if (strcmp(Book[i].name, bname) == 0)//比較
{
j++;
printf("圖書編號 圖書名字 圖書作者 圖書價格 存在狀態(tài) 圖書借書人");
//輸出圖書信息
fprintf(stdout, "%8d %8s %8s %8.2f %8s %10s", Book[i].num, Book[i].name, Book[i].author, Book[i].price, Book[i].state, Book[i].borrower_name);
printf(" 查詢成功, 按任意鍵退出......");
getchar();
system("cls");
}
}
if (j == 0)
{
printf(" 查詢結(jié)果:沒有此書!!!!!!");
printf(" 按任意鍵退出......");
getchar();
system("cls");
}
break;
case 4:
system("cls");
printf(" 請輸入圖書的作者:");
getchar();
gets(bauthor);//從鍵盤輸入圖書的作者
//getchar();
//fclose(fp);
//fp = fopen("圖書信息.txt", "r");
//從文件中讀取圖書信息并與 從鍵盤輸入圖書的的作者進行比較
for (i = 0; fscanf(fp, "%d %s %s %f %s %s", &Book[i].num, Book[i].name, Book[i].author, &Book[i].price, Book[i].state, Book[i].borrower_name) != EOF; i++)
{
if (strcmp(Book[i].author, bauthor) == 0)
{
j++;
printf("圖書編號 圖書名字 圖書作者 圖書價格 存在狀態(tài) 圖書借書人");
//輸出圖書信息
fprintf(stdout, "%8d %8s %8s %8.2f %8s %10s", Book[i].num, Book[i].name, Book[i].author, Book[i].price, Book[i].state, Book[i].borrower_name);
//fclose(fp);
printf(" 查詢成功, 按任意鍵繼續(xù)......");
getchar();
system("cls");
}
}
if (j == 0)
{
printf(" 查詢結(jié)果:沒 有 此 書!!!!!!");
printf(" 按任意鍵退出......");
getchar();
}
break;
default:
system("cls");
printf("");
printf(" ——————————————————————---------------------------------------------------------");
printf(" 選 擇 錯 誤.......");
printf(" ——————————————————————---------------------------------------------------------");
printf(" 按 任 意 鍵 退 出......");
getchar();
getchar();
system("cls");
break;
}
fclose(fp);//關(guān)閉文件
}
}
發(fā)一下最終的效果圖总滩,可以看一下纲堵,可以加下群315732400(群內(nèi)有各類型的項目資源可以學(xué)習(xí))
涉及到的知識點也不是很多,主要知識點 模塊化的程序設(shè)計闰渔,C語言數(shù)組操作席函,兩個文件的交互,后面的話還有一些點暫時就沒發(fā)出來了澜建,一般有基礎(chǔ)的話自己可以動手去嘗試操作一下向挖,去完善一下,可以做出來的炕舵,后面涉及到的1何之、刪除圖書信息 2、圖書修改3咽筋、借書注冊4溶推、借書手續(xù)5、還書手續(xù)6、版本信息7蒜危、菜單虱痕。小編暫時就說到這了,是不是比簡單的那個感覺瞬間好看多了辐赞,希望對大家剛接觸的有所幫助吧