天天看點

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

}