C语言毕业设计 图书管理系统

提示信息

      1 文件默认存放在D盘根目录下   不需要手动创建 文件第一次运行自动会创建

      2.  隔行颜色 会有影响 可以自行更改

      3.  它有自动扩容

运行界面效果图

代码效果图

代码区

#define _CRT_SECURE_NO_WARNINGS	
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<String.h>
#include<time.h>

#define MAX_NAME  20		     //账号和密码的最大长度
#define MAX_LEN  3		        //存放数组的空间最大下标
#define MAX_BOOKSNAME  40		//书名最大的字数
typedef struct  User {         //用户的结构体
	int quantity;
	char name[MAX_NAME];      //用户的账号 
	char pwd[MAX_NAME];		 //用户的密码
	int id;					//判断用户是否是管理员用户  1为管理员  0为普通用户
}User;
typedef struct UserData {     //存放用户的空间
	User* data;				  //定义用户的结构体指针
	int size;				  //定义数组的下标
	int maxlen;				  //定义数组的最大空间
}UserData;
typedef struct books {				//书的结构体
	int bid;						//书的编号
	char name[MAX_BOOKSNAME];		//书名
	double   Price;					//价格
	char press[MAX_BOOKSNAME];		//出版社
	int quantity;					//数量
	char author[MAX_NAME];			//作者
}books;
typedef struct BooksData {			 //图书存放的结构体
	books* bdata;					//图书数组空间
	int bsize;						//下标
	int bmaxlen;					//最大空间

}BooksData;
typedef struct BwUsBk {
	char Bwbook[MAX_BOOKSNAME];		//图书名
	char username[MAX_NAME];		//姓名
	int Bid;						//判断是否归还  0表示已借出   1表示未归还
}BwUsBk;
typedef struct BwData {
	BwUsBk* Bwdata;
	int Bwsize;
	int Bwmaxlen;
}BwData;
//初始化函数开辟用户数组空间
void mymemset(UserData* ps);
//打印的菜单 用户主界面
void menu(UserData* ps);
//注册用户
void registera(UserData* ps);
//判断注册是否是管理员用户
void pdadministrators(UserData* ps);
//增加用户容量
void increase(UserData* ps);
//读取用户文本内容
void readtxt(UserData* ps);
//清屏
void cls();
//管理员登陆界面
void administratorsmenu(UserData* ps, char name[MAX_NAME], int* i);
//添加用户
void AddUser(UserData* ps);
//修改用户
void ModifyUser(UserData* ps, int* i);
//登录
void logon(UserData* ps);
//查找用户
int FindUser(UserData* ps);
//写入用户
void Writetxt(UserData* ps);
//删除用户
void DelUser(UserData* ps);
//遍历用户
void ShowUser(UserData* ps);
//导出用户
void ExportUser(UserData* ps);
//初始化图书数组
void initbook(BooksData* ps);
//增加图书空间增容
void capacity(BooksData* ps);
//写入书籍
void Bookwrite(BooksData* ps);
//当文件夹为空添加默认图书
void defaultboos(BooksData* ps);
//读取图书
void ReadBook(BooksData* ps);
//添加图书
void AddBooks(BooksData* ps);
//遍历图书
void Showbook(BooksData* ps);
//查找图书
int FindBook(BooksData* ps);
//删除图书
void DelBook(BooksData* ps);
//修改图书
void ModifyBook(BooksData* ps);
//导出图书
void exportbook(BooksData* ps);
//普通用户登录
void OrdinaryUser(UserData* ps, int* i);
//普通用户修改个人信息
void MdPtUs(UserData* ps, int* i);
//借阅图书的结构体init
void memsetJy(BwData* ps);
//写入借阅函数
void wirteread(BwData* pe);
//借阅图书
void Borrow(UserData* ps, BooksData* p, int* i, BwData* pe);
//读取借阅资料
void readJy(BwData* pe);
//归还图书
void returnbook(UserData* ps, int* i, BooksData* p, BwData* pe);
//借阅记录
void recordbook(UserData* ps, int* i, BooksData* p, BwData* pe);
BooksData bo;
BwData B;

