#include #include #include #include #include #include #include #define BACKSPACE 8 #define PASS_MAXLEN 128 #define LEN sizeof(struct Book) #define LEN1 sizeof(struct reader) #include"zzh.h" void home();//注册总页面 void Reg();//注册 void Log();//登录 void Adm();//管理员 int UserMenu();//用户主页 int AdminMenu();//管理员主页 void BroBook();//借书 void BacBook();//还书 void LooBook(int n);//查询书籍 void AddBook();//添加书籍 void DelBook();//删除书籍 void FixBook();//修改书籍 int Total();//统计书的总数 int Total1();//统计账户总数->用于修改用户名重复的问题 int Total2();//统计读者总数 void SBAll(int q);//查询所有书籍 void SBAut(int q);//图书作者查询 void SBNam(int q);//图书名字查询 void SBCat(int q);//图书分类查询 void ed();//结束 void Reader();//读者借阅信息 void Readername();//按名字查找借阅 void Allreader();//所有查看 int main(){ home(); } //主页面 void home(){ system("cls"); while(1){ char c; printf("******************************************************************************************\n"); printf("* 图书管理系统(Version 2.0) *\n"); printf("******************************************************************************************\n"); printf("* *\n"); printf("* 你好呀,欢迎使用图书管理系统! *\n"); printf("* *\n"); printf("* 请问你想干什么呢? *\n"); printf("* *\n"); printf("* 麻烦按下数字表示您要执行的操作 *\n"); printf("* *\n"); printf("* *\n"); printf("******************************************************************************************\n"); printf("*您是普通用户吗?? * 你是我的Master吗?? *\n"); printf("* * *\n"); printf("* 1.注册用户,和我签订契约吧o(* ̄▽ ̄*)ブ * 3.Master登陆 (*/▽\*) *\n"); printf("* 2.契约签订好了?直接登陆吧 * *\n"); printf("* * *\n"); printf("******************************************************************************************\n\n\n"); printf("\t\t\t\t\t\t\t\t\t您想执行的操作:"); c=getch(); if(c=='1'){ Reg(); break; }else if(c=='2'){ Log(); break; }else if (c=='3'){ Adm(); } system("cls"); } } //注册 void Reg(){ FILE *fp=fopen("账号管理.txt","r"); fp=fopen("账号管理.txt","r"); system("cls"); int k=0; char t; int i=0,l1=0,l2=0; char c; char UserName[50],PassWord[10],RePassWord[10]; char name[100],password[100]; toxy(40,2); printf("签订契约(按ESC回到登陆界面)\n\n\n");/*x=40,y=2*/ printf(" 取个好听的名字吧φ(゜▽゜*)/,只能是英文,数字哦:\n\n "); printf("\n\n 请输入您的密码,不要随便泄露密码给别人鸭(小声BB)╯ 3╰ :\n\n "); printf("\n\n 确认一下密码QAQ:\n\n "); toxy(27,7); while(1){ c=getch(); if(c==27) home(); if(c=='\r'||c=='\n'){ UserName[i]=0; break; } else if(c==8) { if(i==0) i=0; else { printf("\b \b"); i=i-1; } }else if((c<='Z'&&c>='A')||(c<='z'&&c>='a')||(c<='9'&&c>='0')){ UserName[i++]=c; putchar(c); } } l1=strlen(UserName); toxy(27,11); while(1){ int i=0; char c; while(1){ c=getch(); if(c==27) home(); if(c=='\n'||c=='\r'){ PassWord[i]=0; break; } else if(c==BACKSPACE){ PassWord[--i]='\0'; putchar(BACKSPACE); putchar(' '); putchar(BACKSPACE); }//可以用DELETE键 else{ PassWord[i++]=c; putchar('*'); } } l2=strlen(PassWord); i=0; toxy(27,15); while(1){ c=getch(); if(c==27) home(); if(c=='\n'||c=='\r'){ RePassWord[i]=0; break; } else if(c==8) { if(i==0) i=0; else { printf("\b \b"); i=i-1; } } else{ RePassWord[i++]=c; putchar('*'); } } system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 注册中. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 注册中.. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 注册中... │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 注册中. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 注册中.. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); if(!l1||!l2){ printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ 抱歉(。﹏。*) │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 用户名和密码均不能为空 │\n"); printf("\t\t\t│ 按Esc退出,按回车重新注册 │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); t=getch(); while(t!=27&&t!=13){ t=getch(); continue; } if(t==27){ system("cls"); printf("正在跳转..."); home(); }else if(t==13){ system("cls"); printf("正在跳转..."); Reg(); } }else { int j=Total1();//一共有j个用户,Total是用来统计文本里面有多少个用户的 for(int i=0;i='A')||(c<='z'&&c>='a')||(c<='9'&&c>='0')){ UserName[i++]=c; putchar(c); } } i=0; toxy(27,11); while(1){ c=getch(); if(c==27) home(); if(c=='\r'||c=='\n'){ PassWord[i]=0; break; } else if(c==8) { if(i==0) i=0; else { printf("\b \b"); i=i-1; } } else if((c<='Z'&&c>='A')||(c<='z'&&c>='a')||(c<='9'&&c>='0')){ PassWord[i++]=c; putchar('*'); } } int j=Total1(); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中.. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中... │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中.. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); for(int f=0;f='A')||(c<='z'&&c>='a')||(c<='9'&&c>='0')){ AdminName[i++]=c; putchar(c); } } toxy(27,11); i=0; while(1){ c=getch(); if(c==27) home(); if(c=='\r'||c=='\n'){ PassWord[i]=0; break; } else if(c==8) { if(i==0) i=0; else { printf("\b \b"); i=i-1; } } else if((c<='Z'&&c>='A')||(c<='z'&&c>='a')||(c<='9'&&c>='0')){ PassWord[i++]=c; putchar('*'); } } int j=1; system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中.. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中... │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); printf("\n\n\n"); printf("\t\t\t┌──────────────────────────────────────────────┐\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ 登陆中.. │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t│ │\n"); printf("\t\t\t└──────────────────────────────────────────────┘\n"); Sleep(500); system("cls"); for(int f=0;fnext=p1; p2=p1; p1=(struct Book*)malloc(LEN); } strcpy(p1->num,Num);//复制书号 strcpy(p1->nam,Nam);//复制书名 strcpy(p1->aut,Aut);//复制作者名字 strcpy(p1->pub,Pub);//复制出版社 strcpy(p1->cat,Cat);//复制类别 p1->many=Many;//复制个数 p1->price=Price;//复制单价 } if(n==0){ head=NULL; } else{ p2->next=p1; p1->next=NULL; fclose(fp); } } p=head; for(;p!=NULL;){ if(!strcmp(p->num,Re)){ flag=1; k=p->many; (p->many)--; } p=p->next; } if((k>0)&&flag){ fp=fopen("图书.txt","w"); fclose(fp); fp=fopen("图书.txt","a"); p=head; for(;p!=NULL;){ fprintf(fp,"%-8s%-8s%-16s%-16s%-16s%-10d%10.2f\n",p->num,p->nam,p->aut,p->pub,p->cat,p->many,p->price); p=p->next; } free(p); fclose(fp); if((fp1=fopen("读者.txt","r"))==NULL){ fp1=fopen("读者.txt","w"); fclose(fp1); } fp1=fopen("读者.txt","a"); printf("请输入学号:"); scanf("%d",&Xuehao); printf("请输入名字:"); scanf("%s",Mingzi); printf("请输入借书日期(年份/月份/日):"); scanf("%s",Riqi); fprintf(fp1,"%-8d%-23s%-18s%-10s\n",Xuehao,Mingzi,Riqi,Re); fclose(fp1); printf("借书成功,请按时归还,按Esc键退出\n"); t=getch(); while(t!=27){ t=getch(); continue; } if(t==27){ UserMenu(); } } else{ if(flag!=0){ printf("没有你要的书籍,按Esc键返回\n"); while(t!=27){ t=getch(); continue; } UserMenu(); }else{ printf("库存不足,按Esc键返回\n"); } } while(t!=27){ t=getch(); continue; } UserMenu(); } //还书 void BacBook(){ system("cls"); struct reader *head=NULL; struct Book *zhead=NULL; struct Book *zp,*zp1,*zp2; struct reader *p,*p1,*p2; FILE *fp,*fp1; float Price=0; char t,ReName[100]; int Many; int n=0,j=0,k=0,flag=0,l=0;//k是库存的数量; char Num[20]={'\0'},Aut[20]={'\0'},Pub[20]={'\0'},Nam[20]={'\0'},Cat[20]={'\0'}; int Xuehao,ReXuehao; char Mingzi[20]={'\0'},Riqi[20]={'\0'},Shuming[20]={'\0'}; fp=fopen("读者.txt","r"); if(fp==NULL){ system("cls"); printf("未存在读者文件,请联系管理员\n"); printf("按Esc返回\n"); t=getch(); while(t!=27){ t=getch(); continue; } UserMenu(); }else{ printf("请输入学号:");// scanf("%d",&ReXuehao); printf("请输入书号:"); scanf("%s",ReName); j=Total2(); for(int i=0;inext=p1; p2=p1; p1=(struct reader*)malloc(LEN1); } p1->xuehao=Xuehao; strcpy(p1->username,Mingzi); strcpy(p1->time,Riqi); strcpy(p1->name,Shuming); } } if(n==0){ head=NULL; }else{ p2->next=p1; p1->next=NULL; fclose(fp); } fp=fopen("读者.txt","w"); fclose(fp); fp=fopen("读者.txt","a"); p=head; for(;p!=NULL;){ fprintf(fp,"%-8d%-23s%-18s%-10s\n",p->xuehao,p->username,p->time,p->name); p=p->next; } free(p); fclose(fp); if(flag){ printf("是否确认还书,还书请按回车,退出请按Esc\n"); t=getch(); while(t!=13&&t!=27){ t=getch(); continue; } if(t==27){ printf("正在跳转..."); Sleep(1000); UserMenu(); } printf("还书成功,按Esc键返回"); n=0,flag=0; l=Total(); fp1=fopen("图书.txt","r"); for(int i=0;inext=zp1; zp2=zp1; zp1=(struct Book*)malloc(LEN); } strcpy(zp1->num,Num);//复制书号 strcpy(zp1->nam,Nam);//复制书名 strcpy(zp1->aut,Aut);//复制作者名字 strcpy(zp1->pub,Pub);//复制出版社 strcpy(zp1->cat,Cat);//复制类别 zp1->many=Many;//复制个数 zp1->price=Price;//复制单价 } if(n==0){ zhead=NULL; } else{ zp2->next=zp1; zp1->next=NULL; fclose(fp1); } zp=zhead; for(;zp!=NULL;){ if(!strcmp(zp->num,ReName)){ ++(zp->many); } zp=zp->next; } fp1=fopen("图书.txt","w"); fclose(fp1); fp1=fopen("图书.txt","a"); zp=zhead; for(;zp!=NULL;){ fprintf(fp1,"%-8s%-8s%-16s%-16s%-16s%-10d%10.2f\n",zp->num,zp->nam,zp->aut,zp->pub,zp->cat,zp->many,zp->price); zp=zp->next; } fclose(fp1); t=getch(); while(t!=27){ t=getch(); continue; } if(t==27){ UserMenu(); } } else{ system("cls"); printf("不存在借书的用户,按Esc键返回\n"); while(t!=27){ t=getch(); continue; } if(t==27){ UserMenu(); } } } }