提示信息
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 ? "已归还" : "未归还");
}
}
}