文件读写图书管理系统(注册,管理员,登陆)

//漏洞流交流

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
#define MAX_ACCOUNT 10//最多注册10个账户,即10个学生信息
#define MAX_BOOK 30//最多存放30种图书
int i=0;
struct book{
 char a[20],b[20],c[20],d[5];//a:书名  b:作者  c:出版社  d:价格
 int e,flag;//e:库存  flag:标记为,判断数据在文件中是否有效(1有效0无效)
}books[MAX_BOOK];
struct stu{
 char num[10],name[10],department[5],bor_ed[5][10],key[6];
 int re_bor,flag;//re_bor:最多借5本,记录还可以借的本数  flag:标记为,判断数据在文件中是否有效(1有效0无效)
}stud[MAX_ACCOUNT];//用户
struct admi_{
 char ad_name[15],key[15];
}admini;//管理员
void ad_menu()
{printf("您好,您选择的是图书管理系统管理员,请登录进行以下操作:/n");
 printf("选择1:添加图书/n"); 
 printf("选择2:查找图书/n");
 printf("选择3:显示所有图书/n");
 printf("选择4:显示所有用户/n");
 printf("选择5:退出系统/n"); 
}
void user_menu()
{printf("您好,您选择的是图书管理系统用户,请登录进行以下操作:/n");
 printf("选择1:查找图书/n"); 
 printf("选择2:显示所有图书/n");
 printf("选择3:我的信息/n");
 printf("选择4:我要借书/n");
 printf("选择5:我要还书/n");
 printf("选择6:我要注册/n");
 printf("选择7:退出系统/n"); 
}
void create_ad()
{
  FILE *fp;
  fp=fopen("administrator.dat","wb");
  strcpy(admini.ad_name,"suncl12345");
  strcpy(admini.key,"suncl4362615");
  if(fwrite(&admini,sizeof(struct admi_),1,fp)!=1)
   printf("write error/n");
  fclose(fp);
}
void show_account(struct stu student)//显示学生信息
{int i;
 if(student.num!="NULL")
 {
  printf("您的信息为:/n");
  printf("借书证号:%s  姓名:%s  系别:%s/n",student.num,student.name,student.department);
  if(student.re_bor!=5)
  {printf("已借图书:/n");
   for(i=0;i<5-student.re_bor-1;i++)
   printf("  %s/n",student.bor_ed[i]);
  }
  else
    printf("未借图书/n");
  printf("还可以借:%d本/n",student.re_bor);
 }
}
void show_book(struct book b_ook)//显示书的信息
{if(strcmp(b_ook.a,"x")!=0)
    printf("书名:%s  作者:%s  出版社:%s  价格:%s  库存:%d/n",b_ook.a,b_ook.b,b_ook.c,b_ook.d,b_ook.e);
 else
    printf("没有此图书!/n");
}
void add_book()//添加图书信息
{
 struct book  book1;
 FILE *fp;
 fp=fopen("book_list.dat","ab");
 printf("输入书名:");
 scanf("%s",book1.a);
 printf("输入作者:");
 scanf("%s",book1.b);
 printf("输入出版社:");
 scanf("%s",book1.c);
 printf("输入价格:");
 scanf("%s",book1.d);
 printf("输入书的本数:");
 scanf("%d",&book1.e);
 book1.flag=1;
 if(fwrite(&book1,sizeof(struct book),1,fp)!=1)
    printf("write error!!!/n");
 else
  printf("操作成功!/n");
 fclose(fp);
}
void add_account()//注册账户
{struct stu student;
 char k[6],flag='1';
 int i,j=1;
 FILE *fp,*fp1;
 fp1=fopen("stu_list.dat","rb");//读文件用来判断用户是否已注册
 fp=fopen("stu_list.dat","ab");//写文件用来添加用户
 while('1'==flag)
 {
  while(1==j)
  {printf("请输入借书证号(8位):");
   scanf("%s",student.num);
   printf("请输入您的姓名:");
   scanf("%s",student.name);
   printf("请输入您的系别:");
   scanf("%s",student.department);
   printf("请输入密码(6位):");
   scanf("%s",student.key);
   printf("请再次输入密码(6位):");
   scanf("%s",k);
   for(i=0;i<MAX_ACCOUNT;i++)
  {
      fread(&stud[i],sizeof(struct stu),1,fp1);
   if(strcmp(stud[i].num,student.num)==0)
    {printf("您输入的账号已被注册,请重新输入!/n");
     j=1;
     break;
    }
   else
     j=0;
  }
  }
  if(strcmp(student.key,k)!=0)
   {printf("两次密码不符,请重新注册!/n");
    j=1;
   }
  else
   flag='0';
 }
 student.re_bor=5;
 student.flag=1;
 for(i=0;i<5;i++)
   strcpy(student.bor_ed[i],"NULL");
 if('0'==flag)
 {
  if(fwrite(&student,sizeof(struct stu),1,fp)!=1)
    printf("系统原因,注册用户失败!");
  else
    {printf("恭喜您注册成功!/n");
     show_account(student);
    }
 }
 fclose(fp);
 fclose(fp1);
}
struct book find_book(char *name)//查找图书
{struct book b;
 int j;
 FILE *fp;
 fp=fopen("book_list.dat","rb");
 for(j=0;j<MAX_BOOK;j++)
   {fread(&books[j],sizeof(struct book),1,fp);
    if(strcmp(books[j].a,name)==0)
       {
        return books[j];
       }
   }
 if(j==MAX_BOOK)
 {strcpy(b.a,"x");
  return b;
 }
 else
  return books[j];
 fclose(fp);
}
struct stu landing()//登陆
{struct stu s;
 char n[10],k[6];
 int i,j;
 FILE *fp;
 fp=fopen("stu_list.dat","rb");
 strcpy(s.num,"NULL");//用于返回,记录是否登录成功
 while(j)
 {
  printf("每人最多可借五本!/n");
  printf("请输入借书证号:");
  scanf("%s",n);
  if(strlen(n)!=8)
    printf("借书证号不满足要求,请重新输入!/n");
  else
    j=0;
 }
  printf("请输入密码:");
  scanf("%s",k);
  for(i=0;i<MAX_ACCOUNT;i++)
  {fread(&stud[i],sizeof(struct stu),1,fp);
    if(strcmp(stud[i].num,n)==0)
  break;
  }
  if(i==MAX_ACCOUNT)
 {printf("您还未注册,请返回首页注册!/n");
  return s;
 }
  else   
 if(strcmp(stud[i].key,k)==0)
 {printf("登陆成功!/n");
  show_account(stud[i]);
  return stud[i];
 }
 else
 {printf("密码错误!/n");
  return s;
 }
 fclose(fp);
}
struct book cpy_book(struct book a,struct book b)//将b的内容复制给a并返回a
{strcpy(a.a,b.a);
 strcpy(a.b,b.b);
 strcpy(a.c,b.c);
 strcpy(a.d,b.d);
 a.e=b.e;
 a.flag=b.flag;
 return a;
}
struct stu cpy_student(struct stu a,struct stu b)//将b的内容复制给a并返回a
{int i;
 strcpy(a.department,b.department);
 strcpy(a.key,b.key);
 strcpy(a.name,b.name);
 strcpy(a.num,b.num);
 for(i=0;i<5;i++)
     strcpy(a.bor_ed[i],b.bor_ed[i]);
 a.re_bor=b.re_bor;
 a.flag=b.flag;
 return a;
}
void borrow()//借书
{struct book b;
 struct stu s;
 char b_name[10];
 int i,j,m;
 s=landing();
 FILE *fp,*fp_,*fp1,*fp1_;
 fp=fopen("stu_list.dat","rb");
 fp1=fopen("book_list.dat","rb");
 if(strcmp(s.num,"NULL")!=0)
 {printf("您可以借书了!/n请输入书名:");
  scanf("%s",b_name);
  b=find_book(b_name);
  if(strcmp(b.a,"x")!=0)
  {show_book(b);
   printf("请输入您要借的本数:");
   scanf("%d",&i);
    if(b.e-i>=0)
    {if(s.re_bor-i>=0)
  {b.e=b.e-i;              //进行借书操作
   s.re_bor=s.re_bor-i;
   for(j=0;j<MAX_BOOK;j++)
   {fread(&books[j],sizeof(struct book),1,fp1);
          if(strcmp(books[j].a,b.a)==0)
     books[j]=cpy_book(books[j],b);
   }
         fp1_=fopen("book_list.dat","wb");
   for(j=0;j<MAX_BOOK;j++)
     if(1==books[j].flag)
   fwrite(&books[j],sizeof(struct book),1,fp1_);//将books中的信息循环输入到文件中
   fclose(fp1_);
     //以上为写入book_list表
   for(m=5-s.re_bor;m<5-s.re_bor+i;m++)
        strcpy(s.bor_ed[m],b_name);
   for(j=0;j<MAX_ACCOUNT;j++)
   {fread(&stud[j],sizeof(struct stu),1,fp);
          if(strcmp(stud[j].num,s.num)==0)
     stud[j]=cpy_student(stud[j],s);
   }
         fp_=fopen("stu_list.dat","wb");
   for(j=0;j<MAX_BOOK;j++)
     if(1==stud[j].flag)
   fwrite(&stud[j],sizeof(struct stu),1,fp_);//将stud中的信息循环输入到文件中
   fclose(fp_);
   //以上为写入stu_list表
   printf("借书成功!/n"); 
  }
  else
   printf("最多只能借5本!/n");
    }
    else
  printf("库存不足,借书失败!/n");
  }
  else
    printf("对不起,没有找到您要借的书,请确认后再借阅!/n");
 }
 else
   ;
 fclose(fp);
 fclose(fp1);
}
void back()
{struct book b;
 struct stu s;
 char b_name[10];
 int i,j,m;
 FILE *fp,*fp_,*fp1,*fp1_;
 fp=fopen("stu_list.dat","rb");
 fp1=fopen("book_list.dat","rb");
 s=landing();              //登陆后记录学生信息
 if(strcmp(s.num,"NULL")!=0)
 {printf("您可以还书了!/n请输入书名:");
  scanf("%s",b_name);
  b=find_book(b_name);
  if(strcmp(b.a,"x")!=0)
  {show_book(b);
   printf("请输入您要还的本数:");
   scanf("%d",&i);
 if(s.re_bor+i>=0)
 {b.e=b.e+i;               //进行还书操作
  s.re_bor=s.re_bor+i;   
  for(m=0;m<5;m++)
      if(strcmp(s.bor_ed[m],"NULL")==0)
    for(j=m;j<4;j++)
              strcpy(s.bor_ed[j],s.bor_ed[j+1]);   
   else
       ;
  for(m=5-s.re_bor;m<i+(5-s.re_bor);m++)
    strcpy(s.bor_ed[m],"NULL");  
  for(m=0;m<i;m++)
    strcpy(s.bor_ed[m],b_name);
  for(j=0;j<MAX_ACCOUNT;j++)
  {fread(&stud[j],sizeof(struct stu),1,fp);
      if(strcmp(stud[j].num,s.num)==0)
    stud[j]=cpy_student(stud[j],s);
  }
     fp_=fopen("stu_list.dat","wb");
  for(j=0;j<MAX_BOOK;j++)
    if(1==stud[j].flag)
  fwrite(&stud[j],sizeof(struct stu),1,fp_);//将stud中的信息循环输入到文件中
  fclose(fp_); 
  //以上为写入stu_list表
  for(j=0;j<MAX_BOOK;j++)  
  {fread(&books[j],sizeof(struct book),1,fp1);
      if(strcmp(books[j].a,b.a)==0)
    books[j]=cpy_book(books[j],b);
  }
     fp1_=fopen("book_list.dat","wb");
  for(j=0;j<MAX_BOOK;j++)
    if(1==books[j].flag)
        fwrite(&books[j],sizeof(struct book),1,fp1_);//将books中的信息循环输入到文件中
  fclose(fp1_); 
    //以上为写入book_list表
  printf("还书成功!/n");
 }
 else
  printf("还书失败,您的书已经还完了!/n");
  }
  else
    printf("对不起,您要还的书非本图书库,请确认后再操作!/n");
 }
 else
   ;
 fclose(fp);
 fclose(fp1);
}
void show_allusers()//显示所有用户
{
 int j,i;
 FILE *fp;
 fp=fopen("stu_list.dat","rb");
 for(j=0;j<MAX_ACCOUNT;j++)
   if(fread(&stud[j],sizeof(struct stu),1,fp)!=0)
    if(stud[j].flag==1)
    {printf("学号:%s  姓名:%s  系别:%s/n",stud[j].num,stud[j].name,stud[j].department);
     printf("已借图书:/n");
     for(i=0;i<5;i++)
     {printf("    %s/n",stud[j].bor_ed[i]);
     }
   }
 fclose(fp);
}
void show_allbooks()//显示所有图书
{
 int j;
 FILE *fp;
 fp=fopen("book_list.dat","rb");
 for(j=0;j<MAX_BOOK;j++)
   {if(fread(&books[j],sizeof(struct book),1,fp)!=0)
       if(books[j].flag==1)
         printf("书名:%s  作者:%s  出版社:%s  价格:%s  剩余:%d/n",books[j].a,books[j].b,books[j].c,books[j].d,books[j].e);
   }
 fclose(fp);
}
void main()
{int k,m,choose;
 char n[10],ad_n[15],ad_k[15];
 struct admi_ adm;
 FILE *fp1;
 create_ad();
 fp1=fopen("administrator.dat","rb");
 fread(&adm,sizeof(struct admi_),1,fp1);
 printf("您的身份:/n");
 printf("1,管理员/n");
 printf("2,用户/n");
 scanf("%d",&choose);
 switch(choose)
 {case 1:                   //管理员
      {ad_menu();
    printf("请输入管理员名:");
    scanf("%s",ad_n);
    printf("请输入管理员密码:");
    scanf("%s",ad_k);
    if(strcmp(adm.ad_name,ad_n)==0&&strcmp(adm.key,ad_k)==0)
    {m=1;
     while(m)
  {printf("管理员登陆成功!/n请选择操作:");
      scanf("%d",&k);
      switch(k)
   {case 1:
        add_book();break;
       case 2:
   {printf("请输入书名:");
       scanf("%s",n);
       show_book(find_book(n));
   }break;
       case 3:
     show_allbooks();break;
       case 4:
        show_allusers();break;
       case 5:
     m=0;break;
       default:
    {printf("input error!!!");
        m=0;
    }break;
   }  
  }
    }
    else
         printf("您输入错误,请确认后再输!!!/n");
  }break;
  case 2:                      //用户
  {m=1;
   while(m)
   {
    user_menu();
    scanf("%d",&k);
    switch(k)
    {case 1:
  {printf("请输入书名:");
   scanf("%s",n);
   show_book(find_book(n));
   break;
  }
     case 2:
   show_allbooks();break;
  case 3:
   show_account(landing());break;
     case 4:
   borrow();break;
     case 5:
      back();break;
     case 6:
      add_account();break;
     case 7:
   m=0;break;
     default:
   {printf("input error!!!/n");
    m=0;
   }
   break;
    }  
   }
  }
 }
fclose(fp1);
}

