#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string.h>
typedef struct User {
char name[20];
char password[20];
int id;
} userData;
userData into, read;
typedef struct bookdata {
char type[20];
char name[20];
char id[20];
int sum;
} bookdata;
typedef struct booksql {
bookdata data;
struct booksql*next;
} booksql, *Linkbooksql;
Linkbooksql Linkbooksql_search(Linkbooksql l, int x) {
int i = 1;
while (l && i <= x) {
i++;
l = l->next;
}
return l;
}
int count(Linkbooksql l) {
int i = 0;
while (l->next) {
i++;
l = l->next;
}
return i;
}
void add(Linkbooksql l, char *intype, char *inname, char *inid) {
Linkbooksql ll = l;
l = l->next;
while (l) {
if (strcmp(l->data.name, inname) == 0 && strcmp(l->data.type, intype) == 0 && strcmp(l->data.id, inid) == 0) {
l->data.sum += 1;
return;
}
l = l->next;
}
int len = count(ll);
printf("%d\n", len);
Linkbooksql fp = Linkbooksql_search(ll, len);
Linkbooksql s = (Linkbooksql)malloc(sizeof(bookdata));
strcpy(s->data.type, intype);
strcpy(s->data.name, inname);
strcpy(s->data.id, inid);
s->next = fp->next;
fp->next = s;
s->data.sum = 1;
}
int userlogin() {
FILE *fp = fopen("./res/user.txt", "r");
printf("请输入用户名:");
scanf("%s", into.name);
printf("请输入密码:");
scanf("%s", into.password);
int flag = 0;
while (fread((void*)&read, sizeof(read), 1, fp)) {
if (strcmp(read.name, into.name) == 0) {
if (strcmp(read.password, into.password) == 0) {
puts("登录成功");
flag = 1;
fclose(fp);
return read.id;
} else {
puts("密码错误!请重新输入");
system("pause");
fclose(fp);
return 99;
system("cls");
}
}
}
if (flag == 0) {
printf("不存在该用户,请重新输入!\n");
system("pause");
return 99;
}
return 99;
}
void intoAdmin() {
userData admin = {"xujie", "123456", 0};
FILE *fp = fopen("./res/user.txt", "r+");
if (NULL == fp) {
puts("系统初始化失败!");
system("pause");
exit(0) ;
}
fwrite((void*)&admin, sizeof(admin), 1, fp);
fclose(fp);
}
int op = 99;
void input(Linkbooksql l) {
printf("请输入需要添加的书籍:");
char type[20];
char name[20];
char id[20];
scanf("%s%s%s", type, name, id);
add(l, type, name, id);
puts("成功将数据加入!");
}
void showdata(Linkbooksql l) {
l = l->next;
while (l) {
printf("%s %s %s %d\n", l->data.type, l->data.name, l->data.id, l->data.sum);
l = l->next;
}
}
void delbook(Linkbooksql l) {
char name[20];
puts("请输入你需要删除的书籍");
scanf("%s", name);
Linkbooksql ll = l;
int cnt = 0;
while (l) {
if (strcmp(l->data.name, name) == 0) {
break;
}
cnt++;
l = l->next;
}
printf("%d\n", cnt);
Linkbooksql fl = Linkbooksql_search(ll, cnt - 1);
fl->next = l->next;
free(l);
}
void adminmenu(Linkbooksql &l) {
while (1) {
printf("欢迎用户%s登录图书管理系统\n", into.name);
printf("\t\t\t您的身份是:管理员\n");
printf("当前数据库中的的图书为%d\n", count(l));
puts("____________________________");
if (count(l))
showdata(l);
puts("下面是可供操作的选项:");
printf("1-> 采编入库\n2->清除库存\n3->删除数据\n4->根据分值排序\n5->将数据保存到data.txt\n6->将文件数据导入链表\n7->返回上一级\n");
int op;
scanf("%d", &op);
switch (op) {
case 1:
input(l);
system("pause");
system("cls");
break;
case 2:
delbook(l);
system("pause");
system("cls");
break;
case 7:
system("cls");
return;
break;
}
}
}
bool user_is(Linkbooksql l, char *name) {
l = l->next;
FILE *fp = fopen("./res/user.txt", "r");
userData red;
while (fread((void*)&red, sizeof(red), 1, fp)) {
if (strcmp(red.name, name) == 0) {
return true;
}
}
return false;
}
void Register(Linkbooksql l) {
system("cls");
puts("欢迎使用图书管理系统");
char password1[20];
userData in;
printf("请输入注册的用户名:");
scanf("%s", in.name);
if (user_is(l, in.name)) {
puts("当前用户名已被使用!");
system("pause");
return;
}
puts("");
getchar();
printf("请输入密码:");
scanf("%s", in.password);
puts("");
puts("");
printf("请确认密码:");
scanf("%s", password1);
if (strcmp(in.password, password1) != 0) {
printf("两次密码不一致,请重新操作!");
system("pause");
system("cls");
return;
}
puts("注册成功,请登录!");
in.id = 1;
FILE *fp = fopen("./res/user.txt", "a+");
fwrite((void*)&in, sizeof (in), 1, fp);
fclose(fp);
system("pause");
}
void usermemu(Linkbooksql l) {
while (1) {
printf("欢迎用户 %s 登录图书管理系统\n", into.name);
printf("\t\t\t您的身份是:普通用户\n");
printf("当前数据库中的的图书为%d\n", count(l));
puts("____________________________");
if (count(l))
showdata(l);
puts("下面是可供操作的选项:");
printf("1-> 查询书籍\n2->借阅书籍\n3->归还书籍\n4->记录查询\n5->退出登录\n");
int op;
scanf("%d", &op);
switch (op) {
case 1:
system("pause");
system("cls");
break;
case 2:
system("pause");
system("cls");
break;
case 5:
system("cls");
return;
break;
}
}
}
void login(Linkbooksql p) {
int in = 9;
while (1) {
puts("欢迎使用图书管理系统");
printf("1->登录\n2->注册\n3->退出系统\n");
printf("请输入你的选择:");
scanf("%d", &in);
switch (in) {
case 1:
op = userlogin();
if (op == 0) {
system("cls");
adminmenu(p);
break;
} else if (op == 1) {
system("cls");
usermemu(p);
break;
}
break;
case 2:
Register(p);
break;
case 3:
puts("成功退出系统!蟹蟹您的使用!");
system("pause");
exit(0);
break;
default:
puts("输入错误,请重新输入!");
break;
}
system("cls");
}
}
int main() {
Linkbooksql p = (Linkbooksql)malloc(sizeof (bookdata));
p->next = NULL;
intoAdmin();
login(p);
system("cls");
}