#include #include #include #include #include #include #include #define BACKSPACE 8 #define PASS_MAXLEN 128 #define LEN sizeof(struct Book) void start(); 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 SBAut(); int SBNam(); int SBCat(); int main(){ home(); } //建立书籍的结构体 struct Book//图书信息 { char num[20],nam[20],aut[20],pub[20],cat[20]; int many; float price; struct Book *next; }; struct reader{ int num; char username[20],time[20],name[20]; struct reader *next; }; //主页面 void home(){ system("cls"); while(1){ char c; printf("******************************************************************************************\n"); printf("* 图书管理系统(Version 1.0 BETA) *\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(); }else{ printf("WRONG!!"); } Sleep(1000); system("cls");//清屏 } } //注册 void Reg(){ FILE *fp=fopen("D:\\图书管理系统\\账号管理.txt","r"); fp=fopen("D:\\图书管理系统\\账号管理.txt","r"); system("cls"); int k=0; char t; static char UserName[50],PassWord[10],RePassWord[10]; char name[100],password[100]; printf("输入用户名:\n");//输入用户名 scanf("%s",UserName); printf("请输入你的密码:\n");//输入密码 while(1){ int i=0; char c; while(1){ c=getch(); 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('*'); } } i=0; printf("\n"); printf("请确定你的密码:\n");//确认密码 while(1){ c=getch(); 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('*'); } } printf("\n"); int j=Total1();//一共有j个用户,Total是用来统计文本里面有多少个用户的 for(int i=0;i='A')||(c<='z'&&c>='a')||(c<='9'&&c>='0')){ UserName[i++]=c; putchar(c); } } printf("\n请输入你的密码:\n"); i=0; while(1){ c=getch(); 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(); for(int f=0;f='A')||(c<='z'&&c>='a')||(c<='9'&&c>='0')){ AdminName[i++]=c; putchar(c); } } printf("\n请输入你的密码:\n"); i=0; while(1){ c=getch(); 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; 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->nam,ReName)){ flag=1; k=p->many; (p->many)--; } p=p->next; } if((k>0)&&flag){ fp=fopen("D:\\图书管理系统\\图书.txt","w"); fclose(fp); fp=fopen("D:\\图书管理系统\\图书.txt","a"); p=head; for(;p!=NULL;){ fprintf(fp,"%-8d%-8s%-16s%-16s%-16s%-10d%10.2f\n",Num,Nam,Aut,Pub,Cat,Many,Price); p=p->next; } free(p); fclose(fp); if((fp1=fopen("D:\\图书管理系统\\读者.txt","r"))==NULL){ fp1=fopen("D:\\图书管理系统\\读者.txt","w"); fclose(fp1); } fp1=fopen("D:\\图书管理系统\\读者.txt","a"); printf("请按照以下格式输入读者信息:\n 学号 姓名 借书日期 借书书名\n请输入:\n"); scanf("%d%s%s%s",&Xuehao,Mingzi,Riqi,Shuming); fprintf(fp1,"\n%-8d%-23s%-18s%-10s\n",Xuehao,Mingzi,Riqi,Shuming); fclose(fp1); printf("借书成功,请按时归还,按Esc键退出\n"); t=getch(); while(t!=27){ t=getch(); continue; } if(t==27){ UserMenu(); } } else{ if(flag!=0){ printf("库存不足\n,按Esc键返回\n"); while(t!=27){ t=getch(); continue; } UserMenu(); }else{ printf("没有你要的书籍\n,按Esc键返回\n"); } } while(t!=27){ t=getch(); continue; } UserMenu(); } //还书 void BacBook(){ system("cls"); printf("BacBook\n"); system("pause"); return ; } //看书信息 void LooBook(int n){ system("cls"); while(1){ char t; printf("******************************************************************************************\n"); printf("* 图书管理系统(Version 1.0 BETA) *\n"); printf("******************************************************************************************\n"); printf("* *\n"); printf("* 搜索方式: *\n"); printf("* *\n"); printf("* 1、按书名查找 *\n"); printf("* *\n"); printf("* 2、按作者查找 *\n"); printf("* *\n"); printf("* 3、按分类查找 *\n"); printf("* *\n"); printf("* 按ESC返回 *\n"); printf("******************************************************************************************\n"); printf("\n\n\t\t\t\t\t\t\t\t\t您想执行的操作:"); t=getch(); while(t!='1'&&t!='2'&&t!='3'&&t!=27){ t=getch(); continue; } if(t=='1'){ SBNam(); break; }else if(t=='2'){ SBAut(); break; }else if(t=='3'){ SBCat(); break; }else if(t==27){ if(n==0){ UserMenu(); }else if(n==1){ AdminMenu(); } break; } } } int SBAut(){ system("cls"); struct Book *head; struct Book *p1,*p2; FILE *fp; int n=0; int m=0,Many=0; float Price=0; char t,ReName[100]; int i=0,k=0,j=0; char Num[20]={'\0'},Aut[20]={'\0'},Pub[20]={'\0'},Nam[20]={'\0'},Cat[20]={'\0'}; if((fp=fopen("D:\\图书管理系统\\图书.txt","r"))==NULL){ printf("无法打开该文件\n"); printf("按ESC键返回\n"); t=getch(); while(t!=27){ t=getch(); continue; } UserMenu(); } else{ printf("请输入你想要查找书的作者名字:\n"); scanf("%s",ReName); j=Total(); for(int i=0;inext =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); } } fp=fopen("D:\\图书管理系统\\图书.txt","w"); fclose(fp); fp=fopen("D:\\图书管理系统\\图书.txt","a"); p=head; for(;p!=NULL;){ fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->num,p->nam,p->aut,p->pub,p->cat,p->many,p->price); p=p->next; } fclose(fp); system("cls"); printf("删除成功,按任意键返回上一层\n"); t=getch(); AdminMenu(); } //修改书籍 void FixBook(){ system("cls"); printf("FixBook\n"); system("pause"); return ; } int Total(){ FILE *fp; int txcl=0,n; float tprice=0; char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'}; fp=fopen("D:\\图书管理系统\\图书.txt","r");//打开文件 for (n=0;!feof(fp);n++)//逐个读文件 fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice); n--;//减去最后一个 fclose(fp);//关闭文件 return (n);//返回个数 } int Total1(){ int n; char name[100],password[100]; FILE *fp=fopen("D:\\图书管理系统\\账号管理.txt","r"); for(n=0;!feof(fp);n++){ fscanf(fp,"%s%s",name,password); } n--; fclose(fp); return (n); } int Total2(){ int n; int num; char username[20],time[20],name[20]; FILE *fp=fopen("D:\\图书管理系统\\读者.txt","r"); for(n=0;!feof(fp);n++){ fscanf(fp,"%d%s%s%s",num,username,time,name); } n--; fclose(fp); return (n); }