C++

C language library management system concise version


The library management system of DOS interface is as follows

The program is divided into two parts: administrator operation (include books, delete books, etc.) and member operation (register, borrow books, return books, etc.);

1. Administrator operation interface

2. Member operation interface

global.h header :(only one written header file is used in the program, where all the interface functions and the required header files are stored, as well as the structure definition)

#include "iostream"
#include "string"
#include "fstream"
#include "conio.h"   //getch();
#include "algorithm"  //sort();
using namespace std;

#define Max_BookNum 10240   // Maximum number of books stored
#define Max_MemberNum 10240   // Maximum membership

typedef enum{// Book borrowing status
 Borrowed=1,    // Have been borrowing
 available=0    // The current can borrow
}Book_Status;

typedef struct{// Book information
 char name[20];   // Title:
 char author[20];  // The author
 string isbn;   // Book number
 string price;   // The price
 string pub;    // Press.
 string pubtime;   // Publication date
 string addtime;   // Collection date
 string Class;   // Classification,
 Book_Status Book_sta; // Borrowing status , Initialize as loanable
}Book_Message;

typedef struct{// Borrower information
 string name;  // The name
 string sex;    // gender
 string number;   // Student id
 char login[20];   // Log in,   In order to A1001 start
 char code[20];   // The login password
 Book_Message Borrow_Book[10];  // Maximum number of books available: 10 this
 int BorBook_Cnt;  // Number of books
}Member_Message;


void Show_WelMenu(); //Welcome The menu
void Book_InfoInput(); // Book information entry
void Book_InfoShow(Book_Message *Book_Info); // Output book information
void Book_Search();  // Search the book   0 By title; 1 According to the author
void Book_Delete();  // Delete book information
void Book_InfoChange(); // Modify book information
void Book_Sort();  // Book sorting
void Book_RecordSave(); // Book information saving
int Book_RecordLoad(); // Read the file


void Admin_Login();   // Administrator login
void Member_WelMenu();  // Member menu interface
void Book_WelMenu();  // Administrator menu interface

void Member_Login();  // Member login
void Member_Reg();  // Registered members
void Member_Bor();  // Borrow formalities
void Member_Ret();  // Return the book
void Member_Search(); // Membership information enquiry  0 By name; 1 According to the student id
void Member_Delete(); // Membership information cancellation
void Member_RecordSave();// Member information saving
int Member_RecordLoad();// Member information read file
void Member_InfoChange();


//void Member_BookMsgSave();
//int Member_BookMsgLoad();
void Member_MsgShow(Member_Message *Member_Msg);// Information display
void Member_CodeAdjust();// Member changes password

Main program: main.c file:

#include "global.h"
int Book_Record=0;
int Member_Record=0;
Book_Message Book_List[Max_BookNum];   // Book registration form
Member_Message Member_List[Max_MemberNum];  // Membership form

int main()
{
 char key[2];
 while(1){
  Show_WelMenu();
  int cmd;
  cin>>cmd;
  if(!cmd)
   Admin_Login();   // Enter the administrator login interface
  else
   Member_Login();   // Enter the member login interface

  cout<<"\t\t\t\t Whether to exit the library management system ?\ty/n\n";
  cin>>key;
  if(strcmp(key,"y")==0)
   break;
 }
 cout<<" The system is about to exit "<<endl;
 getch();
 return 0;
}

The function implementation of each functional module is as follows:

1. Output interface (select the login interface)

void Show_WelMenu()
{
 system("cls");
 cout<<"\t\t\t\t Welcome to the library management system "<<endl<<endl;
 cout<<"\t\t\t\t0 : administrator login "<<endl;
 cout<<"\t\t\t\t1 : member login "<<endl;
}

2. Administrator login program (the fixed password is selected here, and Init_Code is the initial password. You can also change your password.)

void Admin_Login()
{
 short count=0;
 char code[20];
 char Init_Code[10]="0";
 cout<<" Please enter the administrator password: "<<endl;
 while(1){
  cin>>code;
  if(strcmp(code,Init_Code)==0){
   break;
  }
  else{
   cout<<" The password is wrong, please enter it again "<<endl;
   count++;
   if(count>3){
    cout<<" Password error exceeds 3 Time, the program is about to exit "<<endl;
    break;
   }
  }
 }
 Book_WelMenu();   //enter Admin Menu
}

3. Member login procedure (use account password to log in, if there is no account, you can register by yourself)

