今天给大家带来的是C语言图书借阅系统,该系统以模块设计思想为指导,面向图书管理员、学生人群并提供图书借阅服务;系统代码简单易理解,很适合初学链表的小伙伴!
本系统分为两个用户角色进行操作
管理员
-
查看已存图书
-
注册新图书
-
修改图书信息
-
注销现存图书
学生
-
借阅图书
-
归还图书
-
查看馆藏图书
系统存储结构
以下是存储图书信息的结构体声明
typedef struct book{
char *name; //图书名称
int id; //图书编号
int count; //图书库存
int status; //借阅状态 (可借/不可借)
struct book *next; //指针域
}Book;
添加图书函数 addbook
添加图书时,输入的图书编号(整型)不可重复且小于1000,图书数量小于50本
int addbook(){
system(CLEAR); ///
char sname[MAXNAME];
int id, count;
char *namep;
while(1){
id = 0;
count = 0;
namep = NULL;
printf("请输入图书名:\n");
scanf("%s", sname);
getchar();
printf("请输入小于1000的图书编号:\n");
scanf("%d", &id);
getchar();
int flag = judgeIsExsit(id);
if(flag == 1 || flag == 2){
continue;
}
printf("请输入小于50的图书数量:\n");
scanf("%d", &count);
getchar();
if(!(count > 0 && count < 50)){
error("输入数目不符合要求");
fflush(stdin);
continue;
}
Book *bp;
if((bp = lookup(namep = strdup(sname), id)) == NULL){
bp = (Book *)malloc(sizeof (Book));
if(bp == NULL || (bp->name = namep) == NULL){
error("注册图书失败");
fflush(stdin);
continue;
}
bp->id = id;
bp->count = count;
bp->status = AVAILABLE;
++nbook;
bp->next = head;
head = bp;
printf("图书 %s 注册成功\n", sname);
return id;
}else{
fflush(stdin);
error("图书名或编号已经被占用");
}
}
return -1;
}
借书函数borrowbook
借书时,需要输入需要该书的编号,如果该书状态为可借,即可操作
int borrowbook(){
system(CLEAR);
char sname[MAXNAME];
printf("输入编码搜索图书:\n");
int id;
scanf("%d",&id);
fflush(stdin);
Book *bp = head;
while(bp){
if(bp->id == id){
printbook(bp);
if(! bp->status){
printf("借阅图书:Y N\n");
}else{
printf("图书外借中\n");
return 0;
}
while(1){
char c = '\0';
scanf("%c", &c);
getchar();
if(!(c == 'Y' || c == 'y' || c == 'N' || c == 'n')){
fflush(stdin);
error("指令无效");
continue;
}
if(c == 'Y' || c == 'y'){
--bp->count > -1 ? printf("成功\n") : printf("失败\n");
if(! bp->count){
bp->status = UNAVAILABLE;
}
return bp->id;
}else{
return 0;
}
}
return 1;
}
bp = bp->next;
}
if(bp == NULL){
printf("图书不存在");
fflush(stdin);
return -1;
}
return -1;
}
还书函数 returnbook
int returnbook(){
system(CLEAR);
char sname[MAXNAME];
printf("归还图书,请输入编码:\n");
int id;
scanf("%d",&id);
fflush(stdin);
Book *bp = head;
while(bp){
if(bp->id == id){
printbook(bp);
printf("归还图书:Y N\n");
while(1){
char c = '\0';
scanf("%c", &c);
getchar();
if(!(c == 'Y' || c == 'y' || c == 'N' || c == 'n')){
fflush(stdin);
error("指令无效");
}else if(c == 'Y' || c == 'y'){
bp->count++ ? : (bp->status = AVAILABLE);
printf("成功\n");
return bp->id;
}else{
return 0;
}
}
return 1;
}
bp = bp->next;
}
if(bp == NULL){
fflush(stdin);
printf("此图书并不是馆内图书\n");
}
return -1;
}
运行截图
系统主界面
管理员界面
注册新图书
学生界面
系统使用说明
1、注册新图书时,图书编码不可重复
2、当借阅图书时,图书库存的数量将减1,当图书库存为0时,图书状态变为不可借阅
3、图书查询、借阅、规划都按照图书编码来进行操作
完整源码获取方式:关注微信名片,在菜单栏可以查询到所有C语言管理系统源码!