C語(yǔ)言大作業(yè)之圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)詳程
序
時(shí)間在流去,我們?cè)陂L(zhǎng)大。
嗨,這里是狐貍~~
今天是2022年的一月四日了,元旦小長(zhǎng)假也過(guò)去了,新年新氣象,新年新目標(biāo),我們要向前看,不要執(zhí)意過(guò)去了,感謝過(guò)去,把握現(xiàn)在,展望未來(lái),這是我們現(xiàn)在應(yīng)該做的。好了,廢話不多說(shuō),今天我們分享一個(gè)系統(tǒng),確實(shí)也有許久沒(méi)有分享過(guò)系統(tǒng)了,今天就給大家詳細(xì)講一下這個(gè)圖書(shū)管理系統(tǒng)吧。

主要內(nèi)容
開(kāi)發(fā)一個(gè)圖書(shū)信息管理系統(tǒng),圖書(shū)信息包括:圖書(shū)編號(hào)、書(shū)名、作者、出版社、類(lèi)別、出版時(shí)間、價(jià)格等基本信息(也可以根據(jù)自己情況進(jìn)行擴(kuò)充,比如是否借出、庫(kù)存量等)。使之能提供以下基本功能:
(1)圖書(shū)信息錄入功能(圖書(shū)信息用文件保存)--輸入
(2)圖書(shū)信息瀏覽功能--輸出
(3)查詢功能(至少一種查詢方式)、排序功能(至少一種排序方式):
①按書(shū)名查詢
②按作者名查詢 按照價(jià)錢(qián)排序 按出版時(shí)間排序等等
(4)圖書(shū)信息的刪除與修改
擴(kuò)展功能:可以按照自己的程度進(jìn)行擴(kuò)展。比如
(1)簡(jiǎn)單的權(quán)限處理
(2)報(bào)表打印功能
(3)甚至根據(jù)自己情況,可以加上學(xué)生信息,并擴(kuò)充為圖書(shū)借閱系統(tǒng)。
(4)模糊查詢
(5)綜合查詢
(6)統(tǒng)計(jì)功能 比如統(tǒng)計(jì)處某一類(lèi)別的圖書(shū)信息 或 篩選出小于指定數(shù)量庫(kù)存的圖書(shū)信息等等。
概要設(shè)計(jì)
1 圖書(shū)錄入可以錄入圖書(shū)名,作者,出版社,出版日期,價(jià)格!錄入圖書(shū)編號(hào)時(shí)函數(shù)就會(huì)判斷此 編 號(hào)是否存在,若存在不能成功錄入!
2 圖書(shū)瀏覽可以瀏覽全部圖書(shū)!
3 圖書(shū)查詢提供按圖書(shū)編號(hào)模糊查詢,按圖書(shū)名關(guān)鍵字查詢,按圖書(shū)編號(hào)精確查詢,按圖書(shū)名精確 查詢!模糊查詢和關(guān)鍵字查詢事通過(guò)比價(jià)字符串的相似度而實(shí)現(xiàn)的!
4 修改刪除圖書(shū)可以通過(guò)圖書(shū)查詢來(lái)查詢操作的圖書(shū)編號(hào),通過(guò)編號(hào)操作!函數(shù)會(huì)提示用戶是否調(diào) 用圖書(shū)查詢來(lái)找到自己想要操作的圖書(shū)的編號(hào)。如果某一本圖書(shū)已經(jīng)被借閱那么用戶就不能刪 除 該圖書(shū)!
5 借閱圖書(shū)通過(guò)學(xué)號(hào)和圖書(shū)編號(hào)進(jìn)行借閱!如果該學(xué)號(hào)是第一次借閱那么會(huì)提示用戶輸入自己的姓 名,并存入student.txt,方便以后借閱與歸還!
6 歸還圖書(shū)先提供學(xué)號(hào),然后程序會(huì)輸出該學(xué)號(hào)借閱的所有圖書(shū),然后再通過(guò)編號(hào)歸還!
7 借閱查詢可查詢某個(gè)學(xué)生已借但未歸還的圖書(shū)!

