『壹』 用C語言編寫一個簡單的圖書管理小程序
源代碼如下:
#include<iostream>
#include<iomanip>
#include<string>
#include<fstream>
#include<stdio.h>
using namespace std;
const int maxb=10000; //最多的圖書
class book//圖書類
{
int tag; //刪除標記1:已刪0:未刪
int number; //isbn書號
char name[20]; //書名
char author[10]; //主編
char number2[10];//版次
char position[20];//出版社
char time[20];//出版年
void addbook(int n,char *na,char *au,char *n2,char *da,char *ti,int pr) //增加圖書
{
tag=0;
number=n;
price=pr;
strcpy(name,na);
strcpy(author,au);
strcpy(number2,n2);
strcpy(position,da);
strcpy(time,ti);
onshelf=1;
}
(1)設計圖書登記管理程序擴展閱讀
1、源程序中,很多符號都是成對匹配出現的,為避免遺漏必須配對使用的符號。
2、用花括弧括起來的部分,但從程序結構清晰,便於閱讀、理解、維護的角度出發,建議在書寫程序時應遵循以下規則,以養成良好的編程習慣。
3、一個說明或一條語句佔一行,與該結構開始處的左花括弧對齊。
『貳』 急求c語言程序設計 圖書管理系統 源代碼
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define N 100 //書籍的最多本數
struct book
{ char title[30];
int number;
char author[30];
float price;
int store;
char borrower_name[20];
char borrower_gender[5];
int borrower_number;
}s[N];
int m=0;
void input(structbook *p); //輸入圖書信息
void save(structbook *p); //保存圖書信息
void read(structbook *p); //讀取圖書信息
void search(structbook *p); //查找圖書信息
void del(structbook *p); //刪除圖書信息
void borrow(structbook *p); //借閱圖書
void retur(structbook *p); //歸還圖書
void main()
{
int x;
do
{
printf("**************************************菜單**************************************\n"
" *********** 1.輸入圖書信息 ********** \n"
" *********** 2.查找圖書信息 ********** \n"
" *********** 3.刪除圖書信息 ********** \n"
" *********** 4.借閱圖書 ********** \n"
" *********** 5.歸還圖書 ********** \n"
" *********** 0.退出 ********** \n");
printf("********************************************************************************\n");
printf("請在0-5中選擇,以回車鍵結束\n");
scanf("%d",&x);
switch(x)
{ case 1: input(&s[0]);break;
case 2: search(&s[0]);break;
case 3: del(&s[0]);break;
case 4: borrow(&s[0]);break;
case 5: retur(&s[0]);break;
case 0: break;
}
}while(x!=0);
}
void input(structbook *p)
{ int y;
for(;p<(&s[0]+N);p++)
{ printf("請輸入書名:");scanf("%s",p->title);
printf("請輸入編號:"); scanf("%d",&p->number);
printf("請輸入作者:"); scanf("%s",p->author);
printf("請輸入圖書價格:"); scanf("%f",&p->price);
printf("請輸入圖書數量:"); scanf("%d",&p->store);
m++;
printf("第%d個信息已經輸入完畢,是否繼續?\n按任意鍵繼續,按0鍵結束.",m);
scanf("%d",&y);//讀取是否繼續
if(y==0)
{ save(&s[0]);
read(&s[0]);//調用讀取文件函數
break;
}
}
}
void search(structbook *p)//查詢模塊
{ int n;
char name1[20];
char name2[20];
char c[3];
do
{ p=&s[0];
printf("\t請選擇查找方式:\n");//列印查詢方式菜單
printf(" 1.按書名查找\n 2.按作者查找\n 0.返回\n");
printf("請在0-2中選擇:\n\n");
scanf("%d",&n);//讀取查找方式
if(n==0) break;
switch(n)
{ case 1: printf("請輸入書名:\n");scanf("%s",name1);break;
case 2: printf("請輸入作者:\n");scanf("%s",name2);break;
}
for(;p<&s[m];p++)
{ read(&s[0]);//調用讀取函數
if(strcmp(p->title,name1)==0||strcmp(p->author,name2)==0)
{ printf("\n查找圖書信息成功!\n");
printf("書名 編號 作者 價格 數量\n");
printf("%-10s%-10d%-10s%-10.2f%-10d\n",p->title,p->number,p->author,p->price,p->store);//列印信息
break;
}
}
printf("是否繼續查找?\n「是」請鍵入「yes」, 「否」請按任意鍵,返回菜單\n");
scanf("%s",c);
}while(strcmp(c,"yes")==0);//判斷是否結束
}
void del(structbook *p)//刪除模塊
{ int i;
struct book *p1,*p2;
char name1[20];
char name2[20];
char c[3];
int n;
do
{ p=&s[0];
printf("請選擇刪除以方式回車鍵結束:\n");//列印刪除方式菜單
printf( " 1.按書名刪除\n 2.按作者刪除\n 0.返回\n");
printf("請在0-2中選擇:\n\n");
scanf("%d",&n);//讀取查找方//
if(n==0) break;
switch(n)
{case 1:printf("請輸入書名:\n");
scanf("%s",name1);break;
case 2: printf("請輸入作者:\n");
scanf("%s",name2);break;
}
read(&s[0]); //調用讀取函數
for(i=0;i<m;i++,p++)
{
if(strcmp(p->title,name1)==0||strcmp(p->author,name2)==0)
{ p1=p;
for(p2=p1+1;p2<=&s[m];p1++,p2++)
{
strcpy(p1->title,p2->title);
strcpy(p1->author,p2->author);
p1->number=p2->number;
p1->store=p2->store;
p1->price=p2->price;
m--;
printf("刪除成功!!\n");
}
}
else {printf("沒有該書記錄!!");
break;}
}
printf("是否繼續刪除?「是」請鍵入「yes」, 「否」請按任意鍵,返回菜單\n");
scanf("%s",c); //讀取是否繼續
save(&s[0]); //調用保存函數
}while(strcmp(c,"yes")==0); //判斷是否繼續刪除
}
void borrow(structbook *p)//借書模塊
{ int z;
char name3[20],name4[20];
char w[3];
do
{ p=&s[0];
printf("請先查找您要借閱的圖書!");
printf("請選擇查找方式:\n");//列印查詢方式菜單
printf(" 1.按書名查找\n 2.按作者查找\n 0.返回\n");
printf("請在0-2中選擇:\n");
scanf("%d",&z);//讀取查找方式
if(z==0) break;
switch(z)
{ case 1: printf("請輸入書名:\n");scanf("%s",name3);break;
case 2: printf("請輸入作者:\n");scanf("%s",name4);break;
}
read(&s[0]);//調用讀取函數
for(;p<&s[m];p++)
{ if(strcmp(p->title,name3)==0||strcmp(p->author,name4)==0)
{
printf("\n查找圖書信息成功!\n");
printf("書名 編號 作者 價格 數量\n");
printf("%-10s%-10d%-10s%-10.2fs%-10d\n",p->title,p->number,
p->author,p->price,p->store);//列印信息
printf("請輸入您的姓名:");scanf("%s",p->borrower_name);
printf("請輸入您的性別:");scanf("%s",p->borrower_gender);
printf("請輸入您的學號:");scanf("%d",&p->borrower_number);
p->store--;
printf("借書成功!\n");
printf("書名 編號 作者 價格 數量 借書人 性別 學號\n");
printf("%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n",p->title,p->number,p->author,
p->price,p->store,p->borrower_name,p->borrower_gender,p->borrower_number);
break;
}
}
printf("是否繼續借書??");
printf("「是」請鍵入「yes」, 「否」請按任意鍵,返回菜單\n");
scanf("%s",w); //讀取是否繼續
save(&s[0]); //調用保存函數
}while(strcmp(w,"yes")==0); //判斷是否繼續借書
}
void retur(structbook *p)//還書模塊
{ int e,f;
char name5[20];
char name6[20];
char t[3];
do
{ p=&s[0];
printf("請先查找您要還的圖目!");
printf("請選擇查找方式:\n"); //列印查詢方式菜單
printf(" 1.按書名查找\n 2.按作者查找\n 0.返回\n");
printf("請在0-2中選擇:\n\n");
scanf("%d",&e); //讀取查找方式
if(e==0) break;
switch(e)
{ case 1: printf("請輸入書名:\n");scanf("%s",name5);break;
case 2: printf("請輸入作者:\n");scanf("%s",name6);break;
}
read(&s[0]);//調用讀取函數
for(;p<&s[m];p++)
{ if(strcmp(p->title,name5)==0||strcmp(p->author,name6)==0)
{ printf("\n查找圖書信息成功!\n");
printf("確認還書請按「1」!");//確認是否還書
scanf("%d",&f);
if(f==1)
{ strcpy(p->borrower_name,"0");
strcpy(p->borrower_gender,"0");
p->borrower_number=0;
p->store++;
printf("書名 編號 作者 價格 數量 借書人 性別 學號\n");
printf("%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n",p->title,p->number,p->author,
p->price,p->store,p->borrower_name,p->borrower_gender,p->borrower_number);
//列印信息
}
break;
}
else {printf("沒有該書記錄!!");
break;}
}
printf("是否繼續還書?\n");
printf("「是」請鍵入「yes」, 「否」請按任意鍵,返回菜單\n");
scanf("%s",t); //讀取是否繼續
save(&s[0]); //調用保存函數
}while(strcmp(t,"yes")==0); //判斷是否繼續還書
}
void save(structbook *p)//保存文件
{ FILE *fp,*fp1;
int i;
if((fp=fopen("tushu.txt","wb"))==NULL)//打開文件並判斷是否出錯
{ printf("創建文件失敗!\n\n");//列印出錯提示
getchar(); return;
}
if((fp1=fopen("book.txt","wb"))==NULL)//打開文件並判斷是否出錯
{ printf("創建文件失敗!\n\n");//列印出錯提示
getchar(); return;
}
for(i=0;i<m;i++,p++)
if(fwrite(p,sizeof(structbook),1,fp)==0)//向文件寫入數據,並判斷是否出錯
printf("向文件輸入數據失敗!\n\n");
fprintf(fp1,"%d",m);
fclose(fp);//關閉文件
fclose(fp1);//關閉文件
}
void read(structbook *p)//從文件讀取信息模塊
{ FILE *fp,*fp1;
int i;
if((fp=fopen("tushu.txt","rb"))==NULL)//打開文件,並判斷是否出錯
{ printf("出錯,請檢查文件是否存在,按任意鍵返回住菜單");//列印出錯提示
getchar();
}
if((fp1=fopen("book.txt","rb"))==NULL)//打開文件並判斷是否出錯
{ printf("創建文件失敗!\n\n");//列印出錯提示
getchar(); return;
}
fscanf(fp1,"%d",&m);
fclose(fp1);//關閉文件
for(i=0;i<m;i++,p++)
{ fread(p,sizeof(struct book),1,fp);//從文件中讀取信息
}
fclose(fp);//關閉文件
}
你把保存的文件地址自己修改一下就可以了。。希望能幫到你
『叄』 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() //獲取姓名
int gettag() //獲取刪除標記
int getno() //獲取讀者編號
void setname(char na[]) //設置姓名
{
strcpy(name,na);
}
void delbook()//設置刪除標記 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() //獲取姓名
int getno()//獲取圖書編號
int gettag()//獲取刪除標記
void setname(char na[])//設置書名
{
strcpy(name,na);
}
void delbook()//刪除圖書
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<<"輸入錯誤,請從新輸入:";
}
}
}