linux图书管理系统,C语言——图书管理系统(Linux版)

#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();

}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值