項(xiàng)目源碼
結(jié)構(gòu)體
先建立結(jié)構(gòu)體,定義結(jié)構(gòu)體成員
typedef struct book/*圖書(shū)結(jié)構(gòu)體*/
{
char num[10]; /*書(shū)號(hào)*/
char name[10]; /*書(shū)名*/
char auth[10]; /*作者*/
int count;
int sum;
}Book;
typedef struct borrow/*借書(shū)結(jié)構(gòu)體*/
{
char id[20];
char user[20];
char book[20];
char bookid[20];
struct borrow *next;
}BBnode,*BBlink;
struct user
{
char num[10];/* 學(xué)號(hào) */
char pass[15];
char name[15];
char sex[10];
};
typedef struct unode
{
struct user data;
struct unode *next;
}Unode,*Ulink;
Unode *os;登錄界面函數(shù)
int login(Ulink l)
{
/*****************登陸窗口初始化****************************/
while(!flag)
{
char User_id[10],password[10],tmp;
int i=0;
User_id[0]='\0';
password[0]='\0';
textbackground(179);
clrscr();
gotoxy(33,23);
textcolor(YELLOW);
cputs("ESC = EXIT");
textcolor(WHITE);
textbackground(179);
box(1,1,80,24);
h_line(2,3,78);
gotoxy(15,2);
cputs("Login now please input the User__ID and Password");
bar_(30,10,23,5,5);
/******************賬號(hào)過(guò)濾*********************/
while(User_id[0]=='\0')
{
gotoxy(31,11);
textcolor(YELLOW);
textbackground(5);
cputs("User__ID:");
gotoxy(31,13);
cputs("Password:");
textbackground(179);
textcolor(WHITE);
gotoxy(28,7);
cputs("please input the User__ID!");
textbackground(179);
textcolor(YELLOW);
gotoxy(27,11);
putch(272);
gotoxy(27,13);
putch(' ');
gotoxy(40,11);
tmp=getch();
if(tmp==27)
{
flg=27;
return 0;
}
while(tmp!='\r'&&i<=9&&(tmp>=64&&tmp<=90)||(tmp>=97&&tmp<=122||(tmp>=48&&tmp<=57)))
{
textcolor(YELLOW);
textbackground(5);
putch(tmp);
User_id[i]=tmp;
i++;
tmp=getch();
if(tmp==27)
{
flg=27;
return 0;
}
}
User_id[i]='\0';
}
/**********************密碼過(guò)濾****************************/
while(password[0]=='\0')
{
gotoxy(28,7);
textbackground(179);
textcolor(WHITE);
cputs(" input the password now ");
textbackground(179);
textcolor(YELLOW);
gotoxy(27,13);
putch(272);
gotoxy(27,11);
putch(' ');
gotoxy(40,13);
i=0;
tmp=getch();
if(tmp==27)
{
flg=27;
return 0;
}
while(tmp!='\r'&&i<=10&&(tmp>=64&&tmp<=90)||(tmp>=97&&tmp<=122||(tmp>=48&&tmp<=57)))
{
textbackground(5);
putch('*');
password[i]=tmp;
i++;
tmp=getch();
if(tmp==27)
{
flg=27;
return 0;
}
}
password[i]='\0';
}
/*************把賬號(hào)和密碼進(jìn)行對(duì)比驗(yàn)證**************/
if(!strcmp(User_id,"admin")&&!strcmp(password,"admin"))
{
return 2;
}
if(cmps(l,User_id,password))
{
return 1;
}
}
}選擇界面函數(shù)
void choose()
{
while(1)
{
textbackground(179);
clrscr();
gotoxy(33,2);
textcolor(WHITE);
cputs("Administrastor");
textcolor(YELLOW);
box(1,1,80,24);
h_line(2,3,78);
gotoxy(3,6);
cputs(">>>-------------------------1.User Management----------------------------<<<");
gotoxy(3,10);
cputs(">>>-------------------------2.Book Management----------------------------<<<");
gotoxy(3,14);
cputs(">>>-------------------------3.Borrow Books-------------------------------<<<");
gotoxy(30,22);
textcolor(RED);
cputs("Please Select!!!");
flg=getch();
if(flg=='2')
bookss();
if(flg=='1')
users();
if(flg=='3')
borrow();
if(flg==27)
{
flg=-1;
return;
}
}
}
void admin()
{
while(1)
{
choose();
if(flg=='1')
bookss();
if(flg=='2')
users();
if(flg=='3')
borrow();
if(flg==27)
{
return;
}
}
}操作界面函數(shù)
void user(Ulink h)
{
int flag;
BBlink l,p,r;/* 連表 */
FILE *fp; /* 文件指針 */
int count=0;
l=(BBnode*)malloc(sizeof(BBnode));
l->next=NULL;
r=l;
fp=fopen(bfile,"rb");
if(fp==NULL)
{
fp=fopen(bfile,"wb");
}
while(!feof(fp))
{
p=(BBnode*)malloc(sizeof(BBnode));
if(fread(p,sizeof(BBnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點(diǎn)掛入連中 */
count++;
}
}
while(1)
{
textbackground(179);
clrscr();
textcolor(YELLOW);
box(1,1,80,24);
h_line(2,3,78);
gotoxy(3,2);
textcolor(RED);
cputs("A.");
textcolor(BLUE);
cputs("my message ");
textcolor(RED);
cputs("B.");
textcolor(BLUE);
cputs("modyfy my message ");
textcolor(RED);
cputs("C.");
textcolor(BLUE);
cputs("my borrow ");
textcolor(RED);
cputs("D.");
textcolor(BLUE);
cputs("search book");
textcolor(YELLOW);
gotoxy(50,50);
flag=getch();
switch(flag)
{
case 'a':
show(os);
break; /*************添加用戶**********/
case 'b':
Modify_user(h);
Save(h);
break;/*************刪除用戶**********/
case 'c':
Myborrow();
break;
case 'd':
usersearch();
break;
case 27:
return;
}
}
}添加函數(shù)
圖書(shū)的添加,包括用戶添加以及管理員添加
void add(blink l)
{
Bnode *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next;
textcolor(RED);
gotoxy(25,4);
cputs("INPUT THE MESSAGE ABOUT BOOK");
gotoxy(31,10);
textcolor(YELLOW);
cputs("Book ID:");
scanf("%s",num);
p=(Bnode *)malloc(sizeof(Bnode));
while(s)
{
if(strcmp(s->data.num,num)==0)
{
textcolor(WHITE);
gotoxy(25,15);
cputs("This ID:");
printf("'%s'",num);
cputs("is exist!");
gotoxy(25,22);
cputs("please Press any key to continue...");
gotoxy(255,252);
getch();
return;
}
s=s->next;
}
strcpy(p->data.num,num);
gotoxy(31,12);
textcolor(YELLOW);
cputs("Input Book name:");
scanf("%s",p->data.name);
gotoxy(31,14);
cputs("input your Book auth:");
scanf("%s",p->data.auth);
gotoxy(31,16);
cputs("input your Book count:");
scanf("%d",&p->data.count);
bookcount=p->data.count+bookcount;
p->data.sum=0;
p->next=NULL;
r->next=p;
r=p;
gotoxy(30,22);
textcolor(RED);
cputs("Add Book Success !!!");
getch();
textcolor(YELLOW);
}
/*******管理員添加用戶*******/
void Add(Ulink l)
{
Unode *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next;
textcolor(RED);
gotoxy(25,4);
cputs("INPUT THE MESSAGE ABOUT BOOK");
gotoxy(31,10);
textcolor(YELLOW);
cputs("User ID:");
scanf("%s",num);
p=(Unode *)malloc(sizeof(Unode));
while(s)
{
if(strcmp(s->data.num,num)==0)
{
gotoxy(25,15);
cputs("This ID:");
printf("'%s'",num);
cputs("is exist!");
gotoxy(25,22);
textcolor(RED);
cputs("please Press any key to continue...");
gotoxy(255,252);
getch();
return;
}
s=s->next;
}
strcpy(p->data.num,num);
gotoxy(31,12);
textcolor(YELLOW);
cputs("Input Password:");
scanf("%s",p->data.pass);
gotoxy(31,14);
cputs("input your name:");
scanf("%s",p->data.name);
gotoxy(31,16);
cputs("input the sex:");
scanf("%s",p->data.sex);
p->next=NULL;
r->next=p;
r=p;
gotoxy(30,22);
cputs("Add User Success !!!");
usercount++;
getch();
textcolor(YELLOW);
} 查找函數(shù)
用戶查找以及管理員查找
/*******管理員查找圖書(shū)*******/
void qur(blink l)
{
int sel;
char findmess[20];
Bnode *p;
if(!l->next)
{
gotoxy(30,4);
textcolor(WHITE);
cputs("Not Find Bookdata!!!");
getch();
return;
}
textcolor(RED);
gotoxy(25,4);
cputs("Please Select Search Type !");
gotoxy(10,8);
textcolor(WHITE);
cputs("1.Search by ID");
gotoxy(10,10);
cputs("2.Search by Name");
gotoxy(10,12);
cputs("Please Select 1 or 2:");
scanf("%d",&sel);
if(sel==1)
{
gotoxy(36,8);
textcolor(YELLOW);
cputs("Input the search ID:");
scanf("%s",findmess);
p=locate(l,findmess,"num");
if(p)
{
gotoxy(36,12);
textcolor(WHITE);
cputs("Book ID:");
printf("%s",p->data.num);
gotoxy(36,14);
textcolor(WHITE);
cputs("Book Name:");
printf("%s",p->data.name);
gotoxy(36,16);
textcolor(WHITE);
cputs("Book author:");
printf("%s",p->data.auth);
gotoxy(36,18);
textcolor(WHITE);
cputs("Book count:");
printf("%d",p->data.count);
getch();
textcolor(YELLOW);
gotoxy(30,21);
cputs("Search Success !!");
}
else
{
gotoxy(30,22);
textcolor(RED);
cputs("Not finde !!!");
getch();
}
}
else if(sel==2) /* 姓名 */
{
gotoxy(36,8);
textcolor(YELLOW);
cputs("Input the search name:");
scanf("%s",findmess);
p=locate(l,findmess,"name");
if(p)
{
gotoxy(36,12);
textcolor(WHITE);
cputs("Book ID:");
printf("%s",p->data.num);
gotoxy(36,14);
textcolor(WHITE);
cputs("Book Name:");
printf("%s",p->data.name);
gotoxy(36,16);
textcolor(WHITE);
cputs("Book author:");
printf("%s",p->data.auth);
gotoxy(36,18);
textcolor(WHITE);
cputs("Book count:");
printf("%d",p->data.count);
getch();
textcolor(YELLOW);
}
else
{
textcolor(RED);
gotoxy(30,22);
cputs("Not finde !!!");
}
}
else
{
textcolor(RED);
gotoxy(30,22);
cputs("Error !!");
getch();
}
}
/*******用戶查找圖書(shū)*******/
void usersearch()
{
int sel;
char findmess[20];
Bnode *p;
blink l;/* 連表 */
FILE *fp; /* 文件指針 */
int count=0;
Bnode *P,*r;
l=(Bnode*)malloc(sizeof(Bnode));
l->next=NULL;
r=l;
fp=fopen(file,"rb");
if(fp==NULL)
{
fp=fopen(file,"wb");
}
while(!feof(fp))
{
P=(Bnode*)malloc(sizeof(Bnode));
if(fread(P,sizeof(Bnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
P->next=NULL;
bookcount=bookcount+P->data.count;
booksum=booksum+P->data.sum;
r->next=P;
r=P; /* 將該接點(diǎn)掛入連中 */
count++;
}
}
fclose(fp); /* 關(guān)閉文件 */
if(!l->next)
{
gotoxy(30,4);
textcolor(WHITE);
cputs("Not Find Bookdata!!!");
getch();
return;
}
textcolor(RED);
gotoxy(25,4);
cputs("Please Select Delete Type !");
gotoxy(10,8);
textcolor(WHITE);
cputs("1.Search by ID");
gotoxy(10,10);
cputs("2.Search by Name");
gotoxy(10,12);
cputs("Please Select 1 or 2:");
scanf("%d",&sel);
if(sel==1)
{
gotoxy(36,8);
textcolor(YELLOW);
cputs("Input the search ID:");
scanf("%s",findmess);
p=locate(l,findmess,"num");
if(p)
{
gotoxy(36,12);
textcolor(WHITE);
cputs("Book ID:");
printf("%s",p->data.num);
gotoxy(36,14);
textcolor(WHITE);
cputs("Book Name:");
printf("%s",p->data.name);
gotoxy(36,16);
textcolor(WHITE);
cputs("Book author:");
printf("%s",p->data.auth);
gotoxy(36,18);
textcolor(WHITE);
cputs("Book count:");
printf("%d",p->data.count-p->data.sum);
getch();
textcolor(YELLOW);
}
else
{
gotoxy(30,22);
textcolor(RED);
cputs("Not finde !!!");
getch();
}
}
else if(sel==2)
{
gotoxy(36,8);
textcolor(YELLOW);
cputs("Input the search name:");
scanf("%s",findmess);
p=locate(l,findmess,"name");
if(p)
{
gotoxy(36,12);
textcolor(WHITE);
cputs("Book ID:");
printf("%s",p->data.num);
gotoxy(36,14);
textcolor(WHITE);
cputs("Book Name:");
printf("%s",p->data.name);
gotoxy(36,16);
textcolor(WHITE);
cputs("Book author:");
printf("%s",p->data.auth);
gotoxy(36,18);
textcolor(WHITE);
cputs("Book count:");
printf("%d",(p->data.count-p->data.sum));
getch();
textcolor(YELLOW);
}
else
{
textcolor(RED);
gotoxy(30,22);
cputs("Not finde !!!");
}
}
else
{
textcolor(RED);
gotoxy(30,22);
cputs("Error !!");
getch();
}
}
/*******圖書(shū)查找*******/
int cmpbook(blink l,char id[],char na[])
{
char findm[20];
Bnode *p;
if(!l->next)
{
gotoxy(25,4);
textcolor(RED);
cputs("Not Find Book!!!");
getch();
return 0;
}
strcpy(findm,id);
p=locate(l,findm,"num");
if(p)
{
strcpy(findm,na);
p=locate(l,findm,"name");
if(p)
{
return 1;
}
else
{
textcolor(RED);
gotoxy(30,22);
cputs("Book name is NULL !!!");
getch();
return 0;
}
}
else
{
gotoxy(30,22);
textcolor(RED);
cputs("Book id is NULL !!!");
getch();
return 0;
}
} 刪除函數(shù)
圖書(shū)的刪除
void del(blink l)
{
int sel;
Bnode *p,*r;
char findmess[20];
if(!l->next)
{
gotoxy(25,4);
textcolor(RED);
cputs("=====>not thing could delete!\n");
getch();
return;
}
textcolor(RED);
gotoxy(25,4);
puts("Please Select Delete Type !");
gotoxy(10,8);
textcolor(WHITE);
cputs("1.Delete by Book ID");
gotoxy(10,10);
cputs("2.Delete by Book Name");
gotoxy(10,12);
cputs("Please Select 1 or 2:");
scanf("%d",&sel);
if(sel==1)
{
gotoxy(36,8);
textcolor(YELLOW);
cputs("Input the delete ID:");
scanf("%s",findmess);
p=locate(l,findmess,"num");
if(p)
{
bookcount=bookcount-p->data.count;
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
gotoxy(30,22);
textcolor(RED);
cputs("Delete success!\n");
textcolor(YELLOW);
}
else
{
textcolor(RED);
gotoxy(30,22);
cputs("Error !!");
}
}
else if(sel==2)
{
gotoxy(36,8);
textcolor(YELLOW);
cputs("Input the delete name:");
scanf("%s",findmess);
p=locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
gotoxy(30,22);
textcolor(RED);
cputs("Delete success!\n");
bookcount--;
textcolor(YELLOW);
}
else
{
gotoxy(25,18);
cputs("Not find!!");
}
}
else
{
textcolor(RED);
gotoxy(30,22);
cputs("Error !!");
}
getch();
textcolor(YELLOW);
} 借書(shū)管理函數(shù)
void borrow()
{
while(1)
{
int flag;
BBlink l,p,r;/* 連表 */
FILE *fp; /* 文件指針 */
int count=0;
l=(BBnode*)malloc(sizeof(BBnode));
l->next=NULL;
r=l;
fp=fopen(bfile,"rb");
if(fp==NULL)
{
fp=fopen(bfile,"wb");
}
while(!feof(fp))
{
p=(BBnode*)malloc(sizeof(BBnode));
if(fread(p,sizeof(BBnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點(diǎn)掛入連中 */
count++;
}
borrowcount=count;
}
while(1)
{
textbackground(179);
clrscr();
textcolor(YELLOW);
box(1,1,80,24);
h_line(2,3,78);
gotoxy(3,2);
textcolor(RED);
cputs("B");
textcolor(BLUE);
cputs("orrow book ");
textcolor(RED);
cputs("R");
textcolor(BLUE);
cputs("eturn book ");
textcolor(RED);
cputs("S");
textcolor(BLUE);
cputs("earch borrow ");
textcolor(YELLOW);
printf("count: (borrow=%d)",borrowcount);
textcolor(RED);
gotoxy(50,50);
flag=getch();
switch(flag)
{
case 'b':
Add_borrow(l);
break; /*************添加用戶**********/
case 'r':
Del_borrow(l);
Save_borrow(l);
break;
case 's':
Qur_borrow(l);
break;
case 27:
return;
}
}
}
}
信息儲(chǔ)存函數(shù)
圖書(shū)信息的儲(chǔ)存
*******借書(shū)信息保存*******/
void Save_borrow(BBlink l)
{
FILE* fp;
BBnode *p;
int flag=1,count=0;
fp=fopen(bfile,"wb");
if(fp==NULL)
{
gotoxy(35,12);
textcolor(RED);
cputs("open error!");
exit(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(BBnode),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
textcolor(RED);
gotoxy(30,24);
/*** printf("save success.(saved%d.)",count);**調(diào)試的時(shí)候用的*/
}
fclose(fp);
} 還書(shū)函數(shù)
/* 還書(shū)的操作 */
void Del_borrow(BBlink l)
{
int sel;
BBnode *p,*r;
Bnode *L;
char findmess[20];
FILE *fp; /* 文件指針 */
Bnode *P,*R,*Q;
L=(Bnode*)malloc(sizeof(Bnode));
L->next=NULL;
R=L;
fp=fopen(file,"rb");
if(fp==NULL)
{
fp=fopen(file,"wb");
}
while(!feof(fp))
{
P=(Bnode*)malloc(sizeof(Bnode));
if(fread(P,sizeof(Bnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
P->next=NULL;
R->next=P;
R=P; /* 將該接點(diǎn)掛入連中 */
}
}
fclose(fp); /* 關(guān)閉文件 */
if(!l->next)
{
gotoxy(30,4);
textcolor(RED);
cputs("not Book could Return!\n");
getch();
return;
}
textcolor(RED);
gotoxy(25,4);
puts("Please Select Return Type !");
gotoxy(10,8);
textcolor(WHITE);
cputs("1.Return by Borrow ID");
gotoxy(10,10);
cputs("2.Return by book name");
gotoxy(10,12);
cputs("Please Select 1 or 2:");
scanf("%d",&sel);
if(sel==1)
{
gotoxy(36,8);
textcolor(YELLOW);
cputs("Input the Borrow ID:");
scanf("%s",findmess);
p=Locate_borrow(l,findmess,"num");
if(p)
{
Q=locate(L,findmess,"num");
if(Q)
{
Q->data.sum=Q->data.sum-1;
save(L);
}
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
gotoxy(30,22);
textcolor(RED);
cputs("Return success!\n");
borrowcount--;
getch();
textcolor(YELLOW);
}
else
{
gotoxy(30,22);
textcolor(RED);
cputs("Note find !!");
getch();
}
}
else if(sel==2)
{
gotoxy(36,8);
textcolor(YELLOW);
cputs("Input the Book name:");
scanf("%s",findmess);
p=Locate_borrow(l,findmess,"book");
if(p)
{
Q=locate(L,findmess,"name");
if(Q)
{
Q->data.sum=Q->data.sum-1;
save(L);
}
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
gotoxy(30,22);
textcolor(RED);
cputs("Borrow success!\n");
borrowcount--;
getch();
textcolor(YELLOW);
}
else
{
gotoxy(30,18);
textcolor(RED);
cputs("Not find!!");
getch();
}
}
else
{
gotoxy(30,22);
textcolor(RED);
cputs("Not finde !!");
getch();
}
textcolor(YELLOW);
} 修改函數(shù)
也分為用戶和管理員兩種情況
/* ****用于管理員修改用戶資料 ***/
void Modify(Ulink l)
{
Unode *p;
char findmess[20];
if(!l->next)
{
gotoxy(30,4);
textcolor(RED);
cputs("not thing could modify!");
getch();
return;
}
gotoxy(30,4);
textcolor(RED);
cputs("Modify User Message");
gotoxy(25,8);
textcolor(YELLOW);
cputs("input the User Id:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
textcolor(YELLOW);
gotoxy(25,10);
printf("Inpute The New ID(old:%s):",p->data.num);
scanf("%s",p->data.num);
gotoxy(25,12);
printf("Input The New Password(old:%s):",p->data.pass);
scanf("%s",p->data.pass);
gotoxy(25,14);
printf("Input The New Name(old:%s):",p->data.name);
scanf("%s",p->data.name);
gotoxy(25,16);
printf("Input The New Sex(old:%s):",p->data.sex);
scanf("%s",p->data.sex);
gotoxy(30,20);
textcolor(RED);
cputs("Modify Success !!!");
getch();
textcolor(YELLOW);
}
else
{
gotoxy(30,16);
textcolor(RED);
cputs("Not Finde !!!");
getch();
}
}
/****供用戶修改用戶自己資料 */
void Modify_user(Ulink l)
{
Unode *p;
char findmess[20];
if(!l->next)
{
gotoxy(30,4);
textcolor(RED);
cputs("not thing could modify!");
getch();
return;
}
gotoxy(30,4);
textcolor(RED);
cputs("Modify User Message");
gotoxy(33,8);
textcolor(YELLOW);
strcpy(findmess,os->data.num);
printf("your id:%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
textcolor(YELLOW);
gotoxy(24,10);
printf("Input The New Password(old:%s):",p->data.pass);
scanf("%s",p->data.pass);
gotoxy(24,12);
printf("Input The New Name(old:%s):",p->data.name);
scanf("%s",p->data.name);
gotoxy(24,14);
printf("Input The New Sex(old:%s):",p->data.sex);
scanf("%s",p->data.sex);
gotoxy(31,18);
textcolor(RED);
cputs("Modify Success !!!");
getch();
textcolor(YELLOW);
}
else
{
gotoxy(30,16);
textcolor(RED);
cputs("Not Finde !!!");
getch();
}
} 添加借書(shū)函數(shù)
/*******添加借書(shū)*******/
void Add_borrow(BBlink l)
{
Ulink H;/* 連表 */
FILE *Fp; /* 文件指針 */
Unode *Q,*T;
blink L;/* 連表 */
FILE *FP; /* 文件指針 */
int ttl;
Bnode *P,*R;
char bookid[20];
char bookname[20];
char userid[20];
BBnode *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next;
L=(Bnode*)malloc(sizeof(Bnode));
L->next=NULL;
R=L;
FP=fopen(file,"rb");
if(FP==NULL)
{
FP=fopen(file,"wb");
}
while(!feof(FP))
{
P=(Bnode*)malloc(sizeof(Bnode));
if(fread(P,sizeof(Bnode),1,FP)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
P->next=NULL;
bookcount=bookcount+P->data.count;
R->next=P;
R=P; /* 將該接點(diǎn)掛入連中 */
}
}
fclose(FP); /* 關(guān)閉文件 */
H=(Unode*)malloc(sizeof(Unode));
H->next=NULL;
T=H;
Fp=fopen(ufile,"rb");
if(Fp==NULL)
{
Fp=fopen(ufile,"wb");
}
while(!feof(Fp))
{
Q=(Unode*)malloc(sizeof(Unode));
if(fread(Q,sizeof(Unode),1,Fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
Q->next=NULL;
T->next=Q;
T=Q; /* 將該接點(diǎn)掛入連中 */
}
}
fclose(Fp);
textcolor(RED);
gotoxy(25,4);
cputs("Please input thease message");
gotoxy(30,10);
textcolor(YELLOW);
cputs("Input Borrow ID:");
scanf("%d",&ttl);
itoa(ttl,num,10) ;
p=(BBnode *)malloc(sizeof(BBnode));
while(s)
{
if(strcmp(s->id,num)==0)
{
gotoxy(30,15);
cputs("Borrow ID:");
printf("'%s'",num);
cputs("is exist!");
gotoxy(26,22);
textcolor(RED);
cputs("please Press any key to continue...");
gotoxy(255,252);
getch();
return;
}
s=s->next;
}
strcpy(p->id,num);
gotoxy(31,12);
textcolor(YELLOW);
cputs("Input book id:");
scanf("%s",bookid);
gotoxy(31,14);
textcolor(YELLOW);
cputs("Input book name:");
scanf("%s",bookname);/***************************************圖書(shū)判斷在否***************************************/
if(cmpbook(L,bookid,bookname))
{
strcpy(p->bookid,bookid);
strcpy(p->book,bookname);
gotoxy(31,16);
cputs("input your ID:");
scanf("%s",userid); /**************************************用戶判斷在否********************************/
if(cmpuser(H,userid))
{
strcpy(p->user,userid);
p->next=NULL;
r->next=p;
r=p;
if(changeb(L,bookid))
{
gotoxy(30,22);
cputs("Borrow Success !!!");
Save_borrow(l);
borrowcount++;
getch();
}
}
}
textcolor(YELLOW);
} 查找借書(shū)函數(shù)
查找自己借了哪些書(shū)
void Myborrow()
{
int i;
BBlink l,p,r;/* 連表 */
FILE *fp; /* 文件指針 */
int count=0;
l=(BBnode*)malloc(sizeof(BBnode));
l->next=NULL;
r=l;
fp=fopen(bfile,"rb");
if(fp==NULL)
{
fp=fopen(bfile,"wb");
}
i=6;
while(!feof(fp))
{
p=(BBnode*)malloc(sizeof(BBnode));
if(fread(p,sizeof(BBnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
textcolor(WHITE);
gotoxy(30,4);
cputs("Your borrow book");
if(strcmp(p->user,os->data.num)==0)
{
textcolor(YELLOW);
gotoxy(20,i);
printf("Borrow ID:%s\tBook id:%s\tBook name:%s",p->id,p->bookid,p->book);
i++;
p->next=NULL;
r->next=p;
r=p; /* 將該接點(diǎn)掛入連中 */
count++;
}
}
myborrow=count;
if(myborrow==0)
{
textcolor(YELLOW);
gotoxy(30,13);
cputs("You no borrow !!");
}
}
fclose(fp);
textcolor(YELLOW);
gotoxy(65,2);
printf("(borrow=%d)",myborrow);
getch();
}借書(shū)管理函數(shù)
void borrow()
{
while(1)
{
int flag;
BBlink l,p,r;/* 連表 */
FILE *fp; /* 文件指針 */
int count=0;
l=(BBnode*)malloc(sizeof(BBnode));
l->next=NULL;
r=l;
fp=fopen(bfile,"rb");
if(fp==NULL)
{
fp=fopen(bfile,"wb");
}
while(!feof(fp))
{
p=(BBnode*)malloc(sizeof(BBnode));
if(fread(p,sizeof(BBnode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點(diǎn)掛入連中 */
count++;
}
borrowcount=count;
}
while(1)
{
textbackground(179);
clrscr();
textcolor(YELLOW);
box(1,1,80,24);
h_line(2,3,78);
gotoxy(3,2);
textcolor(RED);
cputs("B");
textcolor(BLUE);
cputs("orrow book ");
textcolor(RED);
cputs("R");
textcolor(BLUE);
cputs("eturn book ");
textcolor(RED);
cputs("S");
textcolor(BLUE);
cputs("earch borrow ");
textcolor(YELLOW);
printf("count: (borrow=%d)",borrowcount);
textcolor(RED);
gotoxy(50,50);
flag=getch();
switch(flag)
{
case 'b':
Add_borrow(l);
break; /*************添加用戶**********/
case 'r':
Del_borrow(l);
Save_borrow(l);
break;
case 's':
Qur_borrow(l);
break;
case 27:
return;
}
}
}
}主函數(shù)
main()
{
Ulink h,os;/* 連表 */
FILE *fp; /* 文件指針 */
Unode *p,*r;
h=(Unode*)malloc(sizeof(Unode));
h->next=NULL;
r=h;
fp=fopen(ufile,"rb");
if(fp==NULL)
{
fp=fopen(ufile,"wb");
}
while(!feof(fp))
{
p=(Unode*)malloc(sizeof(Unode));
if(fread(p,sizeof(Unode),1,fp)) /* 將文件的內(nèi)容放入接點(diǎn)中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點(diǎn)掛入連中 */
}
}
fclose(fp);
system("wellcome");
if(flg==27)
{
flg=-1;
return;
}
while(1)
{
flag=login(h);
if(flg==27)
{
flg=-1;
break;
}
if(flag==2)
{
choose();
flag=0;
}
if(flag==1)
{
user(h);
flag=0;
}
}
}總結(jié)
今天的代碼量有點(diǎn)小多,難度也不小,用了大量的鏈表來(lái)儲(chǔ)存數(shù)據(jù),還有一些功能因?yàn)槠膯?wèn)題沒(méi)有放上來(lái),總的來(lái)說(shuō),這個(gè)圖書(shū)管理系統(tǒng)的功能是很全面的,無(wú)論從哪個(gè)角度來(lái)看。當(dāng)然啦。有興趣的同學(xué)可以進(jìn)群領(lǐng)取完整的源碼看看,絕對(duì)是一個(gè)不錯(cuò)的機(jī)會(huì),可以說(shuō),你要是學(xué)會(huì)了這個(gè)系統(tǒng),你的C語(yǔ)言在我看來(lái)就完全沒(méi)有問(wèn)題了,而且在數(shù)據(jù)結(jié)構(gòu)一塊,你也算是小成了,所以希望大家可以認(rèn)真學(xué)習(xí),爭(zhēng)取早日掌握。
這也是2022年的第一篇文章了,希望2022繼續(xù)加油,向大家分享更多有趣的、有用的知識(shí),十分感謝大家的一路支持,后續(xù)我還會(huì)發(fā)布更多的項(xiàng)目源或者學(xué)習(xí)資料,希望大家可以持續(xù)關(guān)注。

到此這篇關(guān)于C語(yǔ)言大作業(yè)之圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)詳程的文章就介紹到這了,更多相關(guān)C語(yǔ)言 圖書(shū)管理系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)(文件數(shù)據(jù)庫(kù))
- C語(yǔ)言實(shí)現(xiàn)圖書(shū)館管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的圖書(shū)管理系統(tǒng)
- C語(yǔ)言鏈表實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- C語(yǔ)言圖書(shū)管理系統(tǒng)簡(jiǎn)潔版
- C語(yǔ)言圖書(shū)管理系統(tǒng)課程設(shè)計(jì)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單圖書(shū)管理系統(tǒng)
- C語(yǔ)言設(shè)計(jì)圖書(shū)登記系統(tǒng)與停車(chē)場(chǎng)管理系統(tǒng)的實(shí)例分享
- C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)課程設(shè)計(jì)
相關(guān)文章
利用C++實(shí)現(xiàn)最長(zhǎng)公共子序列與最長(zhǎng)公共子串
這篇文章主要給大家介紹了如何利用C++實(shí)現(xiàn)最長(zhǎng)公共子序列與最長(zhǎng)公共子串,文章一開(kāi)始就給大家簡(jiǎn)單的介紹了什么是子序列,子串應(yīng)該比較好理解就不用多介紹了,人后通過(guò)算法及示例代碼詳細(xì)介紹了C++實(shí)現(xiàn)的方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12
C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解的相關(guān)資料,atoi函數(shù),主要功能是將一個(gè)字符串轉(zhuǎn)變?yōu)檎麛?shù),這里就實(shí)現(xiàn)這樣的函數(shù),需要的朋友可以參考下2017-08-08
c++元編程模板函數(shù)重載匹配規(guī)則示例詳解
這篇文章主要為大家介紹了c++元編程模板函數(shù)重載匹配規(guī)則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
深入C++四種強(qiáng)制類(lèi)型轉(zhuǎn)換的總結(jié)
本篇文章是對(duì)C++中四種強(qiáng)制類(lèi)型轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
基于C語(yǔ)言實(shí)現(xiàn)三子棋游戲的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言數(shù)組實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
C語(yǔ)言實(shí)例梳理講解常用關(guān)鍵字的用法
關(guān)鍵字是C語(yǔ)言非常重要的一部分,熟練的掌握和使用關(guān)鍵字有助于我們更加熟悉了解C語(yǔ)言,同時(shí)C語(yǔ)言的關(guān)鍵字也是面試筆試中??嫉膬?nèi)容。C語(yǔ)言的關(guān)鍵字共有32個(gè),但并不是每個(gè)關(guān)鍵字都有坑,本篇文章將通過(guò)理論聯(lián)系實(shí)際的方式為大家講解C語(yǔ)言中易混易錯(cuò)以及??嫉囊恍╆P(guān)鍵字2022-05-05
C語(yǔ)言靜態(tài)與動(dòng)態(tài)通訊錄的實(shí)現(xiàn)流程詳解
這篇文章主要為大家介紹了C語(yǔ)言分別實(shí)現(xiàn)靜態(tài)與動(dòng)態(tài)的通訊錄示例代碼教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11

