C语言程序设计:图书管理系统(附代码)
C语言程序设计:图书管理系统1. 管理员功能添加、删除、修改、查找、遍历、导出(图书)添加、删除、修改、查找、遍历、导出(用户)退出2. 会员功能借阅、归还(图书)查看借阅记录修改个人信息退出3. 代码实现和效果图#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <stdio.h>#include <
·
C语言程序设计:图书管理系统
1. 管理员功能
- 添加、删除、修改、查找、遍历、导出(图书)
- 添加、删除、修改、查找、遍历、导出(用户)
- 退出
2. 会员功能
- 借阅、归还(图书)
- 查看借阅记录
- 修改个人信息
- 退出
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管理员的权限和密码(除了自己),具体功能需要大伙自己发现了
更多推荐
已为社区贡献2条内容
所有评论(0)