图书管理系统源代码 (3)
图书馆管理系统源代码

以我给的标题写原创文档,最低1200字,要求以Markdown文本格式输出,不要带图片和AI、人工智能、Markdown、GPT等关键词,标题为:图书馆管理系统源代码# 图书馆管理系统源代码## 一、引言图书馆作为一个重要的知识资源和学术场所,对于学生和研究人员具有重要意义。
为了更好地管理图书馆资源和提供服务,图书馆管理系统应运而生。
本文将介绍图书馆管理系统的源代码设计和实现。
## 二、系统功能需求### 1. 登录功能- 提供管理员和用户登录功能- 管理员可进行图书管理、借阅管理等操作- 用户可查询图书信息、借阅情况等### 2. 图书管理- 添加新书籍信息- 修改或删除现有书籍信息- 查询图书信息,包括书名、作者、出版社等### 3. 借阅管理- 用户借阅图书- 用户归还图书- 管理员监管借阅情况### 4. 查询功能- 用户可以根据条件查询图书信息- 管理员可以查询借阅情况、用户信息等## 三、系统设计### 1. 数据库设计- 数据库包括图书信息表、用户信息表、借阅记录表等- 表之间建立关联,保证数据一致性和完整性### 2. 源代码结构```- books- README.md- book.js- bookRouter.js- users- README.md- user.js- userRouter.js- borrows- README.md- borrow.js- borrowRouter.js- index.js```### 3. 源代码逻辑- 使用Node.js构建后端服务- 使用Express框架处理路由和请求- 使用MongoDB作为数据库存储## 四、系统实现### 1. 登录功能```javascript// 用户登录router.post('/login', (req, res) => {// 处理登录逻辑});// 管理员登录router.post('/admin/login', (req, res) => { // 处理管理员登录逻辑});```### 2. 图书管理```javascript// 添加新书籍router.post('/addBook', (req, res) => {// 处理添加书籍逻辑});// 修改书籍信息router.put('/updateBook/:id', (req, res) => {// 处理修改书籍信息逻辑});// 删除书籍router.delete('/deleteBook/:id', (req, res) => {// 处理删除书籍逻辑});```### 3. 借阅管理```javascript// 用户借阅图书router.post('/borrowBook', (req, res) => {// 处理借阅图书逻辑});// 用户归还图书router.put('/returnBook/:id', (req, res) => {// 处理归还图书逻辑});```## 五、总结通过本文介绍,读者可以了解图书馆管理系统源代码的设计和实现逻辑。
图书管理系统程序代码

