#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define N 20
#define T sizeof(struct book)
#define SC "%ld %s %s %s %s
%d",&p1->num,p1->name,p1->author,p1->kind,p1->press,&p1->quantity
#define PR11
"\033[30;42m%-8ld\033[47m%-16s\033[42m%-16s\033[47m%-16s\033[42m%-16s\033[47m%-8d\033[0m\n",p->num,p->name,p->author,p->kind,p->press,p->quantity
#define PR21
"\033[30;47m%-8ld\033[42m%-16s\033[47m%-16s\033[42m%-16s\033[47m%-16s\033[42m%-8d\033[0m\n",p->num,p->name,p->author,p->kind,p->press,p->quantity
#define PR12
"\033[30;42m%-8ld\033[47m%-16s\033[42m%-16s\033[47m%-16s\033[42m%-16s\033[41m%-8d\033[0m\n",p->num,p->name,p->author,p->kind,p->press,p->quantity
#define PR22
"\033[30;47m%-8ld\033[42m%-16s\033[47m%-16s\033[42m%-16s\033[47m%-16s\033[41m%-8d\033[0m\n",p->num,p->name,p->author,p->kind,p->press,p->quantity
#define PR "\033[30;43mnumber name author kind press quantity\033[0m\n"
int password()//----------------------密码系统
{ int i;
char zh[9],ZH[9]="123456",mm[7],MM[7]="123456";
printf("\t\t\t\t\t\t\t\033[33m请输入帐号:");
scanf("%s",zh);
printf("\n\033[0m");
while(strcmp(zh,ZH)!=0)
{ printf("\t\t\t\t\t\t\t\033[31m您的输入错误,没有该帐号!请重输!\033[0m\n\n");
printf("\t\t\t\t\t\t\t\033[33m请再次输入帐号:");
scanf("%s",zh);
printf("\n\033[0m");
}
printf("\t\t\t\t\t\t\t\033[33m请输入密码:");
system("stty -echo");
scanf("%s",mm);
system("stty echo");
printf("******\n\n\033[0m");
for(i=0;i<7;i++)
{ if(strcmp(mm,MM)==0)
{ printf("\t\t\t\t\t\t \033[32m欢迎进入该系统!按"Enter"键进入!\033[0m\n");
return 0;
}
else
{ printf("\t\t\t\t\t\t\t\033[31m输入密码错误!请重输!\033[0m\n\n");
printf("\t\t\t\t\t\t\t\033[33m请再次输入密码:");
system("stty
-echo");
scanf("%s",mm);
system("stty echo");
printf("******\033[0m\n\n");
}
if(i>=1) return 1;
}
return 0;
}
void table()//------------------Welcome
{ int i;
printf("\033[2J\033[40A");
for(i=0;i<8;i++)
printf("\n");
for(i=0;i<6;i++)
printf("\t\t\t\t\033[32m LL\n");
printf("\t\t\t\tWW WW EEEEEEEE LL CCCCCCCC OOOOOOOO MMMMMMMMMM EEEEEEEE\n");
printf("\t\t\t\tWW WW
EE EE
LL CC CC
OO OO MM MM MM
EE EE\n");
printf("\t\t\t\tWW WW EEEEEEEEEE
LL LL
CC OO OO MM MM MM EEEEEEEEEE\n");
printf("\t\t\t\tWW WW WW
EE LL LL
CC OO OO MM MM MM EE\n");
printf("\t\t\t\tWWWW WWWW
EE EE LL LL CC CC
OO OO MM MM MM
EE EE\n");
printf("\t\t\t\t
WW WW EEEEEEEE LLLL CCCCCCCC OOOOOOOO MM MM MM EEEEEEEE\033[0m\n\n\n");
}
void end()
{ int i;
printf("\033[2J\033[40A");
for(i=0;i<11;i++)
printf("\n");
printf("\t\t\t \033[33mBBBBBBBB BB\n");
printf("\t\t\t BB BB BB\n");
printf("\t\t\t BB BB BB\n");
printf("\t\t\t BB BB BB\n");
printf("\t\t\t BBBBBBBB YY YY EEEEEE BBBBBBBB YY YY EEEEEE\n");
printf("\t\t\t BB BB YY YY EE EE BB BB YY YY EE EE\n");
printf("\t\t\t BB BB YY YY EEEEEEEEEE BB BB YY YY EEEEEEEEEE\n");
printf("\t\t\t BB BB YY YY EE BB BB YY YY EE\n");
printf("\t\t\t BBBBBBBB YYYYYYYYY EEEEEEE BBBBBBBB YYYYYYYYY EEEEEEE\n");
printf("\t\t\t YY YY\n");
printf("\t\t\t YY YY\n");
printf("\t\t\t YY YY\n");
printf("\t\t\t YYYYYYYY YYYYYYYY\033[0m\n\n\n\n\n\n");
printf("\033[32m\t\t\t\t\t\t\t\t\t\t 谢谢使用!再见!\033[0m\n");
for(i=0;i<10;i++)
printf("\n");
}
void table2()//---------------------功能选择菜单
{
printf("\033[2J\033[38A\n");
printf("\n\n\n\n\t\t\033[33m ************************爱****国****求****是****奋****进**********************\n");
printf("\t\t*************************欢****迎****进****入***OURS***图****书****管****理****系****统*************************\n");
printf("\t\t ************************西****安****邮****电****大****学**********************\n");
printf("\n\n\n");
printf("\t\t\t\t\033[32m+\t\t『
1』--------------------------------#*******读取信息*******#\n");
printf("\n");
printf("\t\t\t\t+\t\t『
2』--------------------------------#*******存储信息*******#\n");
printf("\n");
printf("\t\t\t\t+\t\t『
3』--------------------------------#*******统计信息*******#\n");
printf("\n");
printf("\t\t\t\t+\t\t『
4』--------------------------------#******按书名检索******#\n");
printf("\n");
printf("\t\t\t\t+\t\t『
5』--------------------------------#******按编号检索******#\n");
printf("\n");
printf("\t\t\t\t+\t\t『
6』--------------------------------#*****修改书刊信息*****#\n");
printf("\n");
printf("\t\t\t\t+\t\t『
7』--------------------------------#*****打印书刊信息*****#\n");
printf("\n");
printf("\t\t\t\t+\t\t『
8』--------------------------------#*****添加书刊信息*****#\n");
printf("\n");
printf("\t\t\t\t+\t\t『
9』--------------------------------#*****删除书刊信息*****#\n");
printf("\n");
printf("\t\t\t\t+\t\t『10』--------------------------------#*****创建新数据库*****#\n");
printf("\n");
printf("\t\t\t\t+\t\t『11』--------------------------------#**按借阅剩余数量排序**#\n");
printf("\n");
printf("\t\t\t\t+\t\t『12』--------------------------------#**按编码小到大序排序**#\n");
printf("\n");
printf("\t\t\t\t\033[31m+\t\t『
0』--------------------------------#*******结束退出*******#\033[0m\n\n\n");
}
typedef struct book//----------------------书刊结构体类型
{ long num;//书刊编码
char name[21];//书名
char author[21];//作者
char kind[21];//种类
char press[21];//出版社
int quantity;//所剩数量
struct book *next;
}sb;
sb *creat(void)//-------------------------信息录入
{ sb *p1,*p2,*head;
head=p2=(sb*)malloc(T);
printf("\033[32mPlease input: number, name, author, kind, press and
quantity(input 0 end)\n");
p1=(sb*)malloc(T);
scanf(SC);
while(p1->num!=0)
{ p2->next=p1;
p2=p1;
p1=(sb*)malloc(T);
scanf(SC);
}
p2->next=NULL;
free(p1);
printf("\033[0m");
return head;
}
sb *namefind(sb *p1)//----------------------按书名查找
{ char name[21];
printf("\n\n\n\n\n\033[33m->->检索系统---按书名查找 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
printf("\033[31m请输入您要查找的书名:");
scanf("%s",name);
printf("\033[0m");
while(p1->next!=NULL)
{ p1=p1->next;
if(strcmp(p1->name,name)==0) return p1;
}
return NULL;
}
sb *numberfind(sb *p2)//--------------------按编码查找
{ long num;
printf("\n\n\n\n\n\033[33m->->检索系统---按编码查找 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
printf("\033[31m请输入您要查找书刊的编码:");
scanf("%ld",&num);
printf("\033[0m");
while(p2->next!=NULL)
{ p2=p2->next;
if(p2->num==num) return p2;
}
return NULL;
}
int delete(sb *q)//---------------------信息删除
{ long num;
sb *p;
printf("\n\n\n\n\n\033[33m->->删除系统 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
p=q->next;
if(p==NULL) return 0;
printf("\033[31m请输入您要删除书刊的编码:");
scanf("%ld",&num);
printf("\033[0m");
while(p!=NULL)
{ if(p->num==num)
{ q->next=p->next;
free(p);
return 1;
}
q=p;
p=p->next;
}
return 0;
}
int insert(sb *q)//-------------------------信息插入
{ sb *p;
p=(sb *)malloc(T);
printf("\n\n\n\n\n\033[33m->->插入系统 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
printf("\033[31mPlease input: number, name, author, kind, press and
quantity\n");
scanf("%ld %s %s %s %s
%d",&p->num,p->name,p->author,p->kind,p->press,&p->quantity);
printf("\033[0m");
while(q->next!=NULL&&q->next->num!=p->num)
q=q->next;
if(q->next!=NULL&&q->next->num==p->num||p->num==0)
{ free(p);
return 0;
}
p->next=q->next;
q->next=p;
return 1;
}
int alter(sb *head)//-----------------------信息修改
{ sb *p;
long numb;
char c;
int i;
printf("\n\n\n\n\n\033[33m->->修改系统 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
while(1)
{ p=head;
p=p->next;
printf("\033[32m输入要修改书刊编码:");
scanf("%ld",&numb);
printf("\033[0m");
while(p!=NULL&&p->num!=numb)
p=p->next;
if(numb==0)
printf("\033[31m对不起,书刊编码不能为0!\033[0m\n");
else if(p!=NULL&&p->num==numb&&numb!=0)
{ printf("\033[33m选择要修改的项目(\033[31m1--编码,2--书名,3--作者,4--种类,5--出版社,6--所剩数目):");
scanf("%d",&i);
printf("\033[0m");
getchar();
switch(i)
{ case 1:printf("\033[33m输入修改后的编码:");
scanf("%ld",&p->num);
printf("\033[32m修改成功!\033[0m\n"); break;
case 2:printf("\033[33m输入修改后的书名:");
scanf("%s",p->name);
printf("\033[32m修改成功!\033[0m\n"); break;
case 3:printf("\033[33m输入修改后的作者:");
scanf("%s",p->author);
printf("\033[32m修改成功!\033[0m\n"); break;
case 4:printf("\033[33m输入修改后的种类:");
scanf("%s",p->kind);
printf("\033[32m修改成功!\033[0m\n"); break;
case 5:printf("\033[33m输入修改后的出版社:");
scanf("%s",p->press);
printf("\033[32m修改成功!\033[0m\n"); break;
case 6:printf("\033[33m输入修改后的所剩数目:");
scanf("%d",&p->quantity);
printf("\033[32m修改成功!\033[0m\n"); break;
default:printf("\033[31m您的选择有误,请重选!\033[0m\n\n"); break;
}
}
else printf("\033[31m对不起,没有该书刊信息!\033[0m\n\n");
getchar();
printf("\033[33m是否继续修改('y' or 'n'):");
scanf("%c",&c);
printf("\033[0m");
if(c=='n'||c=='N') break;
}
}
int output(sb *p)//--------------------------打印书刊信息
{ int i=1;
if(p==NULL||p->next==NULL)
{ printf("\033[31m没有信息,无法打印!\n");
return 0;
}
p=p->next;
while(p!=NULL)
{ if(!(i%2-0)&&(p->quantity-0))
{ printf(PR11);
i++;
p=p->next;
}
else if((i%2-0)&&(p->quantity-0))
{ printf(PR21);
i++;
p=p->next;
}
else if(!(i%2-0)&&!(p->quantity-0))
{ printf(PR12);
i++;
p=p->next;
}
else if((i%2-0)&&!(p->quantity-0))
{ printf(PR22);
i++;
p=p->next;
}
}
}
void sort1(sb *head)//-------------------------按借阅剩余数量排序排序
{ sb *p,*p1,*p2;
printf("\n\n\n\n\n\033[33m->->排序系统---按借阅剩余量大到小 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
p=p1=head->next;
p1=p1->next;
p->next=NULL;
if(head==NULL||head->next==NULL)
{ printf("\033[31m没有信息,无法排序!\033[0m\n");
return;
}
while(p1!=NULL)
{ p2=p1->next;
p=head;
while(p->next!=NULL&&p->next->quantity>p1->quantity)
p=p->next;
p1->next=p->next;
p->next=p1;
p1=p2;
}
printf("\033[32m排序成功!\033[0m\n");
}
void sort2(sb *head)//-----------------------按编码排序
{ sb *p,*p1,*p2;
printf("\n\n\n\n\n\033[33m->->排序系统---按编码有小到大 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
p=p1=head->next;
p1=p1->next;
p->next=NULL;
if(head==NULL||head->next==NULL)
{ printf("\033[31m没有信息,无法排序!\033[0m\n");
return;
}
while(p1!=NULL)
{ p2=p1->next;
p=head;
while(p->next!=NULL&&p->next->numnum)
p=p->next;
p1->next=p->next;
p->next=p1;
p1=p2;
}
printf("\033[32m排序成功!\033[0m\n");
}
void count(sb *p)//--------------------------信息统计
{ int l=0;
printf("\n\n\n\n\n\033[33m->->统计系统 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
p=p->next;
while(p!=NULL)
{ l++;
p=p->next;
}
printf("\033[32m一共存储有%d个书刊信息!\n",l);
}
void store(sb *p)//-------------------------信息存储
{ FILE *fp;
char file1[40];
printf("\n\n\n\n\n\033[33m->->存储系统 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
getchar();
printf("\033[33m请输入文件存储路径:");
scanf("%s",file1);
printf("\033[0m");
fp=fopen(file1,"wt");
if(p==NULL)
{ printf("\033[31m没有信息,无法储存!\033[0m\n");
fclose(fp);
return;
}
while(p->next!=NULL)
{ p=p->next;
fwrite(p,T,1,fp);
}
fclose(fp);
printf("\033[32m信息存储成功!\033[0m\n");
}
sb *read()//------------------------------------读取数据
{ sb *p1,*p2,*head;
FILE *fp;
char file2[40];
printf("\n\n\n\n\n\033[33m->->读取系统 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
getchar();
printf("\033[33m请输入文件地址:");
scanf("%s",file2);
printf("\033[0m");
if((fp=fopen(file2,"rt"))==NULL)
{ printf("\033[31m文件不存在!\033[0m\n");
// if(head->next==NULL) printf("\033[31m文件信息不存在!\033[0m\n");
}
else
{ head=p2=(sb *)malloc(T);
while(1)
{ p1=(sb *)malloc(T);
if(fread(p1,T,1,fp)!=1) break;
p2->next=p1;
p2=p1;
}
p2->next=NULL;
fclose(fp);
printf("\033[32m信息读取成功!\033[0m\n");
}
return head;
}
sb *build()//---------------------------建立新数据库
{ sb *head;
char m;
printf("\n\n\n\n\n\033[33m->->录入系统 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
getchar();
printf("\033[31m新数据库会覆盖原数据,请谨慎选择!否则后果自负!是否继续:('Y' or 'N'):");
scanf("%c",&m);
if(m=='N'||m=='n') return 0;
else if(m=='Y'||m=='y')
return(head=creat());
}
int switchh(sb *p,sb
*head)//-------------------------主函数功能选择
{ int n;
printf("\033[33m\t\t\t\t+\t\t\t\t请选择您需要的功能:");
scanf("%d",&n);
printf("\033[0m");
while(n!=0)
{
switch(n)
{
case 1:printf("\033[2J\033[40A");
head=read();
break;
case 2:printf("\033[2J\033[40A");
store(head);
break;
case 3:printf("\033[2J\033[40A");
count(head);
break;
case 4:printf("\033[2J\033[40A");
p=namefind(head);
if(p) { printf(PR);
if(p->quantity!=0)
printf(PR11);
else if(!(p->quantity-0))
printf(PR12);
}
else printf("\033[31m对不起,没有该书刊!\033[0m\n");
break;
case 5:printf("\033[2J\033[40A");
p=numberfind(head);
if(p) { printf(PR);
if(p->quantity!=0)
printf(PR11);
else if(!(p->quantity-0))
printf(PR12);
}
else printf("\033[31m对不起,没有该书刊!\033[0m\n");
break;
case 6:printf("\033[2J\033[40A");
alter(head);
break;
case 7:printf("\033[2J\033[40A");
printf("\n\n\n\n\n\033[33m->->打印系统 ~~爱国~~求是~~奋进~~\n");
printf("------------------------------------------------------------------------------\033[0m\n\n\n");
printf(PR);
output(head);
break;
case 8:printf("\033[2J\033[40A");
if(insert(head)) printf("\033[32m已成功插入!\033[0m\n");
else printf("\033[31m有重号或编码错误,插入失败!\033[0m\n");
break;
case 9:printf("\033[2J\033[40A");
if(delete(head)) printf("\033[32m已正确删除!\033[0m\n");
else
printf("\033[31m删除项不存在!\033[0m\n");
break;
case 10:printf("\033[2J\033[40A");
head=build();
break;
case 11:printf("\033[2J\033[40A");
sort1(head);
break;
case 12:printf("\033[2J\033[40A");
sort2(head);
break;
default:printf("\033[2J\033[40A");
printf("\033[33m输入错误!请重新输入!!!\033[31m T_T \033[0m\n");break;
}
getchar();
printf("\n\n\033[33m------------------------------------------------------------------------------\033[0m\n");
printf("\033[32m按"Enter"键返回!");
getchar();
table2();
printf("\033[33m\t\t\t\t+\t\t\t\t请选择您需要的功能:");
scanf("%d",&n);
printf("\033[0m");
}
}
int main(void)
{ char Z[N][9],M[N][7];
sb *head,*p;
int Q,i;
head=NULL;
table();
Q=password();
if(Q) return 0;
getchar();
getchar();
table2();
switchh(p,head);
end();
}