一、适用范围:本软件广泛适用于各大、中、小学校、企事业单位等图书馆使用,促进图书馆信息化建设。   二、功能介绍:为了推动企业、单位、学校等图书馆的信息化建设我们开发了本套软件。此软件界面友好,容易使用而且功能强大。囊括了图书馆管理的所有功能。   该系统主要有几个大的模块:图书信息录入、图书借阅管理、读者信息管理、图书信息查询,其中每个模块的主要功能如下:   图书信息录入:图书信息的录入采用联网查询方式,通过条码枪扫描图书的ISBN码,系统会自动搜索图书信息,然后把图书信息录入到系统。通过实验,录入1本书的时间大概是20—40秒,这比原来的繁琐的手工录入效率提高90%,极大的减轻了图书管理人员的劳动强度,使广大中小学图书管理信息化突破了录入的瓶颈。   图书借阅管理:根据读者提供的借书证号或借书卡号进行图书的借阅、图书归还操作。   读者信息管理:对读者进行注册登记、注销读者、查阅借阅记录等操作。 图书信息查询:包括导入导出图书信息,根据图书的书名、分类、出版社、价格范围、出版日期来查询图书,进行分类统计,形成上级报表等。 三、模块介绍: 1.系统设置: 管理员设置,系统参数设置,初始化系统。 2.图书管理: 导出图书或期刊模板,导入图书或期刊信息,导入图书marc码,图书或期刊信息录入,注销图书期刊,图书类型设置,出版社设置,书架设置。 3.借阅管理:图书借阅,图书归还,期刊借阅,期刊归还,图书挂失。 4.读者管理:添加读者信息,注销读者信息,批量办证,读者类型设置,读者部门设置。 5.系统查询:图书信息查询,图书借阅查询,图书归还查询,期刊资料查询,期刊借阅查询,期刊归还查询,读者资料查询,超期未还查询,读者档案查询。 6.系统维护:系统备份,系统恢复 7.条码打印: 打印书籍资料条形码,打印读者资料条形码,用户自定义打印条码,借书证打印。 四、系统特点: 1.录入 图书信息时,支持扫描条形码或ISBN号自动弹出出版社名,出版地等。 2.支持Excel数据导入 3.支持书标自动生成 4.支持输入分类号后,自动显示分类名。 5.支持条形码、书标、借阅证、自定义条形码打印。 6.支持分页显示。 7.支持书籍自动编号。 8.支持复本同时录入、上中下册录入、上下册录入。 9.读者卡可以支持磁卡、条码卡、IC卡、ID卡等。 10.软件自带中图分类法详细分类 11.支持图书Marc数据导入。 12.支持互联网检索,录入书籍时扫描条形码或ISBN,软件自动通过互联网检索书籍名称、出版社名、中图分类、内容简介等相关信息,避免繁琐的手工录入,大大提高书籍录入效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值