#include <stdio.h>#include <string.h>#include <stdlib.h>#define SIZE (struct booklist *)malloc(sizeof(struct booklist))//建立已借阅图书信息结构体struct borrow{char borbook_num[10];char borbook_name[22];char return_time[15];char stu_num[15];char stu_name[15];struct borrow *next;};//建立预借图书信息结构体struct prebor_stu{char prebook_num[10];char prestu_num[15];struct prebor_stu *next;};//建立图书结构体struct booklist{char num[10];char name[22];char zuozhe[15];char leibie[10];char pub_time[10];char price[10];char condition[10];struct booklist *next;};struct booklist *create(void); /*创建图书信息链表*/struct borrow *borrow_creat(struct booklist *head); //创建已借阅图书信息链表int pre_creat(struct booklist *head); //学生登录系统预借图书并将信息存入文件prebor_stulist.txtstruct prebor_stu *prebor_creat(void); //创建预借阅图书信息链表void printf1_(struct booklist *); //输出单个基本图书的数据void store(struct booklist *head); /*保存链表中的图书信息到文件booklist.txt*/void printfb1_(struct borrow *); //输出单个借出图书的部分数据void printfb_(struct borrow *p); //输出单个借出图书的数据void printfp1_(struct prebor_stu *); //输出单个被预借出图书的部分数据void printfp_(struct prebor_stu *); //输出单个被预借出图书的数据void printf_(struct booklist *,struct borrow *,struct prebor_stu *); /*2---输出链表中的图书信息*/struct booklist *load(void); //5---从文件读入图书信息struct booklist *num_paixu(struct booklist *); //4---按编号排序struct booklist *price_paixu(struct booklist *); //3---按价格顺序排序int kcnum(struct booklist *head); //6---统计库存数void chaxun1_(struct booklist *,struct borrow *,struct prebor_stu *); //7---查询图书的编号图书的信息,并输出void chaxun2_(struct booklist *,struct prebor_stu *,struct borrow *);//7---按作者查询信息并输出void chaxun3_(struct booklist *,struct prebor_stu *,struct borrow *); //7---查询某类别图书信息并自动输出void chaxun4_(struct borrow *,prebor_stu *,struct booklist *); //7---按学号查询借阅信息struct booklist *shanchu(struct booklist *,struct borrow *,struct prebor_stu *); //9---删除数据struct borrow *shanchu2_(struct borrow *,struct borrow *); //删除一个 struct borrow 结构体的数据struct prebor_stu *shanchu3_(struct prebor_stu *,struct prebor_stu *); //删除一个 struct prebor_stu 结构体的数据void xiugai(struct booklist *,struct borrow *,struct prebor_stu *); //10---修改数据void borstore(struct borrow *borrow_head); //保存已借阅图书信息到文件borrowlist.txt//重新保存修改后的预借阅信息到文件 prebor_stulist.txt (全部覆盖)void prestore(struct prebor_stu *pre_head);struct borrow *borload(void); //从文件提取信息创建已借阅图书源信息链表struct booklist *charu(struct booklist *head,struct borrow *borrow_head); //8---将图书的数据到顺序排放的链表中.且插入后也是顺序排放的struct booklist *scanf1_(void); // 输入单个图书源数据void exchange(struct booklist *,struct booklist *) ;//交换两个结构体内的内容struct borrow *tianjia1_(struct borrow *borrow_head,struct booklist *p); //添加一个 struct borrow 结构体的数据int main(void){int n, n1, x , k = 0, flag, flag1, x1;char ch;struct booklist *head = NULL; //图书信息链表头指针struct borrow *borrow_head = NULL ; //已借阅图书信息链表头指针struct prebor_stu *pre_head = NULL ; //预借图书信息链表头指针flag1 = 0; x = x1 = 1;while(x){system("cls");printf("***************************************************************************\n");printf("* >>>>>>>>>>>>>欢迎使用君宁图书管理系统<<<<<<<<<<<<<<< *\n");printf("* 0---退出系统 5---从文件录入数据 *\n");printf("* 1---录入数据 6---统计库存数 *\n");printf("* 2---输出信息 10---修改数据 7---查询功能 *\n");printf("* 3---按价格排序 8---增加数据 *\n");printf("* 4---按编号排序 9---删除数据 *\n");printf("***************************************************************************\n");printf("请选择功能:");scanf("%d", &n);getchar();switch(n){case 0: //0---退出系统{x = 0;printf("*******谢谢使用君宁图书管理系统!******\n");printf("****** 欢迎下次使用! ******\n");break;}case 1: //1---录入数据{while(x1){system("cls");printf("*******欢迎使用君宁图书信息录入系统*******\n");printf("*** 0---放弃录入 ****\n");printf("** 1---录入图书源信息 **\n");printf("* 2---录入借出图书信息 *\n");printf("** 3---录入预借图书信息 **\n");printf("******** 祝您使用愉快 ********\n");printf("请选择功能:");scanf("%d", &n1);getchar();switch(n1){case 0:{x1 = 0;break;}case 1:{head = create( ); /*创建图书信息链表*/printf("是否将源图书信息保存到文件booklist.txt!...(Y/N) :");ch = getchar();if(ch == 'y' || ch == 'Y')store(head);getchar();break;}case 2:{if(head == NULL ){printf("请先录入图书源信息!\n");getchar();break;}else{borrow_head = borrow_creat(head); //创建已借阅图书信息链表printf("是否将源图书信息保存到文件borrowlist.txt!...(Y/N) :" );ch = getchar();if(ch == 'y' || ch == 'Y')borstore(borrow_head);getchar();break;}}case 3:{if(head == NULL ){printf("请先录入图书源信息!\n");getchar();break;}else{flag = pre_creat(head);if(flag == 1)printf("没有录入预借图书信息!\n\n");if(flag == 2)pre_head = prebor_creat(); //创建预借阅图书信息链表getchar();break;}}default :{printf("输入错误指示!\n\n");break;}}}}case 2: //2---输出信息{if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{printf_(head,borrow_head,pre_head);break;}}case 3: //3---按价格排序{if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{head = price_paixu(head);printf("是否将排序后的源图书信息保存到文件booklist.txt!...(Y/N) :");ch = getchar();if(ch == 'y' || ch == 'Y')store(head);getchar();break;}}case 4: //4---按编号排序{if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{head = num_paixu(head);printf("是否将排序后的源图书信息保存到文件booklist.txt!...(Y/N) :");ch = getchar();if(ch == 'y' || ch == 'Y')store(head);getchar();break;}}case 5: //11---从文件读取数据{head = load();if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{borrow_head = borload(); //从文件提取信息创建已借阅图书源信息链表pre_head = prebor_creat(); //创建预借阅图书信息链表getchar();break;}}case 6: //6---统计库存数{if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{k = kcnum(head);printf("总共有%3d本图书!\n\n", k);getchar();break;}}case 7: //7---查询信息{if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{while(x1){system("cls");printf("*******欢迎使用君宁图书信息查询系统*******\n");printf("****** 0---退出查询******\n");printf("***** 1---按编号*****\n");printf("**** 2---按作者****\n");printf("***** 3---按类别*****\n");printf("****** 4---按学号******\n");printf("******** 祝您使用愉快********\n");printf("******************\n");printf("********************\n");printf("请选择功能:");scanf("%d", &n1);getchar();switch(n1){case 0:{x1 = 0;break;}case 1:{chaxun1_(head,borrow_head,pre_head);getchar();break;}case 2:{chaxun2_(head,pre_head,borrow_head);getchar();break;}case 3:{chaxun3_(head,pre_head,borrow_head);getchar();break;}case 4:{chaxun4_(borrow_head,pre_head,head);getchar();break;}default :{printf("输入指示有误!\n\n");break;}}}}x1 = 1;break;}case 8:{if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{head = charu(head,borrow_head);printf("是否将源图书信息保存到文件booklist.txt!...(Y/N) :");ch = getchar();if(ch == 'y' || ch == 'Y')store(head);getchar();break;}}case 9: //9---删除数据{if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{head = shanchu(head,borrow_head,pre_head);borrow_head = borload();pre_head = prebor_creat();break;}}case 10: //10---修改数据{if(head == NULL ){printf("请先录入图书信息!\n");getchar();break;}else{xiugai(head,borrow_head,pre_head);borrow_head = borload();getchar();break;}}default :{printf("输入错误指示.请重新输入!");getchar();break;}}}return 0;}/*创建图书源信息信息链表*/struct booklist *create(void){struct booklist *head, *tail, *p;char num[10],name[22], zuozhe[15], leibie[10], pub_time[10], price[10],condition[10];head = tail = p = NULL;printf("当输入图书编号为0时结束信息输入\n");printf("请输入图书编号:");gets(num);while(strcmp(num,"0") != 0){p = SIZE;printf("请输入书名:");gets(name);printf("请输入作者:");gets(zuozhe);printf("请输入类别:");gets(leibie);printf("请输入出版时间:");gets(pub_time);printf("请输入价格:");gets(price);printf("请输入借阅情况:");gets(condition);printf("\n");strcpy(p -> num, num);strcpy(p -> name, name);strcpy(p -> zuozhe, zuozhe);strcpy(p -> leibie, leibie);strcpy(p -> pub_time, pub_time);strcpy(p -> price, price);strcpy(p -> condition, condition);p -> next = NULL;if(head == NULL)head = p;elsetail -> next = p;tail = p;printf("请输入图书编号:");gets(num);}printf("图书源信息已建立链条!\n");return head;}//创建已借阅图书源信息链表struct borrow *borrow_creat(struct booklist *head) {struct booklist *p;struct borrow *borrow_head , *p1, *tail;borrow_head = p1 = tail = NULL;for(p = head; p != NULL; p = p -> next){p1 = (struct borrow *)malloc(sizeof(struct borrow));if(strcmp(p -> condition,"借出") == 0){printf("创建借出信息:\n");strcpy(p1 -> borbook_num ,p -> num);strcpy(p1 -> borbook_name ,p -> name);getchar();printf("借阅编号为%s的图书的借阅信息:\n",p -> num);printf("请输入应归还时间:");gets(p1 -> return_time);printf("请输入学生学号:");gets(p1 -> stu_num);printf("请输入学生姓名:");gets(p1 -> stu_name);printf("\n");p1 -> next = NULL;if(borrow_head == NULL)borrow_head = p1;elsetail -> next = p1;tail = p1;}}printf("成功创建已借出信息链表!\n\n");getchar();return borrow_head;}//保存已借阅图书信息到文件 borrowlist.txtvoid borstore(struct borrow *borrow_head){FILE *fp;struct borrow *p;if((fp = fopen("borrowlist.txt","w")) == NULL){printf("File open error! \n");exit(0);}p = borrow_head;while(p != NULL){fprintf(fp,"%16s%26s%16s%16s%16s\n",p -> borbook_num, p -> borbook_name, p -> return_time,p -> stu_num, p -> stu_name);p = p -> next;}fclose(fp);printf("文件成功保存到 borrowlist.txt 中!\n");getchar();}//从文件提取信息创建已借阅图书源信息链表struct borrow *borload(void){struct borrow *p, *tail, *head;FILE *fp;head = p = tail = NULL;if((fp = fopen("borrowlist.txt","r")) == NULL){printf("文件 borrowlist.txt 打开失败!\n");getchar();exit(0);}while(!feof(fp)){p = (struct borrow *)malloc(sizeof(struct borrow));fscanf(fp,"%16s%26s%16s%16s%16s\n",p -> borbook_num, p -> borbook_name, p -> return_time,p -> stu_num, p -> stu_name);if(head == NULL)head = p;elsetail -> next = p;tail = p;}tail -> next = NULL;fclose(fp);printf("已成功从文件 borrowlist.txt 提取信息创建已借阅图书源信息!\n");return head;}//录入预借图书信息并将信息存入文件 prebor_stulist.txtint pre_creat(struct booklist *head){struct booklist *b;struct prebor_stu *p;char a[10], c[15];int n, x = 1, flag = 1;FILE *fp;b = head;p = (struct prebor_stu *)malloc(sizeof(struct prebor_stu));printf("进入预借图书!(按回车键继续、、、)\n");getchar();while(x){printf("请输入要预借阅的图书编号:");gets(a);while((strcmp(b -> num ,a) != 0) && b -> next != NULL){b = b -> next;}if(strcmp(b -> num ,a) != 0){printf("没有找到编号为%s的图书!\n", a);printf("输入--0 结束录入!(输入其他数字继续录入...)\n\n");printf("请选择功能:");scanf("%d", &n);getchar();if(n == 0){x = 0;}getchar();}else{printf("请输入学号:");gets(c);strcpy(p -> prebook_num, a);strcpy(p -> prestu_num, c);if((fp = fopen("prebor_stulist.txt","a+")) == NULL){printf("File open error! \n");exit(0);}fprintf(fp,"%16s%16s\n",p -> prebook_num, p -> prestu_num);fclose(fp);flag = 2;printf("输入--0 结束录入!(输入其他数字继续录入...)\n\n");printf("请选择功能:");scanf("%d", &n);getchar();if(n == 0){x = 0;getchar();}}}return flag;}//重新保存修改后的预借阅信息到文件 prebor_stulist.txt (全部覆盖)void prestore(struct prebor_stu *pre_head){struct prebor_stu *p;FILE *fp;p = pre_head;if((fp = fopen("prebor_stulist.txt","w")) == NULL){printf("File open error! \n");exit(0);}while(p != NULL){fprintf(fp,"%16s%16s\n",p -> prebook_num, p -> prestu_num); p = p -> next;}fclose(fp);printf("文件成功保存到 prebor_stulist.txt 中!\n");getchar();}//从文件 prebor_stulist.txt创建预借阅图书信息链表struct prebor_stu *prebor_creat(void){struct prebor_stu *p, *tail, *head;FILE *fp;head = p = tail = NULL;if((fp = fopen("prebor_stulist.txt","r")) == NULL){printf("文件 prebor_stulist.txt 打开失败!\n");getchar();}while(!feof(fp)){p = (struct prebor_stu *)malloc(sizeof(struct prebor_stu));fscanf(fp,"%16s%16s\n",p -> prebook_num, p -> prestu_num);if(head == NULL)head = p;elsetail -> next = p;tail = p;}tail -> next = NULL;fclose(fp);printf("已从文件 prebor_stulist.txt 成功读取并建立预借阅图书信息!\n");getchar();return head;}/*2---保存链表中的图书信息到文件booklist.txt*/void store(struct booklist *head){FILE *fp;struct booklist *p;if((fp = fopen("booklist.txt","w")) == NULL){printf("File open error! \n");exit(0);}p = head;while(p != NULL){fprintf(fp,"%16s%26s%16s%16s%16s%16s%16s\n",p -> num, p -> name, p -> zuozhe, p -> leibie,p -> pub_time, p -> price, p -> condition);p = p -> next;}fclose(fp);printf("文件成功保存到 booklist.txt 中!\n");getchar();}// 输入单个图书源数据struct booklist *scanf1_(void) {struct booklist *p;p = SIZE;printf("请输入图书编号:");gets(p -> num);printf("请输入书名:");gets(p -> name);printf("请输入作者:");gets(p -> zuozhe);printf("请输入类别:");gets(p -> leibie);printf("请输入出版时间:");gets(p -> pub_time);printf("请输入价格:");gets(p -> price);printf("请输入借阅情况:");gets(p -> condition);return p;}//输出单个图书的数据void printf1_(struct booklist *p) {printf("编号:");puts(p -> num);printf("书名:");puts(p -> name);printf("作者:");puts(p -> zuozhe);printf("类别:");puts(p -> leibie);printf("出版时间:");puts(p -> pub_time);printf("价格:");puts(p -> price);printf("借阅情况:");}//输出单个借出图书的部分数据void printfb1_(struct borrow *p) {printf("应归还时间:");puts(p -> return_time);printf("借阅学生学号:");puts(p -> stu_num);printf("借阅学生姓名:");puts(p -> stu_name);}//输出单个借出图书的数据void printfb_(struct borrow *p) {printf("图书编号:");puts(p -> borbook_num);printf("书名:");puts(p -> borbook_name);printf("应归还时间:");puts(p -> return_time);printf("借阅学生学号:");puts(p -> stu_num);printf("借阅学生姓名:");puts(p -> stu_name);}//输出单个被预借出图书的部分数据void printfp1_(struct prebor_stu *p) {printf("预借图书的学生学号:"); puts(p -> prestu_num);}//输出单个被预借出图书的数据void printfp_(struct prebor_stu *p) {printf("图书编号:");printf("预借阅图书的学生学号:");puts(p -> prestu_num);}/*3---输出链表中的图书信息*/void printf_(struct booklist *head, struct borrow *borrow_head,struct prebor_stu *pre_head){struct booklist *p;struct borrow *b;struct prebor_stu *pre;int x = 1, n;p = head; b = borrow_head; pre = pre_head;while(x == 1){system("cls");printf("*******欢迎使用君宁图书信息输出系统*******\n");printf("* 0---退出 *\n");printf("* 1---输出图书源信息 *\n");printf("* 2---输出借出图书信息 *\n");printf("* 3---输出预借借图书信息 *\n");printf("******** 祝您使用愉快 ********\n");printf("请选择功能:");scanf("%d", &n);getchar();switch(n){case 0:{x = 0;break;}case 1:{if(head != NULL){printf("图书源信息如下:\n");do{printf1_(p);printf("\n\n");p = p -> next;}while(p != NULL);}getchar();break;}case 2:{if(borrow_head == NULL){printf("没有借出图书信息(按回车键继续、、、)!\n");getchar();break;}else{printf("借出图书信息如下:\n");do{printfb_(b);printf("\n\n");b = b -> next;}while(b != NULL);}printf("按回车键继续、、\n");getchar();break;}case 3:{if(pre_head == NULL){printf("没有预借图书信息(按回车键继续、、、)!\n");getchar();getchar();break;}else{printf("预借借图书信息如下:\n");do{printfp_(pre);printf("\n\n");pre = pre -> next;}while(pre != NULL);}printf("按回车键继续、、\n");getchar();break;}default :{printf("输入错误(按回车键继续、、、)!\n");getchar();break;}}}}//11---从文件读入图书信息struct booklist *load(void){struct booklist *p, *tail, *head;FILE *fp;head = p = tail = NULL;if((fp = fopen("booklist.txt","r")) == NULL){printf("文件 booklist.txt 打开失败!\n");getchar();exit(0);}while(!feof(fp)){p = SIZE;fscanf(fp,"%16s%26s%16s%16s%16s%16s%16s\n",p -> num, p -> name, p -> zuozhe, p -> leibie,p -> pub_time, p -> price,p -> condition);if(head == NULL)head = p;elsetail -> next = p;tail = p;}tail -> next = NULL;fclose(fp);printf("已成功读取文件 booklist.txt ,建立源图书信息链表!\n");return head;}//4---按编号排序并输出struct booklist *num_paixu(struct booklist *head){struct booklist *p, *p1, *tail;p1 = NULL;tail = SIZE;for(p = head;p -> next != NULL; p = p -> next){for(p1 = p ->next; p1 != NULL; p1 = p1 ->next){if(strcmp(p -> num,p1 -> num) > 0){exchange(tail,p1);exchange(p1,p);exchange(p,tail);}}}printf("图书已按编号排序成功,具体信息如下:\n");for(p = head; p != NULL; p = p -> next){printf1_(p);printf("\n");}return head;}//3---按价格排序struct booklist *price_paixu(struct booklist *head) {struct booklist *p, *p1, *tail;p1 = NULL;tail = SIZE;for(p = head;p -> next != NULL; p = p -> next){for(p1 = p ->next; p1 != NULL; p1 = p1 ->next){if(strcmp(p -> price,p1 -> price) > 0){exchange(tail,p1);exchange(p1,p);exchange(p,tail);}}}printf("图书已按价格排序成功,具体信息如下:\n");for(p = head; p != NULL; p = p -> next){printf1_(p);printf("\n");}return head;}//6---统计库存数int kcnum(struct booklist *head){int i = 0;struct booklist *p;for(p = head;p != NULL; p = p -> next)i++;return i;}//7---按编号查询信息并输出void chaxun1_(struct booklist *head,struct borrow *borrow_head,struct prebor_stu *pre_head){char a[10];struct booklist *p;struct borrow *b;struct prebor_stu *p1;int x1, x2;p = head; x1 = x2 = 0;printf("请输入要查询的图书编号:");gets(a);while((strcmp(p -> num ,a) != 0) && p -> next != NULL){p = p -> next;}if(strcmp(p -> num ,a) != 0)printf("没有找到编号为%s的图书!\n", a);else{for(b = borrow_head;b != NULL; b = b -> next){if(strcmp(b -> borbook_num ,a) == 0){x1 = 1;printf("您要查询的书已借出,其具体信息如下:\n");printfb1_(b); //输出单个借出图书的数据printf1_(p);}}for(p1 = pre_head;p1 != NULL; p1 = p1 -> next){if(strcmp(p1 -> prebook_num ,a) == 0){ x2 = 1;printf("您要查询的书已预借,其具体信息如下:\n");printfp1_(p1); //输出单个被预借出图书的数据printf1_(p);}}if(x1 == 0 && x2 == 0){printf("此书未被预借!\n\n");printf("您要查询的图书信息如下:\n");printf1_(p);}}}//7---按作者查询信息void chaxun2_(struct booklist *head,struct prebor_stu *pre_head,struct borrow *borrow_head){char a[10];struct booklist *p;struct borrow *b;struct prebor_stu *pre;int flag = 1, x1 ;printf("请输入要查询的图书的作者:");gets(a);for(p = head;p != NULL; p = p -> next){if(strcmp(p -> zuozhe,a) == 0){if(flag == 1){printf("您查询的%s的所有图书信息如下:\n\n",a);flag = -1;}printf1_(p);for(b = borrow_head;b != NULL; b = b -> next){if(strcmp(b -> borbook_num ,p -> num) == 0){printfb1_(b);}}x1 = 0;for(pre = pre_head; pre != NULL; pre = pre -> next){if(strcmp(pre -> prebook_num, p -> num) == 0){printf("此书已被%s学号的学生预借!\n",pre -> prestu_num );x1 = 1;}}if(x1 == 0){printf("此书未被预借!\n");x1 = 1;}printf("\n\n");}}if(flag == 1)printf("没有找到您要查询的的图书信息!\n\n");}//7---查询某类别图书信息并自动输出void chaxun3_(struct booklist *head,struct prebor_stu *pre_head,struct borrow *borrow_head){char a[10];struct booklist *p;struct prebor_stu *pre;struct borrow *b;int flag = 1 , x1;printf("请输入要查询的图书的类别:");gets(a);for(p = head;p != NULL; p = p -> next){if(strcmp(p -> leibie,a) == 0){if(flag == 1){printf("您查询的%s的所有图书信息如下:\n\n",a);flag = -1;}printf1_(p);for(b = borrow_head;b != NULL; b = b -> next){if(strcmp(b -> borbook_num ,p -> num) == 0){printfb1_(b);}}x1 = 0;for(pre = pre_head; pre != NULL; pre = pre -> next){if(strcmp(pre -> prebook_num, p -> num) == 0){printf("此书已被%s学号的学生预借!\n",pre -> prestu_num );x1 = 1;}}if(x1 == 0){printf("此书未被预借!\n");x1 = 1;}printf("\n\n");}}if(flag == 1)printf("没有找到您要查询的的图书信息!\n\n");}//7---按学号查询图书借阅信息并自动输出void chaxun4_(struct borrow *borrow_head,struct prebor_stu *pre_head,struct booklist *head){//建立图书编号结构体struct book_num{char booknum[10];struct book_num *next;};struct prebor_stu *p ;struct borrow *b;struct booklist *p2;char a[15];int i, j;i = j = 0;struct book_num *bnumhead1, *bnumhead2, *tail, *p1;bnumhead1 = bnumhead2 = tail = p1 = NULL;printf("请输入学生学号:");gets(a);for(p = pre_head; p != NULL; p = p -> next){if(strcmp(p -> prestu_num,a) ==0){i++;p1 = (struct book_num *)malloc(sizeof(struct book_num)); strcpy( p1 -> booknum, p ->prebook_num);if(bnumhead1 == NULL)bnumhead1 = p1;elsetail -> next = p1;tail = p1;p1 -> next = NULL;}}for(b = borrow_head;b != NULL; b = b -> next){if(strcmp(b -> stu_num,a) ==0){j++;p1 = (struct book_num *)malloc(sizeof(struct book_num)); strcpy( p1 -> booknum, b ->borbook_num);if(bnumhead2 == NULL)bnumhead2 = p1;elsetail -> next = p1;tail = p1;p1 -> next = NULL;}}if(i == 0 && j == 0)printf("没有您要查询学生的借阅信息!");else{if( j != 0){printf("该生一共借了%d本书,其借阅书的信息如下:\n", j);for( p1 = bnumhead2; p1 != NULL; p1 = p1 -> next){for(p2 = head; p2 != NULL; p2 = p2 -> next){if(strcmp(p1 -> booknum, p2 -> num) == 0){printf1_(p2);if(strcmp(p2 -> condition,"借出") ==0){for(b = borrow_head;b != NULL; b = b -> next)if(strcmp(b -> borbook_num,p2 -> num) ==0)printfb1_(b);}printf("\n");}}}}if( i != 0){printf("该生一共预借借了%d本书,其借阅书的信息如下:\n", i);for( p1 = bnumhead1; p1 != NULL; p1 = p1 -> next){for(p2 = head; p2 != NULL; p2 = p2 -> next){if(strcmp(p1 -> booknum, p2 -> num) == 0){printf1_(p2);if(strcmp(p2 -> condition,"借出") ==0){for(b = borrow_head;b != NULL; b = b -> next)if(strcmp(b -> borbook_num,p2 -> num) ==0)printfb1_(b);}printf("\n");}}}}}}//9---删除数据struct booklist *shanchu(struct booklist *head,struct borrow *borrow_head,struct prebor_stu *pre_head){struct booklist *p1 , *p2;struct borrow *b;struct prebor_stu *p;char a[10];p1 = p2 = head;printf("请输入要删除的图书编号:");gets(a);while((strcmp(p1 -> num ,a) != 0) && p1 -> next != NULL) {p2 = p1;p1 = p1 -> next;}if(strcmp(p1 -> num ,a) != 0)printf("没有找到要删除的图书信息!\n");else if(p1 == head){head = p1 -> next;printf("删除成功!\n");store(head);for(b = borrow_head; b != NULL; b = b -> next){if(strcmp(b -> borbook_num,a) == 0)borrow_head = shanchu2_(borrow_head,b);}for(p = pre_head; p != NULL; p = p -> next){if(strcmp(p -> prebook_num,a) == 0)pre_head = shanchu3_(pre_head,p);}}else{p2 -> next = p1 -> next;printf("删除成功!\n");store(head);for(b = borrow_head; b != NULL; b = b -> next){if(strcmp(b -> borbook_num,a) == 0)borrow_head = shanchu2_(borrow_head,b);}for(p = pre_head; p != NULL; p = p -> next){if(strcmp(p -> prebook_num,a) == 0)pre_head = shanchu3_(pre_head,p);}}return head;}//删除一个 struct borrow 结构体的数据struct borrow *shanchu2_(struct borrow *borrow_head,struct borrow *p) {struct borrow *p1 , *p2;p1 = p2 = borrow_head;while(strcmp(p1 -> borbook_num ,p -> borbook_num) != 0) {p2 = p1;p1 = p1 -> next;}if(p1 == borrow_head){borrow_head = p1 -> next;borstore(borrow_head);}else{p2 -> next = p1 -> next;borstore(borrow_head);}getchar();return borrow_head;}//添加一个 struct borrow 结构体的数据。
图书借阅管理系统代码图书管理系统源代码