int j=0;
int i=0;
int main(void) {
	UserData d;
	mymemset(&d);		//初始化函数用户开辟用户数组空间
	initbook(&bo);		//初始化函数图书开辟用户数组空间
	memsetJy(&B);		//初始化函数用户开辟用户数组空间
	readtxt(&d);		//读取文本用户信息
	ReadBook(&bo);		//读取文本书
	readJy(&B);			//读取借阅信息
	menu(&d);			//打印的菜单 用户主界面
	return 0;
}
//借阅图书的结构体初始化init
void memsetJy(BwData* ps) {
	BwUsBk* p = (BwUsBk*)malloc(MAX_LEN * sizeof(BwUsBk));   //使用malloc函数进行开辟空间
	if (p == NULL) {
		exit(0);
	}
	else {
		ps->Bwdata = p;
		memset(ps->Bwdata, 0, sizeof(ps->Bwdata));
		ps->Bwsize = 0;
		ps->Bwmaxlen = MAX_LEN;
	}
}
//增加借阅结构体空间
void Jyincrease(BwData* ps) {
	if (ps->Bwsize == ps->Bwmaxlen) {
		BwUsBk* p = (BwUsBk*)realloc(ps->Bwdata, (ps->Bwmaxlen + MAX_LEN) * sizeof(BwUsBk));
		if (p == NULL) {
			printf("增容失败\n");
		}
		else {
			ps->Bwdata = p;
			ps->Bwmaxlen += MAX_LEN;
		}
	}
}
//初始化函数开辟空间
void mymemset(UserData* ps) {
	User* p = (User*)malloc(MAX_LEN * sizeof(User));   //使用malloc函数进行开辟空间
	if (p == NULL) {
		exit(0);
	}
	else {
		ps->data = p;
		memset(ps->data, 0, sizeof(ps->data));
		ps->size = 0;
		ps->maxlen = MAX_LEN;
	}
}
//打印的菜单
void menu(UserData* ps) {
	int a = 1;
	do
	{
		printf("--------【主菜单】--------");
		printf("\n");
		printf("\t☆0:退出\n");
		printf("\n");
		printf("\t☆1:登录\n");
		printf("\n");
		printf("\t☆2:注册\n");
		printf("\n");
		printf("--------【主菜单】--------\n");
		printf("请输入你的选项>\t");
		scanf("%d", &a);
		switch (a)
		{
		case 0:exit(0); break;			//退出
		case 1:logon(ps); break;		//登录
		case 2:registera(ps); break;	//注册
		default:printf("没有此选项\n"); break;
		}
	} while (a);
}
//注册
void registera(UserData* ps) {
	FILE* fp = fopen("D:\\users.txt", "rt");
	char name1[MAX_NAME];
	//当文本不存在的时候注册
	if (fp == NULL)
	{
		fp = fopen("D:\\users.txt", "wt");
		printf("请输入你的账号\n");
		scanf("%s", ps->data[ps->size].name);
		printf("请输入你的密码\n");
		scanf("%s", ps->data[ps->size].pwd);
		pdadministrators(ps);
		fprintf(fp, "size=%d username=%s possword=%s power=%d\n", ps->data[ps->size].quantity, ps->data[ps->size].name, ps->data[ps->size].pwd, ps->data[ps->size].id);
		ps->size++;
		printf("注册成功\n");
	}
	else
	{
		//fclose(fp);
	jx:
		printf("请输入你的账号\n");
		scanf("%s", name1);
		int i = 0;
		for (i = 0; i < ps->size; i++)
		{
			if (strcmp(ps->data[i].name, name1) == 0) {
				break;
			}
		}
		if (ps->size != i)
		{
			printf("账号已经存在\n");
			goto jx;
		}
		else
		{
			strcpy(ps->data[ps->size].name, name1);
			printf("请输入你的密码\n");
			scanf("%s", ps->data[ps->size].pwd);
			pdadministrators(ps);
			ps->size++;
			fp = fopen("D:\\users.txt", "wt");
			if (ps->size == 0)
			{
				for ( j = 0; j <= ps->size; j++)
				{
					fprintf(fp, "size=%d username=%s possword=%s power=%d\n", ps->data[j].quantity, ps->data[j].name, ps->data[j].pwd, ps->data[j].id);
					ps->data[i].quantity = ps->size;
				}
			}
			else {
				for ( j = 0; j < ps->size; j++)
				{
					fprintf(fp, "size=%d username=%s possword=%s power=%d\n", ps->data[j].quantity, ps->data[j].name, ps->data[j].pwd, ps->data[j].id);
					ps->data[i].quantity = ps->size;
				}
			}
			printf("注册成功\n");
		}
	}
	fclose(fp);
	fp = NULL;
}
//读取文本内容
void readtxt(UserData* ps) {
	FILE* fp = fopen("D:\\users.txt", "rt");
	if (fp == NULL) {
		strcpy(ps->data[ps->size].name, "admin");
		strcpy(ps->data[ps->size].pwd, "123");
		ps->data[ps->size].id = 1;
		ps->data[ps->size].quantity = ps->size + 1;
		fp = fopen("D:\\users.txt", "wt");
		fprintf(fp, "size=%d username=%s possword=%s power=%d\n", ps->data[ps->size].quantity, ps->data[ps->size].name, ps->data[ps->size].pwd, ps->data[ps->size].id);
		ps->size++;
		strcpy(ps->data[ps->size].name, "test");
		strcpy(ps->data[ps->size].pwd, "123");
		ps->data[ps->size].id = 0;
		ps->data[ps->size].quantity = ps->size + 1;
		fprintf(fp, "size=%d username=%s possword=%s power=%d\n", ps->data[ps->size].quantity, ps->data[ps->size].name, ps->data[ps->size].pwd, ps->data[ps->size].id);
		ps->size++;
	}
	else {
		while (fscanf(fp, "size=%d username=%s possword=%s power=%d\n", &ps->data[ps->size].quantity, ps->data[ps->size].name, ps->data[ps->size].pwd, &ps->data[ps->size].id) != EOF)
		{
			ps->data[ps->size].quantity = ps->size + 1;
			ps->size++;
			if (ps->size == ps->maxlen)
			{     //增容
				increase(ps);
			}
		}
	}
	fclose(fp);
	fp = NULL;
}
//判断注册是否是管理员用户
void pdadministrators(UserData* ps)
{
	char panduan[MAX_NAME];
	ps->data[ps->size].quantity = ps->size + 1;
	while (1)
	{
	end:    printf("\033[40;31m请输入注册管理员用户权限密码\n");
		scanf("%s", panduan);
		if (strcmp(panduan, "88888888") == 0)
		{
			ps->data[ps->size].id = 1;
			break;
		}
		else
		{
			printf("输入1退出 其他则继续\n");
			scanf("%s", panduan);
			if (strcmp(panduan, "1") == 0) {
				ps->data[ps->size].id = 0;
				break;
			}
			else {
				printf("输入错误\n");
				goto end;
			}
		}
	}
}
//增加容量
void increase(UserData* ps) {
	User* p = (User*)realloc(ps->data, (ps->maxlen + MAX_LEN) * sizeof(User));
	if (p == NULL) {
		printf("增容失败\n");
	}
	else {
		ps->data = p;
		ps->maxlen += MAX_LEN;
		printf("增容用户空间成功\n");
	}
}
//登录
void logon(UserData* ps) {
	char name[MAX_NAME];
	char pwd[MAX_NAME];
	printf("\033[40;31m请输入你的用户名\n");
	scanf("%s", name);
	printf("\033[40;34m请输入你的密码\n");
	scanf("%s", pwd);
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		if (strcmp(name, ps->data[i].name) == 0 && strcmp(pwd, ps->data[i].pwd) == 0) {
			if (ps->data[i].id == 0)
			{
				printf("登录成功\n");
				OrdinaryUser(ps, &i);
				break;
			}
			else
			{
				printf("登录成功\n");
				administratorsmenu(ps, name, &i);
				break;
			}
		}
	}
	if (i == ps->size) {
		printf("账号不存在\n");
	}
}
//清屏
void cls() {
	system("pause");
	system("cls");
}
//管理员登陆界面
void administratorsmenu(UserData* ps, char name[MAX_NAME], int* i) {
	int a = 0;
	do
	{
		cls();
		printf("\033[40;33m--------【欢迎管理员用户:%s】--------\033[0m\r\n", name);
		printf("\033[40;30m\t用户管理\n");
		printf("\n");
		printf("\033[40;31m\t☆0:退出界面\n");
		printf("\033[40;32m\t☆1:添加用户\n");
		printf("\033[40;33m\t☆2:删除用户\n");
		printf("\033[40;34m\t☆3:修改用户\n");
		printf("\033[40;35m\t☆4:查找用户\n");
		printf("\033[40;36m\t☆5:遍历用户\n");
		printf("\033[40;37m\t☆6:导出用户\n");
		printf("\n");
		printf("---------------------------------------------------------\n");
		printf("\033[40;34m\t图书管理\n");
		printf("\n");
		printf("\033[40;32m\t☆7: 添加图书\n");
		printf("\033[40;35m\t☆8: 删除图书\n");
		printf("\033[40;37m\t☆9: 修改图书\n");
		printf("\033[40;31m\t☆10:查找图书\n");
		printf("\033[40;36m\t☆11:遍历图书\n");
		printf("\033[40;33m\t☆12:导出图书\n");
		printf("请选择》");
		scanf("%d", &a);
		switch (a)
		{
		case 0:a = 0; Writetxt(ps); break;
		case 1:AddUser(ps); break;			//添加用户
		case 2:DelUser(ps); break;			//删除用户
		case 3:ModifyUser(ps, i); break;	//修改用户
		case 4:FindUser(ps); break;			//查找用户
		case 5:ShowUser(ps); break;			//遍历用户
		case 6:ExportUser(ps); break;		//导出用户
		case 7:AddBooks(&bo); break;		//添加图书
		case 8:DelBook(&bo); break;         //删除图书
		case 9:ModifyBook(&bo); break;	    //修改图书
		case 10:FindBook(&bo); break;		//查找图书
		case 11:Showbook(&bo); break;		//遍历图书
		case 12:exportbook(&bo); break;     //导出图书
		default:printf("选项有误\n");
			break;
		}
	} while (a);
	cls();
}
//普通用户登录
void OrdinaryUser(UserData* ps, int* i) {
	int a = 0;
	do
	{
		cls();
		printf("\033[40;33m--------【欢迎用户:%s】--------\033[0m\r\n", ps->data[*i].name);
		printf("\033[40;31m\t☆0:退出界面\n");
		printf("\033[40;32m\t☆1:借阅图书\n");
		printf("\033[40;33m\t☆2:归还图书\n");
		printf("\033[40;34m\t☆3:查看借阅记录\n");
		printf("\033[40;36m\t☆4:修改个人信息\n");
		printf("请选择你的选项>");
		scanf("%d", &a);
		switch (a)
		{
		case 0: a = 0; break;
		case 1:Borrow(ps, &bo, i, &B); break;			//借阅
		case 2:returnbook(ps, i, &bo, &B); break;		//归还
		case 3:recordbook(ps, i, &bo, &B); break;		//查看借阅记录
		case 4:MdPtUs(ps, i); break;			        //修改个人信息
		default:printf("选项有误\n"); break;
		}
	} while (a);
}
//添加用户
void AddUser(UserData* ps) {
	FILE* fp = fopen("D:\\users.txt", "wt");
	char name[MAX_NAME];
jx:
	printf("请输入你的账号\n");
	scanf("%s", name);
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		if (strcmp(ps->data[i].name, name) == 0) {
			break;
		}
	}
	if (ps->size != i)
	{
		printf("账号已经存在\n");
		goto jx;
	}
	else
	{
		strcpy(ps->data[ps->size].name, name);
		printf("请输入你的密码\n");
		scanf("%s", ps->data[ps->size].pwd);
		pdadministrators(ps);
		ps->size++;
		for ( j = 0; j < ps->size; j++)
		{
			fprintf(fp, "size=%d username=%s possword=%s power=%d\n", ps->data[j].quantity, ps->data[j].name, ps->data[j].pwd, ps->data[j].id);
			ps->data[i].quantity = ps->size;
		}
		printf("添加成功\n");
	}
	fclose(fp);
	fp = NULL;
}
//修改用户
void ModifyUser(UserData* ps, int* i) {
	int c = 0;
	char name[MAX_NAME];
	c = FindUser(ps);
	if (c != -1) {
		printf("需要修改什么输入什么有    <密码>  <账号> <权限>\n");
		scanf("%s", name);
		while (1)
		{
			if (strcmp(name, "密码") == 0) {
				printf("请输入新密码\n");
				scanf("%s", ps->data[c].pwd);
				break;
			}
			else if (strcmp(name, "账号") == 0) {
				printf("请输入新账号\n");
				scanf("%s", ps->data[c].name);
				break;
			}
			else if (strcmp(name, "权限") == 0) {
				printf("请输入你要修改的权限  1为管理员   0为普通用户\n");
				scanf("%s", name);
				if (strcmp(name, "1") == 0) {
					ps->data[c].id = 1;
					break;
				}
				else if (strcmp(name, "0") == 0) {
					ps->data[c].id = 0;
					break;
				}
				else {
					printf("输入有误\n");
					scanf("%s", name);
					printf("请重新输入\n");
				}
			}
			else {
				printf("无法进行修改\n");
				scanf("%s", name);
				printf("请重新输入\n");
			}
		}
		Writetxt(ps);
	}
	else {
		printf("无法进行修改\n");
	}
}
//查找用户
int FindUser(UserData* ps) {
	char uname[MAX_NAME];
	printf("请输入你要查询的账号\n");
	scanf("%s", uname);
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		if (strcmp(uname, ps->data[i].name) == 0) {
			if (strcmp(uname, "admin") == 0) {
			}
			else {
				break;
			}
		}
	}
	if (i != ps->size) {
		printf("编号:%d账号:%-20s是否是管理员:%s\n", ps->data[i].quantity, ps->data[i].name, ps->data[i].id == 1 ? "是" : "不是");
		return i;
	}
	else {
		printf("没有这个人\n");
	}
	return -1;
}
//写入用户
void Writetxt(UserData* ps) {
	FILE* fp = fopen("D:\\users.txt", "wt");
	for ( j = 0; j < ps->size; j++)
	{
		ps->data[j].quantity = j + 1;
		fprintf(fp, "size=%d username=%s possword=%s power=%d\n", ps->data[j].quantity, ps->data[j].name, ps->data[j].pwd, ps->data[j].id);
	}
	fclose(fp);
	fp = NULL;
}
//删除用户
void DelUser(UserData* ps) {
	int index = 0;
	index = FindUser(ps);
	if (index != -1) {
		for ( i = index; i < ps->size - 1; i++)
		{
			ps->data[i] = ps->data[i + 1];
			ps->data[i].quantity--;
		}
		ps->size--;
		printf("删除成功\n");
		Writetxt(ps);
	}
	else {
		printf("无法删除没查到\n");
	}
}
//遍历用户
void ShowUser(UserData* ps) {
	for ( i = 0; i < ps->size; i++)
	{
		printf("编号:%d账号:%-20s是否是管理员:%s\n", ps->data[i].quantity, ps->data[i].name, ps->data[i].id == 1 ? "是" : "不是");
	}
}
//导出用户
void ExportUser(UserData* ps) {
	FILE* fp1 = fopen("D:\\exportUsers.txt", "wt");
	for ( i = 0; i < ps->size; i++)
	{
		fprintf(fp1, "size=%d username=%s possword=%s power=%d\n", ps->data[i].quantity, ps->data[i].name, ps->data[i].pwd, ps->data[i].id);
		ps->data[ps->size].quantity = ps->size;
	}
	fclose(fp1);
	fp1 = NULL;
	printf("导出成功\n");
}
//初始化图书数组
void initbook(BooksData* ps) {
	books* p = (books*)malloc(MAX_LEN * sizeof(books));   //使用malloc函数进行开辟空间
	if (p == NULL) {
		exit(0);
	}
	else {
		ps->bdata = p;
		memset(ps->bdata, 0, sizeof(ps->bdata));
		ps->bsize = 0;
		ps->bmaxlen = MAX_LEN;
	}
}
//增加图书空间增容
void capacity(BooksData* ps) {
	books* p = (books*)realloc(ps->bdata, (ps->bmaxlen + MAX_LEN) * sizeof(books));
	if (p == NULL) {
		printf("增容失败\n");
	}
	else {
		ps->bdata = p;
		ps->bmaxlen += MAX_LEN;
		printf("增容图书空间成功\n");
	}
}
//当文件夹为空添加默认图书
void defaultboos(BooksData* ps) {
	ps->bdata[ps->bsize].bid = 1;
	strcpy(ps->bdata[ps->bsize].name, "西游记");
	strcpy(ps->bdata[ps->bsize].author, "吴承恩");
	strcpy(ps->bdata[ps->bsize].press, "人民文学");
	ps->bdata[ps->bsize].Price = 30.5;
	ps->bdata[ps->bsize].quantity = 4;
	ps->bsize++;
	ps->bdata[ps->bsize].bid = 2;
	strcpy(ps->bdata[ps->bsize].name, "三国演义");
	strcpy(ps->bdata[ps->bsize].author, "罗贯中");
	strcpy(ps->bdata[ps->bsize].press, "人民文学");
	ps->bdata[ps->bsize].Price = 33.3;
	ps->bdata[ps->bsize].quantity = 4;
	ps->bsize++;
	Bookwrite(ps);
}
//写入书籍
void Bookwrite(BooksData* ps) {
	FILE* fp = fopen("D:\\books.txt", "wt");
	for ( i = 0; i < ps->bsize; i++)
	{
		fprintf(fp, "bid=%d bookname=%s bookauthor=%s bookpress=%s bookPrice=%lf booksize=%d\n",
			ps->bdata[i].bid, ps->bdata[i].name, ps->bdata[i].author,
			ps->bdata[i].press, ps->bdata[i].Price, ps->bdata[i].quantity);
	}
	fclose(fp);
	fp = NULL;
}
//读取图书
void ReadBook(BooksData* ps) {
	FILE* fp1 = fopen("D:\\books.txt", "rt");
	//当文本不存在的时候注册
	if (fp1 == NULL)
	{
		defaultboos(ps);
	}
	else {
		while (fscanf(fp1, "bid=%d bookname=%s bookauthor=%s bookpress=%s bookPrice=%lf booksize=%d\n",
			&ps->bdata[ps->bsize].bid, ps->bdata[ps->bsize].name, ps->bdata[ps->bsize].author,
			ps->bdata[ps->bsize].press, &ps->bdata[ps->bsize].Price, &ps->bdata[ps->bsize].quantity) != EOF)
		{
			ps->bsize++;
			if (ps->bsize == ps->bmaxlen) {
				capacity(ps);
			}
		}
	}
//	fclose(fp1);
}
//添加图书
void AddBooks(BooksData* ps) {
	char bkname[MAX_BOOKSNAME];
	int a = 0;
	int i = 0;
	printf("请输入你要添加的图书名\n");
	scanf("%s", bkname);
	for (i = 0; i < ps->bsize; i++)
	{
		if (strcmp(bkname, ps->bdata[i].name) == 0) {
			break;
		}
	}
	if (i != ps->bsize) {
		printf("图书已存在\n");
		printf("是否需要添加数量  如果需要输入1其他则退出\n");
		scanf("%s", bkname);
		if (strcmp(bkname, "1") == 0) {
			printf("请输入需要添加几本\n");
			scanf("%d", &a);
			ps->bdata[i].quantity += a;
			printf("添加成功\n");
		}
		else {
			printf("再见\n");
		}
	}
	else {

		strcpy(ps->bdata[ps->bsize].name, bkname);
		printf("请输入你要添加的作者\n");
		scanf("%s", ps->bdata[ps->bsize].author);
		printf("请输入书籍的出版社\n");
		scanf("%s", ps->bdata[ps->bsize].press);
		printf("请输入书籍的价格\n");
		scanf("%lf", &ps->bdata[ps->bsize].Price);
		printf("请输入书籍的数量\n");
		scanf("%d", &ps->bdata[ps->bsize].quantity);
		ps->bdata[ps->bsize].bid = ps->bsize + 1;
		ps->bsize++;;
		capacity(&bo);
	}
	Bookwrite(&bo);
	printf("添加成功\n");
}
//遍历图书
void Showbook(BooksData* ps) {
	for ( i = 0; i < ps->bsize; i++)
	{
		printf("编号:%-3d 书名:%-20s 作者:%-10s 出版社:%-10s 价格:%-4g 数量:%-3d\n",
			ps->bdata[i].bid, ps->bdata[i].name, ps->bdata[i].author,
			ps->bdata[i].press, ps->bdata[i].Price, ps->bdata[i].quantity);
	}
}
//查找图书
int FindBook(BooksData* ps) {
	char fname[MAX_BOOKSNAME];
	printf("请输入你要进行的书名\n");
	scanf("%s", fname);
	int i = 0;
	for (i = 0; i < ps->bsize; i++)
	{
		if (strcmp(fname, ps->bdata[i].name) == 0) {
			break;
		}
	}
	if (i != ps->bsize) {
		printf("编号:%-3d 书名:%-20s 作者:%-10s 出版社:%-10s 价格:%-4g 数量:%-3d\n",
			ps->bdata[i].bid, ps->bdata[i].name, ps->bdata[i].author,
			ps->bdata[i].press, ps->bdata[i].Price, ps->bdata[i].quantity);
		return i;
	}
	else {
		printf("库中没有此书\n");
		return -1;
	}
}
//删除图书
void DelBook(BooksData* ps) {
	int index = 0;
	char dname[MAX_BOOKSNAME];
	int number = 0;
	index = FindBook(&bo);
	if (index == -1) {
		printf("无法进行删除\n");
	}
	else {
		for ( i = index; i < ps->bsize - 1; i++)
		{
			while (1)
			{
				printf("请输入  <1:表示数量>  or <2:表示全部>  其他则重新输入\n");
				scanf("%s", dname);
				if (strcmp(dname, "1") == 0) {
					printf("请输入你要删除的数量\n");
					scanf("%d", &number);
					ps->bdata[i].quantity -= number;
					if (ps->bdata[i].quantity <= 0) {
						printf("此库中没有这么多数量已帮你全部删除\n");
						ps->bdata[i] = ps->bdata[i + 1];
						ps->bdata[i].bid--;
						ps->bsize--;
						goto del;
					}
					else {
						goto del;
					}
				}
				else if (strcmp(dname, "2") == 0) {
					ps->bdata[i] = ps->bdata[i + 1];
					ps->bdata[i].bid--;
					ps->bsize--;
				}
				else {
					printf("输入有误请重新输入\n");
					scanf("%s", dname);
				}
			}
		}
	del:
		printf("删除成功\n");
		Bookwrite(&bo);
	}
}
//修改图书
void ModifyBook(BooksData* ps) {
	int index = 0;
	int a = 0;
	index = FindBook(&bo);
	if (index == -1) {
		printf("无法进行修改\n");
	}
	else {
		do
		{
			printf("0:退出   1:修改图书名   2:修改作者 3:修改出版社  4:修改图书数量  5:修改图书价格\n");
			scanf("%d", &a);
			switch (a)
			{
			case 0:a = 0; break;
			case 1:
				printf("请输入新的图书名\n");
				scanf("%s", ps->bdata[index].name);
				break;
			case 2:
				printf("请输入新的作者名\n");
				scanf("%s", ps->bdata[index].author);
				break;
			case 3:
				printf("请输入新的出版社\n");
				scanf("%s", ps->bdata[index].press);
				break;
			case 4:
				printf("请输入新的数量\n");
				scanf("%d", &ps->bdata[index].quantity);
				break;
			case 5:
				printf("请输入新的价格\n");
				scanf("%lf", &ps->bdata[index].Price);
				break;
			default:printf("请输入正确的序号\n");
				break;
			}
			printf("修改成功\n");
		} while (a);
	}
	Bookwrite(&bo);
}
//导出图书
void exportbook(BooksData* ps) {
	FILE* fp1 = fopen("D:\\books2.txt", "wt");
	for ( i = 0; i < ps->bsize; i++)
	{
		fprintf(fp1, "bid=%d bookname=%s bookauthor=%s bookpress=%s bookPrice=%lf booksize=%d\n",
			ps->bdata[i].bid, ps->bdata[i].name, ps->bdata[i].author,
			ps->bdata[i].press, ps->bdata[i].Price, ps->bdata[i].quantity);
	}
	fclose(fp1);
	fp1 = NULL;
	printf("导出成功\n");
}
//普通用户修改个人信息
void MdPtUs(UserData* ps, int* i) {
	char mname[5];
	while (1)
	{
		printf("2为<密码> 其他则输入错误\n");
		scanf("%4s", mname);
		if (strcmp(mname, "2") == 0) {
			printf("请输入你的新密码\n");
			scanf("%s", ps->data[*i].pwd);
			Writetxt(ps);
			break;
		}
		else
		{
			printf("输入的选项有误\n");
		}
	}
}
//借阅图书
void Borrow(UserData* ps, BooksData* p, int* i, BwData* pe) {
	char Jname[MAX_BOOKSNAME];
	Showbook(p);
	printf("请输入你要借阅什么图书\n");
	int j = 0;
	scanf("%s", Jname);
	for (j = 0; j < p->bsize; j++)
	{
		if (strcmp(p->bdata[j].name, Jname) == 0) {
			break;
		}
	}
	if (j != p->bsize) {
		if (p->bdata[j].quantity <= 0)
		{
			printf("无法借阅图书数量不足\n");
		}
		else {
			p->bdata[j].quantity--;
			strcpy(pe->Bwdata[pe->Bwsize].username, ps->data[*i].name);
			strcpy(pe->Bwdata[pe->Bwsize].Bwbook, p->bdata[j].name);
			pe->Bwdata[pe->Bwsize].Bid = 0;
			pe->Bwsize++;
			Jyincrease(pe);					   //判断需要增容实现函数
			wirteread(pe);						//借阅写入函数
			Bookwrite(p);						//图书写入函数
		}
	}
	else {
		printf("没有这个书籍\n");
	}
}
//写入借阅信息
void wirteread(BwData* pe) {
	FILE* fp = fopen("D:\\borrow.txt", "wt");
	int i = 0;
	for (i = 0; i < pe->Bwsize; i++)
	{
		fprintf(fp, "Jyuser=%s Jybookname=%s key=%d\n", pe->Bwdata[i].username, pe->Bwdata[i].Bwbook, pe->Bwdata[i].Bid);
	}
	fclose(fp);
	fp = NULL;
}
//读取借阅资料
void readJy(BwData* pe) {
	FILE* fp = fopen("D:\\borrow.txt", "rt");
	if (fp == NULL) {
		fp = fopen("D:\\borrow.txt", "wt");
		fclose(fp);
		fp = NULL;
	}
	else {
		while (fscanf(fp, "Jyuser=%s Jybookname=%s key=%d\n", pe->Bwdata[pe->Bwsize].username, pe->Bwdata[pe->Bwsize].Bwbook, &pe->Bwdata[pe->Bwsize].Bid) != EOF)
		{
			pe->Bwsize++;
			if (pe->Bwmaxlen = pe->Bwsize)
			{
				Jyincrease(pe);
			}
		}
	}
	
}
//归还图书
void returnbook(UserData* ps, int* i, BooksData* p, BwData* pe) {
	int j = 0;
	char gname[MAX_BOOKSNAME];
	printf("请输入归还的图书\n");
	scanf("%s", gname);
	for (j = 0; j < pe->Bwsize; j++)
	{
		if (strcmp(pe->Bwdata[j].username, ps->data[*i].name) == 0) {
			if (strcmp(pe->Bwdata[j].Bwbook, gname) == 0) {
				if (pe->Bwdata[j].Bid == 0) {
					break;
				}
			}
		}
	}
	if (pe->Bwsize != j) {
		pe->Bwdata[j].Bid = 1;
		p->bdata[j].quantity++;
		printf("归还成功\n");
	}
	else {
		printf("未借过此书\n");
	}
	wirteread(pe);
	Bookwrite(p);
}
//借阅记录
void recordbook(UserData* ps, int* i, BooksData* p, BwData* pe) {
	int z = 0;
	for (z = 0; z < pe->Bwsize; z++) {
		if (strcmp(ps->data[*i].name, pe->Bwdata[z].username) == 0) {
			printf("姓名:%-10s 图书名:%-20s 是否归还:%-4s\n", pe->Bwdata[z].username, pe->Bwdata[z].Bwbook, pe->Bwdata[z].Bid == 1 ? "已归还" : "未归还");
		}
	}
}

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值