序
时间在流去,我们在长大。
嗨,这里是狐狸~~
今天是2022年的一月四日了,元旦小长假也过去了,新年新气象,新年新目标,我们要向前看,不要执意过去了,感谢过去,把握现在,展望未来,这是我们现在应该做的。好了,废话不多说,今天我们分享一个系统,确实也有许久没有分享过系统了,今天就给大家详细讲一下这个图书管理系统吧。

主要内容
开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:
(1)图书信息录入功能(图书信息用文件保存)--输入
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
①按书名查询
②按作者名查询 按照价钱排序 按出版时间排序等等
(4)图书信息的删除与修改
扩展功能:可以按照自己的程度进行扩展。比如
(1)简单的权限处理
(2)报表打印功能
(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。
(4)模糊查询
(5)综合查询
(6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等。
概要设计
1 图书录入可以录入图书名,作者,出版社,出版日期,价格!录入图书编号时函数就会判断此 编 号是否存在,若存在不能成功录入!
2 图书浏览可以浏览全部图书!
3 图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确 查询!模糊查询和关键字查询事通过比价字符串的相似度而实现的!
4 修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!函数会提示用户是否调 用图书查询来找到自己想要操作的图书的编号。如果某一本图书已经被借阅那么用户就不能删 除 该图书!
5 借阅图书通过学号和图书编号进行借阅!如果该学号是第一次借阅那么会提示用户输入自己的姓 名,并存入student.txt,方便以后借阅与归还!
6 归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过编号归还!
7 借阅查询可查询某个学生已借但未归还的图书!

项目源码
结构体
先建立结构体,定义结构体成员
- typedef struct book/*图书结构体*/
- {
- char num[10]; /*书号*/
- char name[10]; /*书名*/
- char auth[10]; /*作者*/
- int count;
- int sum;
- }Book;
- typedef struct borrow/*借书结构体*/
- {
- char id[20];
- char user[20];
- char book[20];
- char bookid[20];
- struct borrow *next;
- }BBnode,*BBlink;
- struct user
- {
- char num[10];/* 学号 */
- char pass[15];
- char name[15];
- char sex[10];
-
- };
-
- typedef struct unode
- {
- struct user data;
- struct unode *next;
- }Unode,*Ulink;
- Unode *os;
登录界面函数
- 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);
- /******************账号过滤*********************/
- 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';
- }
- /**********************密码过滤****************************/
- 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';
- }
- /*************把账号和密码进行对比验证**************/
- if(!strcmp(User_id,"admin")&&!strcmp(password,"admin"))
- {
- return 2;
- }
- if(cmps(l,User_id,password))
- {
- return 1;
- }
- }
- }
选择界面函数
- 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;
- }
- }
- }
操作界面函数
- 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)) /* 将文件的内容放入接点中 */
- {
- p->next=NULL;
- r->next=p;
- r=p; /* 将该接点挂入连中 */
- 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;
-
- }
-
- }
-
- }
添加函数
图书的添加,包括用户添加以及管理员添加
- 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);
- }
查找函数
用户查找以及管理员查找
- /*******管理员查找图书*******/
- 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();
- }
- }
-
- /*******用户查找图书*******/
- 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)) /* 将文件的内容放入接点中 */
- {
- P->next=NULL;
- bookcount=bookcount+P->data.count;
- booksum=booksum+P->data.sum;
- r->next=P;
- r=P; /* 将该接点挂入连中 */
- count++;
- }
- }
- fclose(fp); /* 关闭文件 */
-
-
- 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();
- }
- }
-
- /*******图书查找*******/
- 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;
- }
-
-
-
-
-
-
- }
删除函数
图书的删除
- 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);
- }
借书管理函数
- 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)) /* 将文件的内容放入接点中 */
- {
- p->next=NULL;
- r->next=p;
- r=p; /* 将该接点挂入连中 */
- 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;
-
- }
- }
- }
- }
-
信息储存函数
图书信息的储存
- *******借书信息保存*******/
- 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);**调试的时候用的*/
- }
- fclose(fp);
- }
还书函数
- /* 还书的操作 */
- 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)) /* 将文件的内容放入接点中 */
- {
- P->next=NULL;
- R->next=P;
- R=P; /* 将该接点挂入连中 */
- }
- }
- fclose(fp); /* 关闭文件 */
-
- 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);
- }
修改函数
也分为用户和管理员两种情况
- /* ****用于管理员修改用户资料 ***/
- 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();
- }
- }
添加借书函数
- /*******添加借书*******/
- 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)) /* 将文件的内容放入接点中 */
- {
- P->next=NULL;
- bookcount=bookcount+P->data.count;
- R->next=P;
- R=P; /* 将该接点挂入连中 */
-
- }
- }
- fclose(FP); /* 关闭文件 */
-
-
- 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)) /* 将文件的内容放入接点中 */
- {
- Q->next=NULL;
- T->next=Q;
- T=Q; /* 将该接点挂入连中 */
- }
- }
- 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);/***************************************图书判断在否***************************************/
- 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);
- }
查找借书函数
查找自己借了哪些书
- 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)) /* 将文件的内容放入接点中 */
- {
- 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; /* 将该接点挂入连中 */
- 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();
-
- }
借书管理函数
- 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)) /* 将文件的内容放入接点中 */
- {
- p->next=NULL;
- r->next=p;
- r=p; /* 将该接点挂入连中 */
- 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;
-
- }
-
- }
-
- }
-
-
- }
主函数
- 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)) /* 将文件的内容放入接点中 */
- {
- p->next=NULL;
- r->next=p;
- r=p; /* 将该接点挂入连中 */
-
- }
- }
- 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;
- }
-
- }
-
- }
总结
今天的代码量有点小多,难度也不小,用了大量的链表来储存数据,还有一些功能因为篇幅的问题没有放上来,总的来说,这个图书管理系统的功能是很全面的,无论从哪个角度来看。当然啦。有兴趣的同学可以进群领取完整的源码看看,绝对是一个不错的机会,可以说,你要是学会了这个系统,你的C语言在我看来就完全没有问题了,而且在数据结构一块,你也算是小成了,所以希望大家可以认真学习,争取早日掌握。
这也是2022年的第一篇文章了,希望2022继续加油,向大家分享更多有趣的、有用的知识,十分感谢大家的一路支持,后续我还会发布更多的项目源或者学习资料,希望大家可以持续关注。

到此这篇关于C语言大作业之图书管理系统的实现详程的文章就介绍到这了,更多相关C语言 图书管理系统内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!