图书管理系统
这是一个符合大学生课设实训的系统。
一、系统功能
1.登录 2.添加图书
3.查询图书 4.借阅图书
5.归还图书 6.图书热度排行
7.删除图书 8.密码修改
运行展示:
二、功能概述
1.登录功能的实现
效果展示
代码模块
void login(void)
{
char inputPwd[20];
A:
printf("请输入密码:");
anwen(inputPwd);
if(strcmp(inputPwd, pwd) == 0)
{
printf("密码正确,欢迎使用图书管理系统!\n");
sleep(1); //延迟
system("cls"); //清屏
return ;
}
else
{
printf("密码错误,请重新输入!\n");
goto A;
}
}
输入密码的使用使用暗文进行遮挡密码
void anwen(char *p)
{
char ch; //接收字符
int i = 0; //下标
while(1)
{
ch = getch(); //获取字符,不显示
// \b退格,\n换行,\r回车
if(!(ch == '\n' || ch == '\r') && (ch != '\b'))
{
p[i] = ch; //将字符写到空间
printf("*"); //显示*
i++; //改变下标
}
else if(ch == '\b')
{
//判断是否到顶
if(i != 0)
{
p[i-1] = '\0'; //删除数据补\0
i--; //改变下标
printf("\b \b"); //退格原来位置补空
}
}
else if(ch == '\n' || ch == '\r')
{
p[i] = '\0'; //输入结束 \0
printf("\n");
break;
}
}
}
2.界面展示及功能的选择的实现
效果展示
代码模块
void shouUI(void)
{
printf("************************************************\n");
printf("*------------ 欢迎来到图书管理系统 ------------*\r\n");
printf("*-------- [1] 查询图书 [2] 添加图书 --------*\r\n");
printf("*-------- [3] 删除图书 [4] 借阅图书 --------*\r\n");
printf("*-------- [5] 归还排行 [6] 热度排行 --------*\r\n");
printf("*-------- [7] 修改密码 [0] 退出系统 --------*\r\n");
printf("************************************************\n");
printf("请选择操作(0~7):");
}
void opt(void)
{
int m;
char n;
START:
scanf("%d",&m); //输入选择功能
AGAIN:
switch(m)
{
case 1:
demand();//查询
break;
case 2:
add_book();//添加
break;
case 3:
strike_out();//删除
break;
case 4:
borrow();//借阅
break;
case 5:
recede();//归还
break;
case 6:
ranking();//热度
break;
case 7:
modify();//修改密码
return;
case 0:
exit(0);//退出进程
default:
printf("输入无效,请重新输入:");
goto START;
}
//让用户控制程序执行
printf("是否继续当前操作...(y/n)\n") ;
n = getch();
if(n == 'y' || n == 'Y')
{
goto AGAIN;
}
system("cls");
}
3.添加图书功能的实现
效果展示
首先是是图书的信息定义
typedef struct book
{
unsigned int bookNumber; //图书编号
char bookName[30]; //图书名称
char writer[20]; //作者
float price; //价格
int hot; //热度
int kc; //库存
}BK;
// 3、结构体数组 -- 用来存储所有图书的信息
BK arr[200];
然后是添加图书
void add_book(void)
{
printf("-----------------------------------------\n");
printf("请输入第%d本书的信息\n",bookNum+1);
printf("请输入图书的编号:");
scanf("%d",&arr[bookNum].bookNumber);
printf("请输入图书的书名:");
scanf("%s",arr[bookNum].bookName);
printf("请输入图书的作者:");
scanf("%s",arr[bookNum].writer);
printf("请输入图书的价格:");
scanf("%f",&arr[bookNum].price);
printf("请输入图书的热度:");
scanf("%d",&arr[bookNum].hot);
printf("请输入图书的库存:");
scanf("%d",&arr[bookNum].kc);
bookNum++;
printf("添加成功\n");
}
4.查询图书功能的实现
效果展示
代码模块
void demand(void)
{
//显示界面
printf("*****************************\n");
printf("*----- [1] 查询全部 --------*\n");
printf("*----- [2] 按照书名查询 ----*\n");
printf("*----- [3] 按照作者查询 ----*\n");
printf("*----- [0] 回到主界面 ------*\n");
printf("*****************************\n");
//选择
int a,i;
char ch[20];
int flag;
printf("请选择:");
scanf("%d",&a);
switch(a)
{
case 1:
printf("编号\t书名\t作者\t价格\t热度\t库存\n");
for(i = 0; i < bookNum; i++)
{
printf(" %d\t%s\t%s\t%.2f\t %d\t %d\n",arr[i].bookNumber,arr[i].bookName,arr[i].writer,arr[i].price,arr[i].hot,arr[i].kc);
}
break;
case 2:
flag = 0;
printf("请输入要查询的书名:");
scanf("%s",ch);
for(i = 0; i < bookNum; i++)
{
if(strcmp(arr[i].bookName,ch)==0)
{
if (flag == 0) // 如果第一次找到书籍,输出表头
{
printf("编号\t书名\t作者\t价格\t热度\t库存\n");
flag = 1; // 设置标志为已找到书籍
}
printf("%d\t%s\t%s\t%.2f\t%d\t%d\n",arr[i].bookNumber,arr[i].bookName,arr[i].writer,arr[i].price,arr[i].hot,arr[i].kc);
}
}
if (flag == 0)
{
printf("找不到该书籍\n");
}
break;
case 3:
flag = 0;
printf("请输入要查询的作者:");
scanf("%s",ch);
for(i = 0; i < bookNum; i++)
{
if(strcmp(arr[i].writer,ch)==0)
{
if (flag == 0) // 如果第一次找到书籍,输出表头
{
printf("编号\t书名\t作者\t价格\t热度\t库存\n");
flag = 1; // 设置标志为已找到书籍
}
printf("%d\t%s\t%s\t%.2f\t%d\t%d\n",arr[i].bookNumber,arr[i].bookName,arr[i].writer,arr[i].price,arr[i].hot,arr[i].kc);
}
}
if (flag == 0)
{
printf("找不到该书籍\n");
}
break;
case 0:
return;
}
}
5.删除图书功能
效果展示
代码模块
void strike_out(void)
{
int flag = 0;
int i,j;
char str[20];
printf("请输入要删除的书名:\n");
scanf("%s",str);
for(i = 0; i < bookNum; i++)
{
int res = strcmp(arr[i].bookName,str);
if(res == 0)
{
for(j = i + 1; j < bookNum; j++)
{
arr[j-1] = arr[j];
}
bookNum--;
printf("删除成功\n");
flag = 1;
break;
}
}
if(flag == 0)
{
printf("该书籍不存在\n");
}
}
6.借阅图书功能
效果展示(借阅成功,库存减一,就不展示了)
代码模块
void borrow(void)
{
char ch[20];
int flag = 0;
printf("请输入要借阅的图书:");
scanf("%s",ch);
int i;
for(i = 0; i < bookNum; i++)
{
if(strcmp(arr[i].bookName,ch) == 0)
{
if(arr[i].kc == 0)
{
printf("库存不足!\n");
}
else
{
arr[i].kc--;
printf("借阅成功\n");
}
flag = 1;
break;
}
}
if(flag == 0)
{
printf("没有找到该书籍\n");
}
}
7.归还图书功能
效果展示(归还成功库存加一)
代码模块
void recede(void)
{
char ch[20];
int i;
int flag = 0;
printf("请输入要归还的图书:");
scanf("%s",ch);
for(i = 0; i < bookNum; i++)
{
if(strcmp(arr[i].bookName,ch) == 0)
{
arr[i].kc++;
printf("归还成功\n");
flag = 1;
break;
}
}
if(flag == 0)
{
printf("没有找到该书籍\n");
}
}
8.热度排行功能
效果展示
代码模块
void ranking(void)
{
int i,j;
BK temp;
for(i = 0; i < bookNum-1; i++)
{
for(j = 0; j < bookNum-1-i; j++)
{
if(arr[j].hot > arr[j+1].hot)
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//输出
printf("热度\t书名\t作者\t编号\t价格\t库存\n");
for(i=0; i<bookNum; i++)
{
printf("%d\t%s\t%s\t%d\t%.2f\t%d\n",arr[i].hot,arr[i].bookName,arr[i].writer,arr[i].bookNumber,arr[i].price,arr[i].kc);
}
}
9.密码修改功能
效果展示(密码修改成功,返回登录界面)
代码模块
void modify(void)
{
char n[20];
char m[20];
B:
printf("请输入密码:");
//scanf("%s",n);
anwen(n);
printf("请再次输入密码:");
//scanf("%s",m);
anwen(m);
//比较两次密码
if(strcmp(n,m)==0)
{
strcpy(pwd,m); //将密码拷贝到pwd
printf("密码修改成功,请重新登录");
sleep(1);
system("cls");
login(); //重新调用登录功能
}
else
{
printf("输入的两次密码不一致,请重新输入.....");
goto B;
}
}
三、完整代码
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
// 1、预设密码
char pwd[20] = "1";
// 2、图书信息 -- 结构体
typedef struct book
{
unsigned int bookNumber; //图书编号
char bookName[30]; //图书名称
char writer[20]; //作者
float price; //价格
int hot; //热度
int kc; //库存
}BK;
// 3、结构体数组 -- 用来存储所有图书的信息
BK arr[200];
// 4、图书真实数量(非库存)
int bookNum = 0;
/*****************************************函数声明***********************************/
void login(void); //登录功能
void anwen(char *p); //密码暗文
void shouUI(void); //界面
void opt(void); //功能选择
void add_book(void); //添加功能
void strike_out(void); //删除功能
void demand(void); //查询功能
void borrow(void); //借阅功能
void recede(void); //归还功能
void ranking(void); // 热度排行功能
void modify(void); //密码修改功能
int main()
{
login(); //登录 -- 登录成功向下执行,不成功就停在登录继续输入密码
while(1)
{
// 显示界面
shouUI();
// 按键操作
opt();
}
return 0;
}
/*****************************************函数定义******************************/
/*******************************************
*函数名 : login
*函数功能 : 登录
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void login(void)
{
char inputPwd[20];
A:
printf("请输入密码:");
anwen(inputPwd);
if(strcmp(inputPwd, pwd) == 0)
{
printf("密码正确,欢迎使用图书管理系统!\n");
sleep(1); //延迟
system("cls"); //清屏
return ;
}
else
{
printf("密码错误,请重新输入!\n");
goto A;
}
}
/*******************************************
*函数名 : anwen
*函数功能 : 密码暗文
*函数参数 : char *p
*函数返回值: void
*函数描述 :
*
*********************************************/
void anwen(char *p)
{
char ch; //接收字符
int i = 0; //下标
while(1)
{
ch = getch(); //获取字符,不显示
// \b退格,\n换行,\r回车
if(!(ch == '\n' || ch == '\r') && (ch != '\b'))
{
p[i] = ch; //将字符写到空间
printf("*"); //显示*
i++; //改变下标
}
else if(ch == '\b')
{
//判断是否到顶
if(i != 0)
{
p[i-1] = '\0'; //删除数据补\0
i--; //改变下标
printf("\b \b"); //退格原来位置补空
}
}
else if(ch == '\n' || ch == '\r')
{
p[i] = '\0'; //输入结束 \0
printf("\n");
break;
}
}
}
/*******************************************
*函数名 : shouUI
*函数功能 : 界面
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void shouUI(void)
{
printf("************************************************\n");
printf("*------------ 欢迎来到图书管理系统 ------------*\r\n");
printf("*-------- [1] 查询图书 [2] 添加图书 --------*\r\n");
printf("*-------- [3] 删除图书 [4] 借阅图书 --------*\r\n");
printf("*-------- [5] 归还排行 [6] 热度排行 --------*\r\n");
printf("*-------- [7] 修改密码 [0] 退出系统 --------*\r\n");
printf("************************************************\n");
printf("请选择操作(0~7):");
}
/*******************************************
*函数名 : opt
*函数功能 : 功能选择
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void opt(void)
{
int m;
char n;
START:
scanf("%d",&m); //输入选择功能
AGAIN:
switch(m)
{
case 1:
demand();//查询
break;
case 2:
add_book();//添加
break;
case 3:
strike_out();//删除
break;
case 4:
borrow();//借阅
break;
case 5:
recede();//归还
break;
case 6:
ranking();//热度
break;
case 7:
modify();//修改密码
return;
case 0:
exit(0);//退出进程
default:
printf("输入无效,请重新输入:");
goto START;
}
//让用户控制程序执行
printf("是否继续当前操作...(y/n)\n") ;
n = getch();
if(n == 'y' || n == 'Y')
{
goto AGAIN;
}
system("cls");
}
/*******************************************
*函数名 : add_book
*函数功能 : 添加图书
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void add_book(void)
{
printf("-----------------------------------------\n");
printf("请输入第%d本书的信息\n",bookNum+1);
printf("请输入图书的编号:");
scanf("%d",&arr[bookNum].bookNumber);
printf("请输入图书的书名:");
scanf("%s",arr[bookNum].bookName);
printf("请输入图书的作者:");
scanf("%s",arr[bookNum].writer);
printf("请输入图书的价格:");
scanf("%f",&arr[bookNum].price);
printf("请输入图书的热度:");
scanf("%d",&arr[bookNum].hot);
printf("请输入图书的库存:");
scanf("%d",&arr[bookNum].kc);
bookNum++;
printf("添加成功\n");
}
/*******************************************
*函数名 : strike_out
*函数功能 : 删除图书
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void strike_out(void)
{
int flag = 0;
int i,j;
char str[20];
printf("请输入要删除的书名:\n");
scanf("%s",str);
for(i = 0; i < bookNum; i++)
{
int res = strcmp(arr[i].bookName,str);
if(res == 0)
{
for(j = i + 1; j < bookNum; j++)
{
arr[j-1] = arr[j];
}
bookNum--;
printf("删除成功\n");
flag = 1;
break;
}
}
if(flag == 0)
{
printf("该书籍不存在\n");
}
}
/*******************************************
*函数名 : demand
*函数功能 : 查询 图书
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void demand(void)
{
//显示界面
printf("*****************************\n");
printf("*----- [1] 查询全部 --------*\n");
printf("*----- [2] 按照书名查询 ----*\n");
printf("*----- [3] 按照作者查询 ----*\n");
printf("*----- [0] 回到主界面 ------*\n");
printf("*****************************\n");
//选择
int a,i;
char ch[20];
int flag;
printf("请选择:");
scanf("%d",&a);
switch(a)
{
case 1:
printf("编号\t书名\t作者\t价格\t热度\t库存\n");
for(i = 0; i < bookNum; i++)
{
printf(" %d\t%s\t%s\t%.2f\t %d\t %d\n",arr[i].bookNumber,arr[i].bookName,arr[i].writer,arr[i].price,arr[i].hot,arr[i].kc);
}
break;
case 2:
flag = 0;
printf("请输入要查询的书名:");
scanf("%s",ch);
for(i = 0; i < bookNum; i++)
{
if(strcmp(arr[i].bookName,ch)==0)
{
if (flag == 0) // 如果第一次找到书籍,输出表头
{
printf("编号\t书名\t作者\t价格\t热度\t库存\n");
flag = 1; // 设置标志为已找到书籍
}
printf("%d\t%s\t%s\t%.2f\t%d\t%d\n",arr[i].bookNumber,arr[i].bookName,arr[i].writer,arr[i].price,arr[i].hot,arr[i].kc);
}
}
if (flag == 0)
{
printf("找不到该书籍\n");
}
break;
case 3:
flag = 0;
printf("请输入要查询的作者:");
scanf("%s",ch);
for(i = 0; i < bookNum; i++)
{
if(strcmp(arr[i].writer,ch)==0)
{
if (flag == 0) // 如果第一次找到书籍,输出表头
{
printf("编号\t书名\t作者\t价格\t热度\t库存\n");
flag = 1; // 设置标志为已找到书籍
}
printf("%d\t%s\t%s\t%.2f\t%d\t%d\n",arr[i].bookNumber,arr[i].bookName,arr[i].writer,arr[i].price,arr[i].hot,arr[i].kc);
}
}
if (flag == 0)
{
printf("找不到该书籍\n");
}
break;
case 0:
return;
}
}
/*******************************************
*函数名 : borrow
*函数功能 : 借阅图书
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void borrow(void)
{
char ch[20];
int flag = 0;
printf("请输入要借阅的图书:");
scanf("%s",ch);
int i;
for(i = 0; i < bookNum; i++)
{
if(strcmp(arr[i].bookName,ch) == 0)
{
if(arr[i].kc == 0)
{
printf("库存不足!\n");
}
else
{
arr[i].kc--;
printf("借阅成功\n");
}
flag = 1;
break;
}
}
if(flag == 0)
{
printf("没有找到该书籍\n");
}
}
/*******************************************
*函数名 : recede
*函数功能 : 归还图书
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void recede(void)
{
char ch[20];
int i;
int flag = 0;
printf("请输入要归还的图书:");
scanf("%s",ch);
for(i = 0; i < bookNum; i++)
{
if(strcmp(arr[i].bookName,ch) == 0)
{
arr[i].kc++;
printf("归还成功\n");
flag = 1;
break;
}
}
if(flag == 0)
{
printf("没有找到该书籍\n");
}
}
/*******************************************
*函数名 : ranking
*函数功能 : 热度排行 (冒泡排序)
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void ranking(void)
{
int i,j;
BK temp;
for(i = 0; i < bookNum-1; i++)
{
for(j = 0; j < bookNum-1-i; j++)
{
if(arr[j].hot > arr[j+1].hot)
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//输出
printf("热度\t书名\t作者\t编号\t价格\t库存\n");
for(i=0; i<bookNum; i++)
{
printf("%d\t%s\t%s\t%d\t%.2f\t%d\n",arr[i].hot,arr[i].bookName,arr[i].writer,arr[i].bookNumber,arr[i].price,arr[i].kc);
}
}
/*******************************************
*函数名 : modify
*函数功能 : 修改密码
*函数参数 : void
*函数返回值: void
*函数描述 :
*
*********************************************/
void modify(void)
{
char n[20];
char m[20];
B:
printf("请输入密码:");
//scanf("%s",n);
anwen(n);
printf("请再次输入密码:");
//scanf("%s",m);
anwen(m);
//比较两次密码
if(strcmp(n,m)==0)
{
strcpy(pwd,m); //将密码拷贝到pwd
printf("密码修改成功,请重新登录");
sleep(1);
system("cls");
login(); //重新调用登录功能
}
else
{
printf("输入的两次密码不一致,请重新输入.....");
goto B;
}
}
首次制作,多有不易,谢谢使用!!!标签:arr,ch,课设,void,C语言,源码,bookNum,printf,图书 From: https://blog.csdn.net/qq_60308062/article/details/141748521