当前位置:文档之家› c语言课程设计报告·图书管理系统

c语言课程设计报告·图书管理系统

第一章§题目描述图书管理系统设计:【要求】图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。

试设计一图书管理系统,使之能提供以下功能:(1)新图书基本信息的输入;(2)图书基本信息的查询;(3)对撤销图书信息的删除;(4)办理借书手续;(5)办理还书手续;【提示】建立图书馆里信息结构体,结构体成员包括图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号。

存在状态设为整型,可用不同数字代表借还状态。

借书和还书手续要注意修改结构体的成员变量存在状态的值。

§算法设计1.设计思想:在整个系统编写的过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。

由此进一步加深、巩固了所学的课程的基本理论知识,培养了综合分析问题、解决问题的能力。

在设计程序时,参考了学校图书馆的图书管理系统,实现了程序的模块化、结构化。

在主函数中调用各种函数,操作界面简单,易操作,人机互动性较强。

2.实现注释:这个实用的小型图书管理系统程序以结构体数组指针操作完成,并实现文件信息的录入、修改和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。

本图书管理系统分为管理员和学生两个部分,其基本功能包括了对图书信息的存储、查询、添加、删除和借书、还书手续办理等。

查询时可按书名、编号等方式查询,找到后输出这本书的所有信息。

可查询图书的在库状态,方便用户进行借书、还书操作。

在借书还书成功后图书的在库状态自动改变,并更新信息到数据库。

系统中主要的数据结构就是图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。

在处理过程中各项可以作为一本图书的不同属性来进行处理。

3.结构体系设计图:主函数结构;图:新书信息录入流程;图:图书信息查询(管理员)流程;图:图书信息查询(学生)流程;图:图书信息删除流程;图:办理借书手续流程;图:办理还书手续流程;§程序设计及代码分析1.程序设计:下面,我大致介绍一下我的系统的主要功能和注意事项:当运行此程序时,首先进入系统主界面,然后可以选择[1].管理员登陆(密码:123),[2].学生登陆,[0].退出系统;选择[1]后进入管理员系统,验证密码成功后显示管理员功能菜单,按数字键选择所需服务。

管理员功能菜单中,[1].新书信息录入,[2].图书信息查询,[3].图书信息删除,[4].返回主菜单,[0].退出系统;当出现“请选择”时,输入选项前的数字,输完之后按回车(下同)。

首次运行系统需要先选择[1]录入库存书籍信息,图书各信息项须用空格键隔开,输入完毕后信息自动储存并更新至数据库,然后再选择其他操作。

当选择[3]时会进入图书信息删除,在这里可以选择删除图书信息等操作,需要注意的是每次执行删除操作需要手动选择保存图书信息的操作,不然磁盘文件信息不会改变。

选择[2]后进入学生系统,然后显示学生功能菜单,按数字键选择所需服务。

学生功能菜单中,[1].图书信息查询,[2].办理借书手续,[3].办理函数手续,[4].返回主菜单,[0].退出系统;当出现“请选择”时,输入选项前的数字。

当进入办理借书和还书手续功能时需要注意的是每次执行操作需要手动选择确认等操作,否子磁盘文件信息不会改变。

所有信息最后均以磁盘文件方式保存,而且格式固定,输入和输出均按这种格式,用户在使用时必须要按这种格式输入,否则会出现文件信息错误。

