模拟图书管理系统(简单c语言DOS界面)

#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<io.h>
#define FILE_PATH "G:\\book\\allBooks.txt"
#define FILG_PATH "G:\\book\\index.txt"
struct Book
{
	int ID; //图书id 
	char name[100];//图书名 
	double price; //价格
	char author[100];//作者
	int num;	//总数量
	
	int ifBorrowed;//是否借阅,0为没有,1为被借阅过
	int currentNum;//剩余图书的数量	
};
//图书数组全局
struct Book books[1000];
//图书ID
int bookID; 
//添加图书下标
int index;
//---------------------------管理员功能函数-------------------------------------------------
//增加图书
void addBook()
{

	//-------数据持久化操作 

	//如果文件不存在直接将全局数组写入文件中
/*	if(!access(FILE_PATH,F_OK))//F_OK :文件存在 R_OK: 写入权限  
	{
			FILE *p=fopen(FILE_PATH,"w");
			fwrite(books,sizeof(struct Book),index,p);
			fclose(p);
			FILE *m=fopen(FILG_PATH,"w");
			fprintf(m,"%d",index);
			fclose(m);
	} 
	else	//如果文件存在了将读出所有数据赋值给全局变量 
	{*/
			//读取 
				FILE *p=fopen(FILG_PATH,"r");
			fscanf(p,"%d",&index);
			bookID=index;
			fclose(p);
	
			FILE *m=fopen(FILE_PATH,"r");
			fread(books,sizeof(struct Book),1000,m);
			fclose(m);
			bookID=index;
			printf("请输入图书名字:");
			scanf("%s",books[index].name);
			printf("请输入图书的价格:");
			scanf("%lf",&(books[index].price));
			printf("请输入作者:");
			scanf("%s",books[index].author);
			printf("请输入图书的数量:");
			scanf("%d",&(books[index].num));
	
			books[index].ifBorrowed=0;
			books[index].currentNum=books[index].num;
			books[index].ID=++bookID;
			index++;

			//写入 ========================================== 
			FILE *n=fopen(FILE_PATH,"w");
			FILE *q=fopen(FILG_PATH,"w");
			fwrite(books,sizeof(struct Book),index,n);
			fprintf(q,"%d",index);
			fclose(n);
			fclose(q);
		//=================================================	
//	}
}
//删除图书 
void deleteBook(int delID)
{
	//文件不存在直接退出 
//	if(!access(FILE_PATH,F_OK))
//	{
//		printf("文件不存在!");
//		return;
//	}
	FILE *p=fopen(FILG_PATH,"r");
	fscanf(p,"%d",&index);
	bookID=index;
	fclose(p);
	
	FILE *m=fopen(FILE_PATH,"r");
	fread(books,sizeof(struct Book),1000,m);
	fclose(m);
	int delIndex=delID-1;
	if(bookID==0)
	{
		printf("图书库为空!\n");
	}
	else if(delIndex>=index)
	{
		printf("不存在此图书!");
	}
	//删除顺序表中最后一本图书 

	else if(index-1==delIndex)
	{
		bookID --;
		index --;
		printf("删除成功!");
	}
	else
	{
		int i;
		for(i=delIndex;i<index-1;i++)
		{	
			books[i]=books[i+1];
			books[i].ID -= 1;
		}
		index --;
		bookID --;
			printf("删除成功!");
	}
		//写入 
			FILE *n=fopen(FILE_PATH,"w");
			FILE *q=fopen(FILG_PATH,"w");
			fwrite(books,sizeof(struct Book),index,n);
			fprintf(q,"%d",index);
			fclose(n);
			fclose(q);
}
//查看所有图书
void  showALLBooks()
{
//	if(!access(FILE_PATH,F_OK))
//	{
//		printf("文件不存在!");
//		return;
//	}
	//读取 
		FILE *p=fopen(FILG_PATH,"r");
	fscanf(p,"%d",&index);
	bookID=index;
	fclose(p);
	
	FILE *m=fopen(FILE_PATH,"r");
	fread(books,sizeof(struct Book),1000,m);
	fclose(m);
	printf("|\t编号\t名称\t作者\t数量\t价格\t借阅\t余量|\n");
	int i;
	for(i=0;i<index;i++)
	{

		printf("\t%d\t%s\t%s\t%d\t¥%g\t",books[i].ID,books[i].name,books[i].author,books[i].num,books[i].price);
		printf("%s\t",books[i].ifBorrowed==1 ?"是":"否");
		printf("%d\n",books[i].currentNum);
	}
}
//查看所有借阅图书
void showALLBorrowedBooks()
{
//=====================================================	
/*	if(!access(FILE_PATH,F_OK))
	{
		printf("文件不存在!");
		return;
	}
*/	//读取 
	FILE *p=fopen(FILG_PATH,"r");
	fscanf(p,"%d",&index);
	bookID=index;
	fclose(p);
	
	FILE *m=fopen(FILE_PATH,"r");
	fread(books,sizeof(struct Book),1000,m);
	fclose(m);
	//==========================================================
	int i;
		printf("----------------------借出图书预览--------------------------\n");
	printf("\t编号\t名称\t作者\t数量\t价格\t借阅\t余量\n");

	for(i=0;i<index;i++)
	{
		if(books[i].ifBorrowed==1)
		{
		printf("|\t%d\t%s\t%s\t%d\t¥%g\t",books[i].ID,books[i].name,books[i].author,books[i].num,books[i].price);
		printf("%s\t",books[i].ifBorrowed==1 ?"是":"否");
		printf("%d|\n",books[i].currentNum);	
		}
	}
		printf("------------------------------------------------------------\n");	
}