#include<stdio。
h>#include 〈stdlib。
h>#include <string.h>#define num 7 //全局定义void showmain() //显示菜单{printf("\n\n 欢迎使用图书借阅管理系统\n\n");printf(" 1、查询所有图书\n\n");printf(" 2、归还现有图书\n\n");printf(" 3、租借现有图书\n\n”);printf(”0、退出借书系统\n\n");printf(”请输入您所需的服务编号:”);}void viewbooks(int score[num],char name[num][100],char writter[num][100],double yajin[num],int free[num],double jiage[num],int flag[num]){int i;int j;for(i=1;i〈7;i++)//设置编号score[i]=i;yajin[1]=26.00;//将原图书的各项值保存yajin[2]=28.50;yajin[3]=98。
00;yajin[4]=79.80;yajin[5]=49。
00;yajin[6]=15.00;for(i=1;i<7;i++)//将原图书的各项值保存{free[i]=30;jiage[i]=0.5;}flag[1]=0; //flag为0代表已借出,为1代表未借出flag[2]=1;flag[3]=1;flag[4]=0;flag[5]=1;flag[6]=1;printf("编号\t|书名\t |作者\t|押金\t|免费天数\t|收费价格\t|出租状态\n"); //制表同时输出printf(”—--——-—---——-------—--——-————-——-———-—-—————--—————-—--——-——————-—-—---——-—\n”);for(i=1;i<7;i++){printf(”%d\t|%s\t|%s\t|%。
图书管理系统源代码--纯C语言.

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#define NULL 0#define LEN sizeof(Book)struct A{char Name[20];int all,left,borrow;struct A *next;};typedef struct A Book;int Display_Main_Menu(); /*主菜单显示*/Book *Create(); /*功能函数声明*/void Display(Book *head);Book *Insert(Book *head,Book *s);Book *Insert_a_record(Book *head);Book *Delete(Book *head,char *name);Book *Delete_a_record(Book *head);Book *Borrow(Book *head,char *name,int sum);Book *Borrow_a_Book(Book *head);Book *Return(Book *head,char *name,int sum);Book *Return_a_Book(Book *head);Book *Query(Book *head,char *name);void Query_a_record(Book *head);Book *AddfromText(Book *head,char *filename);Book *WritetoText(Book *head,char *filename);void Quit(Book *head);void main() /*主函数部分*/{Book *head; /*定义变量*/char filename[20];int keyword=111,a;printf("Please input keyword:");scanf("%d",&a);if(a!=keyword) exit(0);else printf("Welcome!");head=NULL; /*置首指针为空*/for(;;){switch(Display_MainMenu()){case 1:printf("1.Create BookList\n"); /*调用Create函数创建链表*/ head=Create();system("pause");break;case 2:printf("Display All Books\n");Display(head); /*调用Display函数显示所有*/system("pause");break;case 3:printf("Insert a Record\n");head=Insert_a_record(head);/*调用Insert_a_record函数插入*/system("pause");break;case 4:printf("Delete a Book\n");head=Delete_a_record(head);/*调用Delete_a_record函数删除*/ system("pause");break;case 5:printf("Borrow a Book\nInput BookName and sum you borrow:");head=Borrow_a_Book(head);system("pause");break;case 6:printf("Return a Book\nInput BookName and sum you return:");head=Return_a_Book(head);system("pause");break;case 7:printf("Query\nInput the BookName you want:");Query_a_record(head);/*调用查询函数*/system("pause");break;case 8:printf("Input the name of Text File\n");scanf("%s",filename);/*输入文件名*/head=AddfromText(head,filename);system("pause");break;case 9:printf("Input the name of the NewText File\n");scanf("%s",filename);/*输入要写入的文件名*/head=WritetoText(head,filename);system("pause");break;case 0:printf("Goodbye\n");Quit(head);exit(0);}}}int Display_MainMenu() /*显示菜单的函数*/{char x;do{system("cls");printf("************************\n");printf("1.Create BookList\n");printf("2.Display All Books\n");printf("3.Insert a BookInformation\n");printf("4.Delete a Book\n");printf("5.Borrow a Book\n");printf("6.Return a Book\n");printf("7.Query\n");printf("8.Add Records From a File\n");printf("9.Write to a File\n");printf("0.Goodbye\n");printf("************************\n");printf("Please choose from 0-9:");printf("\n");x=getchar();}while(x<'0'||x>'9');return(x-'0');}Book *Create() /*创建链表的函数,返回首指针*/{Book *head,*newrecord;char ch;printf("Input a Book\n");head=NULL;/*首指针置空*/do{newrecord=(Book *)malloc(LEN); /*动态分配存储空间*/scanf("%s%d",newrecord->Name,&newrecord->all);newrecord->left=newrecord->all;newrecord->borrow=0;head=Insert(head,newrecord); /*调用Insert函数判断位置插入*/getchar(); / *接收最后输入的回车符*/printf("Add another Book Y/N?\n");ch=getchar();getchar(); /*接收回车符*/ }while(ch!='n'&&ch!='N'); /*判断是否继续*/return(head);}Book *Insert(Book *head,Book *s)/*插入结点的函数*/{ Book *p0,*p1,*p2;p1=head;p0=s;if(head==NULL){head=p0;p0->next=NULL;}while(strcmp(p0->Name,p1->Name)>0&&(p1->next!=NULL)){p2=p p1=p1->next;}if(strcmp(p0->Name,p1->Name)<=0){p0->next=p1;if(head==p1) head=p0;else p2->next=p0;}else{p1->next=p0;p0->next=NULL;}return(head);}Book *Insert_a_record(Book *head){ Book *newrecord;newrecord=(Book *)malloc(LEN); /*动态分配存储空间*/scanf("%s%d",newrecord->Name,&newrecord->all);newrecord->borrow=0;newrecord->left=newrecord->all;head=Insert(head,newrecord);printf("Insert successfully\n");/*输出插入成功的信息*/return(head);}Book *Delete(Book *head,char *name) /*删除功能函数*/{ Book *p1,*p2;if(head==NULL)printf("Sorry No record!\n");p1=head;while(strcmp(p1->Name,name)!=0&&p1->next!=NULL) / {p2=p1;p1=p1->next;} if(strcmp(p1->Name,name)==0){if(p1==head)head=p1->next;else {p2->next=p1->next;printf("delete %s successfully\n",name);}}return(head);}Book *Delete_a_record(Book *head){ char name[20],ch;Book *p;scanf("%s",name);getchar();p=Query(head,name);if(p==NULL) printf("Cannot Find %s\n",name);else {printf("Delete %s, Y/N?\n",name);ch=getchar();system("pause");if(ch=='y'||ch=='Y')while(p!=NULL){head=Delete(head,name);p=Query(head,name);}}return(head);}Book *Borrow_a_Book(Book *head){ char name[20],ch;int n;Book *p;scanf("%s%d",name,&n);getchar(); /p=Query(head,name);if(p==NULL) printf("Cannot Find %s\n",name);else printf("Are you sure to borrow? %s, Y/N?\n",name);ch=getchar();system("pause");if(ch=='y'||ch=='Y')head=Borrow(head,name,n);return(head);}Book *Borrow(Book *head,char *name,int sum){ Book *p1;p1=head;while(strcmp(p1->Name,name)!=0&&p1->next!=NULL){p1=p1->next;}if(strcmp(p1->Name,name)==0)p1->borrow=sum;p1->left=p1->all-sum;return(head);}Book *Return_a_Book(Book *head){ char name[20],ch;int n;Book *p;scanf("%s%d",name,&n);getchar(); /*接收回车*/ p=Query(head,name);if(p==NULL) printf("Cannot Find %s\n",name); /*找不到结点*/ else printf("Are you sure to return? %s, Y/N?\n",name);ch=getchar();system("pause");if(ch=='y'||ch=='Y')head=Return(head,name,n);return(head);}Book *Return(Book *head,char *name,int sum){ Book *p1;p1=head;while(strcmp(p1->Name,name)!=0&&p1->next!=NULL) /*p1不是要找的结点,且后面还有结点*/{p1=p1->next;} /*p1后移一个结点*/if(strcmp(p1->Name,name)==0) /*找到了*/p1->borrow=p1->borrow-sum;p1->left=p1->left+sum;return(head);}void Display(Book *head){ Book *p;int i;p=head;printf("Num BookName Total Left Borrow\n");for(i=1;p!=NULL;i++){printf("%-5d%-14s%-10d%-10d%-5d\n",i,p->Name,p->all,p->left,p->borrow);p=p->next;if(i%10==0){system("pause"); /*按回车继续显示*/printf("Num BookName total left borrow\n");}}}Book *Query(Book *head,char *name){ Book *p;p=head;while(strcmp(name,p->Name)!=0&&p->next!=NULL)p=p->next;if(strcmp(name,p->Name)==0) /*找到了,返回结点地址*/return(p);else /*找不到返回空指针*/return(NULL);}void Query_a_record(Book *head){ char name[20];Book *p;scanf("%s",name);p=Query(head,name);if(p!=NULL) /*找到了*/{ printf("Find successfully\n%s total:%d left:%d borrow:%d\n",p->Name,p->all,p->left,p->borrow);}elseprintf("Can't find the records of %s\n",name); /*找不到*/}Book *AddfromText(Book *head,char *filename){ FILE *fp;int n,i;if((fp=fopen(filename,"r"))==NULL){printf("Cannot find file:%s\n",filename); /*打不开所指定文件*/return(head);}fscanf(fp,"%d",&n); /*待插入记录个数*/for(i=0;i<n;i++){Book *p;p=(Book *)malloc(LEN);fgetc(fp); /*读取换行符*/fscanf(fp,"%s%d%d%d",p->Name,&p->all,&p->left,&p->borrow);head=Insert(head,p); /*插入结点*/}printf("Add from %s successfully\n",filename);fclose(fp);return(head);}Book *WritetoText(Book *head,char *filename){FILE *fp;Book *p;if(head==NULL){printf("No Record!\n");return(head);}fp=fopen(filename,"w"); /*打开文件*/p=head;while(p!=NULL){ fprintf(fp,"%-14s%-10d%-10d%-10d\n\n",p->Name,p->all,p->left,p->borrow); /*文件输出*/p=p->next;}printf("Write to %s successfully\n",filename); /*输出写到文件完毕的信息*/ fclose(fp);return(head);}void Quit(Book *head){Book *p,*p1,*p2;FILE *fp;char filename[]="last";p2=p1=head;if(head!=NULL){fp=fopen(filename,"w"); /*打开文件*/p=head;while(p!=NULL){ fprintf(fp,"%s %d %d %d\n",p->Name,p->all,p->left,p->borrow); /*文件输出*/p=p->next;}printf("Write to %s successfully\n",filename); /*输出写到文件完毕的信息*/ fclose(fp);}while(p1!=NULL) /*p1指向的结点不是空指针*/{p2=p1->next;free(p1); /*释放存储空间*/p1=p2; /*p1后移一个结点*/}}。
图书信息管理系统设计源代码

