㈠ 圖書館管理系統代碼
/*****************************************************************************************/
#include <iostream>
#include <iomanip>
#include <cstring>
#include <fstream>//輸入/輸出文件流類
using namespace std;
const int Maxr=100;//最多的讀者
const int Maxb=100;//最多的圖書
const int Maxbor=5;//每位讀者最多借五本書
//讀者類,實現對讀者的信息的描述
class Reader
{
private:
int tag; //刪除標記 1:已刪 0:未刪
int no; //讀者編號
char name[10]; //讀者姓名
int borbook[Maxbor];//所借圖書
public:
Reader() {}
char *getname() {return name;} //獲取姓名
int gettag() {return tag;} //獲取刪除標記
int getno() {return no;} //獲取讀者編號
void setname(char na[]) //設置姓名
{
strcpy(name,na);
}
void delbook(){ tag=1; }//設置刪除標記 1:已刪 0:未刪
void addreader(int n,char *na)//增加讀者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借書操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
int retbook(int bookid)//還書操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//讀出讀者信息
{
cout << setw(5) << no <<setw(10) << name<<"借書編號:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;
}
};
//讀者類庫,實現建立讀者的個人資料
class RDatabase
{
private:
int top; //讀者記錄指針
Reader read[Maxr];//讀者記錄
public:
RDatabase() //構造函數,將reader.txt讀到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打開一個輸入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close(); //關閉 reader.txt
}
void clear()//刪除所有讀者信息
{
top=-1;
}
int addreader(int n,char *na)//添加讀者時先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader *query(int readerid)//按編號查找
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
void disp() //輸出所有讀者信息
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//讀者庫維護
~RDatabase() //析構函數,將read[]寫到reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
char choice;
char rname[20];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t讀 者 維 護\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 刪 除\n\n\t\t 4 查 找\n\n\t\t 5 顯 示\n\n\t\t 6 全 刪\n\n\t\t 0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "輸入讀者編號:";
cin >> readerid;
cout << "輸入讀者姓名:";
cin >> rname;
addreader (readerid,rname);
break;
case '2':
cout << "輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout << " 該讀者不存在 "<<endl;
break;
}
cout << "輸入新的姓名:";
cin >> rname;
r->setname(rname);
break;
case '3':
cout << " 輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 該讀者不存在" << endl;
break;
}
r->delbook();
break;
case '4':
cout << "讀入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"該讀者不存在"<< endl;
break;
}
r->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";break;
}
}
}
//圖書類,實現對圖書的描述,圖書的編號,書名,借出,還入等
class Book
{
private:
int tag;//刪除標記 1:已刪 0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() { return name; }//獲取姓名
int getno(){ return no; }//獲取圖書編號
int gettag(){ return tag; }//獲取刪除標記
void setname(char na[])//設置書名
{
strcpy(name,na);
}
void delbook(){ tag=1;}//刪除圖書
void addbook(int n,char *na)//增加圖書
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借書操作
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//還書操作
{
onshelf=1;
}
void disp()//輸出圖書
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<endl;
}
};
//圖書庫類,實現對圖書的維護,查找,刪除等
class BDatabase
{
private:
int top; //圖書記錄指針
Book book[Maxb]; //圖書記錄
public:
BDatabase()//構造函數,將book.txt讀到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全刪
{
top=-1;
}
int addbook(int n,char *na)//增加圖書
{
Book *p=query(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找圖書
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();//圖書庫維護
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析構函數,將book[]寫到book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
char choice;
char bname[40];
int bookid;
Book *b;
while (choice!='0')
{
cout <<"\n\n\n\t\t\t圖 書 維 護 "<<endl<<endl;
cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 刪 除\n\t\t4 查 找\n\t\t5 顯 示\n\t\t6 全 刪\n\t\t0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
cout << "輸入圖書書名:"<<endl;
cin >> bname;
addbook(bookid,bname);
break;
case '2':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout << " 該圖書不存在 "<<endl;
break;
}
cout << "輸入新的書名:"<<endl;
cin >> bname;
b->setname(bname);
break;
case '3':
cout <<" 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在" << endl;
break;
}
b->delbook();
break;
case '4':
cout << " 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在"<< endl;
break;
}
b->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
}
//main() 函數的實現,程序的主界面的引導
int main(void)
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統\n\n\n";
cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維 護\n\n\t\t\t4 讀 者 維 護\n\n\t\t\t0 離 開"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" 借書 讀者編號:";
cin >>readerid;
cout <<" 圖書編號: ";
cin >>bookid;
r=ReaderDB.query(readerid);//按編號查找
if (NULL==r)
{
cout <<" 不存在該讀者,不能借書"<< endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能借書"<< endl;
break;
}
if (b->borrowbook()==0)
{
cout << " 該圖書已借出,不能借書"<< endl;
break;
}
r->borrowbook(b->getno());
break;
case '2':
cout<<"還書\n 讀者編號:";
cin >>readerid;
cout << " 圖書編號:";
cin >>bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout <<" 不存在該讀者,不能還書" << endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能還書" <<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
case '3':
BookDB.bookdata();
break;
case '4':
ReaderDB.readerdata();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
return 0;
}
希望能解決您的問題。
㈡ 用C語言編寫的"圖書館管理系統"的源代碼,刪減版
#include <iostream>
#include <iomanip>
#include <string>
//輸入/輸出文件流類
#include <fstream>
using namespace std;
//最多的讀者
const int Maxr=100;
//最多的圖書
const int Maxb=100;
//每位讀者最多借五本書
const int Maxbor=5;
//讀者類,實現對讀者的信息的描述
class Reader
{
private:
//刪除標記 1:已刪 0:未刪
int tag;
//讀者編號
int no;
//讀者姓名
char name[10];
//所借圖書
int borbook[Maxbor];
public:
Reader()
{
;
}
//獲取姓名
char *getname()
{
return name;
}
//獲取刪除標記
int gettag()
{
return tag;
}
//獲取讀者編號
int getno()
{
return no;
}
//設置姓名
void setname(char na[])
{
strcpy(name,na);
}
//設置刪除標記 1:已刪 0:未刪
void delbook()
{
tag=1;
}
//增加讀者
void addreader(int n,char *na)
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
//借書操作
void borrowbook(int bookid)
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
//還書操作
int retbook(int bookid)
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
//讀出讀者信息
void disp()
{
cout << setw(5) << no <<setw(10) << name<<"借書編號:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;
}
};
//讀者類庫,實現建立讀者的個人資料
class RDatabase
{
private:
//讀者記錄指針
int top;
//讀者記錄
Reader read[Maxr];
public:
//構造函數,將reader.txt讀到read[]中
RDatabase()
{
Reader s;
top=-1;
//打開一個輸入文件
fstream file("reader.txt",ios::in);
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
//關閉 reader.txt
file.close();
}
//刪除所有讀者信息
void clear()
{
top=-1;
}
//添加讀者時先查找是否存在
int addreader(int n,char *na)
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
//按編號查找
Reader *query(int readerid)
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
//輸出所有讀者信息
void disp()
{
for (int i=0;i<=top;i++)
read[i].disp();
}
//讀者庫維護
void readerdata();
//析構函數,將read[]寫到reader.txt文件中
~RDatabase()
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
char choice;
char rname[20];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t讀 者 維 護\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 刪 除\n\n\t\t 4 查 找\n\n\t\t 5 顯 示\n\n\t\t 6 全 刪\n\n\t\t 0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "輸入讀者編號:";
cin >> readerid;
cout << "輸入讀者姓名:";
cin >> rname;
addreader (readerid,rname);
break;
case '2':
cout << "輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout << " 該讀者不存在 "<<endl;
break;
}
cout << "輸入新的姓名:";
cin >> rname;
r->setname(rname);
break;
case '3':
cout << " 輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 該讀者不存在" << endl;
break;
}
r->delbook();
break;
case '4':
cout << "讀入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"該讀者不存在"<< endl;
break;
}
r->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";break;
}
}
}
//圖書類,實現對圖書的描述,圖書的編號,書名,借
private:
//刪除標記 1:已刪 0:未刪
int tag;
//圖書編號
int no;
//書名
char name[20];
//是否再架 1:再架 2:已借
int onshelf;
public:
Book(){}
//獲取姓名
char *getname() { return name; }
//獲取圖書編號
int getno(){ return no; }
//獲取刪除標記
int gettag(){ return tag; }
//設置書名
void setname(char na[])
{
strcpy(name,na);
}
//刪除圖書
void delbook(){ tag=1;}
//增加圖書
void addbook(int n,char *na)
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
//借書操作
int borrowbook()
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
//還書操作
void retbook()
{
onshelf=1;
}
//輸出圖書
void disp()
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<endl;
}
};
//圖書庫類,實現對圖書的維護,查找,刪除等
class BDatabase
{
private:
//圖書記錄指針
int top;
//圖書記錄
Book book[Maxb];
public:
//構造函數,將book.txt讀到book[]中
BDatabase()
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
//全刪
void clear()
{
top=-1;
}
//增加圖書
int addbook(int n,char *na)
{
Book *p=query(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
//查找圖書
Book *query(int bookid)
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
//圖書庫維護
void bookdata();
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
//析構函數,將book[]寫到book.txt文件中
~BDatabase()
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
char choice;
char bname[40];
int bookid;
Book *b;
while (choice!='0')
{
cout <<"\n\n\n\t\t\t圖 書 維 護 "<<endl<<endl;
cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 刪 除\n\t\t4 查 找\n\t\t5 顯 示\n\t\t6 全 刪\n\t\t0 退 出"<<endl;
cin >> choice; {
case '1':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
cout << "輸入圖書書名:"<<endl;
cin >> bname;
addbook(bookid,bname);
break;
case '2':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout << " 該圖書不存在 "<<endl;
break;
}
cout << "輸入新的書名:"<<endl;
cin >> bname;
b->setname(bname);
break;
case '3':
cout <<" 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在" << endl;
break;
}
b->delbook();
break;
case '4':
cout << " 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在"<< endl;
break;
}
b->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
}
//main() 函數的實現,程序的主界面的引導
void main()
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統\n\n\n";
cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維 護\n\n\t\t\t4 讀 者 維 護\n\n\t\t\t0 離 開"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" 借書 讀者編號:";
cin >>readerid;
cout <<" 圖書編號: ";
cin >>bookid;
//按編號查找
r=ReaderDB.query(readerid);
if (NULL==r)
{
cout <<" 不存在該讀者,不能借書"<< endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能借書"<< endl;
break;
}
if (b->borrowbook()==0)
{
cout << " 該圖書已借出,不能借書"<< endl;
break;
}
r->borrowbook(b->getno());
break;
case '2':
cout<<"還書\n 讀者編號:";
cin >>readerid;
cout << " 圖書編號:";
cin >>bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout <<" 不存在該讀者,不能還書" << endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能還書" <<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
case '3':
BookDB.bookdata();
break;
case '4':
ReaderDB.readerdata();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
}
㈢ 求圖書館管理系統c++源代碼
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#define STACK_INIT_SIZE 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
struct student /*定義學生類型,用於存放借出的書籍*/
{
int studentnum,phonenum;
char lendbook[10];
}student[1000];
struct book /*定義書的類型*/
{
char bookname[11];
char publisher[20];
char page;
char year[6];
char status[4];
char name[11];
char author[51];
char booknum;
char bookcreat[10];
char borrownum;
char turefalse; /*用於借書和還書模塊判斷一本書是否借出的條件*/
}book[1000];
struct car /*借書卡的數據類型*/
{
int carnum;
char studentname[10];
int studentclass;
int studentphone;
}car[100];
addcar()
{
FILE *fp;
int i=0;
double allnum,stillbook,outbook,allmoney,avemoney;
fp=fopen("car.txt","a+");
printf("請你輸入學生姓名\n");
scanf("%s",car[i].studentname);
printf("請你輸入班級\n");
scanf("%d",&car[i].studentclass);
fwrite(&car[i],sizeof(struct car),1,fp);
fclose(fp);
printf("注冊完畢,任意鍵返回\n");
fp=fopen("book.txt","r");
avemoney=allmoney/allnum;
fclose(fp);
printf("書籍總數:%ld,已借出的書籍:%ld,在館的書籍:%ld,書籍貫總金額:%ld,書籍平均價格:%ld",
stillbook,outbook,allmoney,avemoney);
getch();
}
carcount()
{
FILE *fp;
int i,n=0;
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++)
{
printf("第%d張卡<卡號:%d 姓名:%s 班級:%d 手機號碼:%d>\n",
i+1,car[i].carnum,car[i].studentname,car[i].studentclass,car[i].studentphone);
n=n+1;
}
fclose(fp);
printf("目前共有%d本書\n",n);
printf("按任意鍵\n");
getch();
}
void findbook()
{
FILE *fp;
char bookname[10];
int ture,i,booknum;
fp=fopen("book.txt","r");
printf("請輸入你要查找的booknum");
scanf("%d",&booknum);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
if(strcmp(booknum,book[i].booknum)==0)
{
if(book[i].turefalse==1)
printf("這本書的詳細資料是:%d %s %s 此書現在無人借閱\n按任意鍵返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
else {printf("這本書已經有人借出\n");fclose(fp);return 0;}
fclose(fp);
return FALSE;
}
else
printf("沒有你要查詢的書籍\n");
fclose(fp);}
return FALSE;
}
void borrowbook(struct book *m) //借閱圖書函數
{
int num;
struct book *b, *b1;
printf("輸入要借書的編碼:");
scanf("%d",&num);
b = searchbook(num); /*調用查找圖書結點函數*/
if(b != NULL)
{
if(m->borrownum < 10)
{
// b->status = '0';
// b1 = &m->book[m->borrownum];
strcpy(b1->name,b->name);
strcpy(b1->author,b->author);
b1->booknum = b->booknum;
strcpy(b1->year,b->year);
b1->page = b->page;
strcpy(b1->publisher,b->publisher);
// b1->price = b->price;
// b1->status = b->status;
m->borrownum++;
printf("%s借書成功!",b->name);
getch();
}
else
{
printf("你已借滿10本書.");
getch();
}
}
else
{
printf("沒有你要借的書.");
getch();
}
}
huanbook() /*還書函數*/
{
FILE *fp,*fp2; /*定義兩個文件指針,fp2用於修改數據時設立臨時文件用,防止數據遭破壞*/
int i,n;
int carnum,booknum;
char lendbook[10];
printf("請你輸入你的卡號\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r"); /*讀取卡號記錄*/
{
if(car[i].carnum==carnum) /*卡號存在,進入下一循環*/
{
n=i;
fclose(fp);
printf("請輸入你要還的書的booknum\n");
scanf("%d",&booknum);
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) /*判斷是否借閱了輸入的書*/
{
if(strcmp(student[i].lendbook,lendbook)==0) /*借閱了該書,進入下一循環,否則出錯顯示*/
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue; /*刪除還掉的書的借書記錄*/
}
fwrite(&student[i],sizeof(struct student),1,fp2); /*寫入原來沒還的書的記錄*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++)
{
fwrite(&student[i],sizeof(struct student),1,fp); /*將借書記錄信息寫回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清臨時文件的記錄*/
fclose(fp2);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) /*將書的記錄寫入臨時文件,防止因為修改信息破壞以前的記錄*/
{
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(struct book),1,fp2); /*將還的書的原來狀態設為無人借閱的*/
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++)
{
fwrite(&book[i],sizeof(struct book),1,fp); /*將臨時文件寫回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w"); /*清臨時文件*/
fclose(fp2);
printf("還書完畢,按任意鍵返回\n");
getch();
return 1;
}
else
printf("你沒有借這樣的書,任意鍵返回\n");}/*出錯提示*/
fclose(fp);
getch();
return 0;
}
else
printf("系統沒這樣的卡,和管理員聯系,按任意鍵返回\n");}/*出錯提示*/
fclose(fp);
getch();
}
void main()
{
struct book *m;
char ch5;
do
{
printf("---------------歡迎進入圖書查詢系統!--------------\n");
printf(" 1:<注冊卡號>\n");
printf(" 2: <卡號信息>\n");
printf(" 3:<按書籍編號查找>\n");
printf(" 4: <借書>\n");
printf(" 5: <還書>\n");
printf(" 0:<返回>\n");
printf("請輸入0--5,其他輸入非法!\n");
scanf("%s",&ch5);
switch(ch5)
{
case '1':addcar();getch();
case '2':carcount();getch();break;
case '3':findbook();getch();break;
case '4':borrowbook(m );getch();break;
case '5':huanbook();getch();break;
case '0':break;
default:printf("無此操作\n");getch();break;
}
}while(ch5!='0');
//return FALSE;
}
㈣ 求圖書館管理系統C++源代碼
#include<iostream>
#include<fstream>
#include<windows.h>
#include<stdlib.h>
using namespace std;
void mainmenu();
void Manage_Book();
void input_Book();
void input_Reader();
void New_Book();
void Seek_Book();
void Borrow_Manage();
void Borrow_Book();
void Return_Book();
void Output_Message();
void Exit_System();
int u,v=3,k=0;
struct Book
{
char name[20];
int booknumber;
int num_present;
int num_all;
}book[1000];
struct Reader
{
char name[20];
int readernumber;
int card;
}reader[3];
void mainmenu()
{
int Num_Choice1,flag=1;
system("color E");
for(;k<=0;k++)
{
input_Book();
input_Reader();
}
while(flag==1)
{
system("cls");
cout<<"\t\t\t◆◆◆◆◆主菜單◆◆◆◆◆"<<endl
<<"\t\t\t☆ 1.圖書管理 ☆"<<endl
<<"\t\t\t☆ 2.借閱管理 ☆"<<endl
<<"\t\t\t☆ 3.輸出信息 ☆"<<endl
<<"\t\t\t☆ 4.退出系統 ☆"<<endl
<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cout<<"請輸入所需要的服務編碼"<<endl;
cin>>Num_Choice1;
switch(Num_Choice1)
{
case 1:
Manage_Book();
break;
case 2:
Borrow_Manage();
break;
case 3:
Output_Message();
break;
case 4:
Exit_System();
flag=0;
break;
default:
flag=0;
cout<<"輸入有誤!!"<<endl;
}
}
}
void Manage_Book()
{
int flag1=1,Num_Choice2;
system("cls"); while(flag1==1)
{
cout<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl
<<"\t\t\t☆ 1.新書入庫 ☆"<<endl
<<"\t\t\t☆ 2.圖書查詢 ☆"<<endl
<<"\t\t\t☆ 3.返回主菜單 ☆"<<endl
<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cin>>Num_Choice2;
switch(Num_Choice2)
{
case 1:
flag1=2;
New_Book();
break;
case 2:
flag1=2;
Seek_Book();
break;
case 3:
mainmenu();
default:
flag1=1;
cout<<"輸入有誤!"<<endl;
system("pause");
system("cls");
}
}}
void input_Book()
{
cout<<"請依照提示輸入現有的三本圖書的信息:"<<endl;
for(int i=0;i<3;i++)
{
cout<<"書名:"<<endl;
cin>>book[i].name;
cout<<"書號:"<<endl;
cin>>book[i].booknumber;
cout<<"庫存量:"<<endl;
cin>>book[i].num_all;
cout<<"現存量:"<<endl;
cin>>book[i].num_present;
}
}
void New_Book()
{
system("cls");
int j;
char newbook_name[20];
cout<<"請輸入新書書名:"<<endl;
cin>>newbook_name;
for(j=0;j<1000;j++)
{
if(strcmp(newbook_name,book[j].name)==0)
{
book[j].num_all++;
book[j].num_present++;
break;
}
}
if(j==1000)
{
cout<<"請為此新書編號:"<<endl;
v++;
cin>>book[v].booknumber;
strcpy(book[v].name,newbook_name);
book[v].num_all=1;
book[v].num_present=1;
}
else cout<<"已有此書,庫存量加一"<<endl;
system("pause");
}
void Seek_Book()
{
system("cls");
int k,booknumber;
cout<<"請輸入所要查詢的書號:"<<endl;
cin>>booknumber;
for(k=0;k<1000;k++)
{
if(book[k].booknumber==booknumber)
{
cout<<"書號:"<<booknumber<<endl;
cout<<"書名:"<<book[k].name<<endl;
cout<<"庫存量:"<<book[k].num_all<<endl;
cout<<"現存量:"<<book[k].num_present<<endl;
system("pause");
break;
}
}
if(k==1000)
{
cout<<"未找到此書!!"<<endl;
system("pause");
}
}
void Borrow_Manage()
{
int flag=1;
system("cls");
int Num_Choice3;
while(flag==1)
{
cout<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl
<<"\t\t\t☆ 1.借書登記 ☆"<<endl
<<"\t\t\t☆ 2.還書管理 ☆"<<endl
<<"\t\t\t☆ 3.返回主菜單 ☆"<<endl
<<"\t\t\t◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;
cin>>Num_Choice3;
switch(Num_Choice3)
{
case 1:
flag=2;
Borrow_Book();
break;
case 2:
flag=2;
Return_Book();
break;
case 3:
mainmenu();
default:
flag=1;
cout<<"輸入有誤!!"<<endl;
system("pause");
}
system("cls");
}
}
void input_Reader()
{
system("cls");
cout<<"請依照提示輸入現有的三位讀者的信息:"<<endl;
for(int m=0;m<3;m++)
{
cout<<"姓名:"<<endl;
cin>>reader[m].name;
cout<<"編號:"<<endl;
cin>>reader[m].readernumber;
reader[m].card=0;
}
}
void Borrow_Book()
{
system("cls");
char reader_name[20];
int n,book_number;
cout<<"請輸入讀者姓名:"<<endl;
cin>>reader_name;
for(n=0;n<3;n++)
{
if(strcmp(reader_name,reader[n].name)==0)
{
if(reader[n].card!=0)
{
cout<<"已借書,不能再借,請按任意鍵返回"<<endl;
system("pause");
mainmenu();
}
else
break;
}
}
if(n==3)
{
cout<<"無此讀者!輸入有誤!!按任意鍵返回主菜單"<<endl;
system("pause");
mainmenu();
}
cout<<"請輸入所借圖書書號:"<<endl;
cin>>book_number;
for(n=0;n<v;n++)
{
if(strcmp(reader_name,reader[n].name)==0)
reader[n].card=book_number;
}
for(n=0;n<v;n++)
{
if(book[n].booknumber==book_number)
{
if(book[n].num_present==0)
{
cout<<"該書已經被借完,請按任意鍵返回"<<endl;
system("pause");
for(n=0;n<v;n++)
{
if(strcmp(reader_name,reader[n].name)==0)
reader[n].card=0;
}
mainmenu();
}
else
{
book[n].num_present--;
cout<<"借書成功,請按任意鍵返回"<<endl;
system("pause");
break;
}
}
}
if(n==v)
{
for(n=0;n<v;n++)
{
if(strcmp(reader_name,reader[n].name)==0)
reader[n].card=0;
}
cout<<"所輸入的書號不存在,請按任意鍵返回主菜單"<<endl;
system("pause");
mainmenu();
}
}void Return_Book()
{
system("cls");
int j;
char reader_name[20];
int book_number;
cout<<"請輸入讀者姓名:"<<endl;
cin>>reader_name;
for(j=0;j<3;j++)
{
if(strcmp(reader_name,reader[j].name)==0)
break;
}
if(j==3)
{
cout<<"無此讀者!輸入有誤!!按任意鍵返回主菜單"<<endl;
system("pause");
mainmenu();
}
cout<<"請輸入所還圖書書號:"<<endl;
cin>>book_number;
for(j=0;j<3;j++)
{
if(strcmp(reader_name,reader[j].name)==0)
{
if(book_number==reader[j].card)
{
reader[j].card=0;
for(j=0;j<v;j++)
{
if(book[j].booknumber==book_number)
{
book[j].num_present++;
cout<<"還書成功,請按任意鍵返回"<<endl;
system("pause");
break;
}
}
}
else
{
cout<<"該讀者未藉此書"<<endl;
system("pause");
}
}
if(j==v)
cout<<"所輸入的書號不存在:"<<endl;
}
}
void Output_Message()
{
system("cls");
int q;
cout<<"以下是圖書信息"<<endl<<endl;
for(q=0;q<v;q++)
{
cout<<"書號:"<<book[q].booknumber<<'\t';
cout<<"書名:"<<book[q].name<<'\t';
cout<<"庫存量:"<<book[q].num_all<<'\t';
cout<<"現存量:"<<book[q].num_present<<endl;
}
cout<<"以下是讀者信息"<<endl<<endl;
for(q=0;q<3;q++)
{
cout<<"姓名:"<<reader[q].name<<'\t'
<<"編號:"<<reader[q].readernumber<<'\t'
<<"所借書號:"<<reader[q].card<<endl;
}
system("pause");
}
void Exit_System()
{
system("cls");
cout<<"歡迎下次使用,謝謝"<<endl;
system("pause");
}
void main()
{
mainmenu();
}
㈤ 求圖書館管理系統的源代碼,幫忙啊
有很多的。如下:
凌鵬圖書館管理系統 7.7.4
http://download.zol.com.cn/detail/16/154117.shtml
立天圖書館管理系統 8.2.3破解版
http://www.anxz.com/down/2162.html
笑天圖書館管理系統
http://www.yescode.cn/soft/373/386/593/Soft_46003.html
北極星圖書館管理系統 V3.0
http://www.xdowns.com/soft/17/61/2006/Soft_23490.html
㈥ C++圖書館管理系統源代碼
/*****************************************************************************************/
#include <iostream>
#include <iomanip>
#include <cstring>
#include <fstream>//輸入/輸出文件流類
using namespace std;
const int Maxr=100;//最多的讀者
const int Maxb=100;//最多的圖書
const int Maxbor=5;//每位讀者最多借五本書
//讀者類,實現對讀者的信息的描述
class Reader
{
private:
int tag; //刪除標記 1:已刪 0:未刪
int no; //讀者編號
char name[10]; //讀者姓名
int borbook[Maxbor];//所借圖書
public:
Reader() {}
char *getname() {return name;} //獲取姓名
int gettag() {return tag;} //獲取刪除標記
int getno() {return no;} //獲取讀者編號
void setname(char na[]) //設置姓名
{
strcpy(name,na);
}
void delbook(){ tag=1; }//設置刪除標記 1:已刪 0:未刪
void addreader(int n,char *na)//增加讀者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借書操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
int retbook(int bookid)//還書操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//讀出讀者信息
{
cout << setw(5) << no <<setw(10) << name<<"借書編號:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;
}
};
//讀者類庫,實現建立讀者的個人資料
class RDatabase
{
private:
int top; //讀者記錄指針
Reader read[Maxr];//讀者記錄
public:
RDatabase() //構造函數,將reader.txt讀到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打開一個輸入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close(); //關閉 reader.txt
}
void clear()//刪除所有讀者信息
{
top=-1;
}
int addreader(int n,char *na)//添加讀者時先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader *query(int readerid)//按編號查找
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
void disp() //輸出所有讀者信息
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//讀者庫維護
~RDatabase() //析構函數,將read[]寫到reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
char choice;
char rname[20];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t讀 者 維 護\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 刪 除\n\n\t\t 4 查 找\n\n\t\t 5 顯 示\n\n\t\t 6 全 刪\n\n\t\t 0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "輸入讀者編號:";
cin >> readerid;
cout << "輸入讀者姓名:";
cin >> rname;
addreader (readerid,rname);
break;
case '2':
cout << "輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout << " 該讀者不存在 "<<endl;
break;
}
cout << "輸入新的姓名:";
cin >> rname;
r->setname(rname);
break;
case '3':
cout << " 輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 該讀者不存在" << endl;
break;
}
r->delbook();
break;
case '4':
cout << "讀入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"該讀者不存在"<< endl;
break;
}
r->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";break;
}
}
}
//圖書類,實現對圖書的描述,圖書的編號,書名,借出,還入等
class Book
{
private:
int tag;//刪除標記 1:已刪 0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() { return name; }//獲取姓名
int getno(){ return no; }//獲取圖書編號
int gettag(){ return tag; }//獲取刪除標記
void setname(char na[])//設置書名
{
strcpy(name,na);
}
void delbook(){ tag=1;}//刪除圖書
void addbook(int n,char *na)//增加圖書
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借書操作
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//還書操作
{
onshelf=1;
}
void disp()//輸出圖書
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<endl;
}
};
//圖書庫類,實現對圖書的維護,查找,刪除等
class BDatabase
{
private:
int top; //圖書記錄指針
Book book[Maxb]; //圖書記錄
public:
BDatabase()//構造函數,將book.txt讀到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全刪
{
top=-1;
}
int addbook(int n,char *na)//增加圖書
{
Book *p=query(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找圖書
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();//圖書庫維護
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析構函數,將book[]寫到book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
char choice;
char bname[40];
int bookid;
Book *b;
while (choice!='0')
{
cout <<"\n\n\n\t\t\t圖 書 維 護 "<<endl<<endl;
cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 刪 除\n\t\t4 查 找\n\t\t5 顯 示\n\t\t6 全 刪\n\t\t0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
cout << "輸入圖書書名:"<<endl;
cin >> bname;
addbook(bookid,bname);
break;
case '2':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout << " 該圖書不存在 "<<endl;
break;
}
cout << "輸入新的書名:"<<endl;
cin >> bname;
b->setname(bname);
break;
case '3':
cout <<" 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在" << endl;
break;
}
b->delbook();
break;
case '4':
cout << " 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在"<< endl;
break;
}
b->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
}
//main() 函數的實現,程序的主界面的引導
int main(void)
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統\n\n\n";
cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維 護\n\n\t\t\t4 讀 者 維 護\n\n\t\t\t0 離 開"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" 借書 讀者編號:";
cin >>readerid;
cout <<" 圖書編號: ";
cin >>bookid;
r=ReaderDB.query(readerid);//按編號查找
if (NULL==r)
{
cout <<" 不存在該讀者,不能借書"<< endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能借書"<< endl;
break;
}
if (b->borrowbook()==0)
{
cout << " 該圖書已借出,不能借書"<< endl;
break;
}
r->borrowbook(b->getno());
break;
case '2':
cout<<"還書\n 讀者編號:";
cin >>readerid;
cout << " 圖書編號:";
cin >>bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout <<" 不存在該讀者,不能還書" << endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能還書" <<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
case '3':
BookDB.bookdata();
break;
case '4':
ReaderDB.readerdata();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
return 0;
}
㈦ 需圖書館管理系統的源代碼(C++)包括登陸,圖書管理,讀者管理,借還管理...
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>//輸入/輸出文件流類
using namespace std;
const int Maxr=100;//最多的讀者
const int Maxb=100;//最多的圖書
const int Maxbor=5;//每位讀者最多借五本書
//讀者類,實現對讀者的信息的描述
class Reader
{
private:
int tag; //刪除標記 1:已刪 0:未刪
int no; //讀者編號
char name[10]; //讀者姓名
int borbook[Maxbor];//所借圖書
public:
Reader() {}
char *getname() {return name;} //獲取姓名
int gettag() {return tag;} //獲取刪除標記
int getno() {return no;} //獲取讀者編號
void setname(char na[]) //設置姓名
{
strcpy(name,na);
}
void delbook(){ tag=1; }//設置刪除標記 1:已刪 0:未刪
void addreader(int n,char *na)//增加讀者
{
tag=0;
no=n;
strcpy(name,na);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借書操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;
}
}
}
int retbook(int bookid)//還書操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void disp()//讀出讀者信息
{
cout << setw(5) << no <<setw(10) << name<<"借書編號:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i] << "|";
cout << "]"<<endl;
}
};
//讀者類庫,實現建立讀者的個人資料
class RDatabase
{
private:
int top; //讀者記錄指針
Reader read[Maxr];//讀者記錄
public:
RDatabase() //構造函數,將reader.txt讀到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打開一個輸入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close(); //關閉 reader.txt
}
void clear()//刪除所有讀者信息
{
top=-1;
}
int addreader(int n,char *na)//添加讀者時先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na);
return 1;
}
return 0;
}
Reader *query(int readerid)//按編號查找
{
for (int i=0;i<=top;i++)
if (read[i].getno()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
void disp() //輸出所有讀者信息
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//讀者庫維護
~RDatabase() //析構函數,將read[]寫到reader.txt文件中
{
fstream file("reader.txt",ios::out);
for (int i=0;i<=top;i++)
if (read[i].gettag()==0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RDatabase::readerdata()
{
char choice;
char rname[20];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t讀 者 維 護\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 刪 除\n\n\t\t 4 查 找\n\n\t\t 5 顯 示\n\n\t\t 6 全 刪\n\n\t\t 0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "輸入讀者編號:";
cin >> readerid;
cout << "輸入讀者姓名:";
cin >> rname;
addreader (readerid,rname);
break;
case '2':
cout << "輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout << " 該讀者不存在 "<<endl;
break;
}
cout << "輸入新的姓名:";
cin >> rname;
r->setname(rname);
break;
case '3':
cout << " 輸入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 該讀者不存在" << endl;
break;
}
r->delbook();
break;
case '4':
cout << "讀入讀者編號:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"該讀者不存在"<< endl;
break;
}
r->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";break;
}
}
}
//圖書類,實現對圖書的描述,圖書的編號,書名,借出,還入等
class Book
{
private:
int tag;//刪除標記 1:已刪 0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() { return name; }//獲取姓名
int getno(){ return no; }//獲取圖書編號
int gettag(){ return tag; }//獲取刪除標記
void setname(char na[])//設置書名
{
strcpy(name,na);
}
void delbook(){ tag=1;}//刪除圖書
void addbook(int n,char *na)//增加圖書
{
tag=0;
no=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借書操作
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//還書操作
{
onshelf=1;
}
void disp()//輸出圖書
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<endl;
}
};
//圖書庫類,實現對圖書的維護,查找,刪除等
class BDatabase
{
private:
int top; //圖書記錄指針
Book book[Maxb]; //圖書記錄
public:
BDatabase()//構造函數,將book.txt讀到book[]中
{
Book b;
top=-1;
fstream file("book.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
void clear()//全刪
{
top=-1;
}
int addbook(int n,char *na)//增加圖書
{
Book *p=query(n);
if (NULL==p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找圖書
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();//圖書庫維護
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~BDatabase()//析構函數,將book[]寫到book.txt文件中
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
file.write((char *)&book[i],sizeof(book[i]));
file.close();
}
};
void BDatabase::bookdata()
{
char choice;
char bname[40];
int bookid;
Book *b;
while (choice!='0')
{
cout <<"\n\n\n\t\t\t圖 書 維 護 "<<endl<<endl;
cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 刪 除\n\t\t4 查 找\n\t\t5 顯 示\n\t\t6 全 刪\n\t\t0 退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
cout << "輸入圖書書名:"<<endl;
cin >> bname;
addbook(bookid,bname);
break;
case '2':
cout << "輸入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout << " 該圖書不存在 "<<endl;
break;
}
cout << "輸入新的書名:"<<endl;
cin >> bname;
b->setname(bname);
break;
case '3':
cout <<" 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在" << endl;
break;
}
b->delbook();
break;
case '4':
cout << " 讀入圖書編號:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 該圖書不存在"<< endl;
break;
}
b->disp();
break;
case '5':
disp();
break;
case '6':
clear();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
}
//main() 函數的實現,程序的主界面的引導
void main()
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統\n\n\n";
cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維 護\n\n\t\t\t4 讀 者 維 護\n\n\t\t\t0 離 開"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" 借書 讀者編號:";
cin >>readerid;
cout <<" 圖書編號: ";
cin >>bookid;
r=ReaderDB.query(readerid);//按編號查找
if (NULL==r)
{
cout <<" 不存在該讀者,不能借書"<< endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能借書"<< endl;
break;
}
if (b->borrowbook()==0)
{
cout << " 該圖書已借出,不能借書"<< endl;
break;
}
r->borrowbook(b->getno());
break;
case '2':
cout<<"還書\n 讀者編號:";
cin >>readerid;
cout << " 圖書編號:";
cin >>bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout <<" 不存在該讀者,不能還書" << endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在該圖書,不能還書" <<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
case '3':
BookDB.bookdata();
break;
case '4':
ReaderDB.readerdata();
break;
default:cout<<"輸入錯誤,請從新輸入:";
}
}
}
㈧ c++圖書館藏書管理系統源代碼
#include"stdio.h"
#include"string.h"
struct book /*定義結構體*/
{ char number[20];
char name[20];
char press[20];
char writer[20];
int n; /*現有量*/
int m; /*總量*/
}a[10];
int b; /*輸入書的數量*/
void input() /*輸入圖書信息函數*/
{
FILE *fp;
char str2[10]={" "};
int i;
if((fp=fopen("d:\\wen","w"))==NULL)
{ printf("Open failed\n");
return; }
printf("\nHow many books do you want to input?\n");
scanf("%d",&b);
for(i=0;i<b;i++)
{
printf("Enter the %d book's number name press writer now all\n",i+1);
scanf("%s%s%s%s%d%d",&a[i].number,&a[i].name,&a[i].press,&a[i].writer,&a[i].n,&a[i].m);
fwrite(&a[i],sizeof(struct book),1,fp);
}
fclose(fp);
}
void Search() /*查詢書籍*/
{
FILE *fp;
int w,i; /*w查詢方式使用的數據*/
char str[20]; /*查詢書籍的編碼書名出版社作者*/
if((fp=fopen("d:\\wen","r"))==NULL)
{ printf("Open failed\n");
return; }
for(i=0;i<b;i++)
if(fread(&a[i],sizeof(struct book),1,fp)!=1)
printf("file read error\n");
printf("search by number--6\n");
printf("search by name--7\n");
printf("search by writer--8\n");
printf("search by press--9\n");
scanf("%d",&w);
printf("Enter the word you want to search:\n");
scanf("%s",str);
switch(w)
{
case 6:
{for(i=0;i<b;i++)
if(strcmp(a[i].number,str)==0)
{printf("number: %s name: %s press: %s writer: %s now: %d all:%d\n",a[i].number,a[i].name,a[i].press,a[i].writer,a[i].n,a[i].m);
break;
}
}
break;
case 7:
{for(i=0;i<b;i++)
if(strcmp(a[i].name,str)==0)
{printf("number: %s name: %s press: %s writer: %s now: %d all:%d\n",a[i].number,a[i].name,a[i].press,a[i].writer,a[i].n,a[i].m);
break;}
}
break;
case 8:
{for(i=0;i<b;i++)
if(strcmp(a[i].press,str)==0)
{printf("number: %s name: %s press: %s writer: %s now: %d all:%d\n",a[i].number,a[i].name,a[i].press,a[i].writer,a[i].n,a[i].m);
break;}
}
break;
case 9:
{for(i=0;i<b;i++)
if(strcmp(a[i].writer,str)==0)
{ printf("number: %s name: %s press: %s writer: %s now: %d all:%d\n",a[i].number,a[i].name,a[i].press,a[i].writer,a[i].n,a[i].m);
break; }
}
}
fclose(fp);
}
void borrow() /*借閱圖書函數*/
{ FILE *fp;
int i;
char xuehao[20],number2[20];
char jieyue[20]={"borrow:"};
if((fp=fopen("d:\\wen00.txt","w"))==NULL)
{ printf("Open failed\n");
return; }
printf("Enter your number:\n");
scanf("%s",xuehao);
printf("Enter the book's number which you want to borrow\n");
scanf("%s",number2);
for(i=0;i<10;i++)
if(strcmp(a[i].number,number2)==0)
if(a[i].n>0)
{a[i].n--;
printf("borrow sucess!\n");
if(fwrite(&xuehao[20],sizeof(xuehao[20]),1,fp)!=1)
printf("file write error\n");
if(fwrite(&jieyue[20],sizeof(jieyue),1,fp)!=1)
printf("file write error\n");
if(fwrite(&a[i],sizeof(struct book),1,fp)!=1)
printf("file write error\n");
break;
}
else
printf("borrow failed!");
fclose(fp);
}
void giveback() /*歸還圖書函數*/
{FILE *fp;
int i;
char xuehao[20],number2[20];
char guihuan2[20]={"give back"};
if((fp=fopen("d:\\wen00.txt","w"))==NULL)
{printf("cannot open file\n");
return;
}
printf("Enter your number:\n");
scanf("%s",xuehao);
printf("Enter the book's number which you want to give back\n");
scanf("%s",number2);
for(i=0;i<1000;i++)
if(strcmp(a[i].number,number2)==0)
{ if(fwrite(&xuehao[20],sizeof(xuehao),1,fp)!=1)
printf("file write error\n");
if(fwrite(&guihuan2[20],sizeof(guihuan2),1,fp)!=1)
printf("file write error\n");
if(fwrite(&a[i],sizeof(a[i]),1,fp)!=1)
printf("file write error\n");
break;
}
printf("give back sucess!\n");
fclose(fp);
}
void adddelet() /*增加刪除功能*/
{ FILE *fp;
char number3[20];
int s,i,j,t; /*t為增加或刪除 s增加書的數量*/
if((fp=fopen("d:\\wen00.txt","w"))==NULL)
{printf("cannot open file\n");
return ;
}
printf("Chose what you want to do:");
printf("add books--11\n");
printf("delet books--12\n");
scanf("%d",&t);
switch(t)
{
case 11:
{printf("Enter the book'number which you want to add:");
scanf("%s",number3);
printf("How many books do you want to add?:");
scanf("%d",&s);
for(i=0;i<10;i++)
if(strcmp(a[i].number,number3)==0)
a[i].m=a[i].m+s;
} break;
default :
{printf("Enter the book'number which you want to delet:");
scanf("%s",number3);
for(i=0;i<10;i++)
if(strcmp(a[i].number,number3)==0)
for(;i<10;i++)
{ for(j=0;j<20;j++)
a[i].number[j]=a[i+1].number[j];
for(j=0;j<20;j++)
a[i].name[j]=a[i+1].name[j];
for(j=0;j<20;j++)
a[i].press[j]=a[i+1].press[j];
for(j=0;j<20;j++)
a[i].writer[j]=a[i+1].writer[j];
a[i].n=a[i+1].n;
a[i].m=a[i+1].m;
}
}
}
fclose(fp);
}
void main() /*主函數*/
{
printf("Welcome to labrary!\nChose what you want to do:\n");
printf("Input book's information--1;\n");
printf("serach books--2;\n");
printf("borrow books--3;\n");
printf("add or delet books--4;\n");
printf("give back books--5;\n");
printf("quit--6;\n");
printf("Please chose zhe number:");
while(1)
{
switch(getchar())
{
case '1': input();break;
case '2': Search();break;
case '3': borrow() ;break;
case '4': adddelet();break;
case '5': giveback();break;
}
}
}
㈨ 急求VB編寫圖書館管理系統源代碼帶可執行程序
可以在Form_Load中判斷user然後設置Menu的Enable屬性.
具體是這樣做的.
在一個模塊中定義Public user As String
先是登陸窗體.如果用戶是guest 那麼 user="guest" 否則 user="Administrator"
再到主窗體中:
Sub Form_Load()
If user="guest" then
圖書登記Menu.Enable=False
...
Else
圖書登記Menu.Enable=True
...
End If
End Sub
「圖書登記Menu」這種寫法是沒有問題的。
但是,我得搞清「圖書登記Menu」是Name,還是Caption?
如果是Caption就不行,應該改了相應的Name,
比如一個子菜單的Name為"Menu1",而它的Caption為"OpenMenu"
那應該是Menu1.Enable=True.
如果不是這里的原因,那就應該是判斷user的流程出了問題.
㈩ 資料庫圖書管理系統代碼
create database db
use db
create table 借閱等級信息(
借閱等級 int primary key,
最長借閱時間 int,
最大借閱數量 int,
)
insert into 借閱等級信息 values
(0, 30, 10),
(1, 60, 20),
(2, 90, 30),
(3, 120, 40)
create table 讀者信息(
姓名 char(15) not null,
證件號 char(12) primary key,
借閱等級 int default 0,
累計借書 int default 0,
foreign key(借閱等級) references 借閱等級信息(借閱等級)
)
insert into 讀者信息(姓名, 證件號, 借閱等級) values
('張三', '541607120165', 1),
('李四', '541707010185', 3),
('王五', '541707120165', 1),
('趙六', '541505980268', 2),
('孫七', '541407010169', 0),
('周八', '541307010489', 1)
create table 出版社信息(
出版社 varchar(20) primary key,
地址 varchar(25),
聯系電話 char(7)
)
insert into 出版社信息 values
('清華大學出版社', '北京', '4979421'),
('晟威出版社', '天津', '5564130'),
('南海出版公司', '海南', '4984910'),
('上海文藝出版社', '上海', '6640239')
create table 圖書信息(
索書號 char(15) primary key,
作者 char(15),
書名 char(15),
出版社 varchar(20),
出版時間 date,
foreign key(出版社)references 出版社信息(出版社)
)
insert into 圖書信息 values
('b12987', '嚴蔚敏', '數據結構', '清華大學出版社', '2012-02-06'),
('b97894', '東野圭吾', '幻夜', '南海出版公司', '2004-08-02'),
('b16546', '吳玉華', '物理實驗教程', '清華大學出版社', '2013-05-15'),
('b89490', '張雪峰', '考研指點', '晟威出版社', '2016-12-12'),
('b56400', '郟宗培', '紙上尋仙記', '上海文藝出版社', '2011-02-05')
create table 單本圖書信息(
條碼號 char(7) primary key check(len(條碼號) = 7),
索書號 char(15),
館藏地 varchar(40),
書刊狀態 varchar(6) check(書刊狀態 in ('可借', '借出', '非可借')),
歷史借閱量 int default 0,
foreign key(索書號)references 圖書信息(索書號)
)
insert into 單本圖書信息(條碼號, 索書號, 館藏地, 書刊狀態) values
('t987628', 'b97894', '三樓A8', '借出'),
('t594805', 'b97894', '二樓C7', '可借'),
('t984910', 'b89490', '五樓A2', '借出'),
('t940566', 'b12987', '負一樓D3', '借出')
create table 借閱信息(
借閱號 char(6) primary key,
借閱時間 date,
歸還時間 date,
圖書條碼號 char(7),
借閱人證件號 char(12),
foreign key(圖書條碼號) references 單本圖書信息(條碼號),
foreign key(借閱人證件號) references 讀者信息(證件號)
)
create table 評論信息(
評論號 char(8) primary key,
評分 numeric(2, 1),
內容 varchar(200),
評論時間 date,
評論者id char(12),
索書號 char(15),
foreign key(索書號)references 圖書信息(索書號),
foreign key(評論者id)references 讀者信息(證件號)
)
insert into 評論信息 values
('p12391', 8.9, '很有趣', '2015-06-24', '541707010185', 'b97894'),
('p98523', 7.8, '受益頗多', '2016-05-22', '541307010489', 'b89490'),
('p94606', 6.8, '完全看不懂orz', '2017-05-02', '541607120165', 'b12987')
create table 主題詞信息(
ID char(8) primary key,
類別 char(15),
索書號 char(15),
foreign key(索書號)references 圖書信息(索書號)
)
insert into 主題詞信息 values
('z64400', '計算機', 'b12987'),
('z95410', '物理', 'b16546'),
('z98500', '考研', 'b89490'),
('z64165', '推理懸疑', 'b97894'),
('z69850', '仙俠', 'b56400')
use db
go
create trigger trigger1
on 借閱信息
after insert
as
begin
update 讀者信息 --更改讀者累計借書量
set 累計借書 = 累計借書 + 1
from 讀者信息, inserted
where 讀者信息.證件號 = inserted.借閱人證件號
update 單本圖書信息 --更改圖書狀態
set 單本圖書信息.書刊狀態 = '借出'
from inserted, 單本圖書信息
where inserted.圖書條碼號 = 單本圖書信息.條碼號
update 單本圖書信息
set 歷史借閱量 = 歷史借閱量 + 1 --更改圖書歷史借閱量
from inserted, 單本圖書信息
where inserted.圖書條碼號 = 單本圖書信息.條碼號
end
insert into 借閱信息 values
('j13488', '2018-05-01', '2018-08-01', 't987628', '541407010169')
insert into 借閱信息 values
('j14910', '2016-12-11', '2017-01-25', 't984910', '541607120165')
insert into 借閱信息 values
('j97890', '2018-05-14', '2018-06-14', 't940566', '541607120165')
go
create view view_1(圖書條碼, 借閱者姓名, 編號, 借閱時間, 應還時間)
as
select 圖書條碼號, 姓名, 證件號, 借閱時間, 歸還時間
from 借閱信息, 讀者信息
where 借閱信息.借閱人證件號 = 讀者信息.證件號 and 歸還時間 > getdate()
go
create view view_2(圖書條碼, 歷史總借閱量)
as
select 條碼號, 歷史借閱量
from 單本圖書信息, 圖書信息
where 單本圖書信息.索書號 = 圖書信息.索書號 and 書名 = '幻夜'
go
create view view_3(類別, 圖書條碼, 歷史總借閱量)
as
select 類別, 條碼號, 歷史借閱量
from 單本圖書信息, 圖書信息, 主題詞信息
where 主題詞信息.索書號 = 圖書信息.索書號 and 圖書信息.索書號 = 單本圖書信息.索書號 and 類別 = '考研'
go
create view view_4(讀者編號, 條碼, 圖書名稱, 應還日期)
as
select 借閱人證件號, 圖書條碼號, 書名, 歸還時間
from 單本圖書信息, 圖書信息, 借閱信息
where 借閱信息.圖書條碼號 = 單本圖書信息.條碼號 and 單本圖書信息.索書號 = 圖書信息.索書號
and 歸還時間 > getdate() and 借閱人證件號 = '541607120165'
go
create view view_5(讀者編號, 圖書條碼, 圖書名稱, 借閱日期, 歸還日期)
as
select 借閱人證件號, 圖書條碼號, 書名, 借閱時間, 歸還時間
from 單本圖書信息, 圖書信息, 借閱信息
where 借閱信息.圖書條碼號 = 單本圖書信息.條碼號 and 單本圖書信息.索書號 = 圖書信息.索書號
and 借閱人證件號 = '541607120165'
go
create view view_6(讀者編號, 圖書名稱, 評論時間, 評論內容)
as
select 評論者id, 書名, 評論時間, 內容
from 借閱信息, 單本圖書信息, 評論信息, 圖書信息
where 借閱信息.圖書條碼號 = 單本圖書信息.條碼號 and 單本圖書信息.索書號 = 評論信息.索書號
and 評論信息.索書號 = 圖書信息.索書號 and 評論者id = '541607120165'
go
create view view_7(出版社名稱, 圖書名稱, 出版時間)
as
select top 100 percent 出版社信息.出版社, 書名, 出版時間
from 出版社信息, 圖書信息
where 出版社信息.出版社 = 圖書信息.出版社
order by 出版時間 asc
--執行
select * from view_1
select * from view_2
select * from view_3
select * from view_4
select * from view_5
select * from view_6
select * from view_7 order by 出版時間 asc
(10)圖書館管理源碼大全擴展閱讀:
資料庫模型:
對象模型
層次模型(輕量級數據訪問協議)
網狀模型(大型數據儲存)
關系模型
面向對象模型
半結構化模型
平面模型(表格模型,一般在形式上是一個二維數組。如表格模型數據Excel)
架構
資料庫的架構可以大致區分為三個概括層次:內層、概念層和外層。
內層:最接近實際存儲體,亦即有關數據的實際存儲方式。
外層:最接近用戶,即有關個別用戶觀看數據的方式。
概念層:介於兩者之間的間接層。
資料庫索引
主條目:資料庫索引
數據索引的觀念由來已久,像是一本書前面幾頁都有目錄,目錄也算是索引的一種,只是它的分類較廣,例如車牌、身份證字型大小、條碼等,都是一個索引的號碼,當我們看到號碼時,可以從號碼中看出其中的端倪,若是要找的人、車或物品,也只要提供相關的號碼,即可迅速查到正確的人事物。
另外,索引跟欄位有著相應的關系,索引即是由欄位而來,其中欄位有所謂的關鍵欄位(Key Field),該欄位具有唯一性,即其值不可重復,且不可為"空值(null)"。
例如:在合並數據時,索引便是扮演欲附加欄位數據之指向性用途的角色。故此索引為不可重復性且不可為空。
資料庫操作:事務
主條目:資料庫事務
事務(transaction)是用戶定義的一個資料庫操作序列,這些操作要麼全做,要麼全不做,是一個不可分割的工作單位。
事務的並發性是指多個事務的並行操作輪流交叉運行,事務的並發可能會訪問和存儲不正確的數據,破壞交易的隔離性和資料庫的一致性。
網狀數據模型的數據結構 網狀模型 滿足下面兩個條件的基本層次聯系的集合為網狀模型。 1. 允許一個以上的結點無雙親; 2. 一個結點可以有多於一個的雙親。
參考資料來源:網路——資料庫