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