void Member_Login()
{
 Book_Record = 0;
 Member_Record = 0;
 Book_Record = Book_RecordLoad();
 Member_Record = Member_RecordLoad();  // Reads the current registry from a file
 char code[20],login[20],Req[2];
 bool Login_Sta = false;
 while(1){ // Login program, log out after success
  if(Login_Sta) break;
  if((Member_Record==0)){
   cout << "\t\t\t\t The user library is empty, please register first " << endl;
   cout << "\t\t\t\t Press any key to register ";
   getch();
   system("cls");
   Member_Reg();
  }
  else{
   cout << "\t\t\t\t Please enter your login number: " << 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 Please enter your password: " << endl;
     cin >> code;
     while(strcmp(code, Member_List[Mem_Point].code) != 0){
       cout << " Password mistake , Please re-enter " << endl;
       cin >> code;
     }
     Login_Sta = true;
     cout << "\t\t\t\t Login successful , Press any key to continue ";
     break;
    }
   }
   if(Mem_Point >= Member_Record){
    cout << "\t\t\t This user is not registered and cannot use the library management system " << endl;
    cout << "\t\t\t\t Whether to register now ( Y/N ) " << endl;
    cin >> Req;
    if((strcmp(Req,"y") == 0) || (strcmp(Req,"Y") == 0))
     Member_Reg();
   }
  }
 }
 getch();
 system("cls");
 Member_WelMenu();
 getch();
}

4. File operation (read in and write, only the file operation of the member information part is posted here, and the file operation of the book is similar)

/* Export the member registry to the file */
void Member_RecordSave()
{
 ofstream outfile;
 outfile.open("E:\\Course\\002\\Member_Info.txt",ios::ate|ios::out); // If you have a file, empty it before you write it
 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();
}

/* Import the member registry from the file */
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;  // Import the information from the file and register the membership information
  Member_Add(n,s,num,l,c);
  if(infile.eof() != 0)break;
  Member_FileLoad++;
 }
 infile.close();
 return Member_FileLoad;
}

5, member registration procedures (first scan the registry, if the registration has been returned failed. To register is to add member information to the file.)

// Internal function
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++;
}

/* Membership registration procedure */
void Member_Reg()
{
 string n,s,num;
 char l[20],c[20],choice[2];
 cout << "\t\t\t\t Registered members " << endl;
 cout << "\t\t Please enter here   Name, gender, student number, login number and password " << 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 The login number already exists. Registration failed " << endl;
   getch();
   system("cls");
   return;
  }
 }
 Member_Add(n,s,num,l,c);
 cout << "\t\t\t\t Registered successfully " << endl;
 cout << "\t\t\t\t Whether to file or not \ty/n?" << endl;;
 cin >> choice;
 if((strcmp(choice,"y")==0) || (strcmp(choice,"Y") == 0))
  Member_RecordSave();
 getch();
 system("cls");  //clear screan
}

6. Member logout and password modification

/* Membership information cancellation */
void Member_Delete()
{
 bool key=false;
 char Del_Name[20],cmd[2];
 cout<<" Please enter the login number of the member you want to logout "<<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<<" Whether you need to delete this member ,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<<" members  "<<Del_Name<<"  Has been cancelled "<<endl;
    break;
   }
  }
 }
 if(!key) cout<<" The member was not found "<<endl;
}

void Member_CodeAdjust()
{
 char TempCode[20],choice[2],Temp[20];
 strcpy(Temp,Member_List[Mem_Point].code);
 while(1){
  cout<<" Please enter the original password: ";
  cin>>TempCode;
  if(strcmp(Temp,TempCode)==0){
   cout<<" Please enter a new password: ";
   cin>>TempCode;
   cout<<" Please enter your new password again: ";
   strcpy(Member_List[Mem_Point].code,TempCode);
   cin>>TempCode;
   if(strcmp(Member_List[Mem_Point].code,TempCode)==0){
    cout<<"\t\t\t\t Password changed successfully, the new password is "<<Member_List[Mem_Point].code<<endl;    //test
    Member_RecordSave();
    break;
   }
   else{
    cout<<" The password entered twice is not 1 To you, the modification failed! "<<endl;
    cout<<"\t\t\t\t The input Y Go ahead, enter N Give up to modify "<<endl;
    cin>>choice;
    if((strcmp(choice,"n")==0)||(strcmp(choice,"N")==0))
     return ;
    continue;
   }
  }
  cout<<" Password error, please press any key to enter again! "<<endl;
  getch();
 }
}

Administrator operation of most procedures and member operations are similar, here only posted a book sorting operation

7. Sorting books

/*  Inner function for book sorting function call */
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  Books are sorted by author's name in ascending order, or by title in ascending order if the author is the same
* @param None
* @retval None
*/
void Book_Sort()
{
 sort( Book_List, Book_List+Book_Record, cmp );
 cout << " Sorting done " << endl;
 cout << " All book information is as follows " << endl;
 cout << " Title: \t The author \t The price \t Press. \t Publication date \t Classification,   Serial number   Collection date   Could you borrow " << endl;
 for(int i=0; i<Book_Record; i++){
  Book_InfoShow( &Book_List[i] );
 }
 getch();
}