首页 > 编程语言 >图书管理系统【C语言课设】【附源码】

图书管理系统【C语言课设】【附源码】

时间:2024-09-03 13:55:16浏览次数:6  
标签:arr ch 课设 void C语言 源码 bookNum printf 图书

图书管理系统

这是一个符合大学生课设实训的系统。

一、系统功能

        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

相关文章