//---------------------------------------------------------------------------------
//------------------------------------用户功能函数-------------------------------
void showAllBooks_User()
{
	//=====================================================	
//	if(!access(FILE_PATH,F_OK))
//	{
//		printf("文件不存在!");
//		return;
//	}
	//读取 
		FILE *p=fopen(FILG_PATH,"r");
	fscanf(p,"%d",&index);
	bookID=index;
	fclose(p);
	
	FILE *m=fopen(FILE_PATH,"r");
	fread(books,sizeof(struct Book),1000,m);
	fclose(m);
	//==========================================================
	
	printf("|\t编号\t名称\t作者\t数量\t可借阅\t余量|\n");
	int i;
	for(i=0;i<index;i++)
	{

		printf("\t%d\t%s\t%s\t%d\t",books[i].ID,books[i].name,books[i].author,books[i].num);
		printf("%s\t",books[i].currentNum!=0 ?"是":"否");
		printf("%d\n",books[i].currentNum);
	}
}
void borrowBook()//借书 
{
	//=====================================================	

	//读取 
		FILE *p=fopen(FILG_PATH,"r");
	fscanf(p,"%d",&index);
	bookID=index;
	fclose(p);
	
	FILE *m=fopen(FILE_PATH,"r");
	fread(books,sizeof(struct Book),1000,m);
	fclose(m);
	//==========================================================
	printf("请输入所借图书ID:");
	int borrowID;
	scanf("%d",&borrowID);
	
	printf("请输入借阅的数量:");
	int borrowNum;
	scanf("%d",&borrowNum);
	if(borrowID>index||borrowID<=0)
	{
		printf("选择错误");
	}
	else
	{
		if(borrowNum>books[borrowID-1].currentNum)
		{
			printf("图书余量不够!\n");
		}
		else
		{
			books[borrowID-1].currentNum-=borrowNum;
			books[borrowID-1].ifBorrowed=1;
			printf("借阅成功!\n");
		}
	}
			//写入 ========================================== 
			FILE *n=fopen(FILE_PATH,"w");
		//	FILE *q=fopen(FILG_PATH,"w");
			fwrite(books,sizeof(struct Book),index,n);
		//	fprintf(q,"%d",index);
			fclose(n);
		//	fclose(m);
		//=================================================	
}
void returnBook()
{
		//=====================================================	

	//读取 
		FILE *p=fopen(FILG_PATH,"r");
	fscanf(p,"%d",&index);
	bookID=index;
	fclose(p);
	
	FILE *m=fopen(FILE_PATH,"r");
	fread(books,sizeof(struct Book),1000,m);
	fclose(m);
	//==========================================================
	printf("请输入要还书的ID:");
	int returnID;
	int returnNum;
	scanf("%d",&returnID);
	printf("\n请输入还书的数量:");
	scanf("%d",&returnNum);
	if(returnID<=0||returnID>index) 
	{
		printf("不存在这本书\n");
	}
 	else
 	{//如果还书的数量大于借出的总量,错误 
    	if(returnNum>(books[returnID-1].num-books[returnID-1].currentNum))
    	{
	    	printf("还书错误\n"); 
	    }
	    else if(returnNum==(books[returnID-1].num-books[returnID-1].currentNum))
	    {//如果全部还完  是否借阅设为  否 
    		books[returnID-1].currentNum+=returnNum;
    		books[returnID-1].ifBorrowed=0;
    		printf("还书成功\n"); Sleep(3000);
    	}
    	else{// 
	    		books[returnID-1].currentNum+=returnNum;
	    			printf("还书成功\n"); Sleep(3000);
	    }

 	}
 		//写入 
			FILE *n=fopen(FILE_PATH,"w");
			FILE *q=fopen(FILG_PATH,"w");
			fwrite(books,sizeof(struct Book),index,n);
			fprintf(q,"%d",index);
			fclose(n);
			fclose(q);
}

