C语言实现的图书馆里系统,用到了结构体相关知识,代码如下:
#include <stdio.h>
#include <string.h>
#include <time.h>
typedef struct StuInfo {
char ID[11];
char Faculty[32];
char Profession[32];
char Name[32];
char Sex[8];
char Phone[12];
char Passwd[32];
char Email[32];
char BookList[3][64];
int flag;
} STUINFO;
typedef struct BookInfo {
char ID[7];
char Name[64];
char Author[32];
float Price;
char PubHouse[64];
char PubDate[64];
char BookIntro[1024];
int Count;
char Index[64];//书架
char BrowDate[64];
char RetDate[64];//还书日期
int ReBrowCount;//续借次数
int BrowCount;//借书次数
} BOOKINFO;
typedef struct BookManager {
char ID[11];
char Name[64];
char Passwd[32];
char Email[32];
} BOOKMANAGER;
typedef struct BroInfo {
char ID[11];
char Name[32];
char Profess[64];
char ReDate[64];
} BROINFO;
typedef struct BookInfoCount {
char Name[64];
int count;
} BOOKINFOCOUNT;
typedef struct ProfessBookInfo {
char Profession[32];
BOOKINFOCOUNT Book[1024];
} PROFESSBOOKINFO;
STUINFO g_StuInfo[1024];
BOOKINFO g_BookInfo[1024];
BROINFO g_BroInfo[1024];
BOOKMANAGER g_BookManager[1024];
PROFESSBOOKINFO g_ProfessBookInfo[1024];
char g_StuID[11];
char g_ManaID[11];
int g_BookCount;
void UpdateStuInfo();
int CheckBookTime(int year, int month, int day, int hour, int min);
void UpdateBookInfo();
void Sort();
int CalSumDays(int year, int month, int day);
int CheckEmail(char *email);
void QueryAllBookBorrowInfo();
void QueryStuBorrowInfo();
int CheckBookTime(int year, int month, int day, int hour, int min)//验证输入的借书时间格式是否正确
{
if (month < 1 || month > 12)
{
printf("输入错误!\n");
return -1;
}
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
if (day < 1 || day > 31)
{
printf("输入错误!\n");
return -1;
}
}
if (month == 4 || month == 6 || month == 9 || month == 11)
{
if (day < 1 || day > 30)
{
printf("输入错误!\n");
return -1;
}
}
if (month == 2)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
if (day < 1 || day > 29)
{
printf("输入错误!\n");
return -1;
}
}
else
{
if (day < 1 || day > 28)
{
printf("输入错误!\n");
return -1;
}
}
}
if (hour < 0 || hour > 23)
{
printf("输入错误\n");
return -1;
}
if (min < 0 || min > 59)
{
printf("输入错误\n");
return -1;
}
return 0;
}
int ManagerLogin()//管理员登陆
{
char t_ID[32] = {0};
char t_Passwd[32] = {0};
int i = 0;
FILE *fp = NULL;
printf("\t\t\t\t管理员登录\n");
printf("\n\t\t\t\t请输入账号:");
scanf("%s", t_ID);
printf("\n\t\t\t\t请输入密码:");
scanf("%s", t_Passwd);
fp = fopen("Manager.txt", "r");
if (fp == NULL)
{
printf("文件不存在!\n");
return -1;
}
while (strlen(g_BookManager[i].ID) != 0)//当存在管理员ID时
{
if (!strcmp(t_ID, g_BookManager[i].ID) && !strcmp(t_Passwd, g_BookManager[i].Passwd))//密码和ID都对
{
strcpy(g_ManaID, g_BookManager[i].ID);//将此ID存入全局变量
fclose(fp);
return 0;
}
i++;
}
fclose(fp);
return -1;
}
int LoadManagerInfo()//将manager文件里的内容存入到数组里
{
int i = 0;
FILE *fp = fopen("Manager.txt", "r");
if (fp == NULL)
{
printf("文件不存在!\n");
return -1;
}
char str[1024] = {0};
while(fgets(str, 1024, fp))//fgets读取一行内容
{
str[strlen(str)-1] = '\0';//方便解析字符串,去掉换行符
sscanf(str, "%s %s %s %s", g_BookManager[i].ID, g_BookManager[i].Name, g_BookManager[i].Passwd, g_BookManager[i].Email);
i++;
memset(str, 0, 1024);
}
fclose(fp);
return 0;
}
int LoadBrowInfo()
{
int i = 0;
FILE *fp = fopen("BrowRecord.txt", "r");
if (fp == NULL)
{
printf("文件不存在!\n");
return -1;
}
char str[1024] = {0};
while(fgets(str, 1024, fp))
{
str[strlen(str)-1] = '\0';
sscanf(str, "%s %s %s %s", g_BroInfo[i].ID, g_BroInfo[i].Name, g_BroInfo[i].Profess, g_BroInfo[i].ReDate);
i++;
memset(str, 0, 1024);
}
fclose(fp);
return 0;
}
int LoadStuInfo()
{
FILE *fp = NULL;
int i = 0;
fp = fopen("Student.txt", "r");
if (fp == NULL)
{
printf("文件不存在!\n");
return -1;
}
while(fscanf(fp, "%s %s %s %s %s %s %s %s %s %s %s %d\n", g_StuInfo[i].ID, g_StuInfo[i].Faculty, g_StuInfo[i].Profession, g_StuInfo[i].Name, g_StuInfo[i].Sex, g_StuInfo[i].Phone, g_StuInfo[i].Passwd, g_StuInfo[i].Email, g_StuInfo[i].BookList[0], g_StuInfo[i].BookList[1], g_StuInfo[i].BookList[2], &g_StuInfo[i].flag) == 12)//12是为了结束读取文件
{
i++;
}
fclose(fp);
return 0;
}
int CheckIndex(char *index)//检查是否同一个书架放了2本书
{
int i = 0;
for (i = 0; i < g_BookCount; i++)
{
if (strcmp(index, g_BookInfo[i].Index) == 0)//如果相同,返回-1
{
return -1;
}
}
return 0;
}
int CheckSameID(char *ID)//检查书是否用了同一个编号
{
int i = 0;
for (i = 0; i < g_BookCount; i++)
{
if (strcmp(ID, g_BookInfo[i].ID) == 0)
{
return -1;
}
}
return 0;
}
void AddBook()//添加图书
{
int year, month, day;
int i = 0;
while(1)
{
printf("请输入图书编号: ");
scanf("%s", g_BookInfo[g_BookCount].ID);//增加书的编号
if (strlen(g_BookInfo[g_BookCount].ID) != 7)//判断编号长度是否为6位
{
printf("编号格式不正确!\n");
continue;
}
if (CheckSameID(g_BookInfo[g_BookCount].ID) == -1)//判断是否用了同一个ID
{
printf("图书编号已存在!\n");
continue;
}
break;
}
printf("请输入图书名称: ");
scanf("%s", g_BookInfo[g_BookCount].Name);
printf("请输入图书作者: ");
scanf("%s", g_BookInfo[g_BookCount].Author);
printf("请输入图书价格: ");
scanf("%f", &g_BookInfo[g_BookCount].Price);
printf("请输入图书出版社: ");
scanf("%s", g_BookInfo[g_BookCount].PubHouse);
while(1)
{
printf("请输入图书出版日期: ");
printf("年 : ");
scanf("%d", &year);
printf("月 : ");
scanf("%d", &month);
printf("日 : ");
scanf("%d", &day);
if (-1 == CheckBookTime(year, month, day, 5, 5))
{
continue;
}
sprintf(g_BookInfo[g_BookCount].PubDate, "%d年%d月%d日", year, month, day);
break;
}
printf("请输入图书简介: ");
scanf("%s", g_BookInfo[g_BookCount].BookIntro);
printf("请输入图书数量: ");
scanf("%d", &g_BookInfo[g_BookCount].Count);
while(1)
{
int row, col;
printf("请输入图书书架位置: \n");
printf("排: ");
scanf("%d", &row);
printf("列: ");
scanf("%d", &col);
sprintf(g_BookInfo[g_BookCount].Index, "%d排%d列", row, col);
if (CheckIndex(g_BookInfo[g_BookCount].Index) == -1)//判断书架位置
{
printf("书架位置已经有书!\n");
continue;
}
break;
}
strcpy(g_BookInfo[g_BookCount].BrowDate, "xx");//将借书世界显示一下
strcpy(g_BookInfo[g_BookCount].RetDate, "xx");
g_BookInfo[g_BookCount].ReBrowCount = 0;//续借次数为0
g_BookInfo[g_BookCount].BrowCount = 0;//借书次数也为0
g_BookCount++;
printf("添加成功!\n");
UpdateBookInfo();
}
int DelBook()
{
int i = 0;
int j = 0;
char t_BookID[7] = {0};
printf("请输入要删除的图书ID: ");
scanf("%s", t_BookID);
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(t_BookID, g_BookInfo[i].ID))//判断是否有这本书
{
if (g_BookInfo[i].BrowCount != 0)//如果这本书的借书次数不为0
{
printf("书已经借出!不能删除\n");
return 0;
}
for (j = i; strlen(g_BookInfo[j].ID) != 0; j++)//后边的书的信息覆盖掉删除图书的信息
{
g_BookInfo[j] = g_BookInfo[j+1];
}
g_BookCount--;
UpdateBookInfo();
printf("删除成功!\n\n");
return 1;
}
}
printf("ID不存在!\n");
return 0;
}
void ModifyBook()
{
char t_BookID[7] = {0};
printf("请输入要修改的图书ID: ");
scanf("%s", t_BookID);
int i = 0;
int sel = 0;
int t_Count = 0;
char str[1024] = {0};
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(t_BookID, g_BookInfo[i].ID))
{
if (g_BookInfo[i].BrowCount == 0)//在这本书并没有借走的情况,可以修改三个选项
{
printf("\t\t\t\t请问你要修改什么 ?\n");
printf("1、图书简介\n");
printf("2、图书总数量\n");
printf("3、图书书架位置\n");
printf("4、返回\n");
printf("请输入: ");
scanf("%d", &sel);
if (sel == 1)
{
printf("请输入修改的内容:\n");
scanf("%s", g_BookInfo[i].BookIntro);
}
else if (sel == 2)
{
printf("请输入修改的总数量:\n");
scanf("%d", &t_Count);
if (t_Count < 0)
{
printf("数量设置不正确!\n");
return;
}
g_BookInfo[i].Count = t_Count;
}
else if (sel == 3)
{
printf("请输入修改的书架位置:\n");
int row, col;
printf("排: ");
scanf("%d", &row);
printf("列: ");
scanf("%d", &col);
sprintf(str, "%d排%d列", row, col);
if (CheckIndex(str) == -1)
{
printf("书架位置已经有书!\n");
return;
}
strcpy(g_BookInfo[i].Index, str);//修改书架位置
}
else
{
return;
}
}
else//当此书被别人借走的时候
{
printf("请输入修改的总数量:\n");
scanf("%d", &t_Count);
if (t_Count < 0)
{
printf("数量设置不正确!\n");
return;
}
g_BookInfo[i].Count = t_Count;
}
printf("修改成功!\n\n");
UpdateBookInfo();
break;
}
}
}
void QueryBook()//查询图书
{
int sel = 0;
char str[512] = {0};
int flag = 0;
int i = 0;
printf("请问你要根据什么查询? (1-出版社,2-书名, 3-返回): ");
scanf("%d", &sel);
if (sel == 1)
{
printf("请输入出版社名称: ");
scanf("%s", str);
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(str, g_BookInfo[i].PubHouse))//当查询到这本书的时候
{
printf("编号: %s\n", g_BookInfo[i].ID);
printf("名称: %s\n", g_BookInfo[i].Name);
printf("作者: %s\n", g_BookInfo[i].Author);
printf("价格: %.2f\n", g_BookInfo[i].Price);
printf("出版社: %s\n", g_BookInfo[i].PubHouse);
printf("出版日期: %s\n", g_BookInfo[i].PubDate);
printf("简介: %s\n", g_BookInfo[i].BookIntro);
printf("数量: %d\n", g_BookInfo[i].Count);
printf("位置: %s\n", g_BookInfo[i].Index);
printf("借出日期: %s\n", g_BookInfo[i].BrowDate);
printf("归还日期: %s\n", g_BookInfo[i].RetDate);
printf("续借次数: %d\n", g_BookInfo[i].ReBrowCount);
printf("借书次数: %d\n", g_BookInfo[i].BrowCount);
flag = 1;
}
}
}
else if (sel == 2)
{
printf("请输入图书名称: ");
scanf("%s", str);
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(str, g_BookInfo[i].Name))
{
printf("编号: %s\n", g_BookInfo[i].ID);
printf("名称: %s\n", g_BookInfo[i].Name);
printf("作者: %s\n", g_BookInfo[i].Author);
printf("价格: %.2f\n", g_BookInfo[i].Price);
printf("出版社: %s\n", g_BookInfo[i].PubHouse);
printf("出版日期: %s\n", g_BookInfo[i].PubDate);
printf("简介: %s\n", g_BookInfo[i].BookIntro);
printf("数量: %d\n", g_BookInfo[i].Count);
printf("位置: %s\n", g_BookInfo[i].Index);
printf("借出日期: %s\n", g_BookInfo[i].BrowDate);
printf("归还日期: %s\n", g_BookInfo[i].RetDate);
printf("续借次数: %d\n", g_BookInfo[i].ReBrowCount);
printf("借书次数: %d\n", g_BookInfo[i].BrowCount);
flag = 1;
}
}
}
else
{
return;
}
if (flag == 0)
{
printf("没有此书信息!\n");
}
}
void ManagerBooks()//图书管理
{
int sel = 0;
while(1)
{
system("cls");
printf("\t\t\t请选择操作\n");
printf("\t\t\t1、增加图书\n");
printf("\t\t\t2、删除图书\n");
printf("\t\t\t3、修改图书\n");
printf("\t\t\t4、查询图书\n");
printf("\t\t\t5、返回\n");
printf("\n\t\t\t请输入你的选择:");
scanf("%d", &sel);
system("cls");//清屏
switch (sel)
{
case 1:
AddBook();
break;
case 2:
DelBook();
break;
case 3:
ModifyBook();
break;
case 4:
QueryBook();
break;
case 5:
return;
default:
break;
}
system("pause");//暂停程序
}
}
void QueryAllBookBorrowInfo()//查询所有图书的借阅情况
{
int i = 0;
for (i = 0; i < g_BookCount; i++)
{
printf("编号: %s\n", g_BookInfo[i].ID);
printf("名称: %s\n", g_BookInfo[i].Name);
printf("作者: %s\n", g_BookInfo[i].Author);
printf("价格: %.2f\n", g_BookInfo[i].Price);
printf("出版社: %s\n", g_BookInfo[i].PubHouse);
printf("出版日期: %s\n", g_BookInfo[i].PubDate);
printf("简介: %s\n", g_BookInfo[i].BookIntro);
printf("数量: %d\n", g_BookInfo[i].Count);
printf("位置: %s\n", g_BookInfo[i].Index);
printf("借出日期: %s\n", g_BookInfo[i].BrowDate);
printf("归还日期: %s\n", g_BookInfo[i].RetDate);
printf("续借次数: %d\n", g_BookInfo[i].ReBrowCount);
printf("借书次数: %d\n", g_BookInfo[i].BrowCount);
//printf("%s\t\t%s\t\t%d\t\t%d\n", g_BookInfo[i].ID, g_BookInfo[i].Name, g_BookInfo[i].BrowCount, g_BookInfo[i].Count);
}
}
void QueryStuBorrowInfo()//查询借阅图书的学生信息
{
int sel = 0;
char str[64] = {0};
char str1[64] = {0};
int i = 0;
int j = 0;
int flag = 0;
int flag1 = 0;
system("cls");
while(1)
{
system("cls");
printf("1、根据学生姓名 \n");
printf("2、根据书名 \n");
printf("3、根据书名和学生姓名 \n");
printf("4、返回 \n");
printf("请问你根据什么查询: ");
scanf("%d", &sel);
system("cls");
if (sel == 1)
{
printf("请输入学生姓名: ");
scanf("%s", str);
for (i = 0; strlen(g_StuInfo[i].Name) != 0; i++)
{
if (!strcmp(str, g_StuInfo[i].Name))
{
printf("%s\t%s\t%s\t%s\n", g_StuInfo[i].Name, g_StuInfo[i].BookList[0], g_StuInfo[i].BookList[1], g_StuInfo[i].BookList[2]);
flag = 1;
}
}
}
else if (sel == 2)
{
printf("请输入书名: ");
scanf("%s", str);
for (j = 0; j < g_BookCount; j++)
{
if (!strcmp(g_BookInfo[j].Name, str))
{
memset(str, 0, sizeof(str));
strcpy(str, g_BookInfo[j].ID);
flag1 = 1;
break;
}
}
if (flag1 == 0)
{
printf("没有此书名!\n");
continue;
}
for (i = 0; strlen(g_StuInfo[i].Name) != 0; i++)
{
if (!strcmp(str, g_StuInfo[i].BookList[0]) || !strcmp(str, g_StuInfo[i].BookList[1]) || !strcmp(str, g_StuInfo[i].BookList[2]))
{
printf("编号: %s\n", g_StuInfo[i].ID);
printf("学院: %s\n", g_StuInfo[i].Faculty);
printf("专业: %s\n", g_StuInfo[i].Profession);
printf("姓名: %s\n", g_StuInfo[i].Name);
printf("性别: %s\n", g_StuInfo[i].Sex);
printf("电话: %s\n", g_StuInfo[i].Phone);
printf("密码: %s\n", g_StuInfo[i].Passwd);
printf("邮箱: %s\n", g_StuInfo[i].Email);
printf("书单: 《%s》,《%s》,《%s》\n", g_StuInfo[i].BookList[0], g_StuInfo[i].BookList[1], g_StuInfo[i].BookList[2]);
flag = 1;
}
}
}
else if (sel == 3)
{
printf("请输入学生姓名: ");
scanf("%s", str);
printf("请输入书名: ");
scanf("%s", str1);
for (j = 0; j < g_BookCount; j++)
{
if (!strcmp(g_BookInfo[j].Name, str1))
{
memset(str1, 0, sizeof(str1));
strcpy(str1, g_BookInfo[j].ID);
flag1 = 1;
}
}
if (flag1 == 0)
{
printf("没有此书名!\n");
continue;
}
for (i = 0; strlen(g_StuInfo[i].Name) != 0; i++)
{
if (!strcmp(str, g_StuInfo[i].Name) && (!strcmp(str1, g_StuInfo[i].BookList[0]) || !strcmp(str1, g_StuInfo[i].BookList[1]) || !strcmp(str1, g_StuInfo[i].BookList[2])))
{
printf("%s\t%s\t%s\t%s\n", g_StuInfo[i].Name, g_StuInfo[i].BookList[0], g_StuInfo[i].BookList[1], g_StuInfo[i].BookList[2]);
flag = 1;
}
}
}
else if (sel == 4)
{
return;
}
else
{
continue;
}
if (flag == 0)
{
printf("没有此信息! \n");
}
if(sel != 4)
system("pause");
}
}
void QueryOverDataBook()//查询超期未还的图书情况
{
int i = 0;
int SumDay = 0;
int SumDay1 = 0;
int year, month, day, min, hour;
int flag = 0;
time_t tt = time(NULL);//获取系统现在的时间
struct tm* t= localtime(&tt);
SumDay = CalSumDays(t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);//计算一共有多少天,现在的时间
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(g_BookInfo[i].BrowDate, "xx"))
continue;
sscanf(g_BookInfo[i].BrowDate, "%d年%d月%d日%d时%d分", &year, &month, &day, &hour, &min);
SumDay1 = CalSumDays(year, month, day);//借书
if (SumDay1 - SumDay > 30)
{
flag = 1;
printf("编号: %s\n", g_BookInfo[i].ID);
printf("名称: %s\n", g_BookInfo[i].Name);
printf("作者: %s\n", g_BookInfo[i].Author);
printf("价格: %.2f\n", g_BookInfo[i].Price);
printf("出版社: %s\n", g_BookInfo[i].PubHouse);
printf("出版日期: %s\n", g_BookInfo[i].PubDate);
printf("简介: %s\n", g_BookInfo[i].BookIntro);
printf("数量: %d\n", g_BookInfo[i].Count);
printf("位置: %s\n", g_BookInfo[i].Index);
printf("借出日期: %s\n", g_BookInfo[i].BrowDate);
printf("归还日期: %s\n", g_BookInfo[i].RetDate);
printf("续借次数: %d\n", g_BookInfo[i].ReBrowCount);
printf("借书次数: %d\n", g_BookInfo[i].BrowCount);
//printf("%s %s %s %.2f %s %s %s %d %s %s %s %d %d\n", g_BookInfo[i].ID, g_BookInfo[i].Name, g_BookInfo[i].Author, g_BookInfo[i].Price, g_BookInfo[i].PubHouse, g_BookInfo[i].PubDate, g_BookInfo[i].BookIntro, g_BookInfo[i].Count, g_BookInfo[i].Index, g_BookInfo[i].BrowDate, g_BookInfo[i].RetDate, g_BookInfo[i].ReBrowCount, g_BookInfo[i].BrowCount);
}
}
if (flag == 1)
{
printf("没有超期未还的图书\n");
}
}
void QueryOverDataStu(int fl)//查询超期未还学生名单
{
int i = 0, j = 0;
int SumDay = 0;
int SumDay1 = 0;
int year, month, day;
int flag = 0;
time_t tt = time(NULL);
struct tm* t= localtime(&tt);
SumDay = CalSumDays(t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(g_BookInfo[i].BrowDate, "xx"))
continue;
sscanf(g_BookInfo[i].BrowDate, "%d年%d月%d日", &year, &month, &day);
SumDay1 = CalSumDays(year, month, day);
if (SumDay - SumDay1 > 30)
{
for (j = 0; strlen(g_StuInfo[j].Name) != 0; j++)//循环学生姓名
{
if (!strcmp(g_BookInfo[i].ID, g_StuInfo[j].BookList[0]) || !strcmp(g_BookInfo[i].ID, g_StuInfo[j].BookList[1]) || !strcmp(g_BookInfo[i].ID, g_StuInfo[j].BookList[2]))
{//如果这个学生有一本超期了
g_StuInfo[j].flag = 1;
if (fl == 0)
{
printf("编号: %s\n", g_StuInfo[i].ID);
printf("学院: %s\n", g_StuInfo[i].Faculty);
printf("专业: %s\n", g_StuInfo[i].Profession);
printf("姓名: %s\n", g_StuInfo[i].Name);
printf("性别: %s\n", g_StuInfo[i].Sex);
printf("电话: %s\n", g_StuInfo[i].Phone);
printf("密码: %s\n", g_StuInfo[i].Passwd);
printf("邮箱: %s\n", g_StuInfo[i].Email);
printf("书单: 《%s》,《%s》,《%s》\n", g_StuInfo[i].BookList[0], g_StuInfo[i].BookList[1], g_StuInfo[i].BookList[2]);
}
//printf("%s %s %s %s %s %s %s %s %s %s %s %d\n", g_StuInfo[j].ID, g_StuInfo[j].Faculty, g_StuInfo[j].Profession, g_StuInfo[j].Name, g_StuInfo[j].Sex, g_StuInfo[j].Phone, g_StuInfo[j].Passwd, g_StuInfo[j].Email, g_StuInfo[j].BookList[0], g_StuInfo[j].BookList[1], g_StuInfo[j].BookList[2], g_StuInfo[j].flag);
flag = 1;
}
}
}
}
if (flag == 0)
{
printf("没有超期未还的学生\n");
}
}
void QueryBorrow()//借阅管理
{
int sel = 0;
system("cls");
while(1)
{
system("cls");
printf("\t\t\t请选择操作\n");
printf("\t\t\t1、查询所有图书借阅情况\n");
printf("\t\t\t2、查询借阅图书的学生信息\n");
printf("\t\t\t3、查询超期未还图书情况\n");
printf("\t\t\t4、查询超期未还学生名单\n");
printf("\t\t\t5、返回\n");
printf("\n\t\t\t请输入你的选择:");
scanf("%d", &sel);
switch(sel)
{
case 1:
QueryAllBookBorrowInfo();
break;
case 2:
QueryStuBorrowInfo();
break;
case 3:
QueryOverDataBook();
break;
case 4:
QueryOverDataStu(0);
break;
case 5:
return;
default:
break;
}
system("pause");
}
}
void StuBorrow()//学生借阅管理
{
int sel = 0;
int j = 0;
printf("1、冻结有超期未归还的账户\n");
printf("2、解冻已还书没有超期的账户\n");
scanf("%d", &sel);
if (sel == 1)
QueryOverDataStu(1);//超期时
for (j = 0; strlen(g_StuInfo[j].ID) != 0; j++)
{
if(sel == 1 && g_StuInfo[j].flag == 1)//超期同学信息
{
printf("%s , %s\n", g_StuInfo[j].ID, g_StuInfo[j].Name);
g_StuInfo[j].flag = 2;//冻结情况
}
else if (sel == 2 && g_StuInfo[j].flag == 2)
{
g_StuInfo[j].flag = 0;//回到正常状态
printf("%s , %s\n", g_StuInfo[j].ID, g_StuInfo[j].Name);
}
}
UpdateStuInfo();
}
int CheckProBook(char *Profess)
{
int i = 0;
for (i = 0; strlen(g_ProfessBookInfo[i].Profession) != 0; i++)
{
if (!strcmp(Profess, g_ProfessBookInfo[i].Profession))
{
return 1;
}
}
return 0;
}
void CheckProStuBook(char *Name, int index)
{
int i = 0;
int flag = 0;
for (i = 0; strlen(g_ProfessBookInfo[index].Book[i].Name) != 0; i++)
{
if (!strcmp(Name, g_ProfessBookInfo[index].Book[i].Name))
{
g_ProfessBookInfo[index].Book[i].count++;
flag = 1;
break;
}
}
if (flag == 0)
{
strcpy(g_ProfessBookInfo[index].Book[i].Name, Name);
}
}
void AddProfessBook(int index1, int index2)
{
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
if (strcmp(g_StuInfo[index1].BookList[i], "*"))
CheckProStuBook(g_StuInfo[index1].BookList[i], index2);
}
}
void CountProfessLoveBook()
{
int j = 0;
int i = 0;
int k = 0;
int m = 0;
memset(g_ProfessBookInfo, 0, 1024 * (sizeof(PROFESSBOOKINFO)));
for (j = 0; strlen(g_StuInfo[j].ID) != 0; j++)
{
if (CheckProBook(g_StuInfo[j].Profession) != 1)
{
strcpy(g_ProfessBookInfo[i].Profession, g_StuInfo[j].Profession);
i++;
}
}
for (j = 0; strlen(g_ProfessBookInfo[j].Profession) != 0; j++)
{
for (k = 0; strlen(g_StuInfo[k].ID) != 0; k++)
{
if (!strcmp(g_StuInfo[k].Profession, g_ProfessBookInfo[j].Profession))
{
AddProfessBook(k, j);
}
}
}
int temp = 0;
for (j = 0; strlen(g_ProfessBookInfo[j].Profession) != 0; j++)
{
for (k = 0; strlen(g_ProfessBookInfo[j].Book[k].Name) != 0; k++)
{
temp = temp > g_ProfessBookInfo[j].Book[k].count ? temp : g_ProfessBookInfo[j].Book[k].count;
}
for (i = 0; strlen(g_ProfessBookInfo[j].Book[i].Name) != 0; i++)
{
if (temp == g_ProfessBookInfo[j].Book[i].count)
{
for (m = 0; m < g_BookCount; m++)
{
if (!strcmp(g_BookInfo[m].ID, g_ProfessBookInfo[j].Book[i].Name))
{
printf("%s : %s %s %s %.2f %s %s %s %d %s %s %s %d %d\n", g_ProfessBookInfo[j].Profession, g_BookInfo[i].ID, g_BookInfo[i].Name, g_BookInfo[i].Author, g_BookInfo[i].Price, g_BookInfo[i].PubHouse, g_BookInfo[i].PubDate, g_BookInfo[i].BookIntro, g_BookInfo[i].Count, g_BookInfo[i].Index, g_BookInfo[i].BrowDate, g_BookInfo[i].RetDate, g_BookInfo[i].ReBrowCount, g_BookInfo[i].BrowCount);
}
}
}
}
temp = 0;
}
}
void CountBorrow()
{
int sel = 0;
printf("1、按借阅时间长短排序所有图书\n");
printf("2、按借阅次数排序所有在馆图书\n");
printf("3、按专业统计学生最爱借阅的书目\n");
printf("请输入你的选择: ");
scanf("%d", &sel);
if (sel == 1)
{
Sort(2);
}
else if (sel == 2)
{
Sort(3);
}
else if (sel == 3)
{
CountProfessLoveBook();
}
else
{
return;
}
}
void ManagerBorrow()
{
int sel = 0;
system("cls");
while(1)
{
system("cls");
printf("\t\t\t请选择操作\n");
printf("\t\t\t1、查看借阅情况\n");
printf("\t\t\t2、借阅账户管理\n");
printf("\t\t\t3、统计借阅信息\n");
printf("\t\t\t4、返回\n");
printf("\n\t\t\t请输入你的选择:");
scanf("%d", &sel);
if (sel == 1)
{
QueryBorrow();
}
else if (sel == 2)
{
StuBorrow();
}
else if (sel == 3)
{
CountBorrow();
}
else
{
return;
}
system("pause");
}
}
void UpdateManaInfo()
{
int i = 0;
FILE *fp = fopen("Manager.txt", "w");
if (fp == NULL)
{
printf("还没有图书管理员信息!\n");
return;
}
while(strlen(g_BookManager[i].ID) > 0)
{
fprintf(fp, "%s %s %s %s\n", g_BookManager[i].ID, g_BookManager[i].Name, g_BookManager[i].Passwd, g_BookManager[i].Email);
i++;
}
fclose(fp);
}
void ManaPerInfoMana()
{
int sel = 0;
char str[128] = {0};
int i = 0;
while(strlen(g_BookManager[i].ID) != 0)
{
if (!strcmp(g_ManaID, g_BookManager[i].ID))
{
break;
}
i++;
}
while(1)
{
system("cls");
printf("\t\t\t1、修改密码\n");
printf("\t\t\t2、修改邮箱\n");
printf("\t\t\t3、返回\n");
printf("\t\t\t请输入你的选项:");
scanf("%d", &sel);
system("cls");
if (sel == 1)
{
printf("请输入新的密码: ");
scanf("%s", str);
strcpy(g_BookManager[i].Passwd, str);
}
else if (sel == 2)
{
printf("请输入新的邮箱: ");
scanf("%s", str);
if (CheckEmail(str) == -1)
{
printf("邮箱格式错误!\n");
continue;
}
strcpy(g_BookManager[i].Email, str);
}
else
{
return;
}
UpdateManaInfo();
printf("修改成功!\n");
system("pause");
}
}
int ShowManaMain()
{
int sel = 0;
system("cls");
printf("\t\t\t请选择操作\n");
printf("\t\t\t1、图书管理\n");
printf("\t\t\t2、借阅管理\n");
printf("\t\t\t3、个人信息管理\n");
printf("\t\t\t4、返回\n");
printf("\n\t\t\t请输入你的选择:");
scanf("%d", &sel);
system("cls");
switch(sel)
{
case 1:
ManagerBooks();
break;
case 2:
ManagerBorrow();
break;
case 3:
ManaPerInfoMana();
break;
case 4:
return 4;
default:
break;
}
return 0;
}
void UpdateBookInfo()
{
int i = 0;
FILE *fp = fopen("Book.txt", "w");
if (fp == NULL)
{
printf("还没有图书信息!\n");
return;
}
for (i = 0; i < g_BookCount; i++)
{
fprintf(fp, "%s %s %s %.2f %s %s %s %d %s %s %s %d %d\n", g_BookInfo[i].ID, g_BookInfo[i].Name, g_BookInfo[i].Author, g_BookInfo[i].Price, g_BookInfo[i].PubHouse, g_BookInfo[i].PubDate, g_BookInfo[i].BookIntro, g_BookInfo[i].Count, g_BookInfo[i].Index, g_BookInfo[i].BrowDate, g_BookInfo[i].RetDate, g_BookInfo[i].ReBrowCount, g_BookInfo[i].BrowCount);
}
fclose(fp);
}
int StuLogin()
{
char n_ID[32] = {0};
char n_Passwd[32] = {0};
int res = -1;
FILE *fp = NULL;
int i = 0;
printf("\t\t\t\t学生登录\n");
printf("\n\t\t\t\t请输入账号:");
scanf("%s", n_ID);
printf("\n\t\t\t\t请输入密码:");
scanf("%s", n_Passwd);
fp = fopen("Student.txt", "r");
if (fp == NULL)
{
printf("文件不存在!\n");
return res;
}
for (i = 0; strlen(g_StuInfo[i].ID) != 0; i++)
{
if (!strcmp(n_ID, g_StuInfo[i].ID) && !strcmp(n_Passwd, g_StuInfo[i].Passwd))
{
if (g_StuInfo[i].flag == 2)
{
printf("该账户已被冻结!\n");
res = -1;
break;
}
memset(g_StuID, 0, 10);
strcpy(g_StuID, n_ID);
res = 0;
break;
}
}
fclose(fp);
return res;
}
int CheckStuBookCount()
{
int i = 0;
while(strlen(g_StuInfo[i].ID) != 0)
{
if (!strcmp(g_StuID, g_StuInfo[i].ID))
{
if (strcmp(g_StuInfo[i].BookList[0], "*")
&& strcmp(g_StuInfo[i].BookList[1], "*")
&& strcmp(g_StuInfo[i].BookList[2], "*"))
{
return -1;
}
}
i++;
}
return 0;
}
int CheckStuBookSame(char *BookID)
{
int i = 0;
while(strlen(g_StuInfo[i].ID) != 0)
{
if (!strcmp(g_StuID, g_StuInfo[i].ID))
{
if (!strcmp(g_StuInfo[i].BookList[0], BookID)
|| !strcmp(g_StuInfo[i].BookList[1], BookID)
|| !strcmp(g_StuInfo[i].BookList[2], BookID))
{
return -1;
}
}
i++;
}
return 0;
}
int CalSumDays(int year, int month, int day)
{
int days_on_month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int sum = 0;
int k, i;
for (i = 0; i < year; i++)
{
if (((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0)))
sum += 366;
else
sum += 365;
}
if (((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)))
days_on_month[2]=29;
else
days_on_month[2]=28;
for (k = 1; k < month; k++)
sum += days_on_month[k];
return sum + day;
}
void BorrowBooks()
{
int i = 0;
char res[11] = {0};
int j = 0;
int k = 0;
int flag = 0;
int year, month, day, hour, min;
int year1, month1, day1, hour1, min1;
int SumDay1 = 0;
int SumDay2 = 0;
int count = 0;
while(1)
{
i = 0;
flag = 0;
printf("请问要借阅哪本书(编号)?(输入-1退出)");
scanf("%s", res);
if (!strcmp(res , "-1"))
{
break;
}
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(g_BookInfo[i].ID, res))
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("该书不存在!\n");
continue;
}
if (CheckStuBookCount() == -1)
{
printf("你有三本图书在借未还,不能继续借阅!\n");
return;
}
if (g_BookInfo[i].Count == 0)
{
printf("图书已经被借完了!\n");
continue;
}
if (CheckStuBookSame(g_BookInfo[i].ID) == -1)
{
printf("你已经借了一本相同的书,不能继续借阅!\n");
continue;
}
time_t tt = time(NULL);
struct tm* t= localtime(&tt);
memset(g_BookInfo[i].BrowDate, 0, 64);
sprintf(g_BookInfo[i].BrowDate, "%d年%d月%d日%d时%d分", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min);
k = 0;
while(strlen(g_StuInfo[k].ID) > 0)
{
if (strcmp(g_StuInfo[k].ID, g_StuID) == 0)
{
for (j = 0; j <3; j++)
{
if (strcmp(g_StuInfo[k].BookList[j], "*") == 0)
{
strcpy(g_StuInfo[k].BookList[j], g_BookInfo[i].ID);
break;
}
}
break;
}
k++;
}
g_BookInfo[i].Count--;
g_BookInfo[i].BrowCount++;
count++;
int m = 0;
while(strlen(g_BroInfo[m].ID) != 0)
{
m++;
}
strcpy(g_BroInfo[m].ID, g_StuID);
strcpy(g_BroInfo[m].Name, g_BookInfo[i].Name);
strcpy(g_BroInfo[m].Profess, g_StuInfo[k].Profession);
strcpy(g_BroInfo[m].ReDate, g_BookInfo[i].BrowDate);
FILE *fp = fopen("BrowRecord.txt", "a+");
fprintf(fp, "%s %s %s %s\n", g_StuID, g_BookInfo[i].Name, g_StuInfo[k].Profession, g_BookInfo[i].BrowDate);
fclose(fp);
if (count == 3)
{
printf("一次最多只能借3本书!返回系统......\n");
break;
}
}
printf("借书成功!\n\n");
UpdateBookInfo();
UpdateStuInfo();
}
void RenewBooks()
{
int i = 0, j = 0;
char res[10] = {0};
int year, month, day, hour, min;
int year1, month1, day1, hour1, min1;
int SumDay1 = 0;
int SumDay2 = 0;
int count = 0;
while(strlen(g_StuInfo[i].ID) != 0)
{
if (!strcmp(g_StuInfo[i].ID, g_StuID))
{
printf("%s %s %s\n", g_StuInfo[i].BookList[0], g_StuInfo[i].BookList[1], g_StuInfo[i].BookList[2]);
break;
}
i++;
}
printf("请问要续借哪本书?(输入ID):");
scanf("%s", res);
if (strcmp(res, g_StuInfo[i].BookList[0]) &&
strcmp(res, g_StuInfo[i].BookList[1]) &&
strcmp(res, g_StuInfo[i].BookList[2]))
{
printf("你当前没有借阅这本书,不能续借!\n");
return;
}
for (j = 0; j < g_BookCount; j++)
{
if (!strcmp(g_BookInfo[j].ID, res))
{
if (g_BookInfo[j].ReBrowCount == 2)
{
printf("续借超过2次,不能再续借!\n");
return;
}
g_BookInfo[j].ReBrowCount++;
break;
}
}
time_t tt = time(NULL);
struct tm* t= localtime(&tt);
memset(g_BookInfo[i].BrowDate, 0, 64);
sprintf(g_BookInfo[i].BrowDate, "%d年%d月%d日%d时%d分", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min);
g_BookInfo[j].BrowCount++;
UpdateBookInfo();
FILE *fp = fopen("BrowRecord.txt", "a+");
fprintf(fp, "%s %s %s %s\n", g_StuID, g_BookInfo[j].Name, g_StuInfo[i].Profession, g_BookInfo[j].BrowDate);
fclose(fp);
}
void QueryByName()
{
char t_Name[64] = {0};
int i = 0;
int flag = 0;
printf("请输入书名:");
scanf("%s", t_Name);
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(t_Name, g_BookInfo[i].Name))
{
printf("%d %s %s %s %2.lf %s %s %s %d %s %s %s %d %d\n", i, g_BookInfo[i].ID, g_BookInfo[i].Name, g_BookInfo[i].Author, g_BookInfo[i].Price, g_BookInfo[i].PubHouse, g_BookInfo[i].PubDate, g_BookInfo[i].BookIntro, g_BookInfo[i].Count, g_BookInfo[i].Index, g_BookInfo[i].BrowDate, g_BookInfo[i].RetDate, g_BookInfo[i].ReBrowCount, g_BookInfo[i].BrowCount);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("找不到此书!\n");
}
}
void QueryByAuthor()
{
char t_Author[64] = {0};
int i = 0;
int flag = 0;
printf("请输入作者名:");
scanf("%s", t_Author);
for (i = 0; i < g_BookCount; i++)
{
if (!strcmp(t_Author, g_BookInfo[i].Author))
{
printf("%s %s %s %.2lf %s %s %s %d %s %s %s %d %d\n", g_BookInfo[i].ID, g_BookInfo[i].Name, g_BookInfo[i].Author, g_BookInfo[i].Price, g_BookInfo[i].PubHouse, g_BookInfo[i].PubDate, g_BookInfo[i].BookIntro, g_BookInfo[i].Count, g_BookInfo[i].Index, g_BookInfo[i].BrowDate, g_BookInfo[i].RetDate, g_BookInfo[i].ReBrowCount, g_BookInfo[i].BrowCount);
flag = 1;
}
}
if (flag == 0)
{
printf("找不到此作者的书!\n");
}
}
void Sort(int flag)
{
BOOKINFO t_BookInfo[1024];
int i = 0;
int n = 0;
int j = 0;
int SumDay = 0;
int SumDay1 = 0;
int Sub = 0;
int Sub1 = 0;
int year, month, day;
for (i = 0; i < g_BookCount + 1; i++)
{
if (flag == 2)
{
if (!strcmp(g_BookInfo[i].BrowDate, "xx"))
continue;
}
memset(&t_BookInfo[i], 0, sizeof(BOOKINFO));
strcpy(t_BookInfo[i].ID, g_BookInfo[i].ID);
strcpy(t_BookInfo[i].Name, g_BookInfo[i].Name);
strcpy(t_BookInfo[i].Author, g_BookInfo[i].Author);
t_BookInfo[i].Price = g_BookInfo[i].Price;
strcpy(t_BookInfo[i].PubHouse, g_BookInfo[i].PubHouse);
strcpy(t_BookInfo[i].PubDate, g_BookInfo[i].PubDate);
strcpy(t_BookInfo[i].BookIntro, g_BookInfo[i].BookIntro);
t_BookInfo[i].Count = g_BookInfo[i].Count;
strcpy(t_BookInfo[i].Index, g_BookInfo[i].Index);
strcpy(t_BookInfo[i].BrowDate, g_BookInfo[i].BrowDate);
strcpy(t_BookInfo[i].RetDate, g_BookInfo[i].RetDate);
t_BookInfo[i].ReBrowCount = g_BookInfo[i].ReBrowCount;
t_BookInfo[i].BrowCount = g_BookInfo[i].BrowCount;
}
n = g_BookCount;
BOOKINFO temp;
memset(&temp, 0, sizeof(temp));
time_t tt = time(NULL);
struct tm* t= localtime(&tt);
for(i = 0; i < n - 1; i++)
{
for(j = 0; j < n - 1 - i; j++)
{
if (flag == 0)
{
if(t_BookInfo[j].BrowCount > t_BookInfo[j+1].BrowCount)
{
temp = t_BookInfo[j+1];
t_BookInfo[j+1] = t_BookInfo[j];
t_BookInfo[j] = temp;
}
}
else if (flag == 1)
{
if(t_BookInfo[j].Price > t_BookInfo[j+1].Price)
{
temp = t_BookInfo[j+1];
t_BookInfo[j+1] = t_BookInfo[j];
t_BookInfo[j] = temp;
}
}
else if (flag == 2)
{
if (strlen(t_BookInfo[j].RetDate) != 0)
{
sscanf(t_BookInfo[j].RetDate, "%d年%d月%d日", &year, &month, &day);
SumDay = CalSumDays(year, month, day);
}
else
{
SumDay = CalSumDays(t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);
}
sscanf(t_BookInfo[j].BrowDate, "%d年%d月%d日", &year, &month, &day);
SumDay1 = CalSumDays(year, month, day);
Sub = SumDay - SumDay1;
if (strlen(t_BookInfo[j+1].RetDate) != 0)
{
sscanf(t_BookInfo[j+1].RetDate, "%d年%d月%d日", &year, &month, &day);
SumDay = CalSumDays(year, month, day);
}
else
{
SumDay = CalSumDays(t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);
}
sscanf(t_BookInfo[j+1].BrowDate, "%d年%d月%d日", &year, &month, &day);
SumDay1 = CalSumDays(year, month, day);
Sub1 = SumDay - SumDay1;
if (Sub < Sub1)
{
temp = t_BookInfo[j+1];
t_BookInfo[j+1] = t_BookInfo[j];
t_BookInfo[j] = temp;
}
}
else if (flag == 3)
{
if(t_BookInfo[j].BrowCount < t_BookInfo[j+1].BrowCount)
{
temp = t_BookInfo[j+1];
t_BookInfo[j+1] = t_BookInfo[j];
t_BookInfo[j] = temp;
}
}
}
}
for(i = 0; i < n ; i++)
{
if (strlen(t_BookInfo[i].ID) == 0)
continue;
printf("%s %s %s %.2f %s %s %s %d %s %s %s %d %d\n", t_BookInfo[i].ID, t_BookInfo[i].Name, t_BookInfo[i].Author, t_BookInfo[i].Price, t_BookInfo[i].PubHouse, t_BookInfo[i].PubDate, t_BookInfo[i].BookIntro, t_BookInfo[i].Count, t_BookInfo[i].Index, t_BookInfo[i].BrowDate, t_BookInfo[i].RetDate, t_BookInfo[i].ReBrowCount, t_BookInfo[i].BrowCount);
}
}
void QueryBooks()
{
int sel = 0;
while(1)
{
printf("请选择操作:\n");
printf("1、根据书名查询\n");
printf("2、根据作者查询\n");
printf("3、根据借阅次数排序\n");
printf("4、根据价格排序\n");
printf("5、退出\n");
printf("请输入选择:");
scanf("%d", &sel);
switch(sel)
{
case 1:
QueryByName();
break;
case 2:
QueryByAuthor();
break;
case 3:
Sort(0);
break;
case 4:
Sort(1);
break;
case 5:
return;
default:
break;
}
}
}
int LoadBookFromFile()
{
FILE *fp = NULL;
int i = 0;
fp = fopen("Book.txt", "r");
if (fp == NULL)
{
printf("文件不存在!\n");
return -1;
}
while(fscanf(fp, "%s %s %s %f %s %s %s %d %s %s %s %d %d\n", g_BookInfo[i].ID, g_BookInfo[i].Name, g_BookInfo[i].Author, &g_BookInfo[i].Price, g_BookInfo[i].PubHouse, g_BookInfo[i].PubDate, g_BookInfo[i].BookIntro, &g_BookInfo[i].Count, g_BookInfo[i].Index, g_BookInfo[i].BrowDate, g_BookInfo[i].RetDate, &g_BookInfo[i].ReBrowCount, &g_BookInfo[i].BrowCount) == 13)
{
i++;
}
g_BookCount = i;
fclose(fp);
return 0;
}
int CheckBorrow()
{
int i = 0;
char ID[32] = {0};
char Name[32] = {0};
char Profess[32] = {0};
char ReDate[32] = {0};
FILE *fp = fopen("BrowRecord.txt", "r");
if (fp == NULL)
{
printf("文件不存在!\n");
return -1;
}
char str[1024] = {0};
while(fgets(str, 1024, fp))
{
str[strlen(str)-1] = '\0';
sscanf(str, "%s %s %s %s", ID, Name, Profess, ReDate);
if (!strcmp(ID, g_StuID))
printf("%s %s %s %s\n", ID, Name, Profess, ReDate);
i++;
memset(str, 0, 1024);
}
fclose(fp);
if (i == 0)
{
printf("你还没有借书记录!\n");
}
fclose(fp);
return 0;
}
void UpdateStuInfo()
{
int i = 0;
FILE *fp = fopen("Student.txt", "w");
if (fp == NULL)
{
printf("还没有学生信息!\n");
return;
}
while(strlen(g_StuInfo[i].ID) > 0)
{
fprintf(fp, "%s %s %s %s %s %s %s %s %s %s %s %d\n", g_StuInfo[i].ID, g_StuInfo[i].Faculty, g_StuInfo[i].Profession, g_StuInfo[i].Name, g_StuInfo[i].Sex, g_StuInfo[i].Phone, g_StuInfo[i].Passwd, g_StuInfo[i].Email, g_StuInfo[i].BookList[0], g_StuInfo[i].BookList[1], g_StuInfo[i].BookList[2], g_StuInfo[i].flag);
i++;
}
fclose(fp);
}
void DelBorInfo()
{
char t_BookName[64] = {0};
int i = 0;
int flag = 0;
int j = 0;
int k = 0;
printf("请问你要删除哪条借书记录?输入书的名字: ");
scanf("%s", t_BookName);
while(strlen(g_BroInfo[i].ID) > 0)
{
if (!strcmp(g_StuID, g_BroInfo[i].ID) && !strcmp(t_BookName, g_BroInfo[i].Name))
{
memset(&g_BroInfo[i], 0, sizeof(BROINFO));
flag = 1;
while(strlen(g_StuInfo[k].ID) > 0)
{
if (!strcmp(g_StuID, g_StuInfo[i].ID))
{
for (j = 0; j <3; j++)
{
if (!strcmp(g_StuInfo[i].BookList[j], t_BookName))
{
memset(g_StuInfo[i].BookList[j], 0, 64);
strcpy(g_StuInfo[i].BookList[j], "*");
UpdateStuInfo();
break;
}
}
break;
}
k++;
}
break;
}
i++;
}
if (flag == 0)
{
printf("没有这条记录!\n");
return;
}
FILE *fp = fopen("BrowRecord.txt", "w");
if (fp == NULL)
{
printf("还没有借阅记录!\n");
return;
}
i = 0;
while(i < 1024)
{
if (strlen(g_BroInfo[i].ID) != 0)
fprintf(fp, "%s %s %s %s\n", g_BroInfo[i].ID, g_BroInfo[i].Name, g_StuInfo[k].Profession, g_BookInfo[i].BrowDate);
i++;
}
printf("删除成功!\n");
fclose(fp);
}
int CheckPhone(char *phone)
{
int i = 0;
int len = strlen(phone);
if (len != 11)
{
return -1;
}
for (i = 0; i < 11; i++)
{
if (phone[i] < '0' || phone[i] > '9')
{
return -1;
}
}
return 0;
}
int CheckEmail(char *email)
{
int i = 0;
int len = strlen(email);
if (!strstr(email, "@") && !strstr(email, "."))
{
return -1;
}
if (email[0] == '@' || email[len - 1] == '@' || email[0] == '.' || email[len - 1] == '.')
{
return -1;
}
return 0;
}
void PerInfoMana()
{
int sel = 0;
char str[128] = {0};
int i = 0;
while(strlen(g_StuInfo[i].ID) != 0)
{
if (!strcmp(g_StuID, g_StuInfo[i].ID))
{
break;
}
i++;
}
while(1)
{
system("cls");
printf("\t\t\t1、修改电话\n");
printf("\t\t\t2、修改密码\n");
printf("\t\t\t3、修改邮箱\n");
printf("\t\t\t4、返回\n");
printf("\t\t\t请输入你的选项:");
scanf("%d", &sel);
if (sel == 1)
{
printf("请输入新的电话号码: ");
scanf("%s", str);
if (CheckPhone(str) == -1)
{
printf("电话号码格式错误!\n");
continue;
}
strcpy(g_StuInfo[i].Phone, str);
}
else if (sel == 2)
{
printf("请输入新的密码: ");
scanf("%s", str);
strcpy(g_StuInfo[i].Passwd, str);
}
else if (sel == 3)
{
printf("请输入新的邮箱: ");
scanf("%s", str);
if (CheckEmail(str) == -1)
{
printf("邮箱格式错误!\n");
continue;
}
strcpy(g_StuInfo[i].Email, str);
}
else
{
return;
}
printf("修改成功!\n");
if (sel != 4)
system("pause");
UpdateStuInfo();
}
}
void ReBooks()
{
time_t tt = time(NULL);
struct tm* t;
char ID[32] = {0};
int flag = 0;
int j = 0;
int k = 0;
t = localtime(&tt);
int year, month, day, hour, min;
printf("请问你要还哪本书(输入ID)?: ");
scanf("%s", ID);
int SumDay = 0;
int SumDay1 = 0;
int res = 0;
int i = 0;
while(strlen(g_StuInfo[i].ID) != 0)
{
if (!strcmp(g_StuID, g_StuInfo[i].ID))
{
for (j = 0; j < 3; j++)
{
if (!strcmp(ID, g_StuInfo[i].BookList[j]))
{
strcpy(g_StuInfo[i].BookList[j], "*");
flag = 1;
break;
}
}
}
i++;
}
if (flag == 0)
{
printf("你没有借这本书!\n");
return;
}
for (i = 0; i < g_BookCount; i++)
{
if (strcmp(ID, g_BookInfo[i].ID) == 0)
{
memset(g_BookInfo[i].RetDate, 0, 64);
sprintf(g_BookInfo[i].RetDate, "%d年%d月%d日%d时%d分", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min);
break;
}
}
i = 0;
while(strlen(g_StuInfo[i].ID) != 0)
{
if (!strcmp(g_StuID, g_StuInfo[i].ID))
{
for (k = 0; k < g_BookCount; k++)
{
for (j = 0; j < 3; j++)
{
if (strcmp(g_StuInfo[i].BookList[j], g_BookInfo[k].ID) == 0)
{
sscanf(g_BookInfo[k].BrowDate, "%d年%d月%d日%d时%d分", &year, &month, &day, &hour, &min);
SumDay1 = CalSumDays(year, month, day);
SumDay = CalSumDays(t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);
if (SumDay - SumDay1 <= 30)
{
res = 1;
}
}
}
}
break;
}
i++;
}
if (res == 0)
{
g_StuInfo[i].flag = 0;
}
printf("还书成功!\n\n");
UpdateBookInfo();
UpdateStuInfo();
}
int ShowStuMain()
{
int sel = 0;
system("cls");
printf("\t\t\t请选择操作\n");
printf("\t\t\t1、借阅图书\n");
printf("\t\t\t2、续借图书\n");
printf("\t\t\t3、查询图书\n");
printf("\t\t\t4、查询借阅结果\n");
printf("\t\t\t5、删除借阅信息\n");
printf("\t\t\t6、个人信息管理\n");
printf("\t\t\t7、还书\n");
printf("\t\t\t8、返回\n");
printf("\n\t\t\t请输入你的选择:");
scanf("%d", &sel);
system("cls");
switch(sel)
{
case 1:
BorrowBooks();
break;
case 2:
RenewBooks();
break;
case 3:
QueryBooks();
break;
case 4:
CheckBorrow();
break;
case 5:
DelBorInfo();
break;
case 6:
PerInfoMana();
break;
case 7:
ReBooks();
break;
case 8:
return 8;
default:
break;
}
system("pause");
return 0;
}
void Login()
{
int sel = 0;
while(1)
{
system("cls");
printf("\t\t\t\t欢迎来到图书借阅系统\n\n");
printf("\t\t\t\t======================\n\n");
printf("\t\t\t\t1、管理员登录\n");
printf("\t\t\t\t2、学生登录\n");
printf("\t\t\t\t3、退出\n\n");
printf("\t\t\t\t请输入你的选择:");
scanf("%d", &sel);
system("cls");
if (sel == 1)
{
if (ManagerLogin() == -1)
{
printf("登录失败!\n");
system("pause");
}
else
{
printf("登录成功!\n");
system("pause");
while(1)
{
system("cls");
if (ShowManaMain() == 4)
{
break;
}
}
}
}
else if (sel == 2)
{
if (StuLogin() == -1)
{
printf("登录失败!\n");
system("pause");
}
else
{
printf("登录成功!\n");
system("pause");
while(1)
{
if (ShowStuMain() == 8)
{
break;
}
}
}
}
else if (sel == 3)
{
break;
}
else
{
continue;
}
}
}
int main()
{
system( "color 90 ");
LoadBrowInfo();
if (LoadBookFromFile() == -1 || LoadManagerInfo() == -1 || LoadStuInfo() == -1) //加载图书、学生、管理员信息
{
return -1;
}
Login();
return 0;
}