用C实现的“图书管理系统”

系统功能
基本功能:在该软件系统中,以图书信息为核心,围绕图书信息,实现添加、查询、更新、统计等功能。
进一步扩展其他功能:增加读者管理功能
增添图书管理员部分权限
增加图书借阅与归还等操作.
主要功能有:1. 添加图书:完成对图书信息的录入
2. 删除图书:完成对图书信息的删除
3. 查询图书信息:根据图书名或作者,查询图书信息
4. 修改图书信息:修改图书的部分信息并存储信息
5. 排序图书信息:完成图书价格或编号从高到低的排序并显示
6. 显示图书:完成对已录入的图书信息的全部展示
7. 保存图书到文件:把结构体数组中的数据写入图书文件book
8. 读取图书文件: 把图书数据从文件中读到结构体数组中
9. 读者信息查询:对读者信息的查询
10. 读者信息录入:读者对自身信息的录入
源代码:

#include <iostream>
using namespace std;
#include <string.h>
#include <stdlib.h>
#include<time.h>
#include <iomanip>
#define MAX_NO 100
//图书记录结构
struct book
{
int num; //图书编号
char name[20]; //图书名
char author[15]; //图书作者
char publish[15]; //出版社
double price; //图书价格
int borrow_flag; //图书借出标记:1 借出 0未借出
char reader[15]; //保存借阅人编号
};
//自定义数据类型
typedef struct book Book;
//存放图书结构体数组
Book books[MAX_NO]; 
//图书记录数: 随时更新保存最新图书数量
int maxno;
//欢迎界面
void Welcome();
//系统主菜单
void MainMenu();
void mainmenu();
//添加图书
void AddBook();
//删除图书
void DelBook(); 
//查询图书信息
void QueryBook();
void search_by_name();          /*定义按书名查询*/
void search_by_author()          /*定义按作者名查询*/;
//修改图书信息
void ModifyBook();
//排序图书信息 
void SortBook();
void SortBook_by_num();         //按编号排序 
void SortBook_by_price();       //按价格排序 
//显示图书
void CountBook();
//保存图书到文件
void SaveBook();
//读取图书文件
void ReadBook();
//读者信息查询 
void Reader();
//读者信息录入 
void Reader_write();
//账号登录
void Check();
int main()
{ 
int a,i;
srand(time(0));
a=rand()%50+1;
printf("%d>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n",a);
if(a%2==1)
{
printf("系统出错,即将退出\n");
exit(0);
}
int choice;
//欢迎界面
Welcome();
printf("\n\n图书管理员请按1\n读者请按2\n");
scanf("%d",&i);
//登录
Check();
if(i==1)
{
do
{
//调用主菜单
MainMenu();
printf("请输入您的选择:");
scanf("%d",&choice);
switch(choice)
{
case 0:
return 1;
case 1:/*创建图书信息*/
AddBook();
break;
case 2:/*删除图书信息*/
DelBook(); ;
break;
case 3: /*查询图书信息*/
QueryBook();
break;
case 4: /*修改图书信息*/
ModifyBook();
break;
case 5:/*排序图书信息*/
SortBook();
break;
case 6: //统计图书
CountBook();
break;
case 7: //保存图书到文件
SaveBook();
break;
case 8://读取图书文件
ReadBook();
break;
case 9://读者信息查询 
Reader();
break; 
default:
printf("\n无效选项!");
break;
}
}while(choice != 0);
return 0;
}
else
{do
{
//调用主菜单
mainmenu();
printf("请输入您的选择:");
scanf("%d",&choice);
switch(choice)
{
case 0:
return 1;
case 1://读者信息录入 
Reader_write();
break;
case 2: /*查询图书信息*/
QueryBook();
break;
case 3:/*排序图书信息*/
SortBook();
break;
case 4: //统计图书
CountBook();
break;
case 5: //保存图书到文件
SaveBook();
break;
case 6://读取图书文件
ReadBook();
break; 
default:
printf("\n无效选项!");
break;
}
}while(choice != 0);
return 0;
}
}
//欢迎界面
void Welcome()
{
printf(" \n\n\n"); 
printf("\t\t    *   ( ^ ^)/欢迎\( ^ ^ )   *\n");
printf("\t\t ****************************************\n");
printf("\t\t    *                                *\n"); 
printf("\t\t    *                                *\n"); 
printf("\t\t    *                                *\n"); 
printf("\t\t    *    欢迎进入图书信息管理系统    *\n"); 
printf("\t\t    *                                *\n"); 
printf("\t\t    *                                *\n"); 
printf("\t\t    *                                *\n"); 
printf("\t\t ****************************************\n"); 
}
void Check()
{
int a,b,c;
char userName[5];/*用户名*/ 
char userPWD[5];/*密码*/ 
int i; 
srand(time(0));
system("color 0B"); //界面颜色
for(i = 1; i < 4; i++) 
{ 
/*用户名和密码均为abcde;*/ 
printf(" (用户名和密码均为abcde)\n\n"); 
printf(" 请输入您的用户名:");
scanf("%s",userName);
printf("\n 请输入您的密码:");
scanf("%s",userPWD);
printf("为了确认您不是机器人,请如实回答以下问题:\n");
srand(time(0));
a=rand()%50+1;
b=rand()%50+1;
c=a+b;
printf("%d+%d等于几 \n",a,b);
scanf("%d",&a);
if(a!=c) 
{
if(i<3)
printf("验证码出错,请重新输入\n");
else
{
printf("验证码多次出错,系统将退出\n");
exit(0);
}
}
if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))/*验证用户名和密码*/  
        {  
            printf("\n                      *用户名和密码正确,显示主菜单*\n");  
        puts("正在登录......");
  for(i=0;i<1000;i--);
            return;  
        }  
        else  
        {  
            if (i < 3)  
            {  
                printf("用户名或密码错误,提示用户重新输入");  
                printf("用户名或密码错误,请重新输入!");  
            }  
            else  
            {  
                printf("连续3次输错用户名或密码,退出系统。");  
                printf("您已连续3次将用户名或密码输错,系统将退出!");  
                exit(0);   
            }  
        }  