2.代码分析:/**********源程序代码**********/#include<>#include<>#include<>#define LONG sizeof(struct Book)struct Book{char title[100];char author[50];char press[100];char year[5];char claim_number[30];int collection;int can_borrow;char unit_price[10];char student_name[50];char sex[5];char student_id[20];long long int number;};/**********函数声明**********/void main_meun();理员登陆 [2].学生登陆 [0].退出系统 |\n");printf(" | |\n");printf(" ============================================================\n");printf("请选择:");}void manager_menu()书信息录入 |\n");printf(" | |\n");printf(" | [2].图书信息查询 |\n");printf(" | |\n");printf(" | [3].图书信息删除 |\n");printf(" | |\n");printf(" | [4].返回主菜单 |\n");printf(" | |\n");printf(" | [0].退出系统 |\n");printf(" | |\n");printf(" ============================================================\n");printf("请选择:");}void student_meun()书信息查询 |\n");printf(" | |\n");printf(" | [2].办理借书手续 |\n");printf(" | |\n");printf(" | [3].办理还书手续 |\n");printf(" | |\n");printf(" | [4].返回主菜单 |\n");printf(" | |\n");printf(" | [0].退出系统 |\n");printf(" | |\n");printf(" ============================================================\n");printf("请选择:");}int book_add(int back)xt","a+");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}while(1){A:system("cls");续录入 [2].结束录入 \n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&n);switch(n){case 1:goto A;case 2:{fclose(fp);back=1;return(back);}}}}int search_2(int back)xt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}p=(struct Book*)malloc(LONG);while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",p->title,p->author,p->press,p-> year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->student_name,p->sex ,p->student_id,&p->number);if(strcmp(title,p->title)==0){a1=1;printf("=========================================================================== ====\n");printf("书名作者出版社年份索取号馆藏可借\n");printf("-------------------------------------------------------------------------------\n");printf("%-28s%-8s%-19s%-6s%-11s%-5d%d\n",p->title,p->author,p->press,p->year,p->cla im_number,p->collection,p->can_borrow);break;}}if(a1==1){fclose(fp);printf("\n");printf(" -------------------------------------------------------\n");printf(" [1].继续搜索 [2].返回学生功能菜单 [0].退出系统 \n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&b1);while(1){switch(b1){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}if(a1==0){fclose(fp);printf("\a \n 未找到与条件相符的图书!\n\n");printf(" -------------------------------------------------------\n");printf(" [1].继续搜索 [2].返回学生功能菜单 [0].退出系统 \n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&b1);while(1){switch(b1){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}}int search_1(int back)xt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}p=(struct Book*)malloc(LONG);while(1){if(feof(fp)){fclose(fp);printf("\a\n 未找到与条件相符的图书!\n\n");printf(" -------------------------------------------------------\n");printf(" [1].继续搜索 [2].返回上一级菜单 [0].退出系统\n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&b1);while(1){switch(b1){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",p->title,p->author,p->press,p->year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->student_name,p->sex,p->student_id,&p->number);if(number==p->number){fclose(fp);printf("===============================================================================\n\n");printf(" %-6s%-12lld%-8s%-12s%-6s%-8s%s%s\n\n","编号:",p->number,"索取号:",p->claim_number,"年份:",p->year,"单价:",p->unit_price);printf(" 书名:%s\n\n",p->title);printf(" %-6s%-12s%s%s\n\n","作者:",p->author,"出版社:",p->press);printf(" %-6s%-12d%s%d\n\n","馆藏:",p->collection,"可借:",p->can_borrow);printf(" 借书人信息|| %-6s%-10s%-6s%-7s%-7s%s\n\n","姓名:",p->student_name,"性别:",p->sex,"学号:",p->student_id);printf("===============================================================================\n");printf(" -------------------------------------------------------\n");printf(" [1].继续搜索 [2].返回上一级菜单 [0].退出系统\n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&b1);while(1){switch(b1){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}}}int search_title(int back)xt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}p=(struct Book*)malloc(LONG);while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",p->title,p->author,p->press,p->year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->student_name,p->sex,p->student_id,&p->number);if(strcmp(title,p->title)==0){a1=1;printf("===============================================================================\n\n");printf(" %-6s%-12lld%-8s%-12s%-6s%-8s%s%s\n\n","编号:",p->number,"索取号:",p->claim_number,"年份:",p->year,"单价:",p->unit_price);printf(" 书名:%s\n",p->title);printf(" %-6s%-12s%s%s\n\n","作者:",p->author,"出版社:",p->press);printf(" %-6s%-12d%s%d\n","馆藏:",p->collection,"可借:",p->can_borrow);printf(" 借书人信息|| %-6s%-10s%-6s%-7s%-7s%s\n\n","姓名:",p->student_name,"性别:",p->sex,"学号:",p->student_id);printf("===============================================================================\n");}}if(a1==1){fclose(fp);printf(" -------------------------------------------------------\n");printf(" [1].继续搜索 [2].返回上一级菜单 [0].退出系统\n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&b1);while(1){switch(b1){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}if(a1==0){fclose(fp);printf("\a \n未找到与书名相符的图书!\n\n");printf(" -------------------------------------------------------\n");printf(" [1].继续搜索 [2].返回上一级菜单 [0].退出系统\n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&b1);while(1){switch(b1){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}}void search_menu()图书编号查询 |\n");printf(" | |\n");printf(" | [2].按图书名称查询 |\n");printf(" | |\n");printf(" | [3].返回上一级菜单 |\n");printf(" | |\n");printf(" ============================================================\n");printf("请选择:");}int book_delete(int back)xt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}p=(struct Book*)malloc(LONG);while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",p->title,p->author,p->press,p-> year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->student_name,p->sex ,p->student_id,&p->number);if(strcmp(title,p->title)==0){a=1;if(strcmp(p->student_name,"未知")!=0)b=1;printf("=========================================================================== ====\n\n");printf(" %-6s%-12lld%-8s%-12s%-6s%-8s%s%s\n\n","编号:",p->number,"索取号:",p->claim_number,"年份:",p->year,"单价:",p->unit_price);printf(" 书名:%s\n",p->title);printf(" %-6s%-12s%s%s\n\n","作者:",p->author,"出版社:",p->press);printf(" %-6s%-12d%s%d\n","馆藏:",p->collection,"可借:",p->can_borrow);printf(" 借书人信息|| %-6s%-10s%-6s%-7s%-7s%s\n\n","姓名:",p->student_name,"性别:",p->sex,"学号:",p->student_id);printf("=========================================================================== ====\n");}}fclose(fp);if(b==1){fclose(fp);printf("\a \n\n此书正在出借,无法删除信息!\n\n");printf(" -------------------------------------------------------\n");printf(" [1].重新搜索 [2].返回管理员功能菜单 [0].退出系统 \n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&b);while(1){switch(b){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}if(a==1&&b!=1){printf("\a\n\n 确认删除\n");printf(" -------------------------------------------------------\n");printf(" [1].是 [2].否 \n");printf(" -------------------------------------------------------\n");scanf("%d",&c);while(1){switch(c){case 1:{fp=fopen("图书信息数据库.txt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",&n[i].title,&n[i].author,&n[i]. press,&n[i].year,&n[i].claim_number,&n[i].unit_price,&n[i].collection,&n[i].can_borrow, &n[i].student_name,&n[i].sex,&n[i].student_id,&n[i].number);if(strcmp(title,n[i].title)==0){strcpy(d,n[i].press);strcpy(n[i].press,n[i].title);strcpy(n[i].title,d);e=n[i].number/10000;n[i].collection=e;f=n[i].number%10000;n[i].can_borrow=f;}i+=1;}j=i;fclose(fp);fp=fopen("图书信息数据库.txt","w");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}i=0;while(j!=0){fprintf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",n[i].title,n[i].author,n[i].pr ess,n[i].year,n[i].claim_number,n[i].unit_price,n[i].collection,n[i].can_borrow,n[i].st udent_name,n[i].sex,n[i].student_id,n[i].number);fflush(fp);i+=1;j-=1;}fclose(fp);system("cls");printf(" \n 删除成功!\n\n");printf("-------------------------------------------------------\n");printf(" [1].继续删除 [2].返回管理员功能菜单 [0].退出系统\n");printf("-------------------------------------------------------\n");printf("请选择:");scanf("%d",&b);while(1){switch(b){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}case 2:return(back=1);}}}if(a!=1){fclose(fp);printf("\a \n 未找到与书名相符的图书!\n\n");printf(" -------------------------------------------------------\n");printf(" [1].重新搜索 [2].返回管理员功能菜单 [0].退出系统 \n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&b);while(1){switch(b){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =-\n");printf("------------------------------------------------------------\n");exit(0);}}}}int borrow(int back)xt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}p=(struct Book*)malloc(LONG);while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",p->title,p->author,p->press,p-> year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->student_name,p->sex ,p->student_id,&p->number);if(strcmp(title,p->title)==0){a=1;if(p->can_borrow!=0)b=1;printf("=========================================================================== ====\n");printf("书名作者出版社年份索取号馆藏可借\n");printf("-------------------------------------------------------------------------------\n");printf("%-28s%-8s%-19s%-6s%-11s%-5d%d\n",p->title,p->author,p->press,p->year,p->cla im_number,p->collection,p->can_borrow);break;}}if(a!=1){fclose(fp);printf("\a \n 无该书信息!\n\n");printf(" -------------------------------------------------------\n");printf(" [1].继续搜索 [2].返回学生功能菜单 [0].退出系统 \n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&c);while(1){switch(c){case 1:goto A;case 2:return(back=1);{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}if(b!=1){fclose(fp);printf("\a \n 无法办理该书借阅手续!\n\n");printf(" -------------------------------------------------------\n");printf(" [1].继续搜索 [2].返回学生功能菜单 [0].退出系统 \n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&c);while(1){switch(c){case 1:goto A;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}if(b==1){printf("\a\n\n 是否办理该书借书手续\n");printf(" -------------------------------------------------------\n");printf(" [1].是 [2].否 \n");printf(" -------------------------------------------------------\n");scanf("%d",&c);while(1){switch(c){case 1:{system("cls");printf("请输入你的个人信息:\n");printf("=======================================================\n");printf(" 姓名性别学号\n");printf("-------------------------------------------------------\n");scanf("%s %s %s",student_name,sex,student_id);fp=fopen("图书信息数据库.txt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",&n[i].title,&n[i].author,&n[i]. press,&n[i].year,&n[i].claim_number,&n[i].unit_price,&n[i].collection,&n[i].can_borrow, &n[i].student_name,&n[i].sex,&n[i].student_id,&n[i].number);if(strcmp(title,n[i].title)==0){if(d!=1&&strcmp(n[i].student_name,"未知")==0){strcpy(n[i].student_name,student_name);strcpy(n[i].sex,sex);strcpy(n[i].student_id,student_id);d=1;}n[i].can_borrow-=1;}i+=1;}fclose(fp);j=i;fp=fopen("图书信息数据库.txt","w");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}i=0;while(j!=0){fprintf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",n[i].title,n[i].author,n[i].press,n[i].year,n[i].claim_number,n[i].unit_price,n[i].collection,n[i].can_borrow,n[i].student_name,n[i].sex,n[i].student_id,n[i].number);fflush(fp);i+=1;j-=1;}fclose(fp);system("cls");printf(" \n 借书办理成功!\n\n");printf("-------------------------------------------------------\n");printf(" [1].继续借书 [2].返回学生功能菜单 [0].退出系统\n");printf("-------------------------------------------------------\n");printf("请选择:");scanf("%d",&c);while(1){switch(c){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}case 2:return(back=1);}}}}int return_book(int back)xt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}p=(struct Book*)malloc(LONG);printf("你目前的借书情况:\n");printf("=========================================================================== ====\n");printf("书名作者出版社年份索取号馆藏可借\n");printf("-------------------------------------------------------------------------------\n");while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",p->title,p->author,p->press,p-> year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->student_name,p->sex ,p->student_id,&p->number);if(strcmp(student_name,p->student_name)==0){a=1;printf("%-28s%-8s%-19s%-6s%-11s%-5d%d\n",p->title,p->author,p->press,p->year,p->cla im_number,p->collection,p->can_borrow);printf("-------------------------------------------------------------------------------\n");}}fclose(fp);if(a!=1){printf("你目前没有借书记录!\n");printf(" -------------------------------------------------------\n");printf(" [1].返回学生功能菜单 [0].退出系统 \n");printf(" -------------------------------------------------------\n");printf("请选择:");scanf("%d",&c);while(1){switch(c){case 1:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}if(a==1){printf("\n请输入所还图书书名(每次一种):");scanf("%s",title);printf("\a\n\n 是否确认办理该书还书手续\n");printf(" -------------------------------------------------------\n");printf(" [1].是 [2].否 \n");printf(" -------------------------------------------------------\n");printf("请输入:");scanf("%d",&c);while(1){switch(c){case 1:{system("cls");fp=fopen("图书信息数据库.txt","r");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",&n[i].title,&n[i].author,&n[i]. press,&n[i].year,&n[i].claim_number,&n[i].unit_price,&n[i].collection,&n[i].can_borrow, &n[i].student_name,&n[i].sex,&n[i].student_id,&n[i].number);if(strcmp(title,n[i].title)==0){if(strcmp(n[i].student_name,student_name)==0){strcpy(n[i].student_name,"未知");strcpy(n[i].sex,"未知");strcpy(n[i].student_id,"未知");}n[i].can_borrow+=1;}i+=1;}fclose(fp);j=i;fp=fopen("图书信息数据库.txt","w");if(fp==NULL){printf("数据库打开错误!请检查...\n");exit(0);}i=0;while(j!=0){fprintf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lld\n",n[i].title,n[i].author,n[i].press,n[i].year,n[i].claim_number,n[i].unit_price,n[i].collection,n[i].can_borrow,n[i].student_name,n[i].sex,n[i].student_id,n[i].number);fflush(fp);i+=1;j-=1;}fclose(fp);system("cls");printf(" \n 还书办理成功!\n\n");printf("-------------------------------------------------------\n");printf(" [1].继续还书 [2].返回学生功能菜单 [0].退出系统\n");printf("-------------------------------------------------------\n");printf("请选择:");scanf("%d",&c);while(1){switch(c){case 1:goto A;break;case 2:return(back=1);case 0:{system("cls");printf("------------------------------------------------------------\n");printf(" -= 感谢使用,再见! =- \n");printf("------------------------------------------------------------\n");exit(0);}}}}case 2:return(back=1);}}}}§实验数据及运行效果截图运行程序,系统菜单:管理员功能界面:新书信息录入完成:图书信息查询(管理员):按图书名称查询结果:图书信息删除(遇删除图书正在出借情况):学生功能界面:办理还书手续:§设计中出现的错误及解决方法在编写这个图书管理系统中,遇到的最大问题是,对数据库文件信息的定向修改。

相关主题