c圖書管理系統課程設計
Ⅰ c語言課設小型圖書管理系統設計(c++)
試著做了下這個題,結果和你一樣前7項全解決了,就剩下第八個了,明天再試試,能做出來給你發代碼。要是我做不出來,還請你給我指點一二。
/*終於完成了,第八項也OK了。
你自己多運行幾組數據測試下,應該沒問題了
*/
// 20130718.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string>
#include <iomanip>
#include <iostream>
using namespace std;
#define N 5
void swap(string & a,string & b)
{
string c= a;
a= b;
b= c;
}
void swap1(int & a,int & b)
{
int c=a;
a=b;
b=c;
}
class A
{
private:
string name[N];
string writer[N];
int num1[N];//書號
int price[N];
int num2[N];//數量
public:
void input();
void add();
void modify();
void cut();
void look();
void seek();
void display();
};
void A::input()
{
for(int i=0;i<N;i++)
{
int j;
cout<<"請依次輸入書名,作者,編號,單價及數量,用空格鍵分開"<<endl;
cin>>name[i];
cout<<"書名錄入成功"<<endl;
cin>>writer[i];
cout<<"作者錄入成功"<<endl;
cin>>num1[i];
cout<<"編號錄入成功"<<endl;
cin>>price[i];
cout<<"單價錄入成功"<<endl;
cin>>num2[i];
cout<<"數量錄入成功"<<endl;
cout<<"是否繼續輸入"<<endl;
cout<<"1:繼續"<<endl;
cout<<"2:退出"<<endl;
cin>>j;
if(j==1) ;
else break;
}
}
void A::add()
{
for(int i=0;i<N;i++)
{
if(name[i]==writer[i])
{
int j;
cout<<"請依次輸入書名,作者,編號,單價及數量,用空格鍵分開"<<endl;
cin>>name[i];
cout<<"書名錄入成功"<<endl;
cin>>writer[i];
cout<<"作者錄入成功"<<endl;
cin>>num1[i];
cout<<"編號錄入成功"<<endl;
cin>>price[i];
cout<<"單價錄入成功"<<endl;
cin>>num2[i];
cout<<"數量錄入成功"<<endl;
cout<<"添加成功,是否繼續添加"<<endl;
cout<<"1:是"<<endl;
cout<<"2:否"<<endl;
cin>>j;
if(j==1);
else break;
}
}
}
void A::modify()
{
int i,j;
cout<<"請輸入要修改書的書號"<<endl;
cin>>j;
for(i=0;i<N;i++)
{
if(num1[i]!=j);
else
cout<<"書籍已找到"<<endl;
cout<<"請重新輸入書名,作者,編號,單價及數量,用空格鍵分開"<<endl;
cin>>name[i];
cout<<"書名錄入成功"<<endl;
cin>>writer[i];
cout<<"作者錄入成功"<<endl;
cin>>price[i];
cout<<"單價錄入成功"<<endl;
cin>>num2[i];
cout<<"數量錄入成功"<<endl;
break;
}
}
void A::cut()
{
int i,j;
cout<<"請輸入要刪除的書的書號"<<endl;
cin>>j;
for(i=0;i<N;i++)
{
if(num1[i]==j)
{ name[i]=writer[i]=" ";
num1[i]=price[i]=num2[i]=0;
cout<<"初始化完成"<<endl;
break;
}
}
}
void A::look()
{
int i;
for(i=0;i<N;i++)
{
cout<<name[i]<<writer[i]<<num1[i]<<price[i]<<num2[i]<<endl;
}
}
void A::seek()
{
int i,j;
cout<<"請輸入要查找的書的書號"<<endl;
cin>>j;
for(i=0;i<N;i++)
{
if(j==num1[i])
cout<<num1[i]<<name[i]<<writer[i]<<price[i]<<num2[i]<<endl;
else
break;
}
}
void A::display()//排序未解決,難。。。。。
{
int i,j,k/*,P,N1,N2*/;
for(i=1;i<N;i++)
{
for(j=0;j<i;j++)
{
if(price[i]>price[j])
{
swap1(price[i],price[j]);
swap(name[i],name[j]);
swap(writer[i],writer[j]);
swap1(num1[i],num1[j]);
swap1(num2[i],num2[j]);
}
}
}
for(k=0;k<N;k++)
{
cout<<setw(5)<<price[k]<<setw(10)<<name[k]<<setw(5)<<writer[k]<<setw(3)<<num1[k]<<setw(3)<<num2[k]<<endl;
}
cout<<"排序完成"<<endl;
}
int main()
{
A a;
int i;
do
{
cout<<"1:信息錄入"<<endl;
cout<<"2:添加記錄"<<endl;
cout<<"3:信息修改"<<endl;
cout<<"4:信息刪除"<<endl;
cout<<"5:信息瀏覽"<<endl;
cout<<"6:信息查詢"<<endl;
cout<<"7:信息排序"<<endl;
cout<<"8:退出系統"<<endl;
cin>>i;
switch(i)
{
case 1:a.input();break;
case 2:a.add();break;
case 3:a.modify();break;
case 4:a.cut();break;
case 5:a.look();break;
case 6:a.seek();break;
case 7:a.display();break;
case 8:cout<<"成功退出"<<endl;break;
default:cout<<"輸入錯誤"<<endl;
}
}while(i!=8);
return 0;
}
/*終於完成了,第八項也OK了。
你自己多運行幾組數據測試下,應該沒問題了
*/
Ⅱ c語言程序設計課程設計 圖書管理系統 求原代碼
高級語言程序設計(2)課程設計
一 程序設計說明書
【設計題目】 圖書館借閱管理
【問題描述】圖書館,適合用C++面向對象的功能來描述。圖書館管理系統分為借書、還書、圖書管理和讀者服務等四個部分。設計一個讀者類Reader,記錄每個讀者基本信息;讀者庫類Rdatabase,記錄所有讀者信息;圖書類Book, 記錄每本書的基本信息;圖書庫類Bdatabase, 記錄所有圖書信息。
【基本要求】
1讀者庫類RDatabase中,其構造函數中,將read.txt文件中所有讀入讀者記錄rede[]中。處理完畢,在析構函數中將read[]中的所有未刪記錄寫入到read.txt中。
2圖書庫類BDatabase中,其構造函數中,將book.txt文件中所有讀入圖書記錄book[]中。處理完畢,在析構函數中將book[]中的所有未刪記錄寫入到book.txt中。
3 利用構造函數完成讀者和圖書數據初始化,完成內存分配。程序結束前,析構函數完成所申請的堆內存空間。
4 編寫主函數,對所編寫的矩陣類進行全面測試。要求用戶界面採用菜單方式。測試中需要讀者和圖書數據通過I/O流從磁碟文件讀入,同時顯示在屏幕上。得到的數據通過I/O流寫入磁碟文件保存,同時顯示在屏幕上。
5 源程序中要有充分的注釋,報告中要有詳細的流程圖和文字材料。
【類的設計】
該程序包含了四個類,如下:
1.Reader類,有讀者的基本管理功能,具有以下私有數據:
int tag;//刪除標記 1:已刪;0:未刪
int no;//讀者編號
char name[10];//讀者姓名
int borbook[Maxbor];//所借圖書
2.讀者庫類Rdatabase, 具有以下私有數據:
int top;//讀者記錄指針
Reader read[Maxr];//讀者記錄
3.圖書庫類Book,有一本圖書的基本功能,有以下私有數據:
int tag;//刪除標記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
4.圖書庫類BDatabase,有以下私有數據:
int top;//圖書記錄指針
Book book[Maxb];//圖書記錄
【特殊函數的設計說明】
構造函數
1.Reader類中構造函數Reader(),初始化函數;
2.讀者庫類RDatabase中,其構造函數Rdatabase(),將read.txt文件中所有讀入讀者記錄rede[]中。
3.Book類中構造函數Book(),初始化函數;
4.圖書庫類BDatabase中,其構造函數中,將book.txt文件中所有讀入圖書記錄book[]中。
拷貝構造函數
Reader類中的拷貝構造函數將getname()的返回值讀者姓名拷貝到setname()中,Book類中的拷貝構造函數將getname()函數的返回值圖書名拷貝到圖書名設置函數setname()中。
析構函數
1.讀者庫類RDatabase中,其析構函數~Rdatabase(),將read[]中的所有未刪記錄寫入到read.txt中;
2.圖書庫類BDatabase中,其析構函數~Bdatabase(),將book[]中的所有未刪記錄寫入到book.txt中。
運算符重載
重載了「=」,當比較讀者編號和圖書編號時,重載;重載位運算符「〈〈」和「〉〉」等。
【主要函數演算法流程圖】
【程序的使用方法】
1.進入操作頁面,按提示操作;
2.首先,新增圖書和讀者信息,之後就可以對以存在的信息進行操作;
3.操作當中,可以隨時增加,更改和刪除圖書或讀者信息;
4.當選擇退出時,進行清屏。
二 程序上機調試報告
【語法錯誤及其排除】
1.在敲程序時,有很多拼寫錯誤,例好多處把Readdata()誤打Readdate();結束的分號,在不同的輸入法狀態下輸入,這些小錯誤剛開始很難發現,不過有了經驗,就很容易了。
2.創建新的構造函數時,使用出現了錯誤。重載構造函數要注意函數的訪問許可權,結果就不會出現錯誤。
【演算法錯誤及其排除】
1.讀者類中借書操作函數中,採用循環語句時判斷讀者已借圖書量時for(int i=0;i<Maxbor;i++)誤寫為for(int i=1;i<Maxbor;i++),使循環發生錯誤。
2.指針使用錯誤,指針b和r混淆,導致編譯錯誤得到「error C2660: 'retbook' : function does not take 1 parameters」錯誤報告。
三 程序測試結果
【收獲及體會】
除了課堂外,課程設計是最能學到東西的,最考驗人的。在做課程設計這段時間,時刻都感覺自己有好多不懂,要學的太多了!經過這次課程設計,讓我對C++這門語言有了更深的認識,操作能力有了提高。要想得到敲的代碼運行出來後的滿足感,需要耐心細心,毅力以及充沛的體力。只有經過多次編輯,多次編譯,再多次運行,才能編寫出更好的程序,有時候需要多次的更正才達到所要的運行結果。學習編程,需要多揣摩,實踐,實踐,再實踐,編程技能才能更上一層樓,此外還得多向高手請教!
【源程序代碼】
//********************
//圖書館借閱管理
//班級:
//學號:
//姓名:
//********************
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
const int Maxr=1000;//最多的讀者
const int Maxb=10000;//最多的圖書
const int Maxbor=8;//每位讀者最多借8本書
class Reader //讀者類
{
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;}//設置刪除標記
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;
}
}
}
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]<<endl;
}
};
class RDatabase//讀者庫類
{
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();
}
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()
{
int choice=1;
char rname[20];
int readerid;
Reader*r;
while(choice!=0)
{
cout<<"讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 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;
}
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
class Book//圖書類
{
int tag;//刪除標記 1:已刪;0:未刪
int no;//圖書編號
char name[20];//書名
int onshelf;//是否在架 1在架 0已借
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//圖書庫類
{
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(p==NULL)
{
top++;
book[top].addbook(n,na);
return 1;
}
cout<<"新增成功!"<<endl;
}
Book*query(int bookid)//查找圖書
{
for(int i=0;i<=top;i++)
if(book[i].getno()==bookid&&book[i].gettag()==0)
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()
{
int choice;
char bname[40];
int bookid;
Book *b;
while(choice!=0)
{
cout<<"圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出"<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"輸入圖書編號:";
cin>>bookid;
cout<<"輸入圖書書名:";
cin>>bname;
addbook(bookid,bname);
break;
case 2:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在"<<endl;
break;
}
cout<<"輸入新書名:";
cin>>bname;
b->setname(bname);
cout<<"更名成功!"<<endl;
break;
case 3:
cout<<"輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該圖書不存在!"<<endl;
break;
}
b->delbook();
break;
case 4:
cout<<"請輸入圖書編號:";
cin>>bookid;
b=query(bookid);
if(b==NULL)
{
cout<<"該書不存在!"<<endl;
break;
}
b->disp();
break;
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
void main()
{
int choice=1,bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!=0)
{
cout<<" 1借書 "<<endl;
cout<<" 2還書 "<<endl;
cout<<" 3圖書維護 "<<endl;
cout<<" 4讀者維護 "<<endl;
cout<<" 0離開 "<<endl;
cin>>choice;
switch(choice)
{
case 1:
cout<<"借書,請輸入讀者編號:";
cin>>readerid;
cout<<"圖書編號:";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"哈哈,借書成功!";
break;
}
b=BookDB.query(bookid);
if(b==NULL)
{
cout<<"不存在該書!"<<endl;
break;
}
if(b->borrowbook()==0)
{
cout<<"該書已借"<<endl;
break;
}
r->borrowbook(b->getno());
break;
cout<<"借書成功!"<<endl;
case 2:
cout<<"還書,請輸入讀者編號:";
cin>>readerid;
cout<<"請輸入圖書編號;";
cin>>bookid;
r=ReaderDB.query(readerid);
if(r==NULL)
{
cout<<"不存在該讀者!"<<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
cout<<"還書成功!"<<endl;
case 3:
BookDB.bookdata();
break;
case 4:
ReaderDB.readerdata();
break;
}
}
}
【輸出結果】
1借書
2還書
3圖書管理
4讀者服務
0退出
3
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
輸入圖書編號:1111
輸入圖書書名:武林外傳
新增成功!
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
輸入圖書編號:2222
輸入圖書書名:今夜無眠
新增成功!
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
0
1借書
2還書
3圖書管理
4讀者服務
0退出
4
讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
1
請輸入讀者編號:001
讀入讀者姓名:周強
讀者服務 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
0
1借書
2還書
3圖書管理
4讀者服務
0退出
1
借書,請輸入讀者編號:001
圖書編號:1111
哈哈,借書成功! 1借書
2還書
3圖書管理
4讀者服務
0退出
2
還書,請輸入讀者編號:001
請輸入圖書編號;1111
還書成功!
1借書
2還書
3圖書管理
4讀者服務
0退出
3
圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出
2
輸入圖書編號:2222
輸入新書名:金庸全集
更名成功!
Press any key to continue
Ⅲ C語言課程設計-圖書管理系統
您好!
還是你自己編吧!一班人都沒有那個心思,你這個代碼花的精力太大了,至少要半天才能出來!
非人力所能及!
加油,我相信你自己能寫出更完善的代碼來的!
Ⅳ c語言 數據結構課程設計 圖書管理系統
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//
#define MAXSIZE 100 //最大值定義為100
#define LIST_INIT_SIZE 100//圖書證使用者最大值定義為100
//借書人的結構體
typedef struct Boro//借書行為
{
char BNum[20];//借書的書號
char RetDate[8];//歸還日期
struct Boro *next;
}Bor;
typedef struct LinkBook
{
Bor *next; //該圖書證的借書行為
char CNum[20]; //卡號
int Total; //借書的數量
}lend[LIST_INIT_SIZE];//借書人數組
//圖書的結構體信息
typedef struct LNode
{
char CardNum[20];//圖書證號
struct LNode *next;
}LinkList; //借書人
typedef struct book
{//每種圖書需要登記的內容包括書號ISBN、書名、作者、出版社、總庫存量和現庫存量。
char num[20];//書號
char name[20];//書名
char auth[20];//作者
char pub[20];//出版社
int TotNum;//總庫存
int NowNum;//現庫存
LinkList *next;//借了該書的人
}ook[MAXSIZE];
//
int Retotal;//讀者數量
int total; //定義外部變數.書的種類數
//
//結構體初始化
void InitBo(ook &boo) //初始化圖書信息
{
for(int i=0;i<MAXSIZE;i++)
{
boo[i].NowNum=0;
boo[i].TotNum=0;
boo[i].next=NULL;
}
}
void InitRe(lend &Lin) //初始化借閱者信息
{
for(int i=0;i<LIST_INIT_SIZE;i++)
Lin[i].next=NULL;
}
//
int mid=0;//外部函數mid,用來返回查找到的位置
bool BinarySearch(ook boo,char SearchNum[]) //二分法查找比較書號
{ //用bool函數,但由於函數不能有兩個返回值,所以設置一個外部變數mid,用來返回查找到的位置
int low=0,high=total-1;
int found=0;
while(low<=high)
{
mid=(low+high)/2; //中間點
if(strcmp(boo[mid].num,SearchNum)==0) //書號相同
{
found=1;
return true;
}//查找成功
if(strcmp(boo[mid].num,SearchNum)!=0)//書號不同
high=mid-1;
else low=mid+1;
}
if(found==0)
return false; //查找失敗
}
void Buy(ook &boo, char BuyNum[])
{//1、 采編入庫:新購入一種書,如果該書在圖書賬目中已經存在,則將其庫存量增加(包
//括總庫存量和現庫存量),如果該書不存在,則在圖書賬目中增加一種書,總庫存量和現庫存量均為1。
if(BinarySearch(boo,BuyNum)) //如果書庫中有此書
{
boo[mid].TotNum++; //總庫存加1
boo[mid].NowNum++; //現庫存加1
printf("入庫成功.\n");
printf("已更改書庫中該書的信息。編號 %s 的書 %s 作者是 %s ,出版社是 %s ,目前的總庫存是 %d ,現庫存是 %d 。\n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotNum,boo[mid].NowNum);
}
if(!BinarySearch(boo,BuyNum))
{
int i;
for(i=total;i>mid&&total;i--) //插在適合位置 保持有序
boo[i]=boo[i-1]; //空出插入位置
printf("該書在書庫中不存在。設立新書目,請補全書的詳細信息。\n");
strcpy(boo[i].num,BuyNum);
printf("該書購入的數量是:");
scanf(" %d",&boo[i].NowNum);
boo[i].TotNum=boo[i].NowNum;
printf("該書的名字是:");
scanf(" %s",&boo[i].name);
printf("該書的作者是:");
scanf(" %s",&boo[i].auth);
printf("該書的出版社是:");
scanf(" %s",&boo[i].pub);//補全信息
boo[i].next=NULL;
total++;//總量+1
printf("已增加該書的信息。編號 %s 的書 %s 作者是 %s ,出版社是 %s ,目前的總庫存是 %d ,現庫存是 %d 。\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
printf("入庫成功.\n");
}
}
void Delete(ook &boo,char DeleteNum[])
{//2、 清空庫存:某一種書已無保留價值,將它從圖書賬目中注銷。
if(BinarySearch(boo,DeleteNum)==false||total==0) //如果無此書
printf("書庫中沒有該書.\n");
if(BinarySearch(boo,DeleteNum))//若有
{
if(!boo[mid].next)
{
int j;
for( j=mid;j<total;j++)
boo[j]=boo[j+1];
strcpy(boo[j].num,boo[j+1].num);
strcpy(boo[j].name,boo[j+1].name);
strcpy(boo[j].auth,boo[j+1].auth);
strcpy(boo[j].pub,boo[j+1].pub);
boo[j].TotNum=boo[j+1].TotNum;
boo[j].NowNum=boo[j+1].NowNum;
printf("已成功刪除該書.\n");
}
else printf("該書有借閱者,無法刪除。\n");
}
}
void Borrow(ook &boo,lend &Lin,char BorrowNum[],char CaNum[])
{//3、 借閱:如果一種書的現庫存量大於零,則借出一本書,將現庫存量減1,
//並登記借閱者的圖書證號和歸還期限。
Bor *p,*q;
LinkList *m,*n;
if(!BinarySearch(boo,BorrowNum)||total==0) //如果沒有找到此書
printf("書庫里沒這書。\n");//如果有這書
if(BinarySearch(boo,BorrowNum)) //書庫里有
{
if(boo[mid].NowNum>0) //看現庫存是否大於0
{
boo[mid].NowNum--;//借出一本,少1
if(boo[mid].next==NULL) //若該書信息下顯示該種書還沒被人借過
{
m=(LinkList *)malloc(sizeof(LNode));//分配
boo[mid].next=m;//該圖書信息中的鏈表的第一個結點
strcpy(m->CardNum,CaNum);
m->next=NULL;//後一個結點為空
}
else //如果已經有人在借這書了
{
m=boo[mid].next;
while(m->next) //遍歷到最後一個結點
m=m->next;
n=(LinkList *)malloc(sizeof(LNode));//分配空間,增加1個結點
m->next=n;
strcpy(n->CardNum,CaNum);//記錄證號
n->next=NULL;
}
int i=0;
for(i=0;i<Retotal;i++)//
{
if(!strcmp(Lin[i].CNum,CaNum))//如果已經有該圖書證的信息
{
p=Lin[i].next;
while(p->next)p=p->next;//遍歷到最後一個結點
q=(Bor *)malloc(sizeof(Boro));//分配空間
p->next=q;
strcpy(q->BNum,BorrowNum); //記錄書號
printf("輸入歸還日期:");
scanf("%s",&q->RetDate);
q->next=NULL;
printf("借閱成功.\n");
break; //找到證了就跳出循環
}
}
if(i==Retotal)//如果沒有這張證的信息
{
strcpy(Lin[i].CNum,CaNum); //記錄證號
p=(Bor *)malloc(sizeof(Boro)); //分配空間
Lin[i].next=p;
strcpy(p->BNum,BorrowNum);
printf("輸入歸還日期:");
scanf(" %s",&p->RetDate);
p->next=NULL;
Retotal++; //借閱證號信息總數加1
printf("借閱成功.\n");
}
}
else printf("借閱失敗.該書現在庫存為0.\n");
}
}
void Return(ook &boo,lend &Lin,char ReturnNum[],char BorrowerNum[])
{//4、 歸還:注銷對借閱者的登記,改變該書的現存量。
Bor *p,*q;
LinkList *m,*n;
int flag=0;//設置一個參數
if(!BinarySearch(boo,ReturnNum)||!total) //沒書
printf("書庫中無此書.\n");
if(BinarySearch(boo,ReturnNum)) //有書
{
m=boo[mid].next;
if(!strcmp(m->CardNum,BorrowerNum)) //如果是第一個借的人還的
{
boo[mid].NowNum++; //現庫存加1
boo[mid].next=m->next; //刪除結點
free(m); //釋放該結點的空間空間
}
else
{
while(m->next) //查找歸還者的借閱者結點
{
if(!strcmp(m->next->CardNum,BorrowerNum)) //如果找到
{
n=m->next; //n為歸還者的借閱結點
m->next=n->next; //m指向歸還者的借閱結點的下一結點
free(n); //釋放空間
boo[mid].NowNum++; //現庫存加1
break;
}
m=m->next;
}
}
}
//在借閱者表裡查找借閱者信息
for(int i=0;i<Retotal;i++)
{
if(!strcmp(Lin[i].CNum,BorrowerNum)) //如果找到借閱者
{
p=Lin[i].next;
if(!strcmp(p->BNum,ReturnNum)) //如果是歸還的是借的第一本書
{
Lin[i].next=p->next; //指向下一借書結點
free(p); //釋放結點空間
printf("成功歸還該書.\n");
flag=1;
break;
}
else //找不到
{
while(p->next) //找到歸還書的借書結點
{
if(!strcmp(p->next->BNum,ReturnNum)) //如果找到
{
q=p->next; //q為歸還書的借書結點
p->next=q->next; //p指向下一借書結點
free(q); //釋放空間
printf("成功歸還該書.\n");
flag=1;
break;
}
p=p->next;
}
}
}
}
for(int k=0;k<Retotal;k++)
if(!Lin[k].next)
{
int j;
for(j=k;j<Retotal;j++)
Lin[j]=Lin[j+1]; //其後都往前移一位,覆蓋掉當前信息
strcpy(Lin[j].CNum," "); //刪除圖書證號
Retotal--; //圖書證數減1
} //刪除當前狀態下沒借書的圖書證的信息,節省空間
if(flag==0) printf("無該證信息.\n");
}
//5、 查找:實現按三種查詢條件之一查找:按書號查找、
//按書名查找、按作者查找。註:可不實現組合查找,即幾個條件組合查找。
void SearchByNum(ook &boo,char SeaNum[])
{//BY NUM 根據書號查找
LinkList *p;
p=boo[mid].next;
if(BinarySearch(boo,SeaNum)==false)printf("對不起,未找到您想查找的書。\n");//二分查找 沒找到
else//找到了的話
{
{
printf("┏━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━┓\n");
printf("┃ 書號 ┃ 書名 ┃ 作者 ┃ 出版社 ┃ 現庫存 ┃ 總庫存 ┃\n");
printf("┣━━━━━━━╋━━━━━━━╋━━━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━┫\n");
printf("┃%14s┃%14s┃%16s┃%16s┃%10d┃%10d┃\n",boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].NowNum,boo[mid].TotNum);
printf("┗━━━━━━━┻━━━━━━━┻━━━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━┛\n");
if(boo[mid].next!=NULL)
{
printf("┏━━━━━━━┓\n");
printf("┃ 已借該書的 ┃\n");
printf("┃ 圖書證號 ┃\n");
while(p)
{
printf("┣━━━━━━━┫\n");
printf("┃%14s┃\n",p->CardNum);
p=p->next;
}
printf("┗━━━━━━━┛\n");
}
}
while(p)
{
printf(" %s ",p->CardNum);//在按書號查找的函數里也顯示借了這本書的借閱者的證號
p=p->next;
}
printf(" \n");
}//顯示查找的書籍的信息
}
void SearchByName(ook &boo)
{//BY NAME 根據書名查找
char SeaName[20];
printf("輸入想查找的書的書名:\n");
scanf(" %s",&SeaName);
printf("找到符合該書名的書的詳細信息如下:\n");
for(int i=0;i<total;i++)
{
if(strcmp(SeaName,boo[i].name)==0)//如果書名一樣
{
printf("書號:%s\n書名:%s\n作者:%s\n出版社:%s\n總庫存量:%d\n現庫存量:%d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
}//顯示符合信息的所有書籍的信息
}
}
void SearchByAuth(ook &boo)
{// BY AUTH 根據作者查找
char SeaAuth[20];
printf("輸入想查找的書的作者:\n");
scanf(" %s",&SeaAuth);
printf("找到符合該作者的書的詳細信息如下:\n");
for(int i=0;i<total;i++)
{
if(strcmp(SeaAuth,boo[i].auth)==0)//如果作者一樣
{
printf("書號:%s\n書名:%s\n作者:%s\n出版社:%s\n總庫存量:%d\n現庫存量:%d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
}//顯示符合信息的所有書籍的信息
}
}
//6、 查看:可查看某圖書證號的借閱者借閱的全部圖書,可查看全部超期未還的圖書。
void ViewCard(ook &boo,lend &Lin)
{//查看某圖書證號的借閱者借閱的全部圖書
char Num[20];
printf("請輸入您所想要查看的圖書證號:\n");
scanf(" %s",&Num);
Bor *p;
int qqq=0;
for(int i=0;i<Retotal;i++)
{
if(strcmp(Lin[i].CNum,Num)==0) //找到該證
{
printf("這個證借的書有:\n");
p=Lin[i].next;
while(p)
{
printf(" %s ",p->BNum); //書號
p=p->next;
}
printf("\n");
qqq=1;
break;
}
}
if(qqq==0)
printf("該證不存在.\n");
}
void ViewBook(ook &boo,lend &Lin)
{//查看全部超期未還的圖書
char date[8];
Bor *p;
printf("請輸入日期(請按格式20060605輸入):\n");
scanf(" %s",&date);
printf("所有超期未還的書有:\n");
for(int i=0;i<Retotal;i++)
{
p=Lin[i].next;
while(p)//當p不空時
{
if(strcmp(p->RetDate,date)<0) //超過日期
{
printf("書號為 %s 證號為 %s 應歸還日期為 %s \n",p->BNum,Lin[i].CNum,p->RetDate);
}//顯示所有超期未還的書的信息
p=p->next;
}
}
}
void Menu() //菜單
{
printf("┏—————————————————M E N U————————————————┓\n");
printf("│ │\n");
printf("│ 1. 采編入庫:新購入一種書,如果該書在圖書賬目中已經存在, │\n");
printf("│ 則將其庫存量增加(包括總庫存量和現庫存量)。 │\n");
printf("│ 如果該書不存在,則在圖書賬目中增加一種書, │\n");
printf("│ 總庫存量和現庫存量均為輸入的數字。 │\n");
printf("│ 2. 清空庫存:某一種書已無保留價值,將它從圖書賬目中注銷。 │\n");
printf("│ 3. 借閱:如果一種書的現庫存量大於零,則借出一本書,將現庫存量減1, │\n");
printf("│ 並登記借閱者的圖書證號和歸還期限。 │\n");
printf("│ 4. 歸還:注銷對借閱者的登記,改變該書的現存量。 │\n");
printf("│ 5. 按書號查找。 │\n");
printf("│ 6. 按書名查找。 │\n");
printf("│ 7. 按作者查找。 │\n");
printf("│ 8. 查看某圖書證號的借閱者借閱的全部圖書。 │\n");
printf("│ 9. 查看全部超期未還的圖書。 │\n");
printf("│ 0. 退出圖書管理系統。 │\n");
printf("│ │\n");
printf("┗—————————————請 選 擇 你 需 要 的 操 作————————————┛\n");
}
void main()
{
ook Bo;
lend Lin;
char BNum[20];
char CNum[20];
printf("-----------------------歡 迎 進 入 圖 書 管 理 系 統!---------------------------\n\n");
int choice=10;
int SearchCho=10,ViewCho=10;
while(choice!=0)
{
Menu();//顯示菜單
scanf(" %d",&choice);
switch(choice)
{
case 1://采編入庫
printf("請輸入入庫的書的書號:");
scanf(" %s",BNum);
Buy(Bo,BNum);
break;
case 2://清空庫存
printf("請輸入想要清除的書的書號:");
scanf(" %s",BNum);
Delete(Bo,BNum);
break;
case 3://借閱
printf("請輸入想要借閱的書的書號:\n");
scanf(" %s",&BNum);
printf("請輸入圖書證號:");
scanf(" %s",&CNum);
Borrow(Bo,Lin,BNum,CNum);
break;
case 4://歸還
printf("請輸入想要歸還的書的書號:\n");
scanf(" %s",&BNum);
printf("請輸入圖書證號:");
scanf(" %s",&CNum);
Return(Bo,Lin,BNum,CNum);
break;
case 5://查找//根據書號查找
printf("請輸入書號:");//輸入書號查找
scanf(" %s",&BNum);
SearchByNum(Bo,BNum);
break;
case 6://根據書名查找
SearchByName(Bo);
break;
case 7://根據作者查找
SearchByAuth(Bo);
break;
case 8://查看某圖書證所借的所有書
ViewCard(Bo,Lin);
break;
case 9: //查看全部超期未還的書
ViewBook(Bo,Lin);
break;
case 0://退出系統
exit(0);break;
default:printf("輸入錯誤!\n");exit(0);break;
}
}
}
Ⅳ C語言課程設計圖書館管理系統加講解
圖書管理系統代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct BOOK
{
int id,usr[10],total,store,days[10];
char name[31],author[21];
}books[100];
/*上面是結構體的定義,用於存放書籍及借書的信息。*/
void page_title(char *menu_item)
{
clrscr();
printf(">>> 圖 書 管 理 系 統 <<<\n\n- %s -\n\n",menu_item);
}
/*上面是列印頁眉的函數,同時通過參數menu_item,可以顯示當前的狀態。*/
void return_confirm(void)
{
printf("\n按任意鍵返回……\n");
getch();
}
/*上面是返回前請求確認的函數,以便在返回前觀察結果*/
int search_book(void)
{
int n,i;
printf("請輸入圖書序號:");
scanf("%d",&i);
for(n=0;n<100;n++)
{
if(books[n].id==i)
{
printf("書名:%s\n",books[n].name);
printf("作者:%s\n",books[n].author);
printf("存數:%d of ",books[n].store);
printf("%d\n",books[n].total);
return n;
}
}
printf("\n輸入錯誤或無效圖書序號.\n");
return -1;
}
/*上面的函數是在數組中找到圖書號匹配的記錄,顯示其信息並返
回數組下標,如果找不到相應記錄則提示錯誤並返回-1。*/
void book_out(void)
{
int n,s,l,d;
page_title("借閱圖書");
if((n=search_book())!=-1&&books[n].store>0)
{
printf("請輸入借書證序號:");
scanf("%d",&s);
printf("請輸入可借天數:");
scanf("%d",&d);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==0)
{
books[n].usr[l]=s;
books[n].days[l]=d;
break;
}
}
books[n].store--;
}
if(n!=-1&&books[n].store==0) printf("此書已經全部借出.\n");
return_confirm();
}
/*上面是借書的函數,首先調用找書函數*/
void book_in(void)
{
int n,s,l;
page_title("歸還圖書");
if((n=search_book())!=-1&&books[n].store<books[n].total)
{
printf("借閱者圖書證列表:\n");
for(l=0;l<10;l++)
if (books[n].usr[l]!=0)
printf("[%d] - %d天\n",books[n].usr[l],books[n].days[l]);
printf("請輸入借書證序號:");
scanf("%d",&s);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==s)
{
books[n].usr[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();
}
void book_add(void)
{
int n;
page_title("注冊新書");
for(n=0;n<100;n++)
if(books[n].id==0) break;
printf("序號:");
scanf("%d",&books[n].id);
printf("書名:");
scanf("%s",&books[n].name);
printf("作者:");
scanf("%s",&books[n].author);
printf("數量:");
scanf("%d",&books[n].total);
books[n].store=books[n].total;
return_confirm();
}
void book_del(void)
{
int n;
page_title("注銷舊書");
if((n=search_book())!=-1) books[n].id=0;
printf("該書已注銷.\n");
return_confirm();
}
void main(void)
{
menu: page_title("操作選單");
printf("請用數字鍵選擇操作\n\n");
printf("1 借閱圖書\n2 歸還圖書\n\n");
printf("3 注冊新書\n4 注銷舊書\n\n");
printf("\n0 退出\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}
{
int n;
page_title("廣?症慕");
if((n=search_book())!=-1) books[n].id=0;
printf("乎慕廝廣?.\n");
return_confirm();
}
void main(void)
{
menu: page_title("荷恬僉汽");
printf("萩喘方忖囚僉夲荷恬\n\n");
printf("1 処堋夕慕\n2 拷珊夕慕\n\n");
printf("3 廣過仟慕\n4 廣?症慕\n\n");
printf("\n0 曜竃\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}
Ⅵ c語言課程設計 小型圖書管理系統設計
沒有按價格排序,自己加,可以運行
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct BOOK
{
int id,usr[10],total,store,days[10];
char name[31],author[21];
}books[100];
/*上面是結構體的定義,用於存放書籍及借書的信息。*/
void page_title(char *menu_item)
{
printf(">>> 圖 書 管 理 系 統 <<<\n\n- %s -\n\n",menu_item);
}
/*上面是列印頁眉的函數,同時通過參數menu_item,可以顯示當前的狀態。*/
void return_confirm(void)
{
printf("\n按任意鍵返回……\n");
getch();
}
/*上面是返回前請求確認的函數,以便在返回前觀察結果*/
int search_book(void)
{
int n,i;
printf("請輸入圖書序號:");
scanf("%d",&i);
for(n=0;n<100;n++)
{
if(books[n].id==i)
{
printf("書名:%s\n",books[n].name);
printf("作者:%s\n",books[n].author);
printf("存數:%d of ",books[n].store);
printf("%d\n",books[n].total);
return n;
}
}
printf("\n輸入錯誤或無效圖書序號.\n");
return -1;
}
/*上面的函數是在數組中找到圖書號匹配的記錄,顯示其信息並返
回數組下標,如果找不到相應記錄則提示錯誤並返回-1。*/
void book_out(void)
{
int n,s,l,d;
page_title("借閱圖書");
if((n=search_book())!=-1&&books[n].store>0)
{
printf("請輸入借書證序號:");
scanf("%d",&s);
printf("請輸入可借天數:");
scanf("%d",&d);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==0)
{
books[n].usr[l]=s;
books[n].days[l]=d;
break;
}
}
books[n].store--;
}
if(n!=-1&&books[n].store==0) printf("此書已經全部借出.\n");
return_confirm();
}
/*上面是借書的函數,首先調用找書函數*/
void book_in(void)
{
int n,s,l;
page_title("歸還圖書");
if((n=search_book())!=-1&&books[n].store<books[n].total)
{
printf("借閱者圖書證列表:\n");
for(l=0;l<10;l++)
if (books[n].usr[l]!=0)
printf("[%d] - %d天\n",books[n].usr[l],books[n].days[l]);
printf("請輸入借書證序號:");
scanf("%d",&s);
for(l=0;l<10;l++)
{
if(books[n].usr[l]==s)
{
books[n].usr[l]=0;
books[n].days[l]=0;
break;
}
}
books[n].store++;
}
if(n!=-1&&books[n].store==books[n].total)
printf("全部入藏.\n");
return_confirm();
}
void book_add(void)
{
int n;
page_title("注冊新書");
for(n=0;n<100;n++)
if(books[n].id==0) break;
printf("序號:");
scanf("%d",&books[n].id);
printf("書名:");
scanf("%s",&books[n].name);
printf("作者:");
scanf("%s",&books[n].author);
printf("數量:");
scanf("%d",&books[n].total);
books[n].store=books[n].total;
return_confirm();
}
void book_del(void)
{
int n;
page_title("注銷舊書");
if((n=search_book())!=-1) books[n].id=0;
printf("該書已注銷.\n");
return_confirm();
}
void main(void)
{
menu: page_title("操作選單");
printf("請用數字鍵選擇操作\n\n");
printf("\t\t1 借閱圖書\t2 歸還圖書\n");
printf("\t\t3 注冊新書\t4 注銷舊書\n");
printf("\t\t0 退出\n");
switch(getch())
{
case '1' : book_out();break;
case '2' : book_in();break;
case '3' : book_add();break;
case '4' : book_del();break;
case '0' : exit(0);
}
goto menu;
}
Ⅶ c語言課程設計:圖書管理系統設計的基本思路是什麼
圖書管理系統主要要求可以錄入書籍,添加書目,查找書本信息,刪除或修改信息,有的還要求顯示是否被借閱等。
一般採用結構體數組,鏈表,文件操作和自定義函數。主要是需要對基礎知識掌握牢固。
先定義結構體,然後對結構體的成員進行定義,選擇數組存儲書本各種信息。錄入信息可以用for和do while循環等來做。
存放信息需要文件操作函數,比如fopen,fwrite等。
刪除和添加可以刪除節點或者增加節點。
查找之類的可以用字元串操作的各種函數實現。
附上參考源代碼
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#definebooks"f:\books.txt"
#definebooksbak"f:\booksbak.txt"
structbookinfo
{
charisbn[20];
chartitle[30];
charauthor[20];
intcount;
};
structbook
{
structbookinfoonebook;
structbook*next;
};
structbook*searchBook(structbook*listptr,charisbn[])
{
while(listptr!=(structbook*)0)
if(strcmp(listptr->onebook.isbn,isbn)==0)
returnlistptr;
else
listptr=listptr->next;
return(structbook*)0;
}
voidMainSearchbook(structbook*firstptr)
{
structbook*ptr;
charisbnno[20];
printf("請輸入ISBN:");
scanf("%s",&isbnno);
ptr=searchBook(firstptr,isbnno);
if(ptr!=(structbook*)0)
{
printf("找到了!!! ");
printf("ISBN:%s ",ptr->onebook.isbn);
printf("Title:%s ",ptr->onebook.title);
printf("Author:%s ",ptr->onebook.author);
}
else
printf("sorry,notfound!!! ");
}intaddBook(structbook*listptr,structbookinfonote)
{
while(listptr->next!=0)
listptr=listptr->next;
listptr->next=(structbook*)malloc(sizeof(structbook));
listptr->next->onebook=note;
listptr->next->next=0;
return0;
}
voidMainAdd(structbook*listptr,FILE*fp)
{
intok;
structbookinfonote;
printf("請輸入ISBN:");
scanf("%s",¬e.isbn);
printf("請輸入Title:");
scanf("%s",¬e.title);
printf("請輸入Author:");
scanf("%s",¬e.author);
ok=addBook(listptr,note);
if(ok==0)
{
//將加入的圖書寫到文件中保存
fprintf(fp," %s%s%s%d",note.isbn,note.title,note.author,0);
printf("添加圖書成功!!! ");
}
else
printf("添加圖書失敗!!! ");
}
intremoveBook(structbook*listptr,charisbn[])
{
while(listptr->next!=(structbook*)0)
{
if(strcmp(listptr->next->onebook.isbn,isbn)==0)
{
listptr->next=listptr->next->next;
return0;
}
else
listptr=listptr->next;
}
return-1;
}
voidMainRemove(structbook*listptr,FILE*fp)
/************************************************************************/
/*刪除書籍函數,通過ISBN刪除鏈表節點,同時刪除文件中對應信息*/
/*刪除文件中一行,用的是笨方法,把需要的信息寫到新文件,刪除舊文件,重命名..*/
/************************************************************************/
{
charisbnno[20];
intok;
structbookinfoonebook;
printf("請輸入ISBN:");
scanf("%s",&isbnno);
ok=removeBook(listptr,isbnno);
if(!ok)
{
FILE*fpbak;
if((fpbak=fopen(booksbak,"a+"))==NULL)
printf("文件打開失敗!!! ");
fseek(fp,0,SEEK_SET);//移到文件開始
while((fscanf(fp,"%s%s%s%d ",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
if(strcmp(onebook.isbn,isbnno)!=0)
{
fprintf(fpbak,"%s%s%s%d ",onebook.isbn,onebook.title,onebook.author,onebook.count);
}
}
fclose(fp);
fclose(fpbak);
if(remove(books))//刪除失敗返回非0
{
printf("刪除文件失敗!!! ");
return;
}
else
if(rename(booksbak,books))//重命名失敗返回非0值
{
printf("重命名失敗!!! ");
return;
}
printf("刪除成功!!! ");
}
else
printf("查無此書!!!");
}
intchoice(void)
{
intc;
printf("1.查看圖書 ");
printf("2.添加圖書 ");
printf("3.刪除圖書 ");
printf("4.退出程序 ");
printf("請選擇序號:");
returnc=getchar();
//returnc=getche();
printf(" ");
}
intaddEntry(FILE*fp,structbook*firstptr)
/************************************************************************/
/*主要用來載入文件中存放的圖書信息*/
/************************************************************************/
{
structbookinfoonebook;
while((fscanf(fp,"%s%s%s%d ",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
while(firstptr->next!=0)
firstptr=firstptr->next;
firstptr->next=(structbook*)malloc(sizeof(structbook));
firstptr->next->onebook=onebook;
firstptr->next->next=0;
}
return0;
}
intmain(intargc,char*argv[])
{
intch;
structbookfirst;
strcpy(first.onebook.isbn,"123456");
strcpy(first.onebook.title,"ProgrammingC");
strcpy(first.onebook.author,"yhb");
first.next=0;
structbook*firstptr=&first;//鏈表頭指針
FILE*fp;
if((fp=fopen(books,"a+"))==NULL)
printf("文件打開失敗!!!");
addEntry(fp,firstptr);
while(1)
{
system("CLS");//清屏
/************************************************************************/
/*想想這里為什麼要清空緩沖區?*/
/*由於上一次(choice函數)的getchar(),還有一個' '留在緩沖區....*/
/*可以把這句話注釋掉看看,沒有這句話會遇到麻煩*/
/*如果不用fflush,可以將上面的getchar()換成getche()*/
/*比較getchar(),getch(),getche()......*/
/************************************************************************/
fflush(stdin);
ch=choice()-48;
switch(ch)
{
case1:
MainSearchbook(firstptr);
break;
case2:
MainAdd(firstptr,fp);
break;
case3:
MainRemove(firstptr,fp);
break;
case4:
printf("謝謝使用... ");
exit(0);
default:
printf("請輸入正確序號!");
}
system("PAUSE");
}
return0;
}
Ⅷ C語言課程設計:圖書管理系統。求完整的代碼參考。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct BookInfo
{
char loginname[10];
char bookname[20];
char author[20];
char number[5];
char date[10];
double price;
};
struct Node
{
struct BookInfo book;
struct Node *next;
};
void option();
void select();
Node *head;
Node *pt[10];
FILE *fp;
//創建鏈表
/*
Node *CrtNode(int n)
{
Node *head; //聲明頭指針head
Node *p,*s;
head=new Node; //創建頭結點由head指向(空的頭結點)
s=head;
cout<<"請輸圖書信息:"<<endl;
for(int i=0;i<n;i++)
{
p=new Node; //創建一個結點
cout<<"登錄名:";
cin.getline(p->book.loginname,10);
strcat(p->book.loginname,"\n");
cout<<"書名:";
cin.getline(p->book.bookname,20);
strcat(p->book.bookname,"\n");
cout<<"作者名:";
cin.getline(p->book.author,20);
strcat(p->book.author,"\n");
cout<<"分類號:";
cin.getline(p->book.number,5);
strcat(p->book.number,"\n");
cout<<"出版日期:";
cin>>p->book.date;
strcat(p->book.date,"\n");
cout<<"價格:";
cin>>p->book.price;
s->next=p; //把創建的結點由s的next指向
s=p; //指針s的指向向後移一個結點
cin.clear();
cin.sync();
}
p->next=NULL; //最後一個結點的next指向空
return head; //返回頭指針
}
*/
/*
strcat(p->book.loginname,"\n");
strcat(p->book.bookname,"\n");
strcat(p->book.author,"\n");
strcat(p->book.number,"\n");
strcat(p->book.date,"\n");
*/
//1.插入
void Insert(Node *head)
{
Node *p,*s;
s = head;
cout<<"請輸入圖書信息:"<<endl;
p=new Node;
cin.clear();
cout<<"登錄名:";
cin.getline(p->book.loginname,10);
strcat(p->book.loginname,"\n");
cin.clear();
cin.sync();
cout<<"書名:";
cin.getline(p->book.bookname,20);
strcat(p->book.bookname,"\n");
cin.clear();
cin.sync();
cout<<"作者名:";
cin.getline(p->book.author,20);
strcat(p->book.author,"\n");
cin.clear();
cin.sync();
cout<<"分類號:";
cin.getline(p->book.number,5);
strcat(p->book.number,"\n");
cin.clear();
cin.sync();
cout<<"出版日期(yyyy-mm-dd):";
cin>>p->book.date;
strcat(p->book.date,"\n");
cout<<"價格:";
cin>>p->book.price;
while(s->next)
s = s->next;
s->next = p;
p->next = NULL;
}
//初始化
Node *Initial()
{
Node *head;
head = new Node;
head->next = NULL;
return head;
}
//2.顯示所有信息
void Show(Node *head)
{
int i = 1;
Node *p;
//顯示除頭結點以後所有結點(因為創建時頭結點為空)
p=head->next;
if(p == NULL)
{
cout<<"系統沒有儲存任何圖書信息,請輸入圖書信息後再進行其他操作!"<<endl;
}
else
{
cout<<"*********下面是所有的圖書信息**********"<<endl;
while(p!=NULL)
{
cout<<" 圖書"<<i<<": "<<p->book.bookname<<endl;
cout<<"登錄名:"<<p->book.loginname;
cout<<"書名:"<<p->book.bookname;
cout<<"作者名:"<<p->book.author;
cout<<"分類號:"<<p->book.number;
cout<<"出版日期:"<<p->book.date;
cout<<"價格:"<<p->book.price;
cout<<endl;
p=p->next;
i++;
cout<<endl;
}
}
cout<<"請按回車鍵返回菜單。"<<endl;
cin.get();
}
//3.查找
int findauthor(const Node *head)
{
Node *ps;
char author[20];
int count = 0;
ps = head->next;
cout<<"請輸入作者名:";
cin.getline(author,20);
strcat(author,"\n");
while(ps)
{
if(strcmp(ps->book.author,author) == 0)
{
pt[0] = ps;
count++;
}
ps = ps->next;
}
if(count == 0)
cout<<"查找的圖書不存在!"<<endl;
return count;
}
int findbookname(const Node *head)
{
Node *ps;
char bookname[20];
int count = 0;
int i = 0;
ps = head->next;
cout<<"請輸入書名:";
cin.getline(bookname,20);
strcat(bookname,"\n");
while(ps)
{
if(strcmp(ps->book.bookname,bookname) == 0)
{
pt[i] = ps;
count++;
i++;
}
if(ps->next ==NULL)
break;
ps = ps->next;
}
if(count == 0)
cout<<"查找的圖書不存在!"<<endl;
return count;
}
void Showarray(int n)
{
cout<<"*********下面是所查找的圖書信息**********"<<endl;
for(int i=0;i<n;i++)
{
cout<<" 圖書"<<i+1<<": "<<pt[i]->book.bookname;
cout<<"登錄名:"<<pt[i]->book.loginname;
cout<<"書名:"<<pt[0]->book.bookname;
cout<<"作者名:"<<pt[i]->book.author;
cout<<"分類號:"<<pt[i]->book.number;
cout<<"出版日期:"<<pt[i]->book.date;
cout<<"價格:"<<pt[i]->book.price;
cout<<endl;
}
cin.get();
}
int Find(Node *head)
{
int n,num;
system("cls");
if(head->next == NULL)
{
cout<<"系統沒有儲存任何圖書信息,請輸入圖書信息後再進行其他操作!"<<endl;
cin.get();
}
else
{
cout<<"請選擇查找方式(1.按作者名查找 2.按書名查找):";
cin>>n;
cin.clear();
cin.sync();
switch(n)
{
case 1:
num = findauthor(head);
if(num != 0)
Showarray(num);
break;
case 2:
num = findbookname(head);
if(num !=0)
Showarray(num);
break;
default:
cout<<"輸入有誤,請重新輸入!"<<endl;
cin.get();
system("cls");
option();
select();
}
}
return num;
}
//4.修改圖書信息
void Modify(Node *head)
{
Node *p,*q,*s;
p = head->next;
int i,n;
if(p == NULL)
cout<<"系統沒有儲存任何圖書信息,請輸入圖書信息後再進行其他操作!"<<endl;
else
{
cout<<"請輸入需要更正信息的圖書名:"<<endl;
n = findbookname(head);
Showarray(n);
loop:
{
cout<<"請選擇對第幾本書的信息進行修改:";
}
cin>>i;
cin.clear();
cin.sync();
if(i > 0 & i <= n)
{
cout<<"******修改第"<<i<<"本書的其他信息******"<<endl;
cout<<"登錄名:";
cin.getline(pt[i-1]->book.loginname,10);
strcat(pt[i-1]->book.loginname,"\n");
cin.clear();
cin.sync();
cout<<"作者名:";
cin.getline(pt[i-1]->book.author,20);
strcat(pt[i-1]->book.author,"\n");
cin.clear();
cin.sync();
cout<<"分類號:";
cin.getline(pt[i-1]->book.number,5);
strcat(pt[i-1]->book.number,"\n");
cin.clear();
cin.sync();
cout<<"出版日期(yyyy-mm-dd):";
cin>>pt[i-1]->book.date;
strcat(pt[i-1]->book.date,"\n");
cout<<"價格:";
cin>>pt[i-1]->book.price;
}
else
{
cout<<"選擇的書的序號有誤!";
goto loop;
}
}
cin.get();
}
//5.刪除圖書信息
void Deletebook(Node *head)
{
Node *p,*q;
char bookname[20];
int count = 0;
int i = 0;
p = head;
q = p->next;
if(q == NULL)
cout<<"系統沒有任何圖書信息!"<<endl;
else
{
cout<<"請輸入書名:";
cin.getline(bookname,20);
strcat(bookname,"\n");
while(q != NULL)
{
q = p->next;
if(strcmp(q->book.bookname,bookname) == 0)
{
p->next = q->next;
delete q;
count++;
}
p = q;
q = q->next;
}
if(count == 0)
cout<<"沒有找到該圖書信息!"<<endl;
else
cout<<"圖書信息已經刪除!"<<endl;
}
cin.get();
}
//鏈表長度
int Len(const Node *head)
{
Node *ps;
int count = 0;
ps = head->next;
while(ps)
{
count++;
ps = ps->next;
}
return count;
}
//6.保存文件
void save(Node *head)
{
Node *p;
char st[20];
p = head->next;
if((fp=fopen("book.dat", "w"))==NULL)
{
cout<<"打開文件失敗"<<endl;
return;
}
char t[255];
//將 L1.listlen() 賦予字元串中的數字
int lenth = Len(head);
fwrite(&lenth,sizeof(int),1,fp);
while(p)
{
fwrite(p,sizeof(struct Node),1,fp);
p = p->next;
}
fclose(fp);
cout<<"文件已經保存,請按ENTER鍵退出!"<<endl;
cin.get();
}
//8.刪除所有圖書信息
void Free_List(Node *head)
{
Node *p;
p = head->next;
while(p)
{
delete p;
p = head->next;
}
}
/*
void readstr(FILE *f,char *string)
{
do
{
//①: 先讀入一行文本
fgets(string, 255, f); //fgets(): 從文件 f 讀入長度為 255-1 的字元串
// 並存入到 string 中
} while ((string[0] == '/') || (string[0] == '\n'));
return;
}
*/
//讀取文件
Node *Load()
{
char c[255];
int lenth;
Node *p,*q;
head = new Node;
p = head;
if((fp=fopen("book.dat", "r"))==NULL)
{
cout<<"打開文件失敗"<<endl;
return head;
}
else
fread(&lenth,sizeof(int),1,fp);
for(int i = 0;i < lenth;i++)
{
q = new Node;
fread(q,sizeof(struct Node),1,fp);
p->next = q;
p = q;
}
p->next = NULL;
fclose(fp);
return head;
}
//9.菜單選項
void select()
{
int m,n;
cout<<"請輸入以下數字來選擇所需要的操作(1~8):";
cin.clear();
cin.sync();
cin>>n;
cin.clear();
cin.sync();
switch(n)
{
case 1:
system("cls");
Insert(head);
break;
case 2:
system("cls");
Show(head);
break;
case 3:
system("cls");
Find(head);
break;
case 4:
system("cls");
Modify(head);
break;
case 5:
system("cls");
Deletebook(head);
break;
case 6:
save(head);
break;
case 7:
exit(0);
break;
case 8:
Free_List(head);
break;
default:
break;
}
}
//10.菜單界面
void option()
{
cout<<" 圖書信息管理系統"<<endl;
cout<<"*****************************************************"<<endl;
cout<<" 1.輸入圖書信息 2.輸出圖書信息 "<<endl;
cout<<" 3.查找圖書信息 4.修改圖書信息 "<<endl;
cout<<" 5.刪除圖書信息 6.保存圖書信息 "<<endl;
cout<<" 7.退出系統 "<<endl;
cout<<"*****************************************************"<<endl;
}
int main()
{
//head = Initial();
head = Load();
while(1)
{
system("cls");
option();
select();
}
return 0;
}
Ⅸ 數據結構課程設計(基於C) 圖書管理系統
頭文件:
============
#ifndef _DATA_STRUCT_H_
#define _DATA_STRUCT_H_
/*圖書結構*/
struct Book
{
unsigned long BookID;/*圖書編號*/
char BookName[512];/*書名*/
char Writer[512];/*作者*/
int CurrentNumber;/*現存量*/
Book *pNext;/*下一個圖書信息*/
};
/*圖書索引結構*/
struct Index
{
unsigned long BookID;/*圖書編號*/
Index *pNext;/*下一個索引指針*/
};
/*借閱信息結構*/
struct Borrow
{
unsigned long BookID;/*借閱圖書編號*/
char BookName[512];/*書名*/
unsigned long StuID;/*圖書證號*/
char ReturnTime[512];/*歸還日期*/
Borrow *pNext;/*下一個借閱信息*/
};
#endif/*_DATA_STRUCT_H_*/
實現文件:
===============
// BookManage.cpp : 定義控制台應用程序的入口點。
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "DataStruct.h"
/*
數據結構課程設計(基於C) 圖書管理系統
懸賞分:100 - 離問題結束還有 14 天 23 小時
【問題描述】
圖書管理基本業務活動包括,對一本書的采編入庫、清楚庫存、借閱和歸還等等。試設計一個圖書管理系統,將上述業務活動藉助於計算機系統完成。
【基本要求】
(1) 每種書的登記至少包括書號書名作者現存量總庫存量5項
(2)對書號建立索引表(線性表)以提高查找效率
(3) 系統要實現的操作及其功能定義如下:
1 采編入庫:新購入一種書,經分類和確定數好之後登記到圖書館賬目中去。如果這種書在賬戶中已有,則只將總庫存量增加。
2借閱:如果一本書的現存量大於零,則借出一本,登出借閱者的圖書證號和歸還日期
3歸還:注銷對借閱者的登記,改變該書的現存量
*/
/*獲取輸入字元串*/
void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber = false);
/*顯示主菜單 並返回選擇*/
int ShowMainMenu();
/*圖書入庫操作,傳入參數為圖書列表頭指針的指針和索引信息的頭指針的指針,因為在此函數內部可能會改變頭指針的值*/
void PutBookInLib(Book **pHead,Index **pIndex);
/*查詢圖書館庫存,查詢不改變數據,故傳入指針即可*/
void QueryBookLib(Book *pHead);
/*借閱圖書*/
void BorrowBook(Borrow **pBorrow,Book *pHead);
/*查詢借閱*/
void QueryBorrow(Borrow *pBorrow);
/*歸還圖書*/
void ReturnBook(Borrow **pBorrow,Book *pHead);
/*釋放圖書鏈表及索引鏈表及借閱信息鏈表*/
void DeleteBookList(Book **pHead);
void DeleteIndexList(Index **pIndex);
void DeleteBorrowList(Borrow **pBorrow);
int main()
{
/*圖書列表頭指針*/
Book *pBookHead = NULL;
/*圖書索引頭指針*/
Index *pIndexHead = NULL;
/*借閱信息頭指針*/
Borrow *pBorrowHead = NULL;
/*用來保存當前用戶的輸入*/
int ChoosedNum = -1;
while ( true )
{
ChoosedNum = ShowMainMenu();
switch(ChoosedNum)
{
case 0 :/*退出*/
{
return 0;
break;
}
case 1:/*圖書入庫*/
{
PutBookInLib(&pBookHead,&pIndexHead);
break;
}
case 2:/*查詢庫存*/
{
QueryBookLib(pBookHead);
printf("按回車鍵繼續...");
fflush(stdin);
getchar();
system("cls");
break;
}
case 3:/*借閱圖書*/
{
QueryBookLib(pBookHead);
BorrowBook(&pBorrowHead,pBookHead);
break;
}
case 4:/*查詢借閱*/
{
QueryBorrow(pBorrowHead);
printf("按回車鍵繼續...");
fflush(stdin);
getchar();
system("cls");
break;
}
case 5:/*歸還圖書*/
{
QueryBorrow(pBorrowHead);
ReturnBook(&pBorrowHead,pBookHead);
break;
}
}
}
DeleteBookList(&pBookHead);
DeleteIndexList(&pIndexHead);
DeleteBorrowList(&pBorrowHead);
fflush(stdin);
getchar();
return 0;
}
/*獲取輸入字元串*/
void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber)
{
memset(pInOutStr,0x0,StrLen);
fflush(stdin);
int Count = 0;
while ( true )
{
char TmpC = 0;
fread(&TmpC,1,1,stdin);
if ( 10 == TmpC )
{
break;
}
if ( OnlyGetNumber && TmpC >= '0' && TmpC <= '9' )
{
pInOutStr[Count] = TmpC;
Count++;
}
else
{
pInOutStr[Count] = TmpC;
Count++;
}
}
}
/*顯示主菜單 並返回選擇*/
int ShowMainMenu()
{
char InPutStr[1024];
NO_INPUT:
printf("\n\n\n");
printf("******************************************************************\n");
printf("* 圖書管理系統 *\n");
printf("******************************************************************\n");
printf("\n");
printf("請選擇:\n");
printf("\t1.圖書入庫\n");
printf("\t2.查詢庫存\n");
printf("\t3.借閱圖書\n");
printf("\t4.查詢借閱\n");
printf("\t5.歸還圖書\n");
printf("\t0.退出\n");
printf("\n");
printf("\t輸入 : ");
GetInput(InPutStr,1024,true);
if ( strlen(InPutStr) < 1 )
{
system("cls");
goto NO_INPUT;
}
return atoi(InPutStr);
}
/*圖書入庫操作*/
void PutBookInLib(Book **pHead,Index **pIndex)
{
Book *pWork = *pHead;
unsigned long BookID = 1;
char InPutStr[1024];
/*先計算處當前入庫圖書的ID號*/
if ( NULL == pWork )
{
BookID = 1;
}
else
{
while ( pWork->pNext != NULL )
{
pWork = pWork->pNext;
}
BookID = pWork->BookID + 1;
}
Book *pTmpNewBook = (Book *)(malloc(sizeof(Book)));
memset(pTmpNewBook,0x0,sizeof(Book));
Index *pTmpIndex = (Index *)(malloc(sizeof(Index)));
memset(pTmpIndex,0x0,sizeof(Index));
pTmpNewBook->BookID = BookID;
pTmpIndex->BookID = BookID;
system("cls");
printf("輸入圖書名稱 : ");
GetInput(InPutStr,1024);
strcpy(pTmpNewBook->BookName,InPutStr);
system("cls");
printf("<<%s>>\n",pTmpNewBook->BookName);
printf("圖書作者 : ");
GetInput(InPutStr,1024);
strcpy(pTmpNewBook->Writer,InPutStr);
system("cls");
printf("<<%s>>\n",pTmpNewBook->BookName);
printf("作者:%s\n",pTmpNewBook->Writer);
printf("入庫數量 : ");
GetInput(InPutStr,1024,true);
pTmpNewBook->CurrentNumber = atoi(InPutStr);
if ( pTmpNewBook->CurrentNumber < 1 )
{
system("cls");
printf("入庫數量錯誤!(按回車鍵繼續...)");
fflush(stdin);
getchar();
system("cls");
return;
}
if ( NULL == *pHead )
{
*pHead = pTmpNewBook;
*pIndex = pTmpIndex;
}
else
{
Book *pWork = *pHead;
while ( pWork != NULL )
{
if ( strcmp(pWork->BookName,pTmpNewBook->BookName) == 0 && strcmp(pWork->Writer,pTmpNewBook->Writer) == 0 )
{
pWork->CurrentNumber += pTmpNewBook->CurrentNumber;
return;
}
pWork = pWork->pNext;
}
pWork = *pHead;
while ( pWork->pNext != NULL )
{
pWork = pWork->pNext;
}
pWork->pNext = pTmpNewBook;
Index *pWork2 = *pIndex;
while ( pWork2->pNext != NULL )
{
pWork2 = pWork2->pNext;
}
pWork2->pNext = pTmpIndex;
}
system("cls");
printf("圖書:<<%s>>\n作者:%s\n入庫數:%d\n\n入庫操作成功!(按回車鍵繼續...)",pTmpNewBook->BookName,pTmpNewBook->Writer,pTmpNewBook->CurrentNumber);
fflush(stdin);
getchar();
system("cls");
}
/*釋放圖書鏈表及索引鏈表*/
void DeleteBookList(Book **pHead)
{
Book *pWork = *pHead;
Book *pNext = pWork;
while ( NULL != pWork )
{
pNext = pWork->pNext;
free(pWork);
pWork = pNext;
}
}
void DeleteIndexList(Index **pIndex)
{
Index *pWork = *pIndex;
Index *pNext = pWork;
while ( NULL != pWork )
{
pNext = pWork->pNext;
free(pWork);
pWork = pNext;
}
}
void DeleteBorrowList(Borrow **pBorrow)
{
Borrow *pWork = *pBorrow;
Borrow *pNext = pWork;
while ( NULL != pWork )
{
pNext = pWork->pNext;
free(pWork);
pWork = pNext;
}
}
/*查詢圖書館庫存,查詢不改變數據,故傳入指針即可*/
void QueryBookLib(Book *pHead)
{
Book *pWork = pHead;
int TotalCount = 0;
while ( NULL != pWork )
{
TotalCount++;
pWork = pWork->pNext;
}
system("cls");
printf("當前庫存共%d種圖書,列表如下:\n=====================================================\n",TotalCount);
pWork = pHead;
while ( NULL != pWork )
{
printf("編號:[%d] 書名:<<%s>> 作者:%s 當前庫存:%d\n",pWork->BookID,pWork->BookName,pWork->Writer,pWork->CurrentNumber);
pWork = pWork->pNext;
}
printf("=====================================================\n",TotalCount);
}
/*借閱圖書*/
void BorrowBook(Borrow **pBorrow,Book *pHead)
{
char InPutStr[1024];
bool HadTheBook = false;
Borrow *pTmpBorrow = (Borrow *)(malloc(sizeof(Borrow)));
memset(pTmpBorrow,0x0,sizeof(Borrow));
printf("請輸入你想借書的編號 : ");
GetInput(InPutStr,1024,true);
pTmpBorrow->BookID = atoi(InPutStr);
Book *pWorkBook = pHead;
while ( pWorkBook != NULL )
{
if ( pWorkBook->BookID == pTmpBorrow->BookID )
{
HadTheBook = true;
break;
}
pWorkBook = pWorkBook->pNext;
}
if ( HadTheBook )
{
if ( pWorkBook->CurrentNumber < 1 )
{
system("cls");
printf("圖書<<%s>>當前無庫存,無法借閱!\n(按回車鍵繼續...)",pWorkBook->BookName);
fflush(stdin);
getchar();
system("cls");
free(pTmpBorrow);
return;
}
}
else
{
system("cls");
printf("圖書編號%d不存在!\n(按回車鍵繼續...)",pTmpBorrow->BookID);
fflush(stdin);
getchar();
system("cls");
free(pTmpBorrow);
return;
}
strcpy(pTmpBorrow->BookName,pWorkBook->BookName);
printf("請輸入借書證號 : ");
GetInput(InPutStr,1024,true);
pTmpBorrow->StuID = atoi(InPutStr);
if ( 0 == pTmpBorrow->StuID )
{
system("cls");
printf("借書證號不存在(借書證號輸入整數)!\n(按回車鍵繼續...)");
fflush(stdin);
getchar();
system("cls");
free(pTmpBorrow);
return;
}
time_t ltime;
struct tm *today;
time(<ime);
ltime += 60 * 60 * 24 * 30;
today = localtime(<ime);
sprintf(pTmpBorrow->ReturnTime,"%d年%d月%d日", today->tm_year+1900,
today->tm_mon+1,
today->tm_mday);
if ( *pBorrow == NULL )
{
*pBorrow = pTmpBorrow;
}
else
{
Borrow *pWork = *pBorrow;
while ( NULL != pWork->pNext )
{
pWork = pWork->pNext;
}
pWork->pNext = pTmpBorrow;
}
pWorkBook->CurrentNumber--;
system("cls");
printf("借書證號:%d\n借閱圖書:<<%s>>\n\n操作成功!(按回車鍵繼續...)",pTmpBorrow->StuID,pTmpBorrow->BookName);
fflush(stdin);
getchar();
system("cls");
}
/*查詢借閱*/
void QueryBorrow(Borrow *pBorrow)
{
Borrow *pWork = pBorrow;
int TotalCount = 0;
while ( NULL != pWork )
{
TotalCount++;
pWork = pWork->pNext;
}
system("cls");
printf("當前借閱信息共%d條,列表如下:\n=====================================================\n",TotalCount);
pWork = pBorrow;
while ( NULL != pWork )
{
printf("借數證號:[%d] 借書名:<<%s>> 圖書編號:%d 歸還日期:%s\n",pWork->StuID,pWork->BookName,pWork->BookID,pWork->ReturnTime);
pWork = pWork->pNext;
}
printf("=====================================================\n",TotalCount);
}
/*歸還圖書*/
void ReturnBook(Borrow **pBorrow,Book *pHead)
{
char InPutStr[1024];
Borrow TmpBorrow;
bool HasFindBorrwo = false;
memset(&TmpBorrow,0x0,sizeof(TmpBorrow));
printf("請輸入借書證號 : ");
GetInput(InPutStr,1024,true);
TmpBorrow.StuID = atoi(InPutStr);
printf("請輸入所還圖書編號 : ");
GetInput(InPutStr,1024,true);
TmpBorrow.BookID = atoi(InPutStr);
Borrow *pWorkBorrow = *pBorrow;
Borrow *pDeletePre = NULL;
while ( NULL != pWorkBorrow )
{
if ( pWorkBorrow->BookID == TmpBorrow.BookID && pWorkBorrow->StuID == TmpBorrow.StuID )
{
HasFindBorrwo = true;
break;
}
pDeletePre = pWorkBorrow;
pWorkBorrow = pWorkBorrow->pNext;
}
if ( ! HasFindBorrwo )
{
system("cls");
printf("你輸入的借書信息不存在!\n(按回車鍵繼續...)");
fflush(stdin);
getchar();
system("cls");
return;
}
if ( NULL == pDeletePre )
{
*pBorrow = pWorkBorrow->pNext;
}
else
{
pDeletePre->pNext = pWorkBorrow->pNext;
}
Book *pWorkBook = pHead;
while ( NULL != pWorkBook )
{
if ( pWorkBook->BookID == pWorkBorrow->BookID )
{
pWorkBook->CurrentNumber ++;
}
pWorkBook = pWorkBook->pNext;
}
system("cls");
printf("借書證號:%d\n歸還圖書:<<%s>>\n\n操作成功!(按回車鍵繼續...)",pWorkBorrow->StuID,pWorkBorrow->BookName);
fflush(stdin);
getchar();
system("cls");
free(pWorkBorrow);
}