//--------------------------------------------------------------------------------
//主页面 
int  indexViewShow()
{
	system("cls");
	printf("-----------欢迎使用图书管理系统-----------------\n"); 
	printf("|                                               |\n"); 
	printf("|               管理员请选 1                    |\n");
	printf("|                用户请选 2                     |\n");
	printf("|                 退出请选 3                    |\n");
	printf("------------------------------------------------\n");
	int chioce;
	printf("请选择: ");
	scanf("%d",&chioce);
	return chioce;
}
//管理员
int managerViewShow()
{
	system("cls");
	printf("----------------管理员---------------------------\n"); 
	printf("|                                               |\n"); 
	printf("|              增加图书请选1                    |\n");
	printf("|              删除图书请选2                    |\n");
	printf("|              查看图书请选3                    |\n");
	printf("|              查看借阅图书 4                   |\n"); 
	printf("|              返回上级页面请按5                |\n");
	printf("------------------------------------------------\n");
	int chioce;
	printf("请选择: ");
	scanf("%d",&chioce);
	return chioce;
	
} 
//用户页面
int userViewShow()
{
	system("cls");
	printf("----------------用--户---------------------------\n"); 
	printf("|                                               |\n"); 
	printf("|              查看图书请选1                    |\n");
	printf("|              借阅图书请选2                    |\n");
	printf("|              归还图书请选3                    |\n");
	printf("|              返回上级页面请按4                |\n");
	printf("-------------------------------------------------\n");
	int chioce;
	printf("请选择: ");
	scanf("%d",&chioce);
	return chioce;
	
} 
int main()
{	
	int chose;
	do{
		chose=indexViewShow();
		switch(chose)
		{
			case 1://管理员 
			{
				int manageChose;
				do
				{
					manageChose=managerViewShow();
					switch(manageChose)
					{
						case 1:	//增加图书
						{
							char chioce[20];
							do
							{
									addBook();
									printf("\n继续添加请按: y,否则请选: n:");
						
									scanf("%s",chioce); 
							}while(strcmp(chioce,"y")==0);
						
						}	break;
						case 2://删除图书
						{
							showALLBooks();
							printf("输入要删除图书的ID,退出请选esc");
							int deleteID;
							scanf("%d",&deleteID);
							printf("确认删除编号为%d的书请按 :y\t",deleteID);
							char chose[2];
							scanf("%s",chose);
							if((strcmp(chose,"y")==0)||(strcmp(chose,"Y")==0))
							{
									deleteBook(deleteID);
								Sleep(2000);
							}
					
						} break;
						case 3://查看图书
						{
							
							char chioce[20];
							showALLBooks();
							printf("退出请选y: ");
							do
							{									
								scanf("%s",chioce); 
							}while(strcmp(chioce,"y")!=0);

						//	Sleep(5000);
						}	break;
						case 4://查看所有借阅图书 
						{
				      		
							
							char chioce[20];
							showALLBorrowedBooks();
							printf("退出请选y: ");
							do
							{									
								scanf("%s",chioce); 
							}while(strcmp(chioce,"y")!=0);
				      		
						} break;
						case 5: break;
						default:printf("输入有误,请重新选择");Sleep(2000);
					}
				}while(manageChose!=5);
			}
		
	 		 break;
			case 2://
			{
				int userChose;//用户 
				do
				{
					userChose=userViewShow();
					switch(userChose)
					{
						case 1://查看图书 
						{
							char chioce[20];
							showAllBooks_User();
							printf("退出请选y: ");
							do
							{									
								scanf("%s",chioce); 
							}while(strcmp(chioce,"y")!=0);
						} 	break;
					
						case 2://借阅 
						{
							
							showAllBooks_User();
							char chioce[20];
							do
							{
							   borrowBook();
							   printf("继续借阅请选y,退出请选n");
							   scanf("%s",chioce);								
							}while(strcmp(chioce,"y")==0);

							
						}	break;
						case 3:
						{
							returnBook();
						}	break;//归还 
						case 4:	break;//返回上级 
						default:printf("输入有误,请重新选择");Sleep(2000);break;	 
					}
				}while(userChose!=4);
    		}break;
			case 3://
			{
					break;
			}
			default: printf("输入有误,请重新选择\n");Sleep(1000);break;
		}
   
   	}while(chose!=3);
	printf("谢谢使用图书管理系统\n5秒后将自动退出\n");Sleep(5000);
	return 0;
} 

 

转载于:https://my.oschina.net/wang520/blog/677720

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值