头函数名:#include<stdio.h>#include<stdlib.h>#include<string.h>/*********图书信息结构体*********//***包括登录号,书名,作者名,分类号,出版单位,出版时间,价格等***/ struct bookinf{ int num; ******************************************************登录号char bname[20];***************************************书名char wname[10];***************************************作者名char clanum[14];***************************************分类号char pubcom[10];***************************************出版单位char pubtime[10];***************************************出版时间float price;*********************************************价格};一管理员登录系统模块:(1)来到图书信息管理系统页面void index(){char input; 注释:运行时printf("\n\n\t\t\t*****************************\n"); 直接进入printf("\t\t\t 图书信息管理系统\n"); 这个页面printf("\t\t\t*****************************\n\n\n");printf(" ------------------------------------------------------------------------------\n");printf("\t<按任意键进入>\n\t");input=getchar();}(2)管理员登陆进入功能菜单页面FILE *fp;struct manage pswd;if ((fp=fopen("password.txt","r"))==NULL) {printf("\n\n\n\tCannot open file!\n\t");}else{do{printf("\n\n\t请输入管理员帐号:");scanf("%s",name);printf("\n\n\t请输入管理员密码:");scanf("%s",password);fp=fopen("password.txt","r");fread(&pswd,sizeof(struct manage),1,fp);fclose(fp);w=strcmp(pswd.manage_name,name);k=strcmp(pswd.password,password);adm_servelist();}while (w!=0||k!=0);adm_servelist();}}(3)来到功能菜单页面{void book_add();void book_view();void change();void del();void book_search();void login();void pwchange();int in; 注释:菜单列出的服务种类char input; 从1,2,3,4,5,6 do 所对应的功能进行选择{printf("\n\n\n\t--欢迎使用信息管理系统--");printf("\n\n\t1.图书信息录入\n");printf("\t2.图书信息浏览\n");printf("\t3.图书信息查询\n");printf("\t4.图书信息删除\n");printf("\t5.图书信息修改\n");printf("\t6.退出管理模式\n");printf("\n\t请选择服务种类:");scanf("%d",&in);if (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6){printf("\n\t没有这项服务~\n");printf("\t按任意键重新选择");input=getchar();}}while (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6);switch (in){case 1: book_add(); break; 注释:选择自己所需要case 2: book_view(); break; 后摁下数字键则case 3: book_search(); break; 则进入此功能页面case 4: del(); break;case 5: change();break;case 6: login(); break;}}(3)图书信息录入功能模块void book_add(){void book_add();int i=0,j;FILE *fp;char input; 注释:输入的图书信息struct bookinf books; 是通过文件进行struct bookinf book_taxis[30]; 保存的printf("\n\n\n\t---请输入图书信息---\n\n");printf("\t登录号:");scanf("%d",&books.num);printf("\n\t书名:");scanf("%s",books.bname);printf("\n\t作者名:");scanf("%s",books.wname);printf("\n\t分类号:");scanf("%s",books.clanum);printf("\n\t出版单位:");scanf("%s",books.pubcom);printf("\n\t出版时间:");scanf("%s",books.pubtime);printf("\n\t价格:");scanf("%f",&books.price);if ((fp=fopen("book.txt","r"))!=NULL){do{fread(&book_taxis[i],sizeof(struct bookinf),1,fp);i=i+1;}while(!feof(fp));fclose(fp);for (j=0;j<=i;j++)if (books.num==book_taxis[j].num){printf("\n\n\n\t对不起,这个编号已经使用过了~\n");printf("\t按任意键返回管理菜单~");input=getchar();adm_servelist();break;}}if ((fp=fopen("book.txt","r"))==NULL){fp=fopen("book.txt","w");}else{fclose(fp);fp=fopen("book.txt","a");}fwrite(&books,sizeof(struct bookinf),1,fp);fclose(fp);printf("\n\n\n\t信息输入完毕~按任意键继续\n");input=getchar();adm_servelist();}(4)图书信息浏览功能模块void book_view(){void adm_servelist();void book_view();int inp,i=0,n=0;FILE *fp;char input;struct bookinf bookview[20];if ((fp=fopen("book.txt","r"))==NULL){printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n"); printf("\n\t<按任意键返回管理菜单>\n\t");input=getchar();adm_servelist();}else{do{fread(&bookview[i],sizeof(struct bookinf),1,fp);i=i+1;}while (!feof(fp));fclose(fp);do{printf("\n\t--------共有%d条记录--------",i-1);printf("\n\n\t登录号: %d\n",bookview[n].num);printf("\n\t书名: %s\n",bookview[n].bname);printf("\n\t作者名: %s\n",bookview[n].wname);printf("\n\t分类号: %s\n",bookview[n].clanum);printf("\n\t出版单位: %s\n",bookview[n].pubcom);printf("\n\t出版时间: %s\n",bookview[n].pubtime);printf("\n\t价格: %f\n",bookview[n].price);printf("\n\n\t1.上一页\t2.下一页\t3.回目录\n");printf("\n\t请选择:");scanf("%d",&inp);switch (inp){case 1:{if (n==0){printf("\n\t已到达首页\n\t按任意键重新选择");input=getchar();}else n=n-1; break;}case 2:{if (n==i-2){printf("\n\t已到达最末页\n\t按任意键重新选择");input=getchar();}else n=n+1; break;}case 3:{adm_servelist();break;}default:{printf("\n\t没有这项服务\n\t按任意键重新选择");input=getchar();}}}while (inp!=3);}}(5)图书信息修改与删除功能模块修改:void change(int x){int inp,i=0,j;void book_search();FILE *fp,*fp1;char input;struct bookinf books,book_taxis[20];do{printf("\n\n\n\t注意:您确定要修改该记录吗?\n"); printf("\n\t1.是\t2.否\n");printf("\n\t请输入:");scanf("%d",&inp);if (inp!=1&&inp!=2){printf("\n\t对不起~没有这项服务~\n");printf("\t按任意键重新选择\n\t");input=getchar();}}while (inp!=1&&inp!=2);if (inp==2)book_search();if (inp==1){printf("\n\n\n\t---请输入图书信息---\n\n");printf("\t登录号:");scanf("%d",&books.num);printf("\n\t书名:");scanf("%s",books.bname);printf("\n\t作者名:");scanf("%s",books.wname);printf("\n\t分类号:");scanf("%s",books.clanum);printf("\n\t出版单位:");scanf("%s",books.pubcom);printf("\n\t出版时间:");scanf("%s",books.pubtime);printf("\n\t价格:");scanf("%f",&books.price);if ((fp1=fopen("book.txt","r"))!=NULL){do{fread(&book_taxis[i],sizeof(struct bookinf),1,fp1);i=i+1;}while(!feof(fp1));fclose(fp1);for (j=0;j<x;j++)if (books.num==book_taxis[j].num){printf("\n\n\n\t对不起,这个编号已经使用过了~\n");printf("\t按任意键返回管理菜单~");printf("0");input=getchar();book_search();break;}for (j=x+1;j<i-2;j++)if (books.num==book_taxis[j].num){printf("\n\n\n\t对不起,这个编号已经使用过了~\n");printf("1");printf("\t按任意键返回管理菜单~");input=getchar();book_search();break;}}book_taxis[x]=books;fp=fopen("book.txt","w");for (j=0;j<i-1;j++)fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);fclose(fp);printf("\n\n\t信息修改完成!按任意键返回");input=getchar();book_search();}}S删除:void del(int y){char input;FILE *fp;int inp,i=0,j;struct bookinf book_taxis[20];void book_search();void adm_servelist();do{printf("\n\n\n\t注意:您确定要删除该记录吗?\n"); printf("\n\t1.是\t2.否\n");printf("\n\t请输入:");scanf("%d",&inp);if (inp!=1&&inp!=2){printf("\n\t对不起~没有这项服务~\n");printf("\t按任意键重新选择\n\t");input=getchar();}}while (inp!=1&&inp!=2);if (inp==2)book_search();if (inp==1){if ((fp=fopen("book.txt","r"))!=NULL){do{fread(&book_taxis[i],sizeof(struct bookinf),1,fp);i=i+1;}while(!feof(fp));fclose(fp);}if (i>2){fp=fopen("book.txt","w");for (j=0;j<y;j++)fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);fclose(fp);fp=fopen("book.txt","a");for (j=y+1;j<i-1;j++)fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);fclose(fp);}else{remove("book.txt");}printf("\n\n\t记录已删除!\n\n\t按任意键返回\n\t");input=getchar();adm_servelist();}}(6)图书信息查询功能模块void book_search(){void adm_servelist();void id_search();void wr_search();void bn_search();char input;FILE *fp;int inp;if ((fp=fopen("book.txt","r"))==NULL){printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n"); printf("\n\t<按任意键返回管理菜单>\n\t");input=getchar();adm_servelist();}else{do{printf("\n\n\n\t1.按图书登录号查询\n");printf("\n\t2.按图书作者查询\n");printf("\n\t3.按图书名查询\n");printf("\n\t4.回到主菜单\n");printf("\n\n\t请选择查询类别:");scanf("%d",&inp);if (inp!=1&&inp!=2&&inp!=3&&inp!=4){printf("\n\n\t没有这项服务~\n\t按任意键重新选择~");input=getchar();}}while (inp!=1&&inp!=2&&inp!=3&&inp!=4);fclose(fp);switch (inp){case 1: id_search(); break;case 2: wr_search(); break;case 3: bn_search(); break;case 4: adm_servelist(); break;}}}。
C语言程序设计(图书管理系统)源代码 倾情奉献

