C语言程序设计:图书管理系统

1. 管理员功能

  1. 添加、删除、修改、查找、遍历、导出(图书)
  2. 添加、删除、修改、查找、遍历、导出(用户)
  3. 退出

2. 会员功能

  1. 借阅、归还(图书)
  2. 查看借阅记录
  3. 修改个人信息
  4. 退出

3. 代码实现和效果图

 

欢迎关注公众号:seeCode 回复C语言进行获取代码

部分代码:

结构体定义

// 用户结构体
typedef struct username {
	int uid; //用户id
	char uname[STRNAMELEN]; //用户名
	char upass[STRNAMELEN]; //用户密码
	int usign; //用户标记 0代表普通用户  1代表管理员
}user;

//用户结构体数组
typedef struct userArray {
	user* uArr; //用户结构体数组
	int uSub; //用户结构体数组当前下标
	int uMaxLen;  //用户结构体数组当前最大容量
}userArr;

//图书结构体
typedef struct books {
	int id; //图书编号
	char title[BOOKNAME]; //图书名字
	char autor[BOOKAUTOR]; //图书作者
	char press[BOOKPRESS]; //出版社
	int much; //数量
}book;

//图书结构体数组
typedef struct booksArray {
	book* bArr; //图书结构体指针
	int bSub; //图书结构体数组当前下标
	int bMaxLen; //图书结构体数组当前最大容量
}bookArr;

//借阅信息结构体
typedef struct bookRecord {
	char reName[STRNAMELEN]; //借阅人姓名
	char reBook[BOOKNAME]; //书籍
	char re[5]; //是否归还
}record;

typedef struct strRecord {
	record* reArr;
	int reSub;
	int reMaxLen;
}reStr;

//遍历结构体
typedef struct pl {
	char ch[STRCHLEN];
	char fh[STRFHLEN];
}pl;

typedef struct plArr {
	pl o[BLSTRLEN]; //遍历结构体数组
	int i;	 //全局变量-下标
}pArr;

图书操作

//删除图书
void delBook(bookArr* p) {
	char b1[30];
	int i = 0;
	system("cls");
	printf("请输入你要删除的书名>");
	scanf("%11s", b1);
	for (i = 0; i < p->bSub; ++i) {
		if (strcmp(b1, p->bArr[i].title) == 0) {
			for (; i < p->bSub; ++i) {
				p->bArr[i] = p->bArr[i + 1];
			}
			p->bSub--;
		}
	}
}
//导出图书
void expBook(bookArr* p) {
	int i = 0;
	FILE* fp = fopen("D:\\bk.txt", "wt");

	if (fp == NULL) {
		printf("程序出错!");
	}
	else {
		for (i = 0; i < p->bSub; ++i) {
			fprintf(fp, "编号:%d 书名:%s 作者:%s 出版社:%s 数量:%d\n", p->bArr[i].id, p->bArr[i].title, p->bArr[i].autor, p->bArr[i].press, p->bArr[i].much);
		}
	}
	fclose(fp);
	fp = NULL;
	printf("导出成功\n");
}
//遍历图书
void ergBook(bookArr* p) {
	int i = 0;
	system("cls");
	for (i = 0; i < p->bSub; ++i) {
		printf("编号:%d 书名:%s 作者:%s 出版社:%s 数量%d\n", p->bArr[i].id, p->bArr[i].title, p->bArr[i].autor, p->bArr[i].press, p->bArr[i].much);
	}
}
//查找图书
void lookupBook(bookArr* p) {
	int i = 0;
	char bookName[30];
	system("cls");
	printf("请输入要查找的书籍>");
	scanf("%s", bookName);
	for (i = 0; i < p->bSub; ++i) {
		if (strcmp(bookName, p->bArr[i].title) == 0) {
			printf("编号:%d 书名:%s 作者:%s 出版社:%s 数量%d", p->bArr[i].id, p->bArr[i].title, p->bArr[i].autor, p->bArr[i].press, p->bArr[i].much);
			break;
		}
	}
	if (i == p->bSub) {
		printf("不存在该书\n");
	}
}
//修改图书
void modifyBook(bookArr* p) {
	int num = 0, i = 0;
	char bookName[30];
	system("cls");
	printf("请输入要修改的书名>");
	scanf("%s", bookName);
	for (i = 0; i < p->bSub; ++i) {
		if (strcmp(bookName, p->bArr[i].title) == 0) {
			printf("请输入要修改后的数量\n");
			scanf("%d", &num);
			p->bArr[i].much = num;
			break;
		}
	}
	if (i == p->bSub) {
		printf("不存在该书\n");
	}
	writeBook(p);
}
//添加图书
void regBook(bookArr* p) {
	int i = 0;
	int num = 0;
	char bookName[30];
	system("cls");
	printf("请输入书名>");
	scanf("%s", bookName);
	for (i = 0; i < p->bSub; ++i) {
		if (strcmp(bookName, p->bArr[i].title) == 0) {
			printf("输入要添加的数量\n");
			scanf("%d", &num);
			p->bArr[i].much += num;
			break;
		}
	}
	if (i == p->bSub) {
		p->bArr[i].id = p->bArr[i - 1].id + 1;
		strcpy(p->bArr[i].title, bookName);
		printf("请输入作者>");
		scanf("%s", p->bArr[i].autor);
		printf("请输入出版社>");
		scanf("%s", p->bArr[i].press);
		printf("请输入数量>");
		scanf("%d", &p->bArr[i].much);
		p->bSub++;
	}
	writeBook(p);
}
//写入图书
void writeBook(bookArr* p) {
	int i = 0;
	FILE* fp = fopen("D:\\book.txt", "wt");
	if (fp == NULL) {
		printf("程序出错\n");
		exit(0);
	}
	else {
		for (i = 0; i < p->bSub; ++i) {
			fprintf(fp, "id:%d title:%s autor:%s press:%s much:%d\n", p->bArr[i].id, p->bArr[i].title, p->bArr[i].autor, p->bArr[i].press, p->bArr[i].much);
		}
	}
	fclose(fp);
	fp = NULL;
}

 4. 说明

这是自己第一次写这种项目,所以没有任何经验在方法的取名上面非常的乱而且逻辑也混乱,如果有机会的话我会在更改一下内容的

在运行这个程序的时候需要在D盘下创建三个文件,一个是user.txt文件,一个是book.txt文件,一个是record.txt文件

这个程序中,我设定了不管是何种管理员都禁止修改admin管理员的权限和密码(除了自己),具体功能需要大伙自己发现了

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