You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1521 lines
36 KiB
1521 lines
36 KiB
#include <cstdio>
|
|
#include <stdio.h>
|
|
#include <conio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <windows.h>
|
|
#include "information.h"
|
|
|
|
int v;
|
|
int g;
|
|
struct BOOK b;
|
|
struct BOOK *i;
|
|
struct BOOK *j;
|
|
struct BOOK *H;
|
|
struct BOOK *T;
|
|
struct BOOK *Head;
|
|
struct BOOK *Temp;
|
|
extern int vip;
|
|
extern struct STUDENT *HEAD;
|
|
extern struct STUDENT *TEMP;
|
|
|
|
void cls();
|
|
void Login();
|
|
void stu_menu();
|
|
void adm_menu();
|
|
void read_user();
|
|
void adm_window();
|
|
void view1_book();
|
|
void view2_book();
|
|
void recovery_window();
|
|
void book_printf(int a);
|
|
void tp(short x, short y);
|
|
void color(short x);
|
|
|
|
void Swap(char *a, char *b) {
|
|
char t[21];
|
|
strcpy(t, a);
|
|
strcpy(a, b);
|
|
strcpy(b, t);
|
|
}
|
|
|
|
void Swap_num(int *a, int *b) {
|
|
int t;
|
|
t = *a;
|
|
*a = *b;
|
|
*b = t;
|
|
}
|
|
|
|
void read_book() {
|
|
struct BOOK *p;
|
|
T = (struct BOOK *)malloc(sizeof(struct BOOK));
|
|
H = T;
|
|
FILE *fp = fopen("book.txt", "r");
|
|
if(fp == NULL) {
|
|
cls();
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("无法打开文件");
|
|
tp(39, 10);
|
|
printf("按任意键退出...");
|
|
tp(39, 12);
|
|
getch();
|
|
exit(2);
|
|
}
|
|
while(!feof(fp)) {
|
|
p = T;
|
|
fscanf(fp, "%s %s %s %s %d\n", T->name, T->author, T->type, T->publish, &T->number);
|
|
T->next = (struct BOOK *)malloc(sizeof(struct BOOK));
|
|
T = T->next;
|
|
}
|
|
free(T);
|
|
p->next = NULL;
|
|
fclose(fp);
|
|
}
|
|
|
|
void read_lend() {
|
|
struct BOOK *p;
|
|
Temp = (struct BOOK *)malloc(sizeof(struct BOOK));
|
|
Head = Temp;
|
|
FILE *fp = fopen("lend.txt", "r");
|
|
if(fp == NULL) {
|
|
cls();
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("无法打开文件");
|
|
tp(39, 10);
|
|
printf("按任意键退出...");
|
|
tp(39, 12);
|
|
getch();
|
|
exit(2);
|
|
}
|
|
while(!feof(fp)) {
|
|
p = Temp;
|
|
fscanf(fp, "%s %s %s %s %s\n", Temp->name, Temp->author, Temp->type, Temp->publish, Temp->user);
|
|
Temp->next = (struct BOOK *)malloc(sizeof(struct BOOK));
|
|
Temp = Temp->next;
|
|
}
|
|
free(Temp);
|
|
p->next = NULL;
|
|
fclose(fp);
|
|
}
|
|
|
|
int user_num(int z, int h) {
|
|
int d = 0, n = 0;
|
|
char t, u[10];
|
|
t = getch();
|
|
while(1) {
|
|
if(t == 13) {
|
|
if(n == 0) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(65, 6);
|
|
printf("输入数量不能为空");
|
|
tp(45 + h, z);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
if(t == 27)
|
|
adm_menu();
|
|
if(t == 8 && n == 0) {
|
|
t = getch();
|
|
continue;
|
|
}
|
|
else if(t == 8) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(45 + h, z);
|
|
printf(" ");
|
|
tp(45 + h, z);
|
|
n--;
|
|
u[n] = 0;
|
|
printf("%s", u);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
if(n == 10) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(65, 6);
|
|
printf("超出字数限制");
|
|
tp(45 + h, z);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
if(t > 47 && t < 58) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(45 + h, z);
|
|
u[n] = t;
|
|
n++;
|
|
u[n] = 0;
|
|
printf("%s", u);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
else {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(65, 6);
|
|
printf("请不要输入数字以外的符号");
|
|
tp(45 + h, z);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
}
|
|
for(int i = n - 1, j = 1; i >= 0; i--, j *= 10)
|
|
d += (u[i] - 48)*j;
|
|
return d;
|
|
}
|
|
|
|
void user_name(int z, char *u, int h) {
|
|
int n = 0;
|
|
char t;
|
|
t = getch();
|
|
while(1) {
|
|
if(t == 13) {
|
|
if(v == 1 && n < 6) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(65, 6);
|
|
printf("密码过短");
|
|
tp(45 + h, z);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
if(n == 0) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(65, 6);
|
|
printf("输入内容不能为空");
|
|
tp(45 + h, z);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
if(t == 27) {
|
|
if(vip == 1) {
|
|
if(g == 1)
|
|
view2_book();
|
|
else
|
|
adm_menu();
|
|
}
|
|
else {
|
|
if(g == 1)
|
|
view1_book();
|
|
else
|
|
stu_menu();
|
|
}
|
|
}
|
|
if(t == 8 && n == 0) {
|
|
t = getch();
|
|
continue;
|
|
}
|
|
else if(t == 8) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(45 + h, z);
|
|
printf(" ");
|
|
tp(45 + h, z);
|
|
n--;
|
|
u[n] = 0;
|
|
if(u[n - 1] < 0) {
|
|
n--;
|
|
u[n] = 0;
|
|
}
|
|
printf("%s", u);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
if(n == 20) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(65, 6);
|
|
printf("超出字数限制");
|
|
tp(45 + h, z);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
if(t == 32) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(65, 6);
|
|
printf("请不要输入空格");
|
|
tp(45 + h, z);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
if(t == 0 || t == -32) {
|
|
getch();
|
|
t = getch();
|
|
continue;
|
|
}
|
|
if(t < 0) {
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(45 + h, z);
|
|
u[n] = t;
|
|
n++;
|
|
t = getch();
|
|
u[n] = t;
|
|
n++;
|
|
u[n] = 0;
|
|
printf("%s", u);
|
|
t = getch();
|
|
continue;
|
|
}
|
|
tp(65, 6);
|
|
printf(" ");
|
|
tp(45 + h, z);
|
|
u[n] = t;
|
|
n++;
|
|
u[n] = 0;
|
|
printf("%s", u);
|
|
t = getch();
|
|
}
|
|
u[n] = 0;
|
|
}
|
|
|
|
int search_book() {
|
|
cls();
|
|
int x = 0;
|
|
struct BOOK temp;
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("请输入图书信息");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("书名:");
|
|
tp(39, 12);
|
|
printf("作者:");
|
|
tp(39, 14);
|
|
printf("出版社:");
|
|
color(8);
|
|
tp(39, 16);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(44, 10);
|
|
user_name(10, temp.name, -1);
|
|
tp(44, 12);
|
|
user_name(12, temp.author, -1);
|
|
tp(46, 14);
|
|
user_name(14, temp.publish, 1);
|
|
tp(39, 18);
|
|
read_book();
|
|
T = H;
|
|
while(T != NULL) {
|
|
if(!strcmp(temp.name, T->name) && !strcmp(temp.author, T->author) && !strcmp(temp.publish, T->publish)) {
|
|
x = 1;
|
|
break;
|
|
}
|
|
T = T->next;
|
|
}
|
|
return x;
|
|
}
|
|
|
|
void no_info() {
|
|
color(12);
|
|
printf("未找到相应的信息");
|
|
color(11);
|
|
tp(39, 20);
|
|
printf("按任意键返回...");
|
|
tp(39, 22);
|
|
getch();
|
|
}
|
|
|
|
void inquire1() {
|
|
if(search_book()) {
|
|
cls();
|
|
tp(39, 8);
|
|
printf("书名:%s", T->name);
|
|
tp(39, 10);
|
|
printf("作者:%s", T->author);
|
|
tp(39, 12);
|
|
printf("类型:%s", T->type);
|
|
tp(39, 14);
|
|
printf("出版社:%s", T->publish);
|
|
tp(39, 16);
|
|
printf("数量:%d\n", T->number);
|
|
tp(39, 18);
|
|
printf("| 1.图书借出 |");
|
|
tp(39, 20);
|
|
printf("| 2.图书归还 |");
|
|
tp(39, 22);
|
|
printf("| 任意键返回菜单 |");
|
|
switch(getch()) {
|
|
case '1':book_printf(-1);break;
|
|
case '2':book_printf(1);
|
|
default :break;
|
|
}
|
|
}
|
|
else
|
|
no_info();
|
|
}
|
|
|
|
void inquire2() {
|
|
if(search_book()) {
|
|
cls();
|
|
tp(39, 8);
|
|
printf("书名:%s", T->name);
|
|
tp(39, 10);
|
|
printf("作者:%s", T->author);
|
|
tp(39, 12);
|
|
printf("类型:%s", T->type);
|
|
tp(39, 14);
|
|
printf("出版社:%s", T->publish);
|
|
tp(39, 16);
|
|
printf("数量:%d\n", T->number);
|
|
tp(39, 18);
|
|
printf("任意键返回菜单...");
|
|
getch();
|
|
}
|
|
else
|
|
no_info();
|
|
}
|
|
|
|
void change_question() {
|
|
cls();
|
|
color(11);
|
|
tp(39, 8);
|
|
printf("书名:%s", T->name);
|
|
tp(39, 10);
|
|
printf("作者:%s", T->author);
|
|
tp(39, 12);
|
|
printf("类型:%s", T->type);
|
|
tp(39, 14);
|
|
printf("出版社:%s", T->publish);
|
|
tp(39, 16);
|
|
printf("数量:%d", T->number);
|
|
color(12);
|
|
tp(39, 18);
|
|
printf("是否修改该图书");
|
|
tp(39, 20);
|
|
printf("| 1.是 |");
|
|
tp(39, 22);
|
|
printf("| 2.否 |");
|
|
tp(39, 24);
|
|
switch(getch()) {
|
|
case '1':break;
|
|
case '2':adm_menu();
|
|
case '\e':adm_menu();
|
|
default :change_question();
|
|
}
|
|
}
|
|
|
|
void change_book() {
|
|
cls();
|
|
int x = 0;
|
|
struct BOOK t;
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("请输入需要修改的图书信息");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("书名:");
|
|
tp(39, 12);
|
|
printf("作者:");
|
|
tp(39, 14);
|
|
printf("出版社:");
|
|
color(8);
|
|
tp(39, 16);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(44, 10);
|
|
user_name(10, t.name, -1);
|
|
tp(44, 12);
|
|
user_name(12, t.author, -1);
|
|
tp(46, 14);
|
|
user_name(14, t.publish, 1);
|
|
tp(39, 18);
|
|
read_book();
|
|
T = H;
|
|
while(T != NULL) {
|
|
if(!strcmp(t.name, T->name) && !strcmp(t.author, T->author) && !strcmp(t.publish, T->publish)) {
|
|
x = 1;
|
|
break;
|
|
}
|
|
T = T->next;
|
|
}
|
|
if(x) {
|
|
change_question();
|
|
cls();
|
|
color(11);
|
|
tp(30, 8);
|
|
printf("书名:%s", T->name);
|
|
tp(54, 8);
|
|
printf("->");
|
|
tp(30, 10);
|
|
printf("作者:%s", T->author);
|
|
tp(54, 10);
|
|
printf("->");
|
|
tp(30, 12);
|
|
printf("类型:%s", T->type);
|
|
tp(54, 12);
|
|
printf("->");
|
|
tp(30, 14);
|
|
printf("出版社:%s", T->publish);
|
|
tp(54, 14);
|
|
printf("->");
|
|
tp(30, 16);
|
|
printf("数量:%d", T->number);
|
|
tp(54, 16);
|
|
printf("->");
|
|
color(8);
|
|
tp(39, 18);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(64, 8);
|
|
user_name(8, T->name, 19);
|
|
tp(64, 10);
|
|
user_name(10, T->author, 19);
|
|
tp(64, 12);
|
|
user_name(12, T->type, 19);
|
|
tp(64, 14);
|
|
user_name(14, T->publish, 19);
|
|
tp(64, 16);
|
|
T->number = user_num(16, 19);
|
|
tp(39, 20);
|
|
for(i = H; i != NULL; i = i->next)
|
|
for(j = i->next; j != NULL; j = j->next)
|
|
if(i->number > j->number) {
|
|
Swap(i->name, j->name);
|
|
Swap(i->author, j->author);
|
|
Swap(i->type, j->type);
|
|
Swap(i->publish, j->publish);
|
|
Swap_num(&i->number, &j->number);
|
|
}
|
|
T = H;
|
|
FILE *fp = fopen("book.txt", "w");
|
|
while(T != NULL) {
|
|
fprintf(fp, "%s %s %s %s %d\n", T->name, T->author, T->type, T->publish, T->number);
|
|
T = T->next;
|
|
}
|
|
fclose(fp);
|
|
color(12);
|
|
printf("修改图书成功");
|
|
tp(39, 22);
|
|
color(11);
|
|
printf("按任意键返回...");
|
|
tp(39, 22);
|
|
getch();
|
|
}
|
|
else
|
|
no_info();
|
|
}
|
|
|
|
void add_() {
|
|
T = H;
|
|
while(T != NULL) {
|
|
if(b.number <= H->number) {
|
|
i = H;
|
|
H = &b;
|
|
b.next = i;
|
|
break;
|
|
}
|
|
if(T->next == NULL) {
|
|
T->next = &b;
|
|
b.next = NULL;
|
|
break;
|
|
}
|
|
if(b.number <= T->next->number) {
|
|
i = T->next;
|
|
T->next = &b;
|
|
b.next = i;
|
|
break;
|
|
}
|
|
T = T->next;
|
|
}
|
|
for(i = H; i != NULL; i = i->next)
|
|
for(j = i->next; j != NULL; j = j->next)
|
|
if(i->number > j->number) {
|
|
Swap(i->name, j->name);
|
|
Swap(i->author, j->author);
|
|
Swap(i->type, j->type);
|
|
Swap(i->publish, j->publish);
|
|
Swap_num(&i->number, &j->number);
|
|
}
|
|
T = H;
|
|
FILE *fp = fopen("book.txt", "w");
|
|
while(T != NULL) {
|
|
fprintf(fp, "%s %s %s %s %d\n", T->name, T->author, T->type, T->publish, T->number);
|
|
T = T->next;
|
|
}
|
|
fclose(fp);
|
|
cls();
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("添加成功");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("按任意键返回...");
|
|
tp(39, 12);
|
|
getch();
|
|
}
|
|
|
|
void add_question() {
|
|
color(12);
|
|
tp(39, 22);
|
|
printf("是否添加该图书");
|
|
tp(39, 24);
|
|
printf("| 1.是 |");
|
|
tp(39, 26);
|
|
printf("| 2.否 |");
|
|
tp(39, 28);
|
|
switch(getch()) {
|
|
case '1':add_();break;
|
|
case '2':break;
|
|
case '\e':adm_menu();
|
|
default :add_question();
|
|
}
|
|
}
|
|
|
|
void add_book() {
|
|
cls();
|
|
int x = 0;
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("请输入需要添加的图书信息");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("书名:");
|
|
tp(39, 12);
|
|
printf("作者:");
|
|
tp(39, 14);
|
|
printf("类型:");
|
|
tp(39, 16);
|
|
printf("出版社:");
|
|
tp(39, 18);
|
|
printf("数量:");
|
|
color(8);
|
|
tp(39, 20);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(44, 10);
|
|
user_name(10, b.name, -1);
|
|
tp(44, 12);
|
|
user_name(12, b.author, -1);
|
|
tp(44, 14);
|
|
user_name(14, b.type, -1);
|
|
tp(46, 16);
|
|
user_name(16, b.publish, 1);
|
|
tp(44, 18);
|
|
b.number = user_num(18, -1);
|
|
tp(39, 22);
|
|
read_book();
|
|
T = H;
|
|
while(T != NULL) {
|
|
if(!strcmp(b.name, T->name) && !strcmp(b.author, T->author) && !strcmp(b.publish, T->publish)) {
|
|
x = 1;
|
|
break;
|
|
}
|
|
T = T->next;
|
|
}
|
|
if(x) {
|
|
cls();
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("该图书已存在");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("按任意键返回...");
|
|
tp(39, 12);
|
|
getch();
|
|
}
|
|
else
|
|
add_question();
|
|
}
|
|
|
|
void del_() {
|
|
struct BOOK *p = H;
|
|
if(T == H) {
|
|
H = T->next;
|
|
free(T);
|
|
}
|
|
else {
|
|
while(p != NULL && p->next != T)
|
|
p = p->next;
|
|
p->next = T->next;
|
|
free(T);
|
|
}
|
|
T = H;
|
|
FILE *fp = fopen("book.txt", "w");
|
|
while(T != NULL) {
|
|
fprintf(fp, "%s %s %s %s %d\n", T->name, T->author, T->type, T->publish, T->number);
|
|
T = T->next;
|
|
}
|
|
fclose(fp);
|
|
color(12);
|
|
printf("删除图书成功");
|
|
tp(39, 26);
|
|
color(11);
|
|
printf("按任意键返回...");
|
|
tp(39, 28);
|
|
getch();
|
|
}
|
|
|
|
void del_question() {
|
|
cls();
|
|
color(11);
|
|
tp(39, 8);
|
|
printf("书名:%s", T->name);
|
|
tp(39, 10);
|
|
printf("作者:%s", T->author);
|
|
tp(39, 12);
|
|
printf("类型:%s", T->type);
|
|
tp(39, 14);
|
|
printf("出版社:%s", T->publish);
|
|
tp(39, 16);
|
|
printf("数量:%d", T->number);
|
|
color(12);
|
|
tp(39, 18);
|
|
printf("是否删除该图书");
|
|
tp(39, 20);
|
|
printf("| 1.是 |");
|
|
tp(39, 22);
|
|
printf("| 2.否 |");
|
|
tp(39, 24);
|
|
switch(getch()) {
|
|
case '1':del_();break;
|
|
case '2':break;
|
|
case '\e':adm_menu();
|
|
default :del_question();
|
|
}
|
|
}
|
|
|
|
void delete_book() {
|
|
cls();
|
|
int x = 0;
|
|
struct BOOK t;
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("请输入需要删除的图书信息");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("书名:");
|
|
tp(39, 12);
|
|
printf("作者:");
|
|
tp(39, 14);
|
|
printf("出版社:");
|
|
color(8);
|
|
tp(39, 16);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(44, 10);
|
|
user_name(10, t.name, -1);
|
|
tp(44, 12);
|
|
user_name(12, t.author, -1);
|
|
tp(46, 14);
|
|
user_name(14, t.publish, 1);
|
|
tp(39, 18);
|
|
read_book();
|
|
T = H;
|
|
while(T != NULL) {
|
|
if(!strcmp(t.name, T->name) && !strcmp(t.author, T->author) && !strcmp(t.publish, T->publish)) {
|
|
x = 1;
|
|
break;
|
|
}
|
|
T = T->next;
|
|
}
|
|
if(x)
|
|
del_question();
|
|
else
|
|
no_info();
|
|
}
|
|
|
|
void print() {
|
|
printf("-------------------------------------------------------------------------------------------------\n");
|
|
printf(" 书名 作者 类型 出版社 数量\n");
|
|
printf("-------------------------------------------------------------------------------------------------\n");
|
|
}
|
|
|
|
void All() {
|
|
cls();
|
|
int x = 3;
|
|
read_book();
|
|
print();
|
|
T = H;
|
|
color(12);
|
|
while(T != NULL) {
|
|
tp(0, x);
|
|
printf("%s", T->name);
|
|
tp(24, x);
|
|
printf("%s", T->author);
|
|
tp(45, x);
|
|
printf("%s", T->type);
|
|
tp(65, x);
|
|
printf("%s", T->publish);
|
|
tp(88, x);
|
|
printf("%d", T->number);
|
|
x++;
|
|
T = T->next;
|
|
}
|
|
color(11);
|
|
printf("\n\n按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
|
|
void Auth() {
|
|
cls();
|
|
int z = 0, x = 3;
|
|
char t[21];
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("作者查询");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("请输入需要查询的作者:");
|
|
color(8);
|
|
tp(39, 12);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(60, 10);
|
|
user_name(10, t, 15);
|
|
tp(39, 14);
|
|
read_book();
|
|
T = H;
|
|
color(12);
|
|
while(T != NULL) {
|
|
if(strcmp(t, T->author) == 0 && z == 0) {
|
|
cls();
|
|
print();
|
|
tp(0, x);
|
|
printf("%s", T->name);
|
|
tp(24, x);
|
|
printf("%s", T->author);
|
|
tp(45, x);
|
|
printf("%s", T->type);
|
|
tp(65, x);
|
|
printf("%s", T->publish);
|
|
tp(88, x);
|
|
printf("%d", T->number);
|
|
x++;
|
|
z++;
|
|
}
|
|
else if(strcmp(t, T->author) == 0) {
|
|
tp(0, x);
|
|
printf("%s", T->name);
|
|
tp(24, x);
|
|
printf("%s", T->author);
|
|
tp(45, x);
|
|
printf("%s", T->type);
|
|
tp(65, x);
|
|
printf("%s", T->publish);
|
|
tp(88, x);
|
|
printf("%d", T->number);
|
|
x++;
|
|
}
|
|
T = T->next;
|
|
}
|
|
if(z == 0) {
|
|
printf("无该作者的信息");
|
|
color(11);
|
|
tp(39, 16);
|
|
printf("按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
else {
|
|
color(11);
|
|
printf("\n\n按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
}
|
|
|
|
void Type() {
|
|
cls();
|
|
int z = 0, x = 3;
|
|
char t[21];
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("类型查询");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("请输入需要查询的类型:");
|
|
color(8);
|
|
tp(39, 12);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(60, 10);
|
|
user_name(10, t, 15);
|
|
tp(39, 14);
|
|
read_book();
|
|
T = H;
|
|
color(12);
|
|
while(T != NULL) {
|
|
if(strcmp(t, T->type) == 0 && z == 0) {
|
|
cls();
|
|
print();
|
|
tp(0, x);
|
|
printf("%s", T->name);
|
|
tp(24, x);
|
|
printf("%s", T->author);
|
|
tp(45, x);
|
|
printf("%s", T->type);
|
|
tp(65, x);
|
|
printf("%s", T->publish);
|
|
tp(88, x);
|
|
printf("%d", T->number);
|
|
x++;
|
|
z++;
|
|
}
|
|
else if(strcmp(t, T->type) == 0) {
|
|
tp(0, x);
|
|
printf("%s", T->name);
|
|
tp(24, x);
|
|
printf("%s", T->author);
|
|
tp(45, x);
|
|
printf("%s", T->type);
|
|
tp(65, x);
|
|
printf("%s", T->publish);
|
|
tp(88, x);
|
|
printf("%d", T->number);
|
|
x++;
|
|
}
|
|
T = T->next;
|
|
}
|
|
if(z == 0) {
|
|
printf("无该类型的信息");
|
|
color(11);
|
|
tp(39, 16);
|
|
printf("按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
else {
|
|
color(11);
|
|
printf("\n\n按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
}
|
|
|
|
void Publish() {
|
|
cls();
|
|
int z = 0, x = 3;
|
|
char t[21];
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("出版社查询");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("请输入需要查询的出版社:");
|
|
color(8);
|
|
tp(39, 12);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(62, 10);
|
|
user_name(10, t, 17);
|
|
tp(39, 14);
|
|
read_book();
|
|
T = H;
|
|
color(12);
|
|
while(T != NULL) {
|
|
if(strcmp(t, T->publish) == 0 && z == 0) {
|
|
cls();
|
|
print();
|
|
tp(0, x);
|
|
printf("%s", T->name);
|
|
tp(24, x);
|
|
printf("%s", T->author);
|
|
tp(45, x);
|
|
printf("%s", T->type);
|
|
tp(65, x);
|
|
printf("%s", T->publish);
|
|
tp(88, x);
|
|
printf("%d", T->number);
|
|
x++;
|
|
z++;
|
|
}
|
|
else if(strcmp(t, T->publish) == 0) {
|
|
tp(0, x);
|
|
printf("%s", T->name);
|
|
tp(24, x);
|
|
printf("%s", T->author);
|
|
tp(45, x);
|
|
printf("%s", T->type);
|
|
tp(65, x);
|
|
printf("%s", T->publish);
|
|
tp(88, x);
|
|
printf("%d", T->number);
|
|
x++;
|
|
}
|
|
T = T->next;
|
|
}
|
|
if(z == 0) {
|
|
printf("无该出版社的信息");
|
|
color(11);
|
|
tp(39, 16);
|
|
printf("按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
else {
|
|
color(11);
|
|
printf("\n\n按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
}
|
|
|
|
void lend_user() {
|
|
cls();
|
|
read_lend();
|
|
Temp = Head;
|
|
int z = 0, x = 3;
|
|
color(12);
|
|
while(Temp != NULL) {
|
|
if(!strcmp(Temp->user, TEMP->name) && z == 0) {
|
|
color(11);
|
|
printf("-------------------------------------------------------------------------------------------------\n");
|
|
printf(" 书名 作者 类型 出版社\n");
|
|
printf("-------------------------------------------------------------------------------------------------\n");
|
|
color(12);
|
|
tp(0, x);
|
|
printf("%s", Temp->name);
|
|
tp(28, x);
|
|
printf("%s", Temp->author);
|
|
tp(54, x);
|
|
printf("%s", Temp->type);
|
|
tp(80, x);
|
|
printf("%s", Temp->publish);
|
|
x++;
|
|
z++;
|
|
}
|
|
else if(!strcmp(Temp->user, TEMP->name)) {
|
|
tp(0, x);
|
|
printf("%s", Temp->name);
|
|
tp(28, x);
|
|
printf("%s", Temp->author);
|
|
tp(54, x);
|
|
printf("%s", Temp->type);
|
|
tp(80, x);
|
|
printf("%s", Temp->publish);
|
|
x++;
|
|
}
|
|
Temp = Temp->next;
|
|
}
|
|
if(z == 0) {
|
|
tp(39, 8);
|
|
printf("您未曾借过本图书馆的图书");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
else {
|
|
color(11);
|
|
printf("\n\n按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
}
|
|
|
|
void view1_book() {
|
|
cls();
|
|
g = 1;
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("图书总览");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("| 1.全部 |");
|
|
tp(39, 12);
|
|
printf("| 2.作者查询 |");
|
|
tp(39, 14);
|
|
printf("| 3.类型查询 |");
|
|
tp(39, 16);
|
|
printf("| 4.出版社查询 |");
|
|
tp(39, 18);
|
|
printf("| 5.已借图书 |");
|
|
tp(39, 20);
|
|
printf("| 6.返回菜单 |");
|
|
tp(39, 22);
|
|
printf("| 7.退出 |");
|
|
switch(getch()) {
|
|
case '1':All();view1_book();
|
|
case '2':Auth();view1_book();
|
|
case '3':Type();view1_book();
|
|
case '4':Publish();view1_book();
|
|
case '5':lend_user();view1_book();
|
|
case '6':g = 0;stu_menu();
|
|
case '7':exit(0);
|
|
case '\e':g = 0;stu_menu();
|
|
default :view1_book();
|
|
}
|
|
}
|
|
|
|
void lend_() {
|
|
cls();
|
|
printf("-------------------------------------------------------------------------------------------------\n");
|
|
printf(" 书名 作者 类型 出版社 借书人\n");
|
|
printf("-------------------------------------------------------------------------------------------------\n");
|
|
read_lend();
|
|
Temp = Head;
|
|
int x = 3;
|
|
color(12);
|
|
while(Temp != NULL) {
|
|
tp(0, x);
|
|
printf("%s", Temp->name);
|
|
tp(24, x);
|
|
printf("%s", Temp->author);
|
|
tp(45, x);
|
|
printf("%s", Temp->type);
|
|
tp(65, x);
|
|
printf("%s", Temp->publish);
|
|
tp(88, x);
|
|
printf("%s", Temp->user);
|
|
x++;
|
|
Temp = Temp->next;
|
|
}
|
|
color(11);
|
|
printf("\n\n按任意键返回...");
|
|
getch();
|
|
cls();
|
|
}
|
|
|
|
void view2_book() {
|
|
cls();
|
|
g = 1;
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("图书总览");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("| 1.全部 |");
|
|
tp(39, 12);
|
|
printf("| 2.作者查询 |");
|
|
tp(39, 14);
|
|
printf("| 3.类型查询 |");
|
|
tp(39, 16);
|
|
printf("| 4.出版社查询 |");
|
|
tp(39, 18);
|
|
printf("| 5.已借图书 |");
|
|
tp(39, 20);
|
|
printf("| 6.返回菜单 |");
|
|
tp(39, 22);
|
|
printf("| 7.退出 |");
|
|
switch(getch()) {
|
|
case '1':All();view2_book();
|
|
case '2':Auth();view2_book();
|
|
case '3':Type();view2_book();
|
|
case '4':Publish();view2_book();
|
|
case '5':lend_();view2_book();
|
|
case '6':g = 0;adm_menu();
|
|
case '7':exit(0);
|
|
case '\e':g = 0;adm_menu();
|
|
default :view2_book();
|
|
}
|
|
}
|
|
|
|
void view_user() {
|
|
cls();
|
|
read_user();
|
|
printf("-------------------------------------------------------------------------------------------------\n");
|
|
printf(" 姓名 帐号 密码\n");
|
|
printf("-------------------------------------------------------------------------------------------------\n");
|
|
color(12);
|
|
TEMP = HEAD;
|
|
while(TEMP != NULL) {
|
|
printf("%22s %28s %23s\n", TEMP->name, TEMP->user_id, TEMP->password);
|
|
TEMP = TEMP->next;
|
|
}
|
|
color(11);
|
|
printf("\n按任意键返回...");
|
|
getch();
|
|
}
|
|
|
|
void del_user() {
|
|
struct STUDENT *p = HEAD;
|
|
if(TEMP == HEAD) {
|
|
HEAD = TEMP->next;
|
|
free(TEMP);
|
|
}
|
|
else {
|
|
while(p != NULL && p->next != TEMP)
|
|
p = p->next;
|
|
p->next = TEMP->next;
|
|
free(TEMP);
|
|
}
|
|
TEMP = HEAD;
|
|
FILE *fp = fopen("user.txt", "w");
|
|
while(TEMP != NULL) {
|
|
fprintf(fp, "%s %s %s\n", TEMP->name, TEMP->user_id, TEMP->password);
|
|
TEMP = TEMP->next;
|
|
}
|
|
fclose(fp);
|
|
color(12);
|
|
printf("删除用户成功");
|
|
tp(39, 26);
|
|
color(11);
|
|
printf("按任意键返回...");
|
|
tp(39, 28);
|
|
getch();
|
|
}
|
|
|
|
void change_user_ques() {
|
|
cls();
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("用户信息");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("姓名:%s", TEMP->name);
|
|
tp(39, 12);
|
|
printf("帐号:%s", TEMP->user_id);
|
|
tp(39, 14);
|
|
printf("密码:%s", TEMP->password);
|
|
color(12);
|
|
tp(39, 16);
|
|
printf("是否修改该用户信息");
|
|
tp(39, 18);
|
|
printf("| 1.是 |");
|
|
tp(39, 20);
|
|
printf("| 2.否 |");
|
|
tp(39, 22);
|
|
printf("| 9.删除用户 |");
|
|
tp(39, 24);
|
|
switch(getch()) {
|
|
case '1':break;
|
|
case '2':adm_menu();
|
|
case '9':del_user();adm_menu();
|
|
case '\e':adm_menu();
|
|
default :change_user_ques();
|
|
}
|
|
}
|
|
|
|
void change_user() {
|
|
cls();
|
|
int x = 0;
|
|
char user[21];
|
|
read_user();
|
|
color(12);
|
|
tp(36, 8);
|
|
printf("请输入需要修改的用户姓名或帐号");
|
|
color(8);
|
|
tp(45, 12);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(45, 10);
|
|
user_name(10, user, 0);
|
|
tp(44, 14);
|
|
TEMP = HEAD;
|
|
while(TEMP != NULL) {
|
|
if(!strcmp(user, TEMP->name) || !strcmp(user, TEMP->user_id)) {
|
|
x = 1;
|
|
break;
|
|
}
|
|
TEMP = TEMP->next;
|
|
}
|
|
if(x) {
|
|
change_user_ques();
|
|
cls();
|
|
color(11);
|
|
tp(30, 8);
|
|
printf("姓名:%s", TEMP->name);
|
|
tp(54, 8);
|
|
printf("->");
|
|
tp(30, 10);
|
|
printf("帐号:%s", TEMP->user_id);
|
|
tp(54, 10);
|
|
printf("->");
|
|
tp(30, 12);
|
|
printf("密码:%s", TEMP->password);
|
|
tp(54, 12);
|
|
printf("->");
|
|
color(8);
|
|
tp(45, 14);
|
|
printf("按ESC返回菜单");
|
|
color(11);
|
|
tp(64, 8);
|
|
user_name(8, TEMP->name, 19);
|
|
tp(64, 10);
|
|
user_name(10, TEMP->user_id, 19);
|
|
tp(64, 12);
|
|
v = 1;
|
|
user_name(12, TEMP->password, 19);
|
|
v = 0;
|
|
tp(45, 16);
|
|
TEMP = HEAD;
|
|
FILE *fp = fopen("user.txt", "w");
|
|
while(TEMP != NULL) {
|
|
fprintf(fp, "%s %s %s\n", TEMP->name, TEMP->user_id, TEMP->password);
|
|
TEMP = TEMP->next;
|
|
}
|
|
fclose(fp);
|
|
cls();
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("修改成功");
|
|
tp(39, 10);
|
|
color(11);
|
|
printf("按任意键返回...");
|
|
tp(39, 12);
|
|
getch();
|
|
}
|
|
else {
|
|
color(12);
|
|
printf("未找到相应的信息");
|
|
color(11);
|
|
tp(45, 16);
|
|
printf("按任意键返回...");
|
|
tp(45, 18);
|
|
getch();
|
|
}
|
|
}
|
|
|
|
void Num(int a) {
|
|
int x = 0;
|
|
read_lend();
|
|
if(a == -1) {
|
|
Temp = Head;
|
|
while(Temp != NULL) {
|
|
if(!strcmp(Temp->name, T->name) && !strcmp(Temp->author, T->author) && !strcmp(Temp->type, T->type) && !strcmp(Temp->publish, T->publish) && !strcmp(Temp->user, TEMP->name)) {
|
|
x = 1;
|
|
break;
|
|
}
|
|
Temp = Temp->next;
|
|
}
|
|
if(x == 1) {
|
|
tp(39, 18);
|
|
printf(" ");
|
|
tp(39, 20);
|
|
printf(" ");
|
|
tp(39, 22);
|
|
printf(" ");
|
|
color(12);
|
|
tp(39, 18);
|
|
printf("您已借用一本相同的书,请先归还");
|
|
color(11);
|
|
tp(39, 20);
|
|
printf("按任意键返回...");
|
|
tp(39, 22);
|
|
getch();
|
|
return;
|
|
}
|
|
else {
|
|
FILE *fp = fopen("lend.txt", "a+");
|
|
fprintf(fp, "%s %s %s %s %s\n", T->name, T->author, T->type, T->publish, TEMP->name);
|
|
fclose(fp);
|
|
}
|
|
}
|
|
else {
|
|
Temp = Head;
|
|
while(Temp != NULL) {
|
|
if(!strcmp(Temp->name, T->name) && !strcmp(Temp->author, T->author) && !strcmp(Temp->type, T->type) && !strcmp(Temp->publish, T->publish) && !strcmp(Temp->user, TEMP->name)) {
|
|
x = 1;
|
|
break;
|
|
}
|
|
Temp = Temp->next;
|
|
}
|
|
if(x == 1) {
|
|
struct BOOK *p = Head;
|
|
if(Temp == Head) {
|
|
Head = Temp->next;
|
|
free(Temp);
|
|
}
|
|
else {
|
|
while(p != NULL && p->next != Temp)
|
|
p = p->next;
|
|
p->next = Temp->next;
|
|
free(Temp);
|
|
}
|
|
Temp = Head;
|
|
FILE *fp = fopen("lend.txt", "w");
|
|
while(Temp != NULL) {
|
|
fprintf(fp, "%s %s %s %s %s\n", Temp->name, Temp->author, Temp->type, Temp->publish, Temp->user);
|
|
Temp = Temp->next;
|
|
}
|
|
fclose(fp);
|
|
}
|
|
else {
|
|
tp(39, 18);
|
|
printf(" ");
|
|
tp(39, 20);
|
|
printf(" ");
|
|
tp(39, 22);
|
|
printf(" ");
|
|
color(12);
|
|
tp(39, 18);
|
|
printf("您未曾借过这本书(若想存入图书馆,请联系管理员)");
|
|
color(11);
|
|
tp(39, 20);
|
|
printf("按任意键返回...");
|
|
tp(39, 22);
|
|
getch();
|
|
return;
|
|
}
|
|
}
|
|
T->number += a;
|
|
for(i = H; i != NULL; i = i->next)
|
|
for(j = i->next; j != NULL; j = j->next)
|
|
if(i->number > j->number) {
|
|
Swap(i->name, j->name);
|
|
Swap(i->author, j->author);
|
|
Swap(i->type, j->type);
|
|
Swap(i->publish, j->publish);
|
|
Swap_num(&i->number, &j->number);
|
|
}
|
|
T = H;
|
|
FILE *fp = fopen("book.txt", "w");
|
|
while(T != NULL) {
|
|
fprintf(fp, "%s %s %s %s %d\n", T->name, T->author, T->type, T->publish, T->number);
|
|
T = T->next;
|
|
}
|
|
fclose(fp);
|
|
cls();
|
|
color(12);
|
|
tp(39, 8);
|
|
printf("操作成功");
|
|
tp(39, 10);
|
|
color(11);
|
|
printf("按任意键返回...");
|
|
tp(39, 12);
|
|
getch();
|
|
}
|
|
|
|
void book_printf(int a) {
|
|
cls();
|
|
tp(39, 8);
|
|
printf("书名:%s", T->name);
|
|
tp(39, 10);
|
|
printf("作者:%s", T->author);
|
|
tp(39, 12);
|
|
printf("类型:%s", T->type);
|
|
tp(39, 14);
|
|
printf("出版社:%s", T->publish);
|
|
tp(39, 16);
|
|
printf("数量:%d", T->number);
|
|
tp(39, 18);
|
|
if(T->number == 0 && a == -1) {
|
|
color(12);
|
|
printf("书本数量不足");
|
|
color(11);
|
|
tp(39, 20);
|
|
printf("按任意键返回...");
|
|
tp(39, 22);
|
|
getch();
|
|
}
|
|
else if(a == -1){
|
|
printf("是否借出");
|
|
tp(39, 20);
|
|
printf("| 1.是 |");
|
|
tp(39, 22);
|
|
printf("| 2.否 |");
|
|
tp(39, 24);
|
|
switch(getch()) {
|
|
case '1':Num(a);break;
|
|
case '2':break;
|
|
case '\e':break;
|
|
default :book_printf(a);
|
|
}
|
|
}
|
|
else {
|
|
printf("是否归还");
|
|
tp(39, 20);
|
|
printf("| 1.是 |");
|
|
tp(39, 22);
|
|
printf("| 2.否 |");
|
|
tp(39, 24);
|
|
switch(getch()) {
|
|
case '1':Num(a);break;
|
|
case '2':break;
|
|
case '\e':break;
|
|
default :book_printf(a);
|
|
}
|
|
}
|
|
}
|
|
|
|
void lend_book() {
|
|
if(search_book())
|
|
book_printf(-1);
|
|
else
|
|
no_info();
|
|
}
|
|
|
|
void remand_book() {
|
|
if(search_book())
|
|
book_printf(1);
|
|
else
|
|
no_info();
|
|
}
|
|
|
|
void stu_menu() {
|
|
cls();
|
|
color(12);
|
|
tp(36, 8);
|
|
printf("尊敬的%s欢迎您使用图书管理系统", TEMP->name);
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("| 1.图书查询 |");
|
|
tp(39, 12);
|
|
printf("| 2.图书借出 |");
|
|
tp(39, 14);
|
|
printf("| 3.图书归还 |");
|
|
tp(39, 16);
|
|
printf("| 4.图书总览 |");
|
|
tp(39, 18);
|
|
printf("| 5.返回登录界面 |");
|
|
tp(39, 20);
|
|
printf("| 6.退出 |");
|
|
tp(39, 22);
|
|
switch(getch()) {
|
|
case '1':inquire1();stu_menu();
|
|
case '2':lend_book();stu_menu();
|
|
case '3':remand_book();stu_menu();
|
|
case '4':view1_book();stu_menu();
|
|
case '5':Login();
|
|
case '6':exit(0);
|
|
case '\e':exit(0);
|
|
default :stu_menu();
|
|
}
|
|
}
|
|
|
|
void adm_menu() {
|
|
cls();
|
|
adm_window();
|
|
color(12);
|
|
tp(36, 8);
|
|
printf("尊敬的管理员欢迎您使用图书管理系统");
|
|
color(11);
|
|
tp(39, 10);
|
|
printf("| 1.图书查询 |");
|
|
tp(39, 12);
|
|
printf("| 2.修改图书 |");
|
|
tp(39, 14);
|
|
printf("| 3.添加图书 |");
|
|
tp(39, 16);
|
|
printf("| 4.删除图书 |");
|
|
tp(39, 18);
|
|
printf("| 5.图书总览 |");
|
|
tp(39, 20);
|
|
printf("| 6.用户总览 |");
|
|
tp(39, 22);
|
|
printf("| 7.修改用户 |");
|
|
tp(39, 24);
|
|
printf("| 8.返回登录界面 |");
|
|
tp(39, 26);
|
|
printf("| 9.退出 |");
|
|
tp(39, 28);
|
|
switch(getch()) {
|
|
case '1':inquire2();adm_menu();
|
|
case '2':change_book();adm_menu();
|
|
case '3':add_book();adm_menu();
|
|
case '4':delete_book();adm_menu();
|
|
case '5':view2_book();adm_menu();
|
|
case '6':view_user();adm_menu();
|
|
case '7':change_user();adm_menu();
|
|
case '8':recovery_window();Login();
|
|
case '9':exit(0);
|
|
case '\e':exit(0);
|
|
default :adm_menu();
|
|
}
|
|
}
|