system("cls");
}
}
//系统主菜单
void MainMenu()
{
printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");
printf("\t\t*********************************************\n");
printf("\t\t\t1 ------------------图书信息录入\n");
printf("\t\t\t2 ------------------图书信息删除\n");
printf("\t\t\t3 ------------------图书信息查询\n");
printf("\t\t\t4 ------------------图书信息修改\n");
printf("\t\t\t5 ------------------图书信息排序\n");
printf("\t\t\t6 ------------------图书信息显示\n");
printf("\t\t\t7 ------------------保存图书到文件\n"); //第1步
printf("\t\t\t8 ------------------读取图书文件\n");
printf("\t\t\t9 ------------------读取读者信息\n");
printf("\t\t\t0 ------------------退出图书信息系统\n");
printf("\t\t*********************************************\n");
printf("\t\tPlease Enter Choose:    ");
}
void mainmenu()
{
printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");
printf("\t\t*********************************************\n");
printf("\t\t\t1 ------------------读者信息录入\n");
printf("\t\t\t2 ------------------图书信息查询\n");
printf("\t\t\t3 ------------------图书信息排序\n");
printf("\t\t\t4 ------------------图书信息显示\n");
printf("\t\t\t5 ------------------保存图书到文件\n"); //第1步
printf("\t\t\t6 ------------------读取图书文件\n");
printf("\t\t\t0 ------------------退出图书信息系统\n");
printf("\t\t*********************************************\n");
printf("\t\tPlease Enter Choose:    ");
}
//添加图书
void AddBook()
{
int i;
double d=0; //启动浮点运算模块
Book *pb=books;
i=maxno;
printf("------添加新书目,请按要求输入书的详细信息:\n");
do
{
printf("请输入图书编号:\n");
scanf("%d",&pb[i].num);
if(pb[i].num==0)
break;
printf("请输入图书名:\n");
scanf("%s",pb[i].name);
printf("请输入图书作者:\n");
scanf("%s",pb[i].author);
printf("请输入图书出版社:\n");
scanf("%s",pb[i].publish); 
printf("请输入图书价格:\n");
scanf("%lf",&pb[i].price); 
pb[i].borrow_flag=0;
strcpy(pb[i].reader,"\0");
printf("第%d本书籍入库成功.\n",i+1);
i++;
}while(pb[i-1].num!=0);
maxno=i;
printf("当前书库共存数为%d册!\n",maxno);
}
// 删除图书 
void DelBook()
{
int i,j,num;
printf("请输入要删除的书籍的编号:\n");
scanf("%d",&num);
for(i=0;i<maxno;i++)
{ 
if(num== books [i].num)
break;
}
if(i<maxno)
{
for(j=i;j<maxno-1;j++)
books [j]= books [j+1];
maxno--;
printf("记录删除成功!\n");
printf("当前书库共存数为%d册!\n",maxno);
}
else printf("记录未找到!\n");
}
/*查询图书信息*/
void QueryBook()
{
 int a;
 system("cls");         /*进行清屏*/
    printf("\t\t******************************\n");
 printf("开始查询\n");
    printf("\t\t\t1---------------search_by_name\n");
    printf("\t\t\t2---------------search_by_writer\n");
    printf("\t\t\t0---------------exit\n");
    printf("\t\t******************************\n") ;
    printf("\t\t请选择你想要的查询方式:");
 fflush(stdin);
    scanf("%d",&a);
    switch(a)
   {
 case 1:
  search_by_name();
  break;      
 case 2:
  search_by_author();
  break;
 case 0:
  return;
 }
}
void search_by_name()          /*定义按书名查询*/
{   
    Book *pb=books;
    char b1[20]; 
    int flag=1;
 printf("\n请输入要查询的书名: ");
 fflush(stdin);
 scanf("%s",b1);
 printf("图书号\t图书名\t作者名\t出版社\t图书价格\t借阅情况\n");
 int i,a; 
 for(  i=0;i<=maxno;i++ )
  if(strcmp(b1,pb[i].name)==0)
  {  
   flag=0;
   printf("%d\t%s\t%s\t%s\t%6.2f\t",pb[i].num,pb[i].name,pb[i].author,pb[i].publish,pb[i].price);
    {if(pb[i].borrow_flag==0)
printf("未借阅\n");
 else
printf("已借阅\n");}
if(pb[i].borrow_flag==0)
{
 printf("请求借阅请按1 返回主菜单请按0\n");
 scanf("%d",&a);
 if((a==1)&&(pb[i].borrow_flag==0))
 {
 pb[i].borrow_flag=1;
 }
}
}
    if (flag)
 {
  printf("cannot found!");
 }
fflush(stdin);
printf("请按任意键返回主菜单\n");
getchar();
}
void search_by_author()          /*定义按作者名查询*/
{   
    Book *pb=books;
 char b2[20];
 int flag=1;
 printf("请输入要查询的书的作者: ");
 fflush(stdin);
 scanf("%s",b2);
 printf("图书号\t图书名\t作者名\t出版社\t图书价格\t借阅情况\n");
  int i,a ; 
 for( i=0;i<=maxno;i++ )
  if(strcmp(b2,pb[i].author)==0)
  {  
   flag=0;
   printf("%d\t%s\t%s\t%s\t%6.2f\n",pb[i].num,pb[i].name,pb[i].author,pb[i].publish,pb[i].price);
   if(pb[i].borrow_flag==0)
printf("未借阅\n");
 else
printf("已借阅\n");
if(pb[i].borrow_flag==0)
{
 printf("请求借阅请按1 返回主菜单请按0\n");
 scanf("%d",&a);
 if((a==1)&&(pb[i].borrow_flag==0))
 {
 pb[i].borrow_flag=1;
 }
}
}
    if (flag)
 {
  printf("cannot found!");
 }
fflush(stdin);
printf("请按任意键返回主菜单\n");
getchar();
}
//修改图书
void ModifyBook()
{ 
int num,i,choice; 
Book *pb=books;
system("cls"); 
printf("\n\n\n 请输入您要修改的图书的编号"); 
scanf("%d",&num); 
for(i=0;i<maxno;i++) 
{ if(num==pb[i].num) 
printf("编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,借阅情况:",pb[i].num,pb[i].name,pb[i].author,pb[i].publish,pb[i].price); 
 if(pb[i].borrow_flag==0)
printf("未借阅\n");
 else
printf("已借阅\n");
printf("\n\n\n ********请输入您想要修改的数据********\n\n"); 
printf(" 1. 编号\n\n"); 
printf(" 2. 书名\n\n"); 
printf(" 3. 作者\n\n"); 
printf(" 4. 出版社\n\n"); 
printf(" 5. 价格\n\n"); 
printf(" 6. 借阅情况\n\n"); 
printf(" 请选择(1-6):"); 
scanf("%d",&choice); 
switch(choice) 
{
case 1:
{ 
printf("\n 请输入你改的新编号"); 
scanf("%d",pb[i].num); 
break; 
} 
case 2:
{ 
printf("\n 请输入你改的新书名"); 
scanf("%s",pb[i].name); 
break; 
} 
case 3:
{ 
printf("\n 请输入你改的新作者"); 
scanf("%s",pb[i].author); 
break; 
} 
case 4:
{ 
printf("\n 请输入你改的新出版社"); 
scanf("%s",pb[i].publish); 
break; 
} 
case 5:
{ 
printf("\n 请输入你改的新价格"); 
scanf("%f",pb[i].price); 
break; 
}
case 6:
{
printf("\n 请输入你改的新借阅情况");
scanf("%d",pb[i].borrow_flag); 
 if(pb[i].borrow_flag==0)
printf("未借阅\n");
 else
printf("已借阅\n");
}  
} 
} 
printf("编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,借阅情况:",pb[i].num,pb[i].name,pb[i].author,pb[i].publish,pb[i].price); 
 if(pb[i].borrow_flag==0)
printf("未借阅\n");
 else
printf("已借阅\n");
printf("按1继续修改\t按0返回主菜单!\n"); 
scanf("%d",&i); 
switch(i)
{
    case 0:break;
 case 1:ModifyBook();break; 
}
 
} 
//排序图书信息
void SortBook() 
{
 int a;
 system("cls");         /*进行清屏*/
    printf("\t\t******************************\n");
 printf("开始查询\n");
    printf("\t\t\t1---------------SortBook_by_num\n");
    printf("\t\t\t2---------------SortBook_by_price\n");
    printf("\t\t\t0---------------exit\n");
    printf("\t\t******************************\n") ;
    printf("\t\t请选择你想要的查询方式:");
 fflush(stdin);
    scanf("%d",&a);
    switch(a)
   {
 case 1:
  SortBook_by_num();
  break;      
 case 2:
  SortBook_by_price();
  break;
 case 0:
  return;
 }
}
void SortBook_by_num()       //按编号排序
{
  Book *pb=books;
 int i,j,n=1,x;  
     system("cls");   
     int t;  
     for(i=0;i<maxno-1;i++)  
      for(j=i+1;j<maxno;j++)  
      if(pb[i].num<pb[j].num)  
      { t=pb[i].num;  
        pb[i].num=pb[j].num;            
        pb[j].num=t;  
              t=pb[i].num;  
        pb[i].num=pb[j].num;  
        pb[j].num=t;  
  
      }  
     for(i=0;i<maxno;i++)  
     {
    printf("排名\t编号\t书名\t作者\t出版社\t价格\t借阅情况\n");
    printf("%d\t%d\t%s\t%s\t%s\t%.2f\n",n++,pb[i].num,pb[i].name,pb[i].author,pb[i].publish,pb[i].price);
      if(pb[i].borrow_flag==0)
printf("未借阅\n");
    else
printf("已借阅\n");
     }
  printf("按1继续查询\t按0返回主菜单!\n"); 
scanf("%d",&i); 
switch(i)
{
    case 0:break;
 case 1:SortBook();break; 
}
}
void SortBook_by_price()     //按价格排序 
{
  Book *pb=books;
 int i,j,n=1,x;  
     system("cls");   
     int t;  
     for(i=0;i<maxno-1;i++)  
      for(j=i+1;j<maxno;j++)  
      if(pb[i].price<pb[j].price)  
      { t=pb[i].price;  
        pb[i].price=pb[j].price;            
        pb[j].price=t;  
              t=pb[i].num;  
        pb[i].num=pb[j].num;  
        pb[j].num=t;  
  
      }  
     for(i=0;i<maxno;i++)  
     {
    printf("排名\t编号\t书名\t作者\t出版社\t价格\t借阅情况\n");
    printf("%d\t%d\t%s\t%s\t%s\t%.2f\t",n++,pb[i].num,pb[i].name,pb[i].author,pb[i].publish,pb[i].price);
       if(pb[i].borrow_flag==0)
printf("未借阅\n");
    else
printf("已借阅\n");
  }
     printf("按1继续查询\t按0返回主菜单!\n"); 
     scanf("%d",&i); 
     switch(i)
    {
    case 0:break;
    case 1:SortBook();break; 
    }  
}
//统计图书
void CountBook() //显示所有记录
{
int i;
Book *pb=books;
printf("当前书库共存数为%d册!\n",maxno);
printf("\n+-----------------------------------------------------------------------+\n");
printf("编号\t书名\t作者\n");
printf("出版社\t单价\t借阅情况\n");
for(i = 0; i < maxno; i++)
{ 
printf("+-----------------------------------------------------------------------+\n");
printf("%d\t%s\t%s\n",pb[i].num,pb[i].name,pb[i].author);
printf("%s\t%lf\t",pb[i].publish,pb[i].price);
  if(pb[i].borrow_flag==0)
printf("未借阅\n");
    else
printf("已借阅\n");
printf("+-----------------------------------------------------------------------+\n");
}
printf("按任意键返回...\n");
cin.get();
}
//保存图书到文件
void SaveBook()
{
     FILE *fp;
 int count=0;
 fp=fopen("d:\\book.dat","wb+"); //以二进制方式打开文件,可读可写,若此文件不存在就创建此文件
 if(fp==NULL)
 {
  system("cls"); 
  printf("\n==========>can not open file!\n");
  exit(0);
 }
 while(count<maxno)
 {
  if(fwrite((books+count),sizeof(Book),1,fp)==1)
   count++;
  else
   break;
 }
 printf("成功保存");
 fclose(fp);
}
//读取图书文件
void ReadBook( )
{
 FILE *fp;
 int count=0;
 fp=fopen("d:\\book.dat","rb+");   //以二进制方式打开文件,可读可写
 if(fp!=NULL)
 {
  while(!feof(fp))
  {
   if(fread((books+count),sizeof(Book),1,fp)==1)
    count++;
  }
  fclose(fp);
 }
 
 maxno=count;
 if(maxno==0)
  printf("\n--------当前图书记录为空,请先选择--图书管理--添加图书|!---------\n");
 else
 printf("当前书库共存数为%d册!\n",maxno); 
}

void Reader_write()
{
char name[20];
char sex[10];
int xuehao;
    printf("请输入读者名字:");  
    scanf("%s",name);  
    printf("请输入读者性别:");  
    scanf("%s",sex);  
    printf("请输入读者学号:");  
    scanf("%d",xuehao);  
    printf("/n");
}
void Reader()   //读者信息查询 
{
	printf("此系统正在更新,请按任意键返回\n"); 
    getchar();
}

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值