# include< stdio.h ># include< string.h ># include< stdlib.h >/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/struct tushu_node{int num;char leibie[20];char name[30];char author[20];char press[20];char time[20];double price;struct tushu_node*next;};FILE *fpp; /*定义fpp为全局变量*/struct tushu_node*head,*tail,*p;int quanxian(); /* 核查权限的函数*/int inputchioce(); /* 显示主菜单的函数*/void save(); /* 保存链表为文件的函数覆盖以前的信息*/ void save1(); /* 保存链表为文件的函数不覆盖以前的信息只在创建时调用一次*/struct tushu_node* wjtolb(); /* 从文件中读取数据并建立图书信息的链表的函数*/int luruxinxi(); /* 录入学生信息的函数*/ struct tushu_node * luruxinxi_chuangjian(); /* 创建图书信息的函数*/struct tushu_node * luruxinxi_charu(); /*插入图书信息的函数*/struct tushu_node * luruxinxi_shanchu(); /*删除图书信息的函数*/struct tushu_node * luruxinxi_xiugai(); /*修改图书信息的函数*/int liulantushu(); /* 浏览图书信息的函数*/int chaxuntushu(); /* 查询图书信息的函数*/ void chaxuntushu_num(); /* 按编号查询图书*/void chaxuntushu_name(); /* 按书名查询图书*/void chaxuntushu_price(); /* 按价格查询图书*/void paixutushu(); /* 为图书排序的函数*/ struct tushu_node* paixutushu_price(); /* 为图书按价格排序的函数*/ struct tushu_node* paixutushu_time(); /* 为图书按出版时间排序的函数*/void sfjx() ; /* 写个小函数,判断是否继续,让程序更完美在排序中使用*/int tongjitushu_shumu(); /* 统计图书数目的函数*/void shiyongshuoming(); /* 使用说明的函数*//*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int main(){int chioce;chioce=quanxian(); /*核查用户是否有使用该管理系统的权限的函数*/if(chioce==1) /*若取得权限则返回值为1 */{system("cls");inputchioce();}exit(0);}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int inputchioce() /* 主菜单*/{int mychioce,x=-1;printf("\n++++++++++++++++++++++++++++++++++++++欢迎你++++++++++++++++++++++++++++++++++\n\n");printf("**+++++++++++++++++++++++++++++++++++ 主菜单+++++++++++++++++++++++++++++++**\n");printf("** 1-- 录入(删除修改)图书信息** ** 2--(按规则)查询图书信息**\n");printf("** 3-- 浏览图书信息** ** 4-- 为图书(按规则)排序**\n");printf("** 5-- 统计图书(数目)** ** 6-- 帮助**\n");printf("** 0-- 退出系统** ** **\n");printf("**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++**\n");printf("\n 恭喜你获得使用权限,请你选择:");scanf("%d",&mychioce);switch(mychioce){case 1:{ luruxinxi();break;}case 2:{chaxuntushu();break;}case 3:{ liulantushu();break;}case 4:{ paixutushu();break;}case 5:{ tongjitushu_shumu();printf("\n\n是否继续操作? 请选择(继续-1/退出-0)");scanf("%d",&x);if(x==1){ system("cls");inputchioce();}if(x==0){printf("\n\n谢谢你的使用!再见\n");exit (0); }if(x!=1&&x!=0){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}break;}case 6:{ shiyongshuoming();break;}case 0:{ printf(" \n\n 谢谢你的使用!!再见\n\n");break;}default:{ system("cls");printf("\n 选择有误,请重新选择:\n");inputchioce();}break;}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int quanxian(){int m=1,n=3,flag=0;char mima[20];do{printf("\n\n 你好,欢迎使本图书信息管理系统!\n");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~\n");printf("【现在进行权限核查】\n--------------------友情提醒:你共有3次输入密码的机会!\n");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~\n ");if(n==2||n==1){printf("注意:你已输入错误%d次剩余输入次数: %d 请输入密码:",3-n,n);}if(n==3) printf("剩余输入次数: %d 请输入密码:",n);scanf("%s",mima);if(strcmp(mima,"chenbo0916")==0){flag=1;return flag;}m++;n--;system("cls");}while(strcmp(mima,"chenbo0916")!=0&&m<=3) ;printf("\n\n对不起,你连续三次输入密码错误,没有使用该图书管理系统的权限!\n");exit(0);}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/struct tushu_node* wjtolb(struct tushu_node*head,int *n) /* 从文件中读取数据并建立图书信息的链表的函数*/{FILE *fp;struct tushu_node*p,*p1,*p2;if((fp=fopen("1.txt","r"))==NULL){printf(" 打开文件失败!\n");exit(1);}while(!feof(fp)){(*n)++;p=(struct tushu_node*)malloc(sizeof(struct tushu_node));fscanf(fp,"%d%s%s%s%s%s%lf",&p->num,p->leibie,p->name,p->author,p->press,p->time,&p->price);if(head==NULL){head=p;p1=p;}else{p1->next=p;p2=p1;p1=p;}}p2->next=NULL;free(p);(*n)--;fclose(fp);return head;/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int luruxinxi(){int k;printf(" |++++++++++++++++++++++++++++录入信息++++++++++++++++++++++++++++++++|\n");printf(" | 1-- 创建或添加图书信息** ** 2-- 删除图书信息|\n");printf(" | 3-- 修改图书信息** ** 0-- 还回主菜单|\n");printf("请你再次选择具体操作:");scanf ("%d",&k);system("cls"); /* 清屏*/switch(k){case 1:{ luruxinxi_chuangjian();break;}case 2:{luruxinxi_shanchu();break;}case 3:{luruxinxi_xiugai();break;}case 0:{ inputchioce();break;}default:{ system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}break;}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/struct tushu_node * luruxinxi_chuangjian() /* 创建图书信息的函数*/{int num;char leibie[10];char name[30];char author[20];char press[20];char time[20];double price;int size=sizeof(struct tushu_node);head=tail=NULL;printf("\n请依次输入图书的\n编号类别书名作者出版社出版时间价格(以“0”结束输入):\n");scanf("%d",&num);if(num!=0)scanf("%s%s%s%s%s%lf",leibie,name,author,press,time,&price);while(num!=0){p=(struct tushu_node*)malloc(size);p->num=num;strcpy(p->leibie,leibie);strcpy(p->name,name);strcpy(p->author,author);strcpy(p->press,press);strcpy(p->time,time);p->price=price;p->next=NULL;if(head==NULL)head=p;elsetail->next=p;tail=p;printf("\n请继续输入图书的\n编号类别书名作者出版社出版时间价格(以“0”结束输入):\n");scanf("%d",&num);if(num!=0){scanf("%s%s%s%s%s%lf",leibie,name,author,press,time,&price);}}if(num==0) /* 若判断数字为0,则退出*/{system("cls");save1(head);inputchioce();}return head;}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/void save1(struct tushu_node* p1){ /* 将链表保存为文件的函数不覆盖以前的信息*/if( (fpp=fopen("1.txt","a"))==NULL ){printf("打开文件失败!");exit(0);}while(p1!=NULL){fprintf(fpp," %d %s %s %s %s %s %lf \n",p1->num,p1->leibie,p1->name,p1->author,p1->press,p1->time,p1->price);p1=p1->next;}if(fclose(fpp)){printf("关闭文件失败!\n");exit(0);}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/void save(struct tushu_node* p1) /* 将链表保存为文件的函数覆盖以前的信息*/{if(( fpp=fopen("1.txt","w"))==NULL ){printf("打开文件失败!");exit(0);}while(p1!=NULL){fprintf(fpp," %d %s %s %s %s %s %lf \n",p1->num,p1->leibie,p1->name,p1->author,p1->press,p1->time,p1->price);p1=p1->next;}if(fclose(fpp)){printf("关闭文件失败!\n");exit(0);}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/struct tushu_node * luruxinxi_shanchu() /* 删除某本图书信息(按编号删除)*/{int x=-1,n=0;int numm;int num;char leibie[10];char name[30];char author[20];char press[20];char time[20];double price;struct tushu_node*ptr1,*ptr2;struct tushu_node*head=NULL;printf("\n所有的图书信息如下:\n"); /* 删除前先遍历所有图书,方便看清要删除哪一本*/if((fpp=fopen("1.txt","r"))==NULL) /* 输入要删除的图书编号之前先遍历所有图书信息*/{printf(" 打开文件失败!");exit(0);}else{printf("\n\n编号类别书名作者出版社出版时间价格\n");while(!feof(fpp)){fscanf(fpp,"%d%s%s%s%s%s%lf",&num,leibie,name,author,press,time,&price);printf("%d %s %s %s %s %s %lf\n",num,leibie,name,author,press,time, price);}}if(fclose(fpp)){printf("关闭文件失败!\n");exit(0);}head=wjtolb(head,&n); /* 从文件中读取数据将数据创建为链表*/printf("\n 输入需要删除的图书的编号:");scanf("%d",&numm);while(head!=NULL&&head->num==numm){ptr2=head;head=head->next;free(ptr2);}if(head==NULL)return NULL;ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(ptr2->num==numm){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}save(head); /* 重新保存为文件*/printf(" 编号为%d的图书已删除并将删除后的信息保存至文件",numm);printf("\n\n是否继续操作? 请选择(继续-1/退出-0)");scanf("%d",&x);if(x==1){system("cls");inputchioce();}if(x==0){printf("\n\n谢谢你的使用!再见\n");exit (0);}if(x!=1&&x!=0){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}return head;}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/struct tushu_node * luruxinxi_xiugai() /*修改图书信息的函数(按编号修改)*/ { int n=0,x=-1,t;int num;int numm;char leibie[10];char name[30];char author[20];char press[20];char time[20];double price;struct tushu_node*head=NULL;struct tushu_node*p;printf("\n所有的图书信息如下:\n");if( (fpp=fopen("1.txt","r"))==NULL ) /* 输入要修改的图书编号之前先遍历所有图书信息*/{printf(" 打开文件失败!");exit(0);}else{printf("\n\n编号类别书名作者出版社出版时间价格\n");while(!feof(fpp)){fscanf(fpp,"%d%s%s%s%s%s%lf",&num,leibie,name,author,press,time,&price);printf("%d %s %s %s %s %s %lf\n",num,leibie,name,author,press,time, price);}}if(fclose(fpp)){printf("关闭文件失败!\n");exit(0);}printf("\n输入需要修改的图书的编号:");scanf("%d",&numm);system("cls"); /* 先遍历后选择完要修改的图书编号后清屏*/head=wjtolb(head,&n);printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~\n");printf("1--修改图书编号2--修改图书类别\n");printf("3--修改图书书名4--修改图书作者\n");printf("5--修改图书出版社6--修改图书出版时间\n");printf("7--修改图书价格\n");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~\n");printf("编号为%d本图书的信息为:\n",numm);if(head!=NULL&&head->num==numm) /*修改头结点*/{printf("编号类别书名作者出版社出版时间价格\n");printf("%d %s %s %s %s %s %lf\n",head->num,head->leibie,head ->name,head->author,head->press,head->time,head->price);printf("请选择需要修改的图书信息的成分:");scanf("%d",&t);switch(t){case 1:{ printf(" 请输入图书%d的新编号:\n",numm);scanf("%d",&num);head->num=num;break;}case 2:{printf(" 请输入图书%d的新类别:\n",numm);scanf("%s",leibie);strcpy(head->leibie,leibie);break;}case 3:{ printf(" 请输入图书%d的新书名:\n",numm);scanf("%s",name);strcpy(head->name,name);break;}case 4:{ printf(" 请输入图书%d的新作者:\n",numm);scanf("%s",author);strcpy(head->author,author);break;}case 5:{ printf(" 请输入图书%d的新出版社:\n",numm);scanf("%s",press);strcpy(head->press,press);break;}case 6:{ printf(" 请输入图书%d的新出版时间:\n",numm);scanf("%s",time);strcpy(head->time,time);break;}case 7:{ printf(" 请输入图书%d的新价格:\n",numm);scanf("%lf",&price);head->price=price;break;}default:{ system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}break;}save(head);printf("\n\n是否继续操作? 请选择(继续-1/退出-0)");scanf("%d",&x);if(x==1){system("cls");inputchioce();}if(x==0){printf("\n\n谢谢你的使用!再见\n");exit (0);}if(x!=1&&x!=0){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}}else /* 要修改的不是头节点*/{p=head->next;}//do 用do-while语句事不能对第二本图书进行修改//{p=p->next;}while(p!=NULL&&p->num!=numm);while(p!=NULL&&p->num!=numm){p=p->next;}if(p!=NULL&&p->num==numm) /* 修改其他节点*/{printf("\n\n编号类别书名作者出版社出版时间价格\n");printf("%d %s %s %s %s %s %lf\n", p->num,p->leibie,p->name,p->author,p->press,p->time,p->price);printf("请选择需要修改的图书信息的成分:");scanf("%d",&t);switch(t){case 1:{ printf(" 请输入图书%d的新编号:\n",numm);scanf("%d",&num);p->num=num;break;}case 2:{printf(" 请输入图书%d的新类别:\n",numm);scanf("%s",leibie);strcpy(p->leibie,leibie);break;}case 3:{ printf(" 请输入图书%d的新书名:\n",numm);scanf("%s",name);strcpy(p->name,name);break;}case 4:{ printf(" 请输入图书%d的新作者:\n",numm);scanf("%s",author);strcpy(p->author,author);break;}case 5:{ printf(" 请输入图书%d的新出版社:\n",numm);scanf("%s",press);strcpy(p->press,press);break;}case 6:{ printf(" 请输入图书%d的新出版时间:\n",numm);scanf("%s",time);strcpy(p->time,time);break;}case 7:{ printf(" 请输入图书%d的新价格:\n",numm);scanf("%lf",&price);p->price=price;break;}default:{ system("cls");printf("选择有误,请重新选择:\n");inputchioce();}break;}save(head);printf("\n\n是否继续操作? 请选择(继续-1/退出-0)");scanf("%d",&x);if(x==1){system("cls");inputchioce();}if(x==0){printf("\n\n谢谢你的使用!再见\n");exit (0);}if(x!=1&&x!=0){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}}return head;}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int liulantushu() /* 浏览图书信息的函数*/{int num;char leibie[10];char name[30];char author[20];char press[20];char time[20];double price;int x=-1;if( (fpp=fopen("1.txt","r"))==NULL ){printf(" 打开文件失败!");exit(0);}else{printf("\n\n编号类别书名作者出版社出版时间价格\n");while(!feof(fpp)){fscanf(fpp,"%d%s%s%s%s%s%lf",&num,leibie,name,author,press,time,&price);printf("%d\t%s\t%s\t%s\t%s\t%s\t%lf\n",num,leibie,name,author,press,time,price);}}if(fclose(fpp)){printf("关闭文件失败!\n");exit(0);}printf("\n\n是否继续操作? 请选择(继续-1/退出-0)");scanf("%d",&x);if(x==1){system("cls");inputchioce();}if(x==0){printf("\n\n谢谢你的使用!再见\n");exit (0);}if(x!=1&&x!=0){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int chaxuntushu() /* 查询图书信息*/{int k;int n=0;struct tushu_node*head=NULL;head=wjtolb(head,&n);printf(" |++++++++++++++++++++++++++++ 查询图书信息++++++++++++++++++++++++++++++++|\n");printf(" | 1-- 按编号查询图书信息** ** 2-- 按书名查询图书信息|\n");printf(" | 3-- 按价格查询图书信息** ** 0-- 还回主菜单|\n");printf("请你再次选择具体操作:");scanf ("%d",&k);system("cls"); /* 清屏*/switch(k){case 1:{ chaxuntushu_num(head);break;}case 2:{ chaxuntushu_name(head);break;}case 3:{ chaxuntushu_price(head);break;}case 0:{ inputchioce();break;}default:{ system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}break;}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/void chaxuntushu_num(struct tushu_node*h) /* 按编号查询图书*/{int found,flag=1,num;int x;struct tushu_node*p;do{found=0;p=h;printf("请输入需要查找的图书的编号:");scanf( "%d",&num);printf("\n");while(p!=NULL){if(p->num==num){if(found==0)printf("\n编号类别书名作者出版社出版时间价格\n");printf("%d %s %s %s %s %s %lf\n",p->num,p->leibie,p->name,p->author,p->pr ess,p->time,p->price);found=1; /* 如果要查询的图书为头节点内的图书输出后将标记found变为1 */}p=p->next;}if(found==0) /* 若不为头节点found不变继续往后面查找*/printf("编号为%d 的图书未找到!\n",num);printf("\n\n是否继续查找?(继续--1/返回主菜单--0)");scanf("%d",&x);if(x==0)flag=0;if(x==1)flag=1;if(x!=1&&x!=0)flag=2;}while(flag==1); /* flag为判断是否需要继续的函数继续查找时flag为1 用do-while控制循环*/if(flag==0){system("cls");inputchioce();}if(flag==2){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/void chaxuntushu_name(struct tushu_node*h) /* 按书名查询图书*/{int found,flag=1;char name[30];int x;struct tushu_node*p;do{found=0;p=h;printf("请输入需要查找的图书的书名:");scanf( "%s",name);printf("\n");while(p!=NULL){if(strcmp(p->name,name)==0){if(found==0)printf("\n编号类别书名作者出版社出版时间价格\n");printf("%d %s %s %s %s %s %lf\n",p->num,p->leibie,p->name,p->author,p->pr ess,p->time,p->price);found=1;}p=p->next;}if(found==0)printf("书名为《%s》的图书未找到!\n",name);printf("\n\n是否继续查找?(继续--1/返回主菜单--0)");scanf("%d",&x);if(x==0)flag=0;if(x==1)flag=1;if(x!=1&&x!=0)flag=2;}while(flag==1);if(flag==0){system("cls");inputchioce();}if(flag==2){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/void chaxuntushu_price(struct tushu_node*h) /* 按价格查询图书*/{int found,flag=1;double price;int x;struct tushu_node*p;do{found=0;p=h;printf("请输入需要查找的图书的价格:");scanf( "%lf",&price);printf("\n");while(p!=NULL){if(p->price==price){if(found==0)printf("\n编号类别书名作者出版社出版时间价格\n");printf("%d %s %s %s %s %s %lf\n",p->num,p->leibie,p->name,p->author,p->pr ess,p->time,p->price);found=1;}p=p->next;}if(found==0)printf("价格为%lf的图书未找到!\n",price);printf("\n\n是否继续查找?(继续--1/返回主菜单--0)");scanf("%d",&x);if(x==0)flag=0;if(x==1)flag=1;if(x!=1&&x!=0)flag=2;}while(flag==1);if(flag==0){system("cls");inputchioce();}if(flag==2){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/void paixutushu() /* 为图书排序的函数*/{int k;int n=0;struct tushu_node*head=NULL;head=wjtolb(head,&n);printf(" |++++++++++++++++++++++++ 为图书按规则排序+++++++++++++++++++++++++++++|\n");printf(" | 1-- 按价格为图书排序** ** 2-- 按出版时间为图书排序|\n");printf(" | 0-- 还回主菜单** |\n");printf("请你再次选择具体操作:");scanf ("%d",&k);system("cls"); /* 清屏*/switch(k){case 1:{head=paixutushu_price(head);sfjx();break;}case 2:{head=paixutushu_time(head);sfjx();break;}case 0:{inputchioce();break;}default:{system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}break;}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/struct tushu_node* paixutushu_price(struct tushu_node *head) /* 为图书按价格排序的函数*/{int n;struct tushu_node*p1,*p2,*p3,*p4;int i,j;int size=sizeof(struct tushu_node);n=tongjitushu_shumu();p1=head;p2=head->next;if(head==NULL||head->next==NULL)return head;if(p2->next==NULL){if(p1->price<p2->price)return head;else{p2->next=p1;p1->next=NULL;head=p2;save(head);printf("\n\n 按价格排序操作已完成并保存完毕\n是否继续操作? 请选择(继续-1/退出-0)");return head;}}for(i=1;i<n;i++)p4=(struct tushu_node*)malloc(size);p4->next=head;p3=p4;p1=head;p2=head->next;for(j=0;j<n-i;j++){if(p2->price>p1->price){p3=p1;p1=p2;p2=p2->next;}else{p1->next =NULL;p1->next=p2->next;p3->next=p2;p2->next =p1;p3=p2;p2=p1->next;}}head=p4->next;free(p4);}save(head);printf("\n\n按价格排序操作已完成并保存完毕\n是否继续操作? 请选择(继续-1/退出-0)");return head;}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/void sfjx() /* 写个小函数,判断是否继续,让程序更完美*/ {int x=-1;scanf("%d",&x);if(x==1){system("cls");inputchioce();}if(x==0)printf("\n\n谢谢你的使用!再见\n");exit(0);}if(x!=1&&x!=0){system("cls");printf("选择有误,默认返回主菜单,请重新选择:\n");inputchioce();}}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/struct tushu_node* paixutushu_time(struct tushu_node *head) /* 为图书按出版时间排序的函数*/{int n;struct tushu_node*p1,*p2,*p3,*p4;int i,j;int size=sizeof(struct tushu_node);n=tongjitushu_shumu();p1=head;p2=head->next;if(head==NULL||head->next==NULL)return head;if(p2->next==NULL){if(strcmp(p1->time,p2->time)>0)return head;else{p2->next=p1;p1->next=NULL;head=p2;save(head);printf("\n\n按出版时间排序操作已完成并保存完毕\n是否继续操作? 请选择(继续-1/退出-0)");return head;}}for(i=1;i<n;i++){p4=(struct tushu_node*)malloc(size);p4->next=head;p3=p4;p1=head;p2=head->next;for(j=0;j<n-i;j++){if(strcmp(p1->time,p2->time)<0){p3=p1;p1=p2;p2=p2->next;}else{p1->next =NULL;p1->next=p2->next;p3->next=p2;p2->next =p1;p3=p2;p2=p1->next;}}head=p4->next;free(p4);}save(head);printf("\n\n 按出版时间排序操作已完成并保存完毕\n是否继续操作? 请选择(继续-1/退出-0)");return head;}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int tongjitushu_shumu() /* 统计图书数目的函数*/{int num;char leibie[10];char name[30];char author[20];char press[20];char time[20];double price;int x=-1,n=0;if((fpp=fopen("1.txt","r"))==NULL){printf(" 打开文件失败!");exit(0);}else{while(!feof(fpp)){fscanf(fpp,"%d%s%s%s%s%s%lf",&num,leibie,name,author,press,time,&price);n++;}}if(fclose(fpp)){printf("关闭文件失败!\n");exit(0);}printf("共有%d本图书",n-1);return n-1 ;}/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*//*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*//*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/void shiyongshuoming() /* 使用说明的函数*/{int x=-1;system("cls");printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~使用说明~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n ");printf(" 你好,欢迎使用本图书管理系统!\n 1.首先你需要获得本系统的使用权限,进入本系统后,你有三次输入密码");printf("的机会,在三次内输入正确密码即可获得使用权限,三次输入错误后,系统将自动退出。
图书管理系统源代码

