A. c语言图书管理系统 急需!!
我简单给你说一下吧。
1、首先定义数据结构
图书结构:图书编号、图书名称、单价、作者、存在状态
人员结构:人员编号(学生为学号,教师为工作编号)、姓名、性别等
借书结构:人员编号、图书编号、借书时间、还书时间
2、由于是C系统,通常情况下,数据要存储在文件中,因此,还需要定义文件结构:图书、人员、借书信息。
为了数据处理速度,可将借书信息中已经还书的信息单独放在还书信息中,借书信息中的数据只是已经借出还没有归还的数据。
3、系统功能定义,以及编码。
由于系统太过庞大,你还是自己试着做一下吧,应该可以做好的。
学习本身就是做程序,如果有困难,可以上我们团队提问题,随时恭候!
祝学习进步!
B. C语言程序设计的图书管理系统
我们也开始做课程设计了呢~~~ 这是我同学做的:
#include  
#include  
#include  
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. 急求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);//关闭文件
}
你把保存的文件地址自己修改一下就可以了。。希望能帮到你
D. c语言图书管理系统如何实现借书和还书功能

E. C语言编程:图书借阅系统
没时间做了  实现不是很理想固定死了你这个实现 你可以在改下 
/*1、 系统初始化10种图书(图书名自定);
2、 显示所有图书列表(编号、名称和当前状态);
3、 显示图书借出状态(是否已经被借阅);
4、 操作者可以通过图书名称进行查询,并借阅;
5、 操作者也可以归还某本已经借阅的图书;
6、 对某本图书的借阅次数进行汇总求和;
7、 求出借阅次数最多和最少的图书;*/
#ifndef LIBRARY_H
#define LIBRARY_H
#include<vector>
#include<string>
#include<iterator>
#include<utility>
#include<iostream>
using std::cin;
using std::vector;
using std::iterator;
using std::string;
using std::pair;
using std::istream;
class Book{
public:
 Book(istream& i):ve(bo(i)){};//1、 系统初始化10种图书(图书名自定);
 void list(size_t& n) const//查询
 { pair<string,bool> ir=ve[n+1];
 std::cout<<"第"<<n<<"本书名"<<ir.first<<"状态"<<std::ends;
 (ir.second==true)?std::cout<<"存在":std::cout<<"已借出"<<std::endl;
  std::cout<<std::endl;}//2、 显示图书列表(编号、名称和当前状态);
 void list(string& str) //查询并借阅
 {
  vector<pair<string,bool> >::iterator itr=ve.begin();
  vector<pair<string,int> >::iterator it=pai.begin();
  while(itr!=ve.end())
  {if(itr->first==str&&it->first==str)
  {std::cout<<"存在!请输入y/n确认是否借阅"<<std::ends;
  char ch;cin>>ch;
  if(ch=='y')
  {itr->second=false;
  it->second=it->second++;
  std::cout<<"已借阅"<<std::ends;}
  }else{std::cout<<"不存在"<<std::ends;}
  ++itr;++it;
  }
 }
 void rest(string& str)
 {vector<pair<string,bool> >::iterator itr=ve.begin();
  while(itr++!=ve.end())
  {if(itr->first==str&&itr->second==false)
  {itr->second=true;
  std::cout<<"已归还"<<"  ";}else{std::cout<<"不在"<<std::endl;}}}//5、 操作者也可以归还某本已经借阅的图书;
 void sum(const string str)
 {vector<pair<string,int> >::iterator it=pai.begin();
 int max=(++it)->second;
 int min=(++it)->second;
 string ma,mi;
  while(it!=pai.end())
  {
   if(it->first==str)
   {std::cout<<"借阅次数为"<<(it->second)<<std::ends;}
   if(max<it->second)
   {max=it->second;
   ma=it->first;}
   if(min>it->second)
   {min=it->second;
   mi=it->first;}}
  std::cout<<"借阅最多次de 图书"<<ma<<" "<<max<<"次"<<std::endl;
 std::cout<<"借阅最少次de 图书"<<mi<<" "<<min<<"次"<<std::endl;}/*6、 对某本图书的借阅次数进行汇总求和;
7、 求出借阅次数最多和最少的图书;*/
private:
 vector<pair<string,bool> > bo(istream&);
 vector<pair<string,bool> > ve;
 vector<pair<string,int> > pai;
};
vector<pair<string,bool> > Book::bo(istream& is)//创建 图书 及存在情况  
{
 int i=0;
 std::string s;
 std::vector<pair<string,bool> > v;
 vector<pair<string,int> > pai;
 while(is>>s)
 {   
  v.push_back(make_pair(s,true));
  pai.push_back(make_pair(s,0));
  ++i;
  if(i==10)
   break;
 }
 is.clear();
 return v;
}
#endif
下面是 main
#include<iostream>
#include"library.h"
using namespace std;
int main()
{
 size_t x=5;
 string str;
 Book a(cin);//初始化
 cin.clear();
 a.list(x);//输入数字查询
 cout<<"输入查询"<<endl;
 cin>>str;
 a.list(str);//输入字符查询并借阅
 //a.rest(string("sa"));//归还
 //a.sum(string("sa"));//查询某本书的借阅次数并统计输出借阅最多和最少的书
 return 0;
}
F. 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;
 }
 }
}
G. c语言,模拟借书还书
//就说个大概吧,也没有太细节,简单的做法下面的代码就可以,当然可以做得更好更复杂,那就相当于是图书馆管理系统了。下面主要是借书、还书、查询是否到期等
#include<stdio.h>
#include<time.h>
#include<string.h>
#defineN5
#defineM5
typedefstruct{
intyear;
intmonth;
intday;
}Date;
typedefstruct{
charname[100];
charauthor[50];
intavailable;//是否可借(1可借,0不可外借)
Datedate;//入库/借出/还入日期
}Book;
typedefstruct{
intnumber;
charname[20];
intcount;//该生所持有的书数量
Bookbook[3];//每个学生最多只能同时保有3本书
}Student;
voidadd_book(Book*);//录入新书
intborrow_book(Book*,Student*);//借书
intreturn_book(Book*,Student*);
intquery(Book*,char*);//查询
Dateget_time();//获取当前时间
intcal_day(Date);//计算是否超期
voidmain()
{
Bookbook[N];
Studentstu[M];
charname[100];
inti;
//从文件中读入图书信息和学生信息
FILE*fp;
fp=fopen("d:\book.txt","r");
for(i=0;i<N&&!feof(fp);i++)
fscanf(fp,"%s%s%d%d%d%d",book[i].name,book[i].author,&book[i].available,&book[i].date.year,&book[i].date.month,&book[i].date.day);
fclose(fp);
fp=fopen("d:\student.txt","r");
for(i=0;i<M&&!feof(fp);i++)
{
fscanf(fp,"%d%s%d",&stu[i].number,stu[i].name,&stu[i].count);
for(intj=0;j<3;j++)
fscanf(fp,"%s%s%d%d%d%d",stu[i].book[j].name,stu[i].book[j].author,&stu[i].book[j].available,&stu[i].book[j].date.year,&stu[i].book[j].date.month,&stu[i].book[j].date.day);
}
fclose(fp);
intmode;
loop:
printf("1.录入图书 2.借书 3.还书 4.查询 *.退出 ");
scanf("%d",&mode);
switch(mode)
{
case1:
add_book(book);
break;
case2:
if(borrow_book(book,stu))printf("借书成功 ");
elseprintf("借书失败 ");
break;
case3:
if(return_book(book,stu))printf("还书成功 ");
elseprintf("还书失败 ");
break;
case4:
printf("输入书名:");
scanf("%s",name);
if(!query(book,name))printf("没有查询到该图书信息 ");
break;
default:
return;
}
gotoloop;
}
//根据学号,查看是否还能借入,如能借入更新借书的学生信息和图书信息
intborrow_book(Book*b,Student*s)
{
printf("输入书名:");
charname[100];
scanf("%s",name);
printf("输入学号:");
intnum;
scanf("%d",&num);
for(inti=0;i<M;i++)
if(s[i].number==num&&s[i].count<3)//持有数量3本以上无法借书
{
intc=s[i].count;
for(intj=0;j<N;j++)
if(strcmp(b[j].name,name)==0)//借书成功,更新信息
{
b[j].available=0;
b[j].date=get_time();
s[i].book[c]=b[j];
s[i].count=c+1;
return1;
}
}
return0;
}
//根据学号和书名查找到借书信息,并更新还书信息和计算是否超期
intreturn_book(Book*b,Student*s)
{
printf("输入书名:");
charname[100];
scanf("%s",name);
printf("输入学号:");
intnum;
scanf("%d",&num);
for(intj=0;j<M;j++)
if(s[j].number==num&&s[j].count>0)
{
for(intk=0;k<s[j].count;k++)
if(strcmp(s[j].book[k].name,name)==0)
{
s[j].count--;//更新学生持有书籍数量
for(inti=0;i<N;i++)
if(strcmp(b[i].name,name)==0)
{
if(query(b,name)>0)
printf("借书超期%d天,请交纳罚金 ");
b[i].available=1;
b[i].date=get_time();
return1;
}
}
}
return0;
}
voidadd_book(Book*book)
{
//录入新书并保存至文件
}
//根据书名查找图书信息,(还可以根据学生来查找,这里没实现)
intquery(Book*b,char*name)
{
for(inti=0;i<N;i++)
if(strcmp(b[i].name,name)==0)
{
if(b[i].available==1){printf("本书可以借出 ");return-1;}
else
{
intdays=cal_day(b[i].date);
printf("本书已被借出%d天 ",days);
if(days>10)
printf("本书已超期%d天 ",days-10);
returndays-10;
}
}
return0;
}
Dateget_time()
{
Datedate;
time_tcurtime;
structtm*timeinfo;
time(&curtime);//获取时间
timeinfo=localtime(&curtime);//转为当地时间
date.year=timeinfo->tm_year+1900;
date.month=timeinfo->tm_mon+1;
date.day=timeinfo->tm_mday;
returndate;
}
//计算借出的总天数
intcal_day(Dated)
{
Dateod=get_time();
if(od.year==d.year)
{
if(od.month==d.month)returnd.day-od.day;
elsereturnd.day-od.day+(od.month-d.month)*30;//每月按30天计
}
else
{return((d.month-1)*30+d.day)-((od.month-1)*30+od.day)+(d.year-od.year)*365;}//每年按365天计
}
以下是部分运行结果和书籍学生信息文本。

大概意思就是:多本书使用数组来保存,时间的计算用库函数。
