1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 图书馆管理系统课程设计

图书馆管理系统课程设计

时间:2019-10-04 15:09:36

相关推荐

图书馆管理系统课程设计

本程序源代码与功能设计部分借阅网上一些资料完成的,自己本人修改了一些细节与功能

如果你也要做这个,欢迎学习与改正。

/*名称: 图书管理信息系统版本: 1.0.0日期:作者: I我Promise注解:本程序源代码与功能设计部分借阅网上一些资料完成的,自己本人修改了一些细节与功能如果你也要做这个,欢迎学习与改正*/# include # include # include typedef struct book{char name[10];// 名字char num[10];// 编号char writer[10];// 作者int date;// 出版日期char press[10];// 出版社float prise;// 价格char sort[10];// 类别int inven;// 库存int loan;// 借出}BK;typedef struct student{char name[10];// 已借学生姓名char num[10];// 已借学生学号int borr;// 已借本数}ST;typedef struct borror{char Snum[10];// 已借图书学生学号char Bnum[10];// 已借图书编号}BS;FILE *fp, *fpj, *fps;// 定义全局文件指针,方便使用int i, xuan;// 定义两个常用的变量用于循环等void Logan();void Menu_filename();int Menu_select();void Add_Book();//录入void Show_Book();//浏览void Search_Book();//查询void AD_Book();//修改与删除void Borr_Book();//借阅void Retu_Book();//归还void BS_Book();//借阅查询int Contrast(char *, char *);//对比int main(void){Logan();Menu_filename();for (;;){fp = fopen("book.txt", "rb+");fps = fopen("student.txt", "rb+");fpj = fopen("jieyue.txt", "rb+");switch (Menu_select()){case 1:printf("\n\t\t*^_^*图书信息添加*^_^*\n");Add_Book();break;case 2:printf("\n\t\t*^_^*图书信息浏览*^_^*\n");Show_Book();break;case 3:printf("\n\t\t*^_^*图书信息查询*^_^*\n");Search_Book();break;case 4:printf("\n\t\t*^_^*图书信息修改与删除*^_^*\n");AD_Book();break;case 5:printf("\n\t\t*^_^*图书借阅*^_^*\n");Borr_Book();break;case 6:printf("\n\t\t*^_^*图书归还查询*^_^*\n");Retu_Book();break;case 7:printf("\n\t\t*^_^*图书借阅查询*^_^*\n");BS_Book();break;case 0:printf("\n谢谢使用哦! \t\t\t\t See You Again !!\n");printf("\n\t\t");system("pause");exit(0);}fclose(fp);fclose(fpj);fclose(fps);}system("pause");return 0;}void Logan(){printf("\n\n\n\t\t\t 图书馆信息管理系统\n\n");printf("\t\t 作者 : I我Promise \n\n");printf("\t\t 成员 :\n\n");printf("\t\t 时间1 :12月20日 15:46:19 \n\n");printf("\t\t 时间2 :12月22日 15:59:00 \n\n");printf("\t\t 时间3 :12月26日 10:11:07 \n\n");printf("\t\t 时间4 :12月27日 11:21:17 \n\n");printf("\t\t 时间5 :12月27日 16:37:23 \n\n");printf("\t\t 身份 :在校大学生一枚 \n\n");system("pause");}void Menu_filename()// 新建或查找 并用txt格式的文件储存,方便打开与转移{system("cls");if ((fp = fopen("book.txt", "rb+")) == NULL){printf("\t\t在程序同一目录下没有找到储存图书信息的book.txt文件!\n");printf("\t\t\t请选择 :\n\t\t\t1--手动导入(手动将文件复制到目录下)!\n\t\t\t2--创建此文件!(由系统创建) \n");printf("请输入序号 : ");scanf("%d", &xuan);switch (xuan){case 2:if ((fp = fopen("book.txt", "wb+")) != NULL)printf("创建成功!!\n\n");break;case 1:printf("\t\t请把名为book.txt的文件复制到程序同一目录下\n\n");}}if ((fpj = fopen("jieyue.txt", "rb+")) == NULL){printf("\t\t在程序同一目录下没有找到储存图书信息的jieyue.txt文件!\n");printf("\t\t\t请选择 :\n\t\t\t1--手动导入(手动将文件复制到目录下)!\n\t\t\t2--创建此文件!(由系统创建) \n");printf("请输入序号 : ");scanf("%d", &xuan);switch (xuan){case 2:if ((fpj = fopen("jieyue.txt", "wb+")) != NULL)printf("创建成功\n\n");break;case 1:printf("\t\t请把名为jieyue.txt的文件复制到程序同一目录下\n\n");}}if ((fps = fopen("student.txt", "rb+")) == NULL){printf("\t\t在程序同一目录下没有找到储存图书信息的student.txt文件!\n");printf("\t\t\t请选择 :\n\t\t\t1--手动导入(手动将文件复制到目录下)!\n\t\t\t2--创建此文件!(由系统创建) \n");printf("请输入序号 : ");scanf("%d", &xuan);switch (xuan){case 2:if ((fps = fopen("student.txt", "wb+")) != NULL)printf("创建成功\n\n");break;case 1:printf("\t\t请把名为student.txt的文件复制到程序同一目录下\n\n");}}}int Menu_select(void){int a;do{system("cls");printf("\n\t\t◤▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔◥\n");printf("\t\t▏ 图书馆信息管理系统▕\n");printf("\t\t◣▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁◢\n");printf("\n");printf("\t\t ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ \n");printf("\t\t ▏ 1.图书录入 2.图书浏览 ▕ \n");printf("\t\t ▏ 3.图书查询 4.图书修改与删除 ▕ \n");printf("\t\t ▏ 5.图书借阅 6.图书归还 ▕ \n");printf("\t\t ▏ 7.已借图书查询 0.退出系统 ▕ \n");printf("\t\t ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ \n");printf("\t\t\n 请您选择(0 - 7) : ");scanf("%d", &a);} while (a < 0 || a > 7);system("cls");return (a);}void Add_Book(void)//录入{BK bo, boq;char sign = 'y';system("cls");while (sign != 'n' && sign != 'N'){fp = fopen("book.txt", "rb+");// 在这个while中因为要多次输入,所以要重新打开与关闭fps = fopen("student.txt", "rb+");// 不然下面的判断编号是否重复就不能判断fpj = fopen("jieyue.txt", "rb+");printf("\n\t--------------图书信息添加--------------\n\n");printf("请输入图书名(最多十个字符):");scanf("%s", bo.name);do// 因为编号是我系统图书唯一的标识符,所以要检查下{i = 1;printf("请输入图书编号(最多十个字符):");scanf("%s", bo.num);fread(&boq, sizeof(BK), 1, fp);while (!feof(fp)){if (strcmp(boq.num, bo.num) == 0){printf("\n该编号已存在请重新输入!\n\n");i = 0;break;}fread(&boq, sizeof(BK), 1, fp);}rewind(fp);} while (i == 0);printf("请输入图书作者(最多十个字符):");scanf("%s", bo.writer);printf("请输入图书出版日期(例如2001年5月3日出版则输入20010503):");scanf("%d", &bo.date);printf("请输入图书价格:");scanf("%f", &bo.prise);printf("请输入图书出版社(最多十个字符):");scanf("%s", bo.press);printf("请输入图书类别(最多十个字符):");scanf("%s", bo.sort);printf("请输入图书入库数:");scanf("%d", &bo.inven);bo.loan = 0;fseek(fp, 0, 2);fwrite(&bo, sizeof(BK), 1, fp);printf("\n 录入成功!您是否想继续添加 ( Y / N ) : ");scanf("\t%c", &sign);// 缓存 回车符system("cls");fclose(fp);fclose(fpj);fclose(fps);}}void Show_Book(void)//浏览{//system("cls");BK bo;char sign = 'y';printf("\n\n\t书名编号作者价格出版社 类别原始库存 借出\n");fread(&bo, sizeof(BK), 1, fp);while (feof(fp) == 0){printf("\n\t%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n", bo.name, bo.num, bo.writer, bo.prise, bo.press, bo.sort, bo.inven, bo.loan);fread(&bo, sizeof(BK), 1, fp);}printf("\n\n浏览图书完毕!谢谢使用 !\n\n");system("pause");printf("\n\n\t您是否想修改记录 ( Y / N ) : ");scanf("\t%c", &sign);//为什么要加 /t因为/t 是用来缓存上一个回车符if (sign != 'n' && sign != 'N'){AD_Book();}system("pause");}void Search_Book(void)//查询{char key[10];int fan = 1;int bian = 1;// 记录序号BK bo;system("cls");system("cls");printf("\t\n请选择查询方式:\n");printf("\t┌───────────────────────┐\n");printf("\t│ 1--按图书编号模糊查询 2--按图书名关键字查询 │\n");printf("\t││\n");printf("\t│ 3--按图书编号精确查询 4--按图书书名精确查询 │\n");printf("\t└───────────────────────┘\n");printf("请输入你要查询的方式\n");scanf("%d", &xuan);if (1 == xuan){printf("\n请输入图书编号(例如: 164030242 可输入: 1642 !最多十个字符):");scanf("%s", key);printf("\n\t序号 书名编号作者价格出版社 类别原始库存 借出\n");fread(&bo, sizeof(BK), 1, fp);while (!feof(fp)){fan = Contrast(key, bo.num);// 模糊查找函数if (1 == fan){printf("\t%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n", bian, bo.name, bo.num, bo.writer, bo.prise, bo.press, bo.sort, bo.inven, bo.loan);bian++;}fread(&bo, sizeof(BK), 1, fp);}}else if (2 == xuan){printf("\n请输入图书名关键字(例如: C Language 可输入: Cge ! 最多十个字符):");scanf("%s", key);printf("\n\t序号 书名编号作者价格出版社 类别原始库存 借出\n");fread(&bo, sizeof(BK), 1, fp);while (!feof(fp)){fan = Contrast(key, bo.name);if (1 == fan)printf("\t%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n", bian, bo.name, bo.num, bo.writer, bo.prise, bo.press, bo.sort, bo.inven, bo.loan);fread(&bo, sizeof(BK), 1, fp);}}else if (3 == xuan){printf("\n请输入准确的图书编号(最多十个字符):");scanf("%s", key);printf("\n\t序号 书名编号作者价格出版社 类别原始库存 借出\n");while (!feof(fp)){if (strcmp(key, bo.num) == 0)printf("\t%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n", bian, bo.name, bo.num, bo.writer, bo.prise, bo.press, bo.sort, bo.inven, bo.loan);fread(&bo, sizeof(BK), 1, fp);}}else if (4 == xuan){printf("\n请输入准确图书名(最多十个字符):");scanf("%s", key);printf("\n\t序号 书名编号作者价格出版社 类别原始库存 借出\n");while (!feof(fp)){if (strcmp(key, bo.name) == 0)printf("\t%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n", bian, bo.name, bo.num, bo.writer, bo.prise, bo.press, bo.sort, bo.inven, bo.loan);fread(&bo, sizeof(BK), 1, fp);}}else{printf("\n输入错误!!! 回到主菜单重新选择...\n");system("pause");return;}printf("\n 查询图书完毕! 谢谢使用...");system("pause");}void AD_Book(void)//修改与删除{FILE *p;char num[10], cha[10], sign = 'y';int j = 0, x;BK bo, boq;BS bs;fp = fopen("book.txt", "rb+");// 又在这里加这个是因为在 Show 函数中,我要调用这个函数fps = fopen("student.txt", "rb+");// 所以我要你主函数一样 重新打开关闭fpj = fopen("jieyue.txt", "rb+");printf("\n删除修改图书只能通过图书编号来完成!\n是否显示所有图书来查询你要操作的图书编号(Y/N): ");scanf("\t%c", &sign);if (sign != 'N' && sign != 'n'){Show_Book();rewind(fp);}printf("\n请输入你要操作的图书的编号(如果输入错误的编号,将不做任何操作):");scanf("%s", cha);fread(&bs, sizeof(BS), 1, fpj);while (!feof(fpj)){if (strcmp(bs.Bnum, cha) == 0)fclose(fp);fclose(fpj);fclose(fps);{printf("\n这本书已有人借阅,不能删除哦!\n");system("pause");return;}fread(&bs, sizeof(BS), 1, fpj);}printf("\t┌─────────────┐\n");printf("\t││\n");printf("\t│ 1--删除图书 2--修改图书 │\n");printf("\t││\n");printf("\t│ 0--取消操作 返回主菜单 │\n");printf("\t││\n");printf("\t└─────────────┘\n");printf("请选择操作类型:");scanf("%d", &xuan);while (xuan != 1 && xuan != 2 && xuan != 0){printf("您输入错误,请重新输入序号查询!\n");printf("请选择操作类型:");scanf("%d", &xuan);}fread(&bo, sizeof(BK), 1, fp);p = fopen("books1.txt", "wb+");while (!feof(fp)){j++;if (strcmp(bo.num, cha) == 0){if (2 == xuan){printf("\n\n1-书名 2-编号 3-作者 4-价格 5-出版社 6-类别 7-库存\n\n");printf("请选择要修改的项目:");scanf("%d", &x);if (1 == x){printf("你要把 %s 修改为:", bo.name);scanf("%s", bo.name);}else if (2 == x){do{i = 1;printf("你要把 %s 修改为 :", bo.num);scanf("%s", num);rewind(fp);fread(&boq,sizeof(BK), 1, fp);while (!feof(fp)){if (strcmp(boq.num, num) == 0)// 检查编号是否重复{printf("\n该编号已存,在请重新输入!\n\n");i = 0;break;}fread(&boq, sizeof(BK), 1, fp);}} while (i == 0);rewind(fp);for (i = 0; i < j; i++){fread(&bo, sizeof(BK), 1, fp);strcpy(bo.num, num);}}else if (3 == x){printf("你要把 %s 修改为 :", bo.writer);scanf("%s", bo.writer);}else if (4 == x){printf("你要把 %s 修改为 :", bo.prise);scanf("%s", bo.prise);}else if (5 == x){printf("你要把 %s 修改为 :", bo.press);scanf("%s", bo.press);}else if (6 == x){printf("你要把 %s 修改为 :", bo.sort);scanf("%s", bo.sort);}else if (7 == x){printf("你要把 %s 修改为 :", bo.inven);scanf("%s", bo.inven);}fwrite(&bo, sizeof(BK), 1, p);}else if (0 == xuan){system("pause");return;}}elsefwrite(&bo, sizeof(BK), 1, p);fread(&bo, sizeof(BK), 1, fp);}fclose(p);fclose(fp);p = fopen("books1.txt", "rb+");fp = fopen("book.txt", "wb+");fread(&bo, sizeof(BK), 1, p);while (!feof(p))// 将刚修改的数据 books1 复制并覆盖到 book 中{fwrite(&bo, sizeof(BK), 1, fp);fread(&bo, sizeof(BK), 1, p);}fclose(fp);//fclose(fp);fclose(fpj);fclose(fps);printf("\n操作成功 *^_^* 回到主菜单\n");system("pause");}void Borr_Book(void)//借阅{FILE *p;BK bo;ST st;BS bs;int j = 0;char num[10], xnum[10];char sign = 'y';system("cls");printf("\n借阅图书只能通过图书编号来完成!\n是否显示所有图书来查询你要操作的图书编号(Y/N): ");scanf("\t%c", &sign);if (sign != 'N' && sign != 'n')Show_Book();printf("\n请输入你要借阅的图书的编号:");scanf("%s", num);fread(&bo, sizeof(BK), 1, fp);while (!feof(fp)){if (strcmp(num, bo.num) == 0){j = 1;break;}fread(&bo, sizeof(BK), 1, fp);}if (j == 0){printf("\n不好意思 ,书库没有该图书哦 *^_^*\n\n");system("pause");return;}printf("\n你需要借阅的图书是:\n");printf("\t书名编号作者价格出版社 类别原始库存 借出\n");printf("\t%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n", bo.name, bo.num, bo.writer, bo.prise, bo.press, bo.sort, bo.inven, bo.loan);if (bo.inven == bo.loan){printf("\n该册图书已全部借出! 下次再来哦... *^_^*\n\n");system("pause");return;}printf("\n请输入你的学号:");scanf("%s", xnum);j = 0;fread(&bs, sizeof(BS), 1, fpj);while (!feof(fpj)){if ((strcmp(bs.Bnum, num) == 0) && (strcmp(bs.Snum, xnum) == 0)){j = 1;break;}fread(&bs, sizeof(BS), 1, fpj);}if (j == 1){printf("\n你已经借阅过该书 ! 归还了才能再借哦 *^_^* !\n\n");system("pause");return;}j = 0;fread(&st, sizeof(ST), 1, fps);while (!feof(fps)){if (strcmp(xnum, st.num) == 0){j = 1;break;}fread(&st, sizeof(ST), 1, fps);}if (j == 0){printf("\n您是第一次借阅图书,为了方便管理请输入你的姓名:");scanf("%s", st.name);strcpy(st.num, xnum);st.borr = 1;fseek(fps, 0, 2);fwrite(&st, sizeof(ST), 1, fps);}else{if (st.borr == 5)// 控制每个学生只能借五本书{printf("\n你已经借了5本书,不能再借 ! 请还了书才能借哦 !\n\n");system("pause");return;p = fopen("jie.txt", "wb+");rewind(fps);fread(&st, sizeof(ST), 1, fps);while (!feof(fps)){if (strcmp(xnum, st.num) == 0)st.borr++;fwrite(&st, sizeof(ST), 1, p);fread(&st, sizeof(ST), 1, fps);}fclose(p);fclose(fps);p = fopen("jie.txt", "rb+");fps = fopen("student.txt", "wb+");fread(&st, sizeof(ST), 1, p);while (!feof(p)){fwrite(&st, sizeof(ST), 1, fps);fread(&st, sizeof(ST), 1, p);}}strcpy(bs.Bnum, num);strcpy(bs.Snum, xnum);fseek(fpj, 0, 2);fwrite(&bs, sizeof(BS), 1, fpj);rewind(fp);p = fopen("jie.txt", "wb+");fread(&bo, sizeof(BK), 1, fp);while (!feof(fp)){if (strcmp(num, bo.num) == 0)bo.loan++;fwrite(&bo, sizeof(BK), 1, p);fread(&bo, sizeof(BK), 1, fp);}fclose(p);fclose(fp);p = fopen("jie.txt", "rb+");fp = fopen("book.txt", "wb+");fread(&bo, sizeof(BK), 1, p);while (!feof(p)){fwrite(&bo, sizeof(BK), 1, fp);fread(&bo, sizeof(BK), 1, p);}printf("\n\t*^_^*借阅成功!请借阅后爱护书籍哦 *^_^*\n\n");system("pause");}}void Retu_Book(void)//归还{FILE *p;BK bo;ST st;BS bs;int j = 0;char snum[10], bnum[10];i = 0;system("cls");printf("\n请输入你的学号:");scanf("%s", snum);printf("\n你借阅了以下图书 : \n");fread(&bs, sizeof(BS), 1, fpj);printf("\t书名编号作者价格出版社 类别原始库存 借出\n");while (!feof(fpj)){if (strcmp(bs.Snum, snum) == 0){fread(&bo, sizeof(BK), 1, fp);while (!feof(fp)){if (strcmp(bs.Bnum, bo.num) == 0){printf("\t%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n", bo.name, bo.num, bo.writer, bo.prise, bo.press, bo.sort, bo.inven, bo.loan);j = 1;}fread(&bo, sizeof(BK), 1, fp);}}fread(&bs, sizeof(BS), 1, fpj);}if (0 == j){printf("\n *^_^* 你没有借阅任何图书! 要多借书学习哦 *^_^* \n\n");system("pause");return;}rewind(fp);rewind(fpj);printf("\n请输入你归还的图书的编号:");scanf("%s", bnum);p = fopen("jie.txt", "wb+");fread(&bs, sizeof(BS), 1, fpj);//修改 jieyue.txt 里的数据while (!feof(fpj)){if ((strcmp(bs.Bnum, bnum) == 0) && (strcmp(bs.Snum, snum) == 0))i = 1;elsefwrite(&bs, sizeof(BS), 1, p);fread(&bs, sizeof(BS), 1, fpj);}if (0 == i){printf("\n你没有借过该图书 需要借阅后才能归还哦...");system("pause");return;}fclose(p);fclose(fpj);p = fopen("jie.txt", "rb+");fpj = fopen("jieyue.txt", "wb+");fread(&bs, sizeof(BS), 1, p);while (!feof(p)){fwrite(&bs, sizeof(BS), 1, fpj);fread(&bs, sizeof(BS), 1, p);}fclose(p);//改变book.txt里的数据p = fopen("jie.txt", "wb+");fread(&bo, sizeof(BK), 1, fp);while (!feof(fp)){if (strcmp(bnum, bo.num) == 0)bo.loan--;fwrite(&bo, sizeof(BK), 1, p);fread(&bo, sizeof(BK), 1, fp);}fclose(p);fclose(fp);p = fopen("jie.txt", "rb+");fp = fopen("book.txt", "wb+");fread(&bo, sizeof(BK), 1, p);while (!feof(p)){fwrite(&bo, sizeof(BK), 1, fp);fread(&bo, sizeof(BK), 1, p);}fclose(p);//改变student.txt里的数p = fopen("jie.txt", "wb+");rewind(fps);fread(&st, sizeof(ST), 1, fps);while (!feof(fps)){if (strcmp(snum, st.num) == 0)st.borr--;fwrite(&st, sizeof(ST), 1, p);fread(&st, sizeof(ST), 1, fps);}fclose(p);fclose(fps);p = fopen("jie.txt", "rb+");fps = fopen("student.txt", "wb+");fread(&st, sizeof(ST), 1, p);while (!feof(p)){fwrite(&st, sizeof(ST), 1, fps);fread(&st, sizeof(ST), 1, p);}printf("\n归还成功 多来借书哦... *^_^*");system("pause");}void BS_Book(void)//借阅查询{char num[10];BK bo;BS bs;printf("\n请输入你的学号:");scanf("%s", num);printf("\n您借阅了以下图书:\n\n");printf("\t书名编号作者价格出版社 类别原始库存 借出\n");fread(&bs, sizeof(BS), 1, fpj);while (!feof(fpj)){if (strcmp(bs.Snum, num) == 0){fread(&bo, sizeof(BK),1, fp);while (!feof(fp)){if (strcmp(bs.Bnum, bo.num) == 0){printf("\t%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n", bo.name, bo.num, bo.writer, bo.prise, bo.press, bo.sort, bo.inven, bo.loan);}fread(&bo, sizeof(BK), 1, fp);}}fread(&bs, sizeof(BS), 1, fpj);}printf("\n查询完毕... !\n\n");system("pause");}int Contrast(char *p, char *p1)//对比{int bao = 0, fan = 1;for (i = 0; i<(int)strlen(p1); i++){if (p[0] == p1[i]){bao = i;break;}}if ((int)strlen(p)>(int)strlen(p1) - bao + 1)return 0;elsefor (i = 0; i<(int)strlen(p); i++){if (p[i] != p1[bao + i])fan = 0;}return fan;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。