C語(yǔ)言圖書管理系統(tǒng)簡(jiǎn)潔版
DOS界面的圖書管理系統(tǒng),具體內(nèi)容如下
程序分為兩塊:管理員操作(收錄圖書、刪除圖書等)和會(huì)員操作(注冊(cè)、借書、還書等);
1、管理員操作界面
2、會(huì)員操作界面
global.h頭文件:(程序中只使用了一個(gè)編寫的頭文件,在這里存放了所有的接口函數(shù)以及需要使用到的頭文件,還有結(jié)構(gòu)體的定義)
#include "iostream"
#include "string"
#include "fstream"
#include "conio.h" //getch();
#include "algorithm" //sort();
using namespace std;
#define Max_BookNum 10240 //最大存書數(shù)目
#define Max_MemberNum 10240 //最大會(huì)員數(shù)目
typedef enum{//圖書借閱狀態(tài)
Borrowed=1, //已被借閱
available=0 //當(dāng)前可借
}Book_Status;
typedef struct{//圖書信息
char name[20]; //書名
char author[20]; //作者
string isbn; //圖書編號(hào)
string price; //價(jià)格
string pub; //出版社
string pubtime; //出版時(shí)間
string addtime; //收錄日期
string Class; //分類號(hào)
Book_Status Book_sta; //借閱狀態(tài),初始化為可借
}Book_Message;
typedef struct{//借閱人信息
string name; //姓名
string sex; //性別
string number; //學(xué)號(hào)
char login[20]; //登錄號(hào) 以A1001開始
char code[20]; //登錄密碼
Book_Message Borrow_Book[10]; //最大可借書本數(shù)目:10本
int BorBook_Cnt; //借書數(shù)量
}Member_Message;
void Show_WelMenu(); //Welcome菜單
void Book_InfoInput(); //圖書信息錄入
void Book_InfoShow(Book_Message *Book_Info); //輸出圖書信息
void Book_Search(); //搜索書本 0,按書名;1,按作者
void Book_Delete(); //刪除圖書信息
void Book_InfoChange(); //修改圖書信息
void Book_Sort(); //圖書排序
void Book_RecordSave(); //圖書信息保存
int Book_RecordLoad(); //讀檔
void Admin_Login(); //管理員登錄
void Member_WelMenu(); //會(huì)員菜單界面
void Book_WelMenu(); //管理員菜單界面
void Member_Login(); //會(huì)員登錄
void Member_Reg(); //會(huì)員注冊(cè)
void Member_Bor(); //借書手續(xù)
void Member_Ret(); //還書
void Member_Search(); //會(huì)員資料查詢 0,按姓名;1,按學(xué)號(hào)
void Member_Delete(); //會(huì)員資料注銷
void Member_RecordSave();//會(huì)員信息保存
int Member_RecordLoad();//會(huì)員信息讀檔
void Member_InfoChange();
//void Member_BookMsgSave();
//int Member_BookMsgLoad();
void Member_MsgShow(Member_Message *Member_Msg);//信息顯示
void Member_CodeAdjust();//會(huì)員修改密碼
主程序:main.c文件:
#include "global.h"
int Book_Record=0;
int Member_Record=0;
Book_Message Book_List[Max_BookNum]; //圖書登記表
Member_Message Member_List[Max_MemberNum]; //會(huì)員登記表
int main()
{
char key[2];
while(1){
Show_WelMenu();
int cmd;
cin>>cmd;
if(!cmd)
Admin_Login(); //進(jìn)入管理員登錄界面
else
Member_Login(); //進(jìn)入會(huì)員登錄界面
cout<<"\t\t\t\t是否退出圖書管理系統(tǒng)?\ty/n\n";
cin>>key;
if(strcmp(key,"y")==0)
break;
}
cout<<"系統(tǒng)即將退出"<<endl;
getch();
return 0;
}
以下分別是各個(gè)功能模塊的函數(shù)實(shí)現(xiàn):
1、輸出界面(選擇登錄界面)
void Show_WelMenu()
{
system("cls");
cout<<"\t\t\t\t歡迎使用圖書管理系統(tǒng)"<<endl<<endl;
cout<<"\t\t\t\t0:管理員登錄"<<endl;
cout<<"\t\t\t\t1:會(huì)員登錄"<<endl;
}
2、管理員登錄程序(這里選擇了固定密碼登錄,Init_Code就是初始密碼。當(dāng)然也可以自行修改密碼)
void Admin_Login()
{
short count=0;
char code[20];
char Init_Code[10]="0";
cout<<"請(qǐng)輸入管理員密碼:"<<endl;
while(1){
cin>>code;
if(strcmp(code,Init_Code)==0){
break;
}
else{
cout<<"密碼錯(cuò)誤請(qǐng)重新輸入"<<endl;
count++;
if(count>3){
cout<<"密碼錯(cuò)誤超過三次,程序即將退出"<<endl;
break;
}
}
}
Book_WelMenu(); //enter Admin Menu
}
3、會(huì)員登錄程序(使用賬戶密碼登錄,若無(wú)賬號(hào),可自行注冊(cè))
void Member_Login()
{
Book_Record = 0;
Member_Record = 0;
Book_Record = Book_RecordLoad();
Member_Record = Member_RecordLoad(); //從文件讀入當(dāng)前注冊(cè)表
char code[20],login[20],Req[2];
bool Login_Sta = false;
while(1){ //登錄程序,登錄成功后退出
if(Login_Sta) break;
if((Member_Record==0)){
cout << "\t\t\t\t用戶庫(kù)為空,請(qǐng)先注冊(cè)" << endl;
cout << "\t\t\t\t按任意鍵注冊(cè)";
getch();
system("cls");
Member_Reg();
}
else{
cout << "\t\t\t\t請(qǐng)輸入會(huì)員登錄號(hào):" << endl;
cin>>login;
for(Mem_Point=0; Mem_Point<Member_Record; Mem_Point++){
if((strcmp(login,Member_List[Mem_Point].login) == 0)){
cout << "\t\t\t\t請(qǐng)輸入密碼:" << endl;
cin >> code;
while(strcmp(code, Member_List[Mem_Point].code) != 0){
cout << "密碼錯(cuò)誤,請(qǐng)重新輸入" << endl;
cin >> code;
}
Login_Sta = true;
cout << "\t\t\t\t登錄成功,按任意鍵繼續(xù)";
break;
}
}
if(Mem_Point >= Member_Record){
cout << "\t\t\t該用戶未注冊(cè),不能使用圖書管理系統(tǒng)" << endl;
cout << "\t\t\t\t是否現(xiàn)在注冊(cè)(Y/N)" << endl;
cin >> Req;
if((strcmp(Req,"y") == 0) || (strcmp(Req,"Y") == 0))
Member_Reg();
}
}
}
getch();
system("cls");
Member_WelMenu();
getch();
}
4、文件操作(讀入與寫入,這里只貼出會(huì)員信息部分的文件操作,圖書收錄的文件操作類似)
/*導(dǎo)出會(huì)員注冊(cè)表到文件*/
void Member_RecordSave()
{
ofstream outfile;
outfile.open("E:\\Course\\002\\Member_Info.txt",ios::ate|ios::out); //若有文件,先清空,再寫入
for(int i=0;i<Member_Record;i++){
outfile << Member_List[i].name <<" " << Member_List[i].sex <<" " << Member_List[i].number <<" "
<< Member_List[i].login <<" " << Member_List[i].code << endl;
}
outfile.close();
}
/*從文件導(dǎo)入會(huì)員注冊(cè)表*/
int Member_RecordLoad()
{
int Member_FileLoad=0;
ifstream infile;
infile.open("E:\\Course\\002\\Member_Info.txt",ios::in);
string n,s,num;
char l[20],c[20];
while(1){
infile >> n >> s >> num >> l >> c; //從文件導(dǎo)入信息,并注冊(cè)會(huì)員信息
Member_Add(n,s,num,l,c);
if(infile.eof() != 0)break;
Member_FileLoad++;
}
infile.close();
return Member_FileLoad;
}
5、會(huì)員注冊(cè)程序(先掃描注冊(cè)表,若已被注冊(cè)返回失敗。注冊(cè)就是在文件中添加會(huì)員信息)
//內(nèi)部函數(shù)
void Member_Add(string n,string s,string num,char* l,char* c)
{
Member_List[Member_Record].name = n;
Member_List[Member_Record].sex =s;
Member_List[Member_Record].number =num;
strcpy(Member_List[Member_Record].login,(const char*)l);
strcpy(Member_List[Member_Record].code,(const char*)c);
Member_Record++;
}
/*會(huì)員注冊(cè)程序*/
void Member_Reg()
{
string n,s,num;
char l[20],c[20],choice[2];
cout << "\t\t\t\t會(huì)員注冊(cè)" << endl;
cout << "\t\t請(qǐng)以此輸入 姓名、性別、學(xué)號(hào)、登錄號(hào)、密碼" << endl;
cin >> n >> s >> num >> l >> c;
for(int i=0; i<Member_Record; i++){
if(strcmp(Member_List[i].login,l) == 0){
cout << "\t\t\t\t該登錄號(hào)已存在,注冊(cè)失敗" << endl;
getch();
system("cls");
return;
}
}
Member_Add(n,s,num,l,c);
cout << "\t\t\t\t注冊(cè)成功" << endl;
cout << "\t\t\t\t是否存入文件\ty/n?" << endl;;
cin >> choice;
if((strcmp(choice,"y")==0) || (strcmp(choice,"Y") == 0))
Member_RecordSave();
getch();
system("cls"); //clear screan
}
6、會(huì)員注銷和密碼修改
/*會(huì)員資料注銷*/
void Member_Delete()
{
bool key=false;
char Del_Name[20],cmd[2];
cout<<"請(qǐng)輸入要注銷的會(huì)員登錄號(hào)"<<endl;
cin>>Del_Name;
for(int i=0;i<Member_Record;i++){
if(strcmp(Member_List[i].login,Del_Name)==0){ //found
key=true;
Member_MsgShow(&Member_List[i]);
cout<<"是否需要?jiǎng)h除該會(huì)員,y/n?"<<endl;
cin>>cmd;
if((strcmp(cmd,"y")==0)||(strcmp(cmd,"Y")==0)){ //ensure delete
while(i<=Member_Record-1){
Member_List[i]=Member_List[i+1];
i++;
}
Member_Record--;
Member_RecordSave();
cout<<"會(huì)員 "<<Del_Name<<" 已注銷"<<endl;
break;
}
}
}
if(!key) cout<<"沒有找到該會(huì)員"<<endl;
}
void Member_CodeAdjust()
{
char TempCode[20],choice[2],Temp[20];
strcpy(Temp,Member_List[Mem_Point].code);
while(1){
cout<<"請(qǐng)輸入原來的密碼:";
cin>>TempCode;
if(strcmp(Temp,TempCode)==0){
cout<<"請(qǐng)輸入新的密碼:";
cin>>TempCode;
cout<<"請(qǐng)?jiān)俅屋斎胄碌拿艽a:";
strcpy(Member_List[Mem_Point].code,TempCode);
cin>>TempCode;
if(strcmp(Member_List[Mem_Point].code,TempCode)==0){
cout<<"\t\t\t\t修改密碼成功,新密碼為"<<Member_List[Mem_Point].code<<endl; //test
Member_RecordSave();
break;
}
else{
cout<<"兩次輸入的密碼不一致,修改失敗!"<<endl;
cout<<"\t\t\t\t輸入Y繼續(xù),輸入N放棄修改"<<endl;
cin>>choice;
if((strcmp(choice,"n")==0)||(strcmp(choice,"N")==0))
return ;
continue;
}
}
cout<<"密碼錯(cuò)誤,請(qǐng)按任意鍵重新輸入!"<<endl;
getch();
}
}
管理員操作的大部分程序和會(huì)員操作是類似的,這里只貼一個(gè)圖書排序的操作
7、圖書排序
/* 內(nèi)部函數(shù),供圖書排序功能調(diào)用*/
bool cmp( Book_Message a, Book_Message b ){
if(strcmp( a.author, b.author ) == 0)
return strcmp( a.name, b.name ) < 0;
return strcmp( a.author , b.author ) < 0;
}
/*
* @brief 圖書排序,根據(jù)作者姓名升序排序,若作者相同,則按書名升序排序
* @param None
* @retval None
*/
void Book_Sort()
{
sort( Book_List, Book_List+Book_Record, cmp );
cout << "排序已完成" << endl;
cout << "所有圖書信息如下" << endl;
cout << "書名\t作者\(yùn)t價(jià)格\t出版社\t出版時(shí)間\t分類號(hào) 編號(hào) 收錄日期 是否可借" << endl;
for(int i=0; i<Book_Record; i++){
Book_InfoShow( &Book_List[i] );
}
getch();
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言實(shí)現(xiàn)圖書管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單圖書管理系統(tǒng)
- C語(yǔ)言圖書管理系統(tǒng)課程設(shè)計(jì)
- C語(yǔ)言鏈表實(shí)現(xiàn)圖書管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng)
- C語(yǔ)言設(shè)計(jì)圖書登記系統(tǒng)與停車場(chǎng)管理系統(tǒng)的實(shí)例分享
- C語(yǔ)言實(shí)現(xiàn)圖書館管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫(kù))
- C語(yǔ)言單鏈表實(shí)現(xiàn)圖書管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)圖書管理系統(tǒng)開發(fā)
相關(guān)文章
C語(yǔ)言小游戲之簡(jiǎn)易版三子棋(棋盤可自由擴(kuò)展)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋游戲,還可以自由擴(kuò)展棋盤大小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
C語(yǔ)言的abs()函數(shù)和div()函數(shù)你了解嗎
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的abs()函數(shù)和div()函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02
MATLAB全網(wǎng)最全的colormap的使用教程詳解
眾所周知,MATLAB中的colormap只有少得可憐的幾種,有很多應(yīng)用在很特殊的圖形中的colormap幾乎都沒有,而每次寫代碼都要去找顏色的圖屬實(shí)太麻煩。所以本文將包全部集成了進(jìn)來,終于有了這套包含200個(gè)colormap的工具函數(shù),希望對(duì)大家有所幫助2023-02-02
C++解決大數(shù)組棧內(nèi)存不夠問題的方法分析
這篇文章主要介紹了C++解決大數(shù)組棧內(nèi)存不夠問題的方法,結(jié)合實(shí)例形式對(duì)比分析了C++針對(duì)大數(shù)組棧內(nèi)存不足情況的常見解決方法及其優(yōu)缺點(diǎn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05
C++11中std::declval的實(shí)現(xiàn)機(jī)制淺析
這篇文章主要給大家介紹了關(guān)于C++11中std::declval實(shí)現(xiàn)機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07
C語(yǔ)言中改變目錄的相關(guān)操作函數(shù)詳解
這篇文章主要介紹了C語(yǔ)言中改變目錄的相關(guān)操作函數(shù)詳解,分別是fchdir()函數(shù)和rewinddir()函數(shù)的使用方法,需要的朋友可以參考下2015-09-09