#include<iostream>#include<string>#include<fstream>#include<strstream>#include<sstream>using namespace std;//定义类class Book{ public:char name[80];char auther[80];int num;//定义一个输出函数void out(){ cout<<"书名:"<<name<<" "<<"作者:"<<auther<<" "<<"数量:"<<num<<endl;}};//定义暂时存储数据的数组Book booklist[20];//寻找数组中空位的函数int locate1(){int z=0;while(z<20){if(booklist[z].name[0]=='n'&&booklist[z].name[1]=='u'&&booklist[z].name[2]=='l'&&booklist[z].name[3]=='l'){return z; //如果书名为null表示当前是空位则返回此位置}else{z++;}}}//依据书名和作者寻找书的位置int locate2(char m[80],char n[80]){int a=0;while(a<20){if(strcmp(n, booklist[a].auther)==0&&strcmp(m, booklist[a].name)==0){return a;break; //若书名和作者均符合则返回此位置并跳出}else{a++;}}if(a=20){return 20;}}//依据书名寻找书的位置int locate3(char m[80]){int a=0;while(a<20){if(strcmp(m, booklist[a].name)==0){return a; //书名相同即返回此位置break;}else{a++;}}if(a=20){return 20;}}//借书函数void borrow(){void menu();system("cls"); //刷新屏幕if(booklist[0].name[0]=='n'&&booklist[0].name[1]=='u'&&booklist[0 ].name[2]=='l'&&booklist[0].name[3]=='l'){cout<<"库中无图书,暂不能借书!\n";}else{system("cls");char m[80],n[80];cout<<"请输入要借阅的书名:(空格用下划线代替)"<<endl;cin>>m;cout<<"请输入要借阅的书作者:(空格用下划线代替)"<<endl;cin>>n;int l=locate2(m,n); //依据书名和作者定位if(l==20){cout<<"书库中无此书"<<endl;}else{if(booklist[l].num==0){system("cls");cout<<"抱歉,该书全部借出。
C++课程设计---图书信息管理系统设计源代码

