用C语言编写的图书管理系统,分为管理员界面和用户界面
管理员界面可实现用户的增删,图书的增删管理。
用户可通过管理员设置发布的编号及用户名,登录借阅系统,进行图书的借阅归还。
可使用VC++6.0,Dev-C进行编译运行
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int readerlen=1,booklen=1;//定义读者和书籍的数量,可根据初始化函数进行相应的修改
typedef struct BOOK{//书籍信息
char booknum[10];//编号
char bookname[10];//书名
int bookamount;//数量
};
typedef struct READER{//读者信息
char readernum[10];//编号
char readername[10];//用户名
BOOK books;//借阅的书籍
};
BOOK book[5];
READER reader[5];//声明全局变量
void login();//登录界面
void adminmenu();//管理员菜单
void readermenu();//读者菜单
void addreader();//添加用户
void addbook();//添加书籍
void changebook();//修改书籍信息
void deletebook();//删除书籍信息
void inquire();//查询书籍信息
void traverse();//遍历所有书籍
void borrow();//借阅图书
void returnbook();//归还图书
void init();//初始化书籍和读者信息
void login()//登录界面
{
printf("欢迎进入图书管理系统!\n");
printf("1.管理员登录\n");
printf("2.用户登录\n");
printf("3.退出\n");
printf("请选择你的操作:");//起始登录界面
int choice;
scanf("%d",&choice);
if(choice==1)//分支语句选择不同的操作并匹配对应的函数或退出
{
char username[10],password[10];
printf("请输入用户名和密码\n");
printf("用户名:\n");
scanf("%s",username);
printf("密码:\n");
scanf("%s",password);
if((strcmp(username,"123456")==0)&&(strcmp(password,"123456")==0))//初始管理员用户名和密码均为123456
{//strcmp函数判断两个字符串是否相同
printf("进入管理员菜单\n");
adminmenu();
}
else{//若输入不匹配,则返回上一个界面
printf("密码错误,即将返回!\n");
return;
}
}
else if(choice==2)
{//思路基本和上一个分支一样
char num[10],name[10];
printf("请输入您的编号和用户名\n");
printf("编号:\n");
scanf("%s",num);
printf("用户名:\n");
scanf("%s",name);
int i;
for(i=0;i<5;i++)
{
if((strcmp(reader[i].readernum,num)==0)&&(strcmp(reader[i].readername,name)==0))//判断输入的用户编号和用户名是否和某一个对应
{
printf("进入用户菜单\n");
readermenu();
return;
}
}
printf("输入有误,即将返回!\n");
return;
}
else if(choice==3)
{
exit(0);//正常退出
}
}
void adminmenu()//管理员菜单
{
int a=1;
system("cls");//清屏
while(a)
{//定义非零常量a,使其在未选择返回的情况下一直处于菜单页面
int choice;
printf("1.录入用户信息\n");
printf("2.录入图书信息\n");
printf("3.修改图书信息\n");
printf("4.删除图书信息\n");
printf("5.信息查询\n");
printf("6.返回\n");
printf("请选择你的操作:\n");
scanf("%d",&choice);
switch(choice)
{
case 1: addreader(); break;
case 2: addbook(); break;
case 3: changebook(); break;
case 4: deletebook(); break;
case 5: inquire(); break;
case 6: a=0; break;//将非零常量a改为0,从而达到退出while循环的目的
}
}
}
void readermenu()//用户菜单
{//思路基本和管理员菜单一致
int a=1;
system("cls");
while(a)
{
int choice;
printf("1.查询图书\n");
printf("2.借阅图书\n");
printf("3.归还图书\n");
printf("4.返回\n");
printf("请选择你的操作:\n");
scanf("%d",&choice);
switch(choice)
{
case 1: traverse(); break;
case 2: borrow(); break;
case 3: returnbook(); break;
case 4: a=0; break;
}
}
}
void addreader()//添加用户信息
{
char str[10];
int a=readerlen,i;
system("cls");
printf("请输入你要添加的用户编号\n");
scanf("%s",str);
for(i=0;i<a;i++)
{
if(strcmp(str,reader[i].readernum)==0)
{
printf("该编号已被使用!\n");
return;
}
}//添加用户信息的时候要注意是否重复
if(a<5)
{//如果不重复,且不超过定义的最多用户数量,则可以进行添加
strcpy(reader[a].readernum,str);
printf("请输入该用户的用户名\n");
scanf("%s",reader[a].readername);
printf("添加成功!\n");
readerlen++;//读者数量要相应地进行更新
}
}
void addbook()//添加图书信息
{//思路同添加用户函数
char str[10];
int a=booklen,i;
system("cls");
printf("请输入你要添加的图书编号\n");
scanf("%s",str);
for(i=0;i<booklen;i++)
{
if(strcmp(str,book[i].booknum)==0)
{
printf("该编号已被使用!\n");
return;
}
}
if(a<100)
{
strcpy(book[a].booknum,str);
printf("请输入该书籍的书名\n");
scanf("%s",book[a].bookname);
printf("请输入该书籍的数量\n");
scanf("%d",&book[a].bookamount);
printf("添加成功!\n");
booklen++;
}
}
void changebook()//修改图书信息
{//通过重新输入要修改的变量进行修改
int i,choice,a=booklen;
char num[10];
system("cls");
printf("请输入您要修改的图书编号\n");
scanf("%s",num);
for(i=0;i<a;i++)
{
if(strcmp(book[i].booknum,num)==0)
{
printf("编号:%s,书名:%s,数量:%d\n",book[i].booknum,book[i].bookname,book[i].bookamount);
//打印对应编号书籍的信息,然后根据提示进行修改
printf("请选择您要修改的内容\n");
printf("1.编号\n");
printf("2.书名\n");
printf("3.数量\n");
scanf("%d",&choice);
switch(choice)
{
case 1:{
printf("请输入新的编号\n");
scanf("%s",book[i].booknum);
break;
}
case 2:{
printf("请输入新的书名\n");
scanf("%s",book[i].bookname);
break;
}
case 3:{
printf("请输入新的数量\n");
scanf("%d",&book[i].bookamount);
break;
}
}
}
}
}
void deletebook()//删除已有图书
{/*删除函数的思路就是通过寻找要删除的书籍,然后将其后面的书籍前移
同时注意原来的最后一本书的信息要进行清空*/
int i,j,a=booklen;
char str[10];
system("cls");
printf("请输入您想要删除的图书编号\n");
scanf("%s",str);
for(i=0;i<a;i++)
{
if(strcmp(book[i].booknum,str)==0)
{
for(j=i;j<a;j++)
{
book[j]=book[j+1];
}
}
}
memset(book[a].bookname,0,sizeof(book[a].bookname));
memset(book[a].booknum,0,sizeof(book[a].booknum));
book[a].bookamount=0;
printf("删除成功!\n");
booklen--;//图书种类进行更新
}
void inquire()//查询图书信息
{
char str[10];
int i,j,a=booklen,b=readerlen;
system("cls");
printf("请输入您要查询的图书编号或书名\n");
scanf("%s",str);
for(i=0;i<a;i++)
{//对现有图书一一进行匹配,匹配成功后输出该书籍信息
if((strcmp(book[i].booknum,str)==0)||(strcmp(book[i].bookname,str)==0))
{
printf("该图书编号:%s,书名:%s,数量:%d\n",book[i].booknum,book[i].bookname,book[i].bookamount);
for(j=0;j<b;j++)
{
if(strcmp(reader[j].books.bookname,book[i].bookname)==0)
{//输出借阅该书籍的读者的用户名
printf("借阅该书籍的读者有:\n");
printf("%s\n",reader[j].readername);
}
}
return;
}
}
printf("未找到该书籍,即将返回!\n");
return;
}
void traverse()//遍历图书信息
{
int i,a=booklen;
system("cls");
for(i=0;i<a;i++)
{//将所有图书信息输出,方便读者借阅
printf("图书编号:%s,书名:%s,数量:%d\n",book[i].booknum,book[i].bookname,book[i].bookamount);
}
}
void borrow()//借阅图书
{
char str[10],s[10];
int a=booklen,i,j,b=readerlen;
system("cls");
printf("请输入您的用户编号或用户名\n");
scanf("%s",s);
for(j=0;j<b;j++)
{
if((strcmp(reader[j].readernum,s)==0)||(strcmp(reader[j].readername,s)==0))
{
break;
}
}
printf("请输入你要借阅图书的编号或书名\n");
scanf("%s",str);
for(i=0;i<a;i++)
{
if((strcmp(book[i].booknum,str)==0)||(strcmp(book[i].bookname,str)==0))
{
if(book[i].bookamount>0)
{
book[i].bookamount--;//借阅成功后注意将该书的数量进行相应更新
reader[j].books=book[i];//将该书信息传入读者借阅书籍部分
printf("借阅成功!\n");
}
else{
printf("该书籍库存量不足,请以后再尝试\n");//注意借阅前提是库存量大于0
}
return;
}
}
printf("未找到该书籍,即将返回!\n");
return;
}
void returnbook()//归还图书
{//思路和借书的情况差不多
char s[10],str[10];
int a=booklen,b=readerlen,i,j;
system("cls");
printf("请输入您的用户编号或用户名\n");
scanf("%s",s);
for(j=0;j<b;j++)
{
if((strcmp(reader[j].readernum,s)==0)||(strcmp(reader[j].readername,s)==0))
{
break;
}
}
printf("请输入你要归还图书的编号或书名\n");
scanf("%s",str);
for(i=0;i<a;i++)
{
if((strcmp(book[i].booknum,str)==0)||(strcmp(book[i].bookname,str)==0))
{
book[i].bookamount++;//书籍库存量更新
reader[j].books.bookamount=0;//对读者借阅书籍部分进行清空
memset(&reader[j].books.bookname,0,sizeof(reader[j].books.bookname));
memset(&reader[j].books.booknum,0,sizeof(reader[j].books.booknum));
printf("归还成功!\n");
return;
}
}
printf("未找到该书籍,即将返回!\n");
return;
}
void init()//初始化函数
{
int i;
strcpy(reader[0].readernum,"666");
strcpy(reader[0].readername,"小明");
reader[0].books.bookamount=0;
memset(&reader[0].books.bookname,0,sizeof(reader[0].books.bookname));
memset(&reader[0].books.booknum,0,sizeof(reader[0].books.booknum));
for(i=1;i<5;i++)
{
memset(reader[i].readernum,0,sizeof(reader[i].readernum));
memset(reader[i].readername,0,sizeof(reader[i].readername));
reader[0].books.bookamount=0;
memset(&reader[i].books.bookname,0,sizeof(reader[i].books.bookname));
memset(&reader[i].books.booknum,0,sizeof(reader[i].books.booknum));
}
strcpy(book[0].booknum,"111");
strcpy(book[0].bookname,"数据结构");
book[0].bookamount=10;
for(i=1;i<5;i++)
{
memset(book[i].booknum,0,sizeof(book[i].booknum));
memset(book[i].bookname,0,sizeof(book[i].bookname));
book[i].bookamount=0;
}
return;
}
int main()
{
init();
while(1)
{
login();
}
return 0;
}