我花了一周多的时间写的并进行了简单的优化,但还是有一些bug
这一些代码可以让vs识别scanf而不出错
#pragma warning 4996
#pragma warning(disable : 6031 )
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include <malloc.h>
struct book {
char name[50];//书名
char author[50];//作者名
char classify[50];//图书的编号
char publisher[50];//出版单位
char publishtime[50];//出版时间
int price;//图书价格
struct book* next;//下一个节点
};
struct book* creat();//创建链表
void browse(void);//图书信息浏览功能
void browse1(void);//图书信息浏览功能
void changlock(void);//管理员修改密码功能
void check(void);//查询界面
void checkauthor(void);//查询作者
void checkname(void);//查询书名
void checktprice(void);//查询价格
void dele(void);//删除
void handmenu1(void);//管理员菜单功能
void handmenu2(void);//学生菜单功能
void input(void);//图书信息录入
void login(void);//登录界面
void regist(void);//身份注册功能
void menu1(void);//管理员登录
void menu2(void);//学生登录
void modfiy(void);//修改界面
void modfiyclassify(void);//修改分类号
void modfiypublisher(void);//修改出版社
void modfiypublishtime(void);//修改出版时间
void modfiyprice(void);//修改图书价格
void sort(void);//排序界面
void sortprice(void);//按价格排序
void sorttime(void);//按时间排序
struct book* creat()//创建链表信息
{
struct book bok;//建立图书信息节点
struct book* head = NULL, * p1 = NULL, * p2;//建立图书信息链表
//p1 = (struct book*)malloc(sizeof(struct book));
FILE* fp = NULL;
head = p1;``
if ((fp = fopen("b.txt", "ab+")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
rewind(fp);//移向头文件指针
while (fread(&bok, sizeof(bok), 1, fp) != 0)
{
p2 = (struct book*)malloc(sizeof(struct book));
strcpy(p2->name, bok.name);
strcpy(p2->author, bok.author);
strcpy(p2->classify, bok.classify);
strcpy(p2->publisher, bok.publisher);
strcpy(p2->publishtime, bok.publishtime);
p2->price= bok.price;
p2->next = NULL;
if (head == NULL)
{
head = p2;
p1 = p2;
}
else
{
p1->next = p2;
p1 = p1->next;
}
}
fclose(fp);
return head;
}
void input()//输入功能
{
FILE* fp;
int sum = 0, i, m = 0;
struct book books[1000];
char str[3];
int sign = 1;
if ((fp = fopen("b.txt", "ab")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t你已选择图书信息输入(新增)功能,请按照接下来的指示完成图书信息输入。\n");
while (sign)
{
printf("\t\t\t请输入你想要新增多少本书的信息(请控制一次性新增加图书的数量在100本书以内):\n");
printf("\t\t\t");
scanf("%d", &sum);
system("cls");
printf("\t\t\t请按接下来的格式输入图书的信息,每个信息段一个空格:\n");
for (i = 0; i < sum; i++)
{
printf("\t\t\t图书书名\n");
printf("\t\t\t");
scanf("%s", books[i].name);
printf("\t\t\t图书的作者名\n");
printf("\t\t\t");
scanf("%s", books[i].author);
printf("\t\t\t图书的分类号\n");
printf("\t\t\t");
scanf("%s", books[i].classify);
printf("\t\t\t图书的出版社\n");
printf("\t\t\t");
scanf("%s", books[i].publisher);
printf("\t\t\t图书的出版时间\n");
printf("\t\t\t");
scanf("%s", books[i].publishtime);
printf("\t\t\t图书的价格\n");
printf("\t\t\t");
scanf("%d", &books[i].price);
fwrite(&books[i], sizeof(book), 1, fp);
printf("\n");
system("cls");
}
system("cls");
printf("\t\t\t你已新增加%d本书的信息,请确认是否继续新添图书的信息(y/n)\n", sum);
while (1)
{
printf("\t\t\t");
scanf("%s", str);
if (strcmp(str, "n") == 0 || strcmp(str, "N") == 0)
{
fclose(fp);
sign = 0;
break;
}
else if (strcmp(str, "y") == 0 || strcmp(str, "Y") == 0)
{
printf("\t\t\t你已选择继续添加图书的信息,请完成你的信息输入。\n");
sign = 1;
break;
}
else
{
printf("\t\t\t你的输入有误,请重新输入:\n");
sign = 1;
continue;
}
}
}
printf("\t");
system("cls");
printf("\t\t\t你已完成图书信息输入,请选择你接下来的操作:\n");
printf("\t\t\t你是选择返回管理员菜单还是直接退出程序(1或者2):\n");
printf("\t\t\t1、选择返回管理员菜单\n");
printf("\t\t\t2、选择直接退出程序\n");
printf("\t\t\t");
scanf("%d", &m);
while (sign)
{
if (m < 1 || m>2)
{
sign = 1;
printf("\t\t\t你的选择有误,请重新选择:\n");
printf("\t\t\t");
scanf("%d", &m);
}
else
sign = 0;
}
switch (m)
{
case 1:
system("cls");
handmenu1();
break;
case 2:
system("cls");
printf("\t\t\t欢迎下次使用,再见!\n");
exit(0);
break;
default:
break;
}
}
void checkname()//按书名查询
{
FILE* fp = NULL;
char str[50], str1[3];
int sum = 0, n = 1, m, sign = 1;
system("cls");
struct book* head = NULL, * p2;//建立图书信息链表
p2 = (struct book*)malloc(sizeof(struct book));
printf("\t\t\t你已选择图书的信息查询功能,请输入你想要查询图书的书名:\n");
while (n)
{
printf("\t\t\t");
scanf("%s", str);
system("cls");
printf("\t图书书名:\t图书的作者名:\t图书的分类号;\t图书的出版社:\t图书的出版时间:\t图书的价格:\n");
p2 = creat();
while (p2 != NULL)
{
if (strcmp(str, p2->name) == 0)
{
printf("\t%s\t", p2->name);
printf("\t%s\t", p2->author);
printf("\t%s\t", p2->classify);
printf("\t%s\t", p2->publisher);
printf("\t%s\t", p2->publishtime);
printf("\t%d\t\n", p2->price);
sum++;
}
p2 = p2->next;
}
if (sum == 0)
{
printf("\t\t\t系统没有找到符合条件的图书,请重新输入你想要查询的图书:\n");
n = 1;
}
else
n = 0;
}
printf("\t");
system("pause");
system("cls");
printf("\t\t\t你是否要继续操作图书信息查询功能(y/n):\n");
printf("\t\t\t");
scanf("%s", str1);
system("cls");
if (strcmp(str1, "n") == 0 || strcmp(str1, "N") == 0)
{
free(p2);
printf("\t\t\t你是选择返回上一级还是直接退出程序(1或者2):\n");
printf("\t\t\t1、选择返回主菜单\n");
printf("\t\t\t2、选择直接退出程序\n");
printf("\t\t\t");
scanf("%d", &m);
while (sign)
{
if (m < 1 || m>2)
{
sign = 1;
printf("\t\t\t你的选择有误,请重新选择:\n");
scanf("%d", &m);
}
else
sign = 0;
}
system("cls");
switch (m)
{
case 1:
check();
break;
case 2:
printf("\t\t\t欢迎下次使用,再见!\n");
exit(0);
break;
default:
break;
}
}
if (strcmp(str1, "y") == 0 || strcmp(str1, "Y") == 0)
check();
}
void checkauthor()//按作者查询
{
FILE* fp = NULL;
char str[50], str1[3];
int sum = 0, n = 1, m, sign = 1;
system("cls");
struct book* head = NULL, * p2;//建立图书信息链表
p2 = (struct book*)malloc(sizeof(struct book));
p2 = creat();
printf("\t\t\t你已选择图书的信息查询功能,请输入你想要查询图书的作者:\n");
while (n)
{
printf("\t\t\t");
scanf("%s", str);
system("cls");
printf("\t图书书名:\t图书的作者名:\t图书的分类号;\t图书的出版社:\t图书的出版时间:\t图书的价格:\t\n");
p2 = creat();
while (p2 != NULL)
{
if (strcmp(str,p2->author )==0)
{
printf("\t%s\t", p2->name);
printf("\t%s\t", p2->author);
printf("\t%s\t", p2->classify);
printf("\t%s\t", p2->publisher);
printf("\t%s\t", p2->publishtime);
printf("\t%d\t\n", p2->price);
sum++;
}
p2 = p2->next;
}
if (sum == 0)
{
printf("\t\t\t系统没有找到符合条件的图书,请重新输入你想要查询的图书:\t\t\t\n");
n = 1;
}
else
n = 0;
}
printf("\t");
system("pause");
system("cls");
printf("\t\t\t你是否要继续操作图书信息查询功能(y/n):\t\t\t\n");
printf("\t\t\t");
scanf("%s", str1);
if (strcmp(str1, "n") == 0 || strcmp(str1, "N") == 0)
{
system("cls");
printf("\t\t\t你是选择返回上一级还是直接退出程序(1或者2):\t\t\t\n");
printf("\t\t\t1、选择返回上一级\n");
printf("\t\t\t2、选择直接退出程序\n");
printf("\t\t\t");
scanf("%d", &m);
while (sign)
{
if (m < 1 || m>2)
{
sign = 1;
printf("\t\t\t你的选择有误,请重新选择:\n");
printf("\t\t\t");
scanf("%d", &m);
}
else
sign = 0;
}
switch (m)
{
case 1:
check();
break;
case 2:
printf("\t\t\t欢迎下次使用,再见!\n");
exit(0);
break;
default:
break;
}
}
if (strcmp(str1, "y") == 0 || strcmp(str1, "Y") == 0)
{
check();
}
}
void checkprice()//按价格查询
{
FILE* fp = NULL;
char str1[3];
int sum = 0, n = 1, m, sign = 1,str;
system("cls");
struct book* head = NULL, * p2;//建立图书信息链表
p2 = (struct book*)malloc(sizeof(struct book));
printf("\t\t\t你已选择图书的信息查询功能,请输入你想要查询图书的价格:\n");
printf("\t图书书名:\t图书的作者名:\t图书的分类号;\t图书的出版社:\t图书的出版时间:\t图书的价格:\t\n");
while (n)
{
printf("\t\t\t");
scanf("%d",&str);
p2 = creat();
while (p2 != NULL)
{
if (p2->price ==str)
{
printf("\t%s\t", p2->name);
printf("\t%s\t", p2->author);
printf("\t%s\t", p2->classify);
printf("\t%s\t", p2->publisher);
printf("\t%s\t", p2->publishtime);
printf("\t%d\t\n", p2->price);
sum++;
}
p2 = p2->next;
}
if (sum == 0)
{
printf("\t\t\t系统没有找到符合条件的图书,请重新输入你想要查询的图书:\n");
n = 1;
}
else
n = 0;
}
printf("\t");
system("pause");
system("cls");
printf("\t\t\t你是否要继续操作图书信息查询功能(y/n):\n");
printf("\t\t\t");
scanf("%s", str1);
if (strcmp(str1, "n") == 0 || strcmp(str1, "N") == 0)
{
printf("\t\t\t你是选择返回上一级还是直接退出程序(1或者2):\n");
printf("\t\t\t1、选择返回上一级\n");
printf("\t\t\t2、选择直接退出程序\n");
printf("\t\t\t");
scanf("%d", &m);
while (sign)
{
if (m < 1 || m>2)
{
sign = 1;
printf("\t\t\t你的选择有误,请重新选择:\n");
scanf("%d", &m);
}
else
sign = 0;
}
switch (m)
{
case 1:
check();
break;
case 2:
printf("\t\t\t欢迎下次使用,再见!\n");
exit(0);
break;
default:
break;
}
}
if (strcmp(str1, "y") == 0 || strcmp(str1, "Y") == 0)
{
check();
}
}
void check()//查询功能
{
int n;
int sign = 1;
printf("\t你已选择图书信息查询功能,请选择你的查询方式:\n");
printf("\t1、按书名查询\t2、按作者查询\t3、按价格查询\t4、返回主菜单\t\n");
while (sign)
{
printf("\t");
scanf("%d", &n);
if (n >= 1 && n <= 4)
sign = 0;
else
{
printf("\t\t\t对不起,你的选择有误,请重新选择你的查询方式:\t\t\t\n");
continue;
}
}
system("cls");
switch (n)
{
case 1:
checkname();
break;
case 2:
checkauthor();
break;
case 3:
checkprice();
break;
case 4:
login();
break;
default:
break;
}
}
void browse()//浏览功能
{
char str[3];
int sign = 1, m = 0,sum=0;
printf("\t你已选择图书信息浏览功能,现在为你显示已存储在文档中的图书信息。\t\t\t\n");
struct book* head = NULL,* p2;//建立图书信息链表
p2 = (struct book*)malloc(sizeof(struct book));
p2 = creat();
printf("\t图书书名\t图书的作者名\t图书的分类号\t图书的出版社\t图书的出版时间\t图书的价格\n");
while (p2 != NULL)
{
printf("\t%s\t%s\t%s\t%s\t%s\t%d", p2->name, p2->author,p2->classify, p2->publisher, p2->publishtime, p2->price);
sum++;
p2 = p2->next;
printf("\n");
}
if (sum == 0)
{
printf("\t\t\t没有图书信息,请先输入信息再浏览\n");
Sleep(2000);
system("cls");
input();
}
free(p2);
printf("\t");
system("pause");
system("cls");
printf("\t\t\t选择你的下一步操作: \t\t\t\n");
printf("\t\t\t你是选择返回管理员菜单还是直接退出程序(1或者2):\t\t\t\n");
printf("\t\t\t1、选择返回管理员菜单\t\t\t\n");
printf("\t\t\t2、选择直接退出程序\t\t\t\n");
while (sign)
{
printf("\t\t\t");
scanf("%s", str);
if (strcmp(str, "2") == 0)
{
m = 2;
sign = 0;
}
else if (strcmp(str, "1") == 0)
{
m = 1;
sign = 0;
}
else
{
printf("你的输入有误,请重新输入:\n");
sign = 1;
}
}
system("cls");
switch (m)
{
case 1:
handmenu1();
break;
case 2:
printf("欢迎下次使用,再见!\n");
exit(0);
break;
default:
break;
}
}
void browse1()//浏览功能
{
char str[3];
int sign = 1, m = 0,sum=0;
printf("\t\t\t你已选择图书信息浏览功能,现在为你显示已存储在文档中的图书信息。\t\t\t\n");
struct book* head = NULL, * p2;//建立图书信息链表
p2 = (struct book*)malloc(sizeof(struct book));
p2 = creat();
printf("\t图书书名\t图书的作者名\t图书的分类号\t图书的出版社\t图书的出版时间\t图书的价格\n");
while (p2 != NULL)
{
printf("\t%s\t%s\t\t%s\t\t%s\t%s\t%d", p2->name, p2->author, p2->classify, p2->publisher, p2->publishtime, p2->price);
p2 = p2->next;
sum++;
printf("\n");
}
free(p2);
if (sum == 0)
{
printf("\t\t\t没有图书信息,请先输入信息再浏览\n");
Sleep(2000);
system("cls");
login();
//return ;
}
system("pause");
system("cls");
printf("\t\t\t选择你的下一步操作: \t\t\t\n");
printf("\t\t\t你是选择返回学生菜单还是直接退出程序(1或者2):\t\t\t\n");
printf("\t\t\t1、选择返回学生菜单\t\t\t\n");
printf("\t\t\t2、选择直接退出程序\t\t\t\n");
while (sign)
{
printf("\t\t\t");
scanf("%s", str);
if (strcmp(str, "2") == 0)
{
m = 2;
sign = 0;
}
else if (strcmp(str, "1") == 0)
{
m = 1;
sign = 0;
}
else
{
printf("\t\t\t你的输入有误,请重新输入:\n");
sign = 1;
}
}
system("cls");
switch (m)
{
case 1:
handmenu2();
break;
case 2:
printf("欢迎下次使用,再见!\n");
exit(0);
break;
default:
break;
}
}
void sortprice()
{
FILE* fp;
int i, sum = 0, sign = 1, j;
struct book books[100], a;
printf("\t\t\t你已选择图书信息排序功能,下面是图书价格从小到大排序后的详细信息:\n");
if ((fp = fopen("b.txt", "rb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
sum++;
}
if (sum == 0)
{
printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\n");
Sleep(2000);
input();
}
printf("\t\t\t系统共查询到%d条图书信息\n", sum);
for (i = 0; i < sum; i++)
{
for (j = i + 1; j < sum; j++)
if (books[i].price > books[j].price)
{
a = books[i];
books[i] = books[j];
books[j] = a;
}
}
printf("\t图书书名\t图书的作者名\t图书的分类号\t图书的出版社\t图书的出版时间\t图书的价格\n");
for (j = 0; j < sum; j++)
{
printf("\t%s\t%s\t\t%s\t\t%s\t%s\t%d", books[j].name, books[j].author, books[j].classify, books[j].publisher, books[j].publishtime, books[j].price);
if(j!=sum-1)
printf("\n");
}
fclose(fp);
printf("\n");
system("pause");
system("cls");
sort();
}
void sorttime()
{
FILE* fp;
int i, sum = 0, sign = 1, j;
struct book books[100], a;
system("cls");
printf("\t\t\t你已选择图书信息排序功能,下面是图书出版时间从长到短排序后的详细信息:\t\t\t\n");
if ((fp = fopen("b.txt", "rb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
sum++;
}
if (sum == 0)
{
printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\t\t\t\n");
input();
}
printf("\t\t\t系统共查询到%d条图书信息\n", sum);
for (i = 0; i < sum; i++)
{
for (j = i + 1; j < sum; j++)
if (strcmp(books[i].publishtime, books[j].publishtime) > 0)
{
a = books[i];
books[i] = books[j];
books[j] = a;
}
}
printf("\t图书书名\t图书的作者名\t图书的分类号\t图书的出版社\t图书的出版时间\t图书的价格\n");
for (j = 0; j < sum; j++)
{
printf("\t%s\t%s\t\t%s\t\t%s\t%s\t%d", books[j].name, books[j].author , books[j].classify, books[j].publisher, books[j].publishtime, books[j].price);
if (j != sum - 1)
printf("\n");
}
fclose(fp);
printf("\n");
system("pause");
system("cls");
sort();
}
void sort()//管理员排序功能
{
int n, sign = 1;
printf("\t\t\t下面请选择你的排序选择,或者返回主菜单:\t\t\t\n");
printf("\t\t\t1、价格排序\t\t\t\n");
printf("\t\t\t2、出版时间排序\t\t\t\n");
printf("\t\t\t3、主菜单\t\t\t\n");
printf("\t\t\t请从1或者3中选择:\t\t\t\n");
while (sign)
{
printf("\t\t\t");
scanf("%d", &n);
if (n < 1 || n>3)
{
printf("\t\t\t你的输入有误,请重新输入:\t\t\t\n");
sign = 1;
continue;
}
else if (n >= 1 && n <= 3)
sign = 0;
}
system("cls");
switch (n)
{
case 1:
sortprice();
break;
case 2:
sorttime();
break;
case 3:
login();
break;
default:
break;
}
}
void dele()//删除功能
{
char str[50];
FILE* fp;
int sum = 0, i,j = 0;
int sign = 1;
struct book books[100];
printf("\t\t\t你已选择图书信息删除功能,请输入你想要删除的图书书名:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str);
if ((fp = fopen("b.txt", "ab")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
sum++;
}
if (sum == 0)
{
printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\t\t\t\n");
input();
}
for (i = 0; i < sum; i++)
{
if (strcmp(books[i].name, str) == 0)
{
j++;
strcpy(books[i].name, "0");
}
}
fclose(fp);
if ((fp = fopen("b.txt", "wb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t正在把新的记录写进文件");
for (i = 0; i < sum; i++)
if (strcmp(books[i].name, "0") != 0)
fwrite(&books[i], sizeof(book), 1, fp);
fclose(fp);
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
printf("\t\t\t写入成功!\n");
printf("\t\t\t");
system("pause");
system("cls");
handmenu1();
}
void modfiyclassify()
{
FILE* fp;
char str1[50];
char str2[50];
int sum = 0, i,m;
struct book books[100];
printf("\t\t\t请先输入你想要修改图书信息的书名:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str1);
if ((fp = fopen("b.txt", "rb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
sum++;
}
if (sum == 0)
{
printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\t\t\t\n");
input();
}
printf("\t\t\t请输入你想要修改的分类号:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str2);
for (i = 0; i < sum; i++)
{
if (strcmp(books[i].name, str1) == 0)
strcpy(books[i].classify, str2);
}
fclose(fp);
if ((fp = fopen("b.txt", "wb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t正在保存中");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
for (i = 0; i < sum; i++)
fwrite(&books[i], sizeof(book), 1, fp);
printf("\t\t\t保存成功!\t\t\t\n");
fclose(fp);
Sleep(1000);
system("cls");
printf("\t\t\t请选择你的下一步操作:\t\t\t\n");
printf("\t\t\t1、返回上一级\t\t\t\n");
printf("\t\t\t2、返回管理员菜单界面\t\t\t\n");
printf("\t\t\t3、返回主菜单\t\t\t\n");
printf("\t\t\t4、结束程序\t\t\t\n");
printf("\t\t\t请从1到4中选择你的操作:\t\t\t\n");
while (1)
{
printf("\t\t\t");
scanf("%d", &m);
if (m < 1 || m>4)
{
printf("\t\t\t你的选择有误,请重新选择:\t\t\t\n");
continue;
}
else if (m >= 1 && m <= 4)
break;
}
system("cls");
switch (m)
{
case 1:
modfiy();
break;
case 2:
handmenu1();
break;
case 3:
login();
break;
case 4:
printf("\t\t\t欢迎下次继续使用,再见!\n");
exit(0);
break;
default:
break;
}
}
void modfiypublisher()
{
FILE* fp;
char str1[50];
char str2[50];
int sum = 0, i, m,n=1;
struct book books[100];
printf("\t\t\t请先输入你想要修改图书信息的书名:\n");
printf("\t\t\t");
scanf("%s", str1);
if ((fp = fopen("b.txt", "rb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
sum++;
}
if (sum == 0)
{
printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\n");
input();
}
printf("\t\t\t请输入你想要修改的出版社:\n");
printf("\t\t\t");
scanf("%s", str2);
for (i = 0; i < sum; i++)
{
if (strcmp(books[i].name, str1) == 0)
{
strcpy(books[i].publisher, str2);
}
}
fclose(fp);
if ((fp = fopen("b.txt", "wb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t正在保存中");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
for (i = 0; i < sum; i++)
fwrite(&books[i], sizeof(book), 1, fp);
printf("\t\t\t保存成功!\n");
fclose(fp);
Sleep(1000);
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\t请从1到4中选择你的操作:\n");
while (1)
{
printf("\t\t\t");
scanf("%d", &m);
if (m < 1 || m>4)
{
printf("你的选择有误,请重新选择:\n");
continue;
}
else if (m >= 1 && m <= 4)
break;
}
system("cls");
switch (m)
{
case 1:
modfiy();
break;
case 2:
handmenu1();
break;
case 3:
login();
break;
case 4:
printf("\t\t\t欢迎下次继续使用,再见!\t\t\t\n");
exit(0);
break;
default:
break;
}
}
void modfiypublishtime()
{
FILE* fp;
char str1[50];
char str2[50];
int sum = 0, i, m;
struct book books[100];
printf("\t\t\t请先输入你想要修改图书信息的书名:\n");
printf("\t\t\t");
scanf("%s", str1);
if ((fp = fopen("b.txt", "rb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
sum++;
}
if (sum == 0)
{
printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\n");
input();
}
printf("\t\t\t请输入你想要修改的出版时间:\n");
printf("\t\t\t");
scanf("%s", str2);
for (i = 0; i < sum; i++)
{
if (strcmp(books[i].name, str1) == 0)
strcpy(books[i].publishtime, str2);
}
fclose(fp);
if ((fp = fopen("b.txt", "wb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t正在保存中");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
for (i = 0; i < sum; i++)
fwrite(&books[i], sizeof(book), 1, fp);
printf("\t\t\t保存成功!\n");
fclose(fp);
Sleep(1000);
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\t请从1到4中选择你的操作:\n");
while (1)
{
printf("\t\t\t");
scanf("%d", &m);
if (m < 1 || m>4)
{
printf("\t\t\t你的选择有误,请重新选择:\n");
continue;
}
else if (m >= 1 && m <= 4)
break;
}
system("cls");
switch (m)
{
case 1:
modfiy();
break;
case 2:
handmenu1();
break;
case 3:
login();
break;
case 4:
printf("\t\t\t欢迎下次继续使用,再见!\t\t\t\n");
exit(0);
break;
default:
break;
}
}
void modfiyprice()
{
FILE* fp;
char str1[50];
int str2;
int sum = 0, i, m;
struct book books[100];
printf("\t\t\t请先输入你想要修改图书信息的书名:\n");
printf("\t\t\t");
scanf("%s", str1);
if ((fp = fopen("b.txt", "rb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
sum++;
}
if (sum == 0)
{
printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\n");
input();
}
printf("\t\t\t请输入你想要修改的图书价格:\n");
printf("\t\t\t");
scanf("%d",&str2);
for (i = 0; i < sum; i++)
{
if (strcmp(books[i].name, str1) == 0)
books[i].price =str2;
}
fclose(fp);
if ((fp = fopen("b.txt", "wb")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t正在保存中");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
for (i = 0; i < sum; i++)
fwrite(&books[i], sizeof(book), 1, fp);
printf("\t\t\t保存成功!\n");
fclose(fp);
Sleep(1000);
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\t请从1到4中选择你的操作:\n");
while (1)
{
printf("\t\t\t");
scanf("%d", &m);
if (m < 1 || m>4)
{
printf("\t\t\t你的选择有误,请重新选择:\n");
continue;
}
else if (m >= 1 && m <= 4)
break;
}
system("cls");
switch (m)
{
case 1:
modfiy();
break;
case 2:
handmenu1();
break;
case 3:
login();
break;
case 4:
printf("\t\t\t欢迎下次继续使用,再见!\t\t\t\n");
exit(0);
break;
default:
break;
}
}
void modfiy()//修改功能
{
int n;
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\t请从1到4中选择\n");
while (1)
{
printf("\t\t\t");
scanf("%d", &n);
if (n > 4 || n < 1)
{
printf("\t\t\t你的输入有误,请重新输入:\n");
continue;
}
else if (n >= 1 && n <= 4)
break;
}
system("cls");
switch (n)
{
case 1:
modfiyclassify();
break;
case 2:
modfiypublisher();
break;
case 3:
modfiypublishtime();
break;
case 4:
modfiyprice();
break;
default:
break;
}
}
void changlock()//操作8,管理员修改密码功能 密码设置功能为最长为12位。
{
FILE* fp=NULL,*fp1=NULL;
char str[3], str1[50],str2[50];
char a[50],b[50];
int sign = 1;
system("cls");
printf("\t\t\t你已选择管理员密码修改操作,请再一次确认你的操作:(y/n)\n");
printf("\t\t\t");
scanf("%s", str);
if (strcmp(str, "y") == 0 || strcmp(str, "Y") == 0)
{
printf("\t\t\t请输入你想要修改密码的账号: \n");
printf("\t\t\t");
scanf("%s", str1);
printf("\t\t\t请输入你想要修改的密码: \n");
printf("\t\t\t");
scanf("%s", str2);
if ((fp = fopen("a.txt", "r")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
if ((fp1 = fopen("d.txt", "w")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
do
{
if (fscanf(fp, "%s %s\n", a, b) != 0)
{
if (strcmp(a, str1) == 0)
strcpy(b, str2);
fprintf(fp1, "%s %s\n", a, b);
}
else
break;
} while (!feof(fp));
fclose(fp);
fclose(fp1);
if ((fp1= fopen("d.txt", "r")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
if ((fp = fopen("a.txt", "w")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t正在修改中,请稍后");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
do
{
fscanf(fp1, "%s %s\n", a, b);
fprintf(fp, "%s %s\n", a, b);
}
while (!feof(fp1));
fclose(fp);
fclose(fp1);
system("cls");
printf("\t\t\t恭喜你已成功修改管理员密码,请重新登录。\t\t\t\n");
Sleep(1000);
system("cls");
login();
}
else if (strcmp(str, "n") == 0 || strcmp(str, "N") == 0)
{
printf("\t\t\t你已选择放弃修改密码。\t\t\t\n");
Sleep(1000);
system("cls");
handmenu1();
}
}
void regist()//登录功能
{
system("cls");
FILE* fp;
char str1[20],str2[20], n[3];
int sign = 1;
printf("\n\n\n\n");
printf("\t \t\t你已选择身份注册功能,请完善你的个人信息:\t\t\t\n");
printf("\t\t\t1、选择管理员身份注册 \t\t\t\n");
printf("\t\t\t 2、选择学生身份注册\t\t\t\n");
printf("\t\t\t请选择你的注册身份(1或者2):\t\t\t\n");
while (1)
{
printf("\t\t\t");
scanf("%s", n);
if (strcmp(n, "1") == 0 || strcmp(n, "2") == 0)
break;
else
{
printf("\t\t\t你的选择有误,请重新选择:\t\t\t\n");
continue;
}
}
if (strcmp(n, "1") == 0)
{
system("cls");
printf("\n\n\n\n");
printf("\t\t\t 你已选择管理员身份注册,请注册你的账号密码:\t\t\t\n");
if ((fp = fopen("a.txt", "ab")) == NULL)//追加密码
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t请输入你的账号:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str1);
printf("\t\t\t 请输入你的密码:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str2);
fprintf(fp, "%s %s\n", str1, str2);
printf("\t\t\t正在注册中,请稍后");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
printf("\t\t\t 注册成功!");
fclose(fp);
Sleep(1000);
system("cls");
login();
}
else if (strcmp(n, "2") == 0)
{
system("cls");
printf("\t\t\t你已选择学生身份注册,请注册你的账号密码:\n");
if ((fp = fopen("c.txt", "ab")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
printf("\t\t\t请输入你的账号:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str1);
printf("\t\t\t请输入你的密码:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str2);
fprintf(fp, "%s %s\n", str1, str2);
printf("\t\t\t正在注册中,请稍后");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
printf("\t\t\t 注册成功!");
fclose(fp);
Sleep(1000);
system("cls");
login();
}
}
void handmenu1()//管理员权限
{
int n;
int sign = 1;
printf("\t*********************************************************************************************\t\n");
printf("\t* 系统已确认你的管理员的身份,你可以执行以下的操作: *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 0.图书信息的录入 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 1.图书信息的浏览 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 2.图书信息的查询 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 3.图书信息的排序 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 4.图书信息的删除 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 5.图书信息的修改 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 6.管理员密码修改 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 7.程序结束功能 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 8、主菜单 *\t\n");
printf("\t*-------------------------------------------------------------------------------------------*\t\n");
printf("\t* 请从0到8中选择你接下来要进行的操作: *\t\n");
printf("\t*********************************************************************************************\t\n");
while (sign)
{
printf("\t");
scanf("%d", &n);
if (n >= 0 && n <= 8)
sign = 0;
else
{
printf("\t\t\t你的输入有误,请重新输入你选择的操作:\t\t\t\n");
continue;
}
}
system("cls");
switch (n)
{
case 0:
input();//输入
break;
case 1:
browse();//浏览
break;
case 2:
check();//查询
break;
case 3:
sort();//排序
break;
case 4:
dele();//删除
break;
case 5:
modfiy();//修改
break;
case 6:
changlock();//管理员修改密码
break;
case 7:
printf("\t\t\t欢迎下次使用,再见!\t\t\t\n");
exit(0);
break;
case 8:
login();
break;
default:
break;
}
}
void menu1()//管理员登录菜单功能
{
FILE* fp;
char a[20], b[20];
char str[20], str1[20];
int sign = 0;
while (1)
{
printf("\t\t\t请输入管理员账号:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str);
printf("\t\t\t请输入管理员密码:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str1);
if ((fp = fopen("a.txt", "r")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
fscanf(fp, "%s %s", a, b);
if (strcmp(str, a) == 0 && strcmp(str1, b) == 0)
{
printf("\t\t\t登录中");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
printf("\t\t\t登录成功!\t\t\t\n");
Sleep(1000);
system("cls");
handmenu1();
sign = 1;
break;
}
}
if (sign == 0)
{
system("cls");
printf("\t\t\t管理员密码不正确,或账号错误,请重新登录:\t\t\t\n");
continue;
}
fclose(fp);
}
}
void handmenu2()//学生身份登录菜单功能
{
int m;
int sign = 1;
char n[3];
printf("\t******************************************************************************************\t\n");
printf("\t* 1.图书信息的浏览 *\t\n");
printf("\t*----------------------------------------------------------------------------------------*\t\n");
printf("\t* 2.图书信息的查询 *\t\n");
printf("\t*----------------------------------------------------------------------------------------*\t\n");
printf("\t* 3.图书信息的排序 *\t\n");
printf("\t*----------------------------------------------------------------------------------------*\t\n");
printf("\t* 4、主菜单 *\t\n");
printf("\t*----------------------------------------------------------------------------------------*\t\n");
printf("\t* 请从1到4中选择你想要进行的操作: *\t\n");
printf("\t******************************************************************************************\t\n");
while (sign)
{
printf("\t");
scanf("%s", n);
if (strcmp(n, "1") == 0)
{
m = 1;
sign = 0;
}
else if (strcmp(n, "2") == 0)
{
m = 2;
sign = 0;
}
else if (strcmp(n, "3") == 0)
{
m = 3;
sign = 0;
}
else if (strcmp(n, "4") == 0)
{
m = 4;
sign = 0;
}
else
{
system("cls");
printf("\t\t\t你的输入有误,请重新输入:\t\t\t\n");
continue;
}
}
system("cls");
switch (m)
{
case 1:
browse1();
break;
case 2:
check();
break;
case 3:
sort();
break;
case 4:
login();
break;
default:
break;
}
}
void menu2()//学生菜单功能
{
FILE *fp=NULL;
char str1[20], str2[20];
char a[20], b[20];
int sign = 0,m = 0, count = 1, j = 0;
while (count)
{
printf("\t\t\t请输入你的账号:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str1);
printf("\t\t\t请输入你的密码:\t\t\t\n");
printf("\t\t\t");
scanf("%s", str2);
if ((fp = fopen("c.txt", "r")) == NULL)
{
printf("can not open file!\n");
exit(0);
}
while (!feof(fp))
{
fscanf(fp, "%s %s", a, b);
if (strcmp(str1, a) == 0 && strcmp(str2, b) == 0)
{
sign = 1;
count = 0;
break;
}
}
if (sign == 0)
{
system("cls");
printf("\t\t\t你的输入账号或密码错误,请重新输入:\t\t\t\n");
continue;
}
}
fclose(fp);
printf("\t\t\t登录中");
Sleep(500);
printf(".");
Sleep(500);
printf(".");
Sleep(500);
printf(".\n");
printf("\t\t\t登陆成功!\t\t\t\n");
Sleep(1000);
system("cls");
printf("\t\t\t系统已确认你的学生身份,你可以选择下面的操作:\t\t\t\n");
handmenu2();
}
void login()//登录功能
{
char m[3];
printf("\t******************************************************************************************\t\n");
printf("\t* 这是一个图书管理系统,请完成接下来的操作 *\t\n");
printf("\t*----------------------------------------------------------------------------------------*\t\n");
printf("\t* 1、注册身份 *\t\n");
printf("\t*----------------------------------------------------------------------------------------*\t\n");
printf("\t* 2、管理员身份 *\t\n");
printf("\t*----------------------------------------------------------------------------------------*\t\n");
printf("\t* 3、学生身份 *\t\n");
printf("\t*----------------------------------------------------------------------------------------*\t\n");
printf("\t* 请从1到3中选择 *\t\n");
printf("\t******************************************************************************************\t\n");
while (1)
{
printf("\t");
scanf("%s", m);
if (strcmp(m, "2") == 0)
{
system("cls");
printf("\t\t\t你已选择管理员身份登录.......\t\t\t\n");
menu1();
break;
}
else if (strcmp(m, "3") == 0)
{
system("cls");
printf("\t\t\t你已选择学生身份登录........\t\t\t\n");
menu2();
break;
}
else if (strcmp(m, "1") == 0)
{
printf("\t\t\t你已选择身份注册功能........\t\t\t\n");
regist();
break;
}
else
{
printf("你的输入有误,请重新输入......\n");
continue;
}
}
}
int main(void)
{
login();
}