if(r==0)
cout<<setw(6)<<"编号"<<setw(10)<<"书名"<<setw(10)<<"作者"<<setw(10)<<"出版社"<<setw(15)<<"出版时间"<<setw(15)<<"图书价格"<<setw(10)<<"存量"<<endl;
const int Maxb=100; //最多的图书数
const int Maxbor=5; //每位读者最多借的书
class Book
{//图书类,实现对图书的描述,图书的编号,书名,借出,还入等功能
private:
int tag; //删除标记 1:已删 0:未删
int no; //图书编号
b=query1(bookid);
if(b!=NULL)
{
cout<<"该编号已经存在,不能添加!"<<endl;
e=&book[i];
e->disp();
r++;
}
if(r==0)
cout<<"找不到该书!"<<endl;
return NULL;
}
void bookdata(); //图书库信息
void disp()
}
int getcbtime()
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图书管理系统源代码
1. 简介
图书管理系统是一种用于管理图书馆或书店中图书信息的软件系统。
它主要提供了图书的添加、编辑、删除、查询等功能,便于管理人员对图书信息进行集中管理,同时也能方便读者进行图书的查询和借阅操作。
本文档将介绍一个基于Python的简单图书管理系统的源代码,以及其使用说明和功能演示。
2. 系统设计
2.1 使用的库
该图书管理系统使用了以下Python库来实现不同功能:
•Tkinter:用于GUI界面的设计和实现。
•SQLite3:用于图书信息的持久化存储。
2.2 数据库设计
在该图书管理系统中,我们使用了一个简单的图书信息表
来存储图书的相关信息。
该表包含以下字段:
•book_id:图书ID,唯一标识一个图书。
•book_title:图书标题,描述图书的名称。
•book_author:图书作者,描述图书的作者信息。
•book_publisher:图书出版商,描述图书的出版商
信息。
2.3 功能设计
该图书管理系统实现了以下功能:
•添加图书:管理员可以添加一本新的图书到系统中。
•编辑图书:管理员可以编辑已存在的图书信息。
•删除图书:管理员可以从系统中删除指定的图书。
•查询图书:管理员和读者都可以根据图书的标题、
作者或出版商来查询图书信息。
3. 源代码
以下是该图书管理系统的源代码(使用Python编写):```python import tkinter as tk import sqlite3
连接到数据库
conn = sqlite3.connect(’library.db’) c = conn.cursor()
创建图书信息表
c.execute(’’’ CREATE TABLE IF NOT EXISTS books ( book_id INTEGER PRIMARY KEY AUTOINCREMENT, book_title TEXT, book_author TEXT, book_publisher TEXT ) ’’’)
窗口初始化
window = () window.title(。