c语言课程设计报告图书管理系统_第1页
c语言课程设计报告图书管理系统_第2页
c语言课程设计报告图书管理系统_第3页
c语言课程设计报告图书管理系统_第4页
c语言课程设计报告图书管理系统_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章§ 1.1 题目描述图书管理系统设计:【要求】图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。试设计一图书管理系统,使之能提供以下功能:( 1) 新图书基本信息的输入;( 2) 图书基本信息的查询;( 3) 对撤销图书信息的删除;( 4) 办理借书手续;( 5) 办理还书手续;【提示】建立图书馆里信息结构体,结构体成员包括图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号。存在状态设为整型,可用不同数字代表借还状态。借书和还书手续要注意修改结构体的成员变量存在状态的值。§ 1.2 算法设计1设计思想:在整个系统编写的

2、过程中,涉及了较多 C 语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。由此进一步加深、巩固了所学的课程的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,参考了学校图书馆的图书管理系统,实现了程序的模块化、结构化。在主函数中调用各种函数,操作界面简单,易操作,人机互动性较强。2实现注释:这个实用的小型图书管理系统程序以结构体数组指针操作完成,并实现文件信息的录入、修改和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。本图书管理系统分为管理员和学生两个部分,其基本功能包括了对图书信息的

3、存储、查询、添加、删除和借书、还书手续办理等。查询时可按书名、编号等方式查询,找到后输出这本书的所有信息。可查询图书的在库状态,方便用户进行借书、还书操作。在借书还书成功后图书的在库状态自动改变,并更新信息到数据库。系统中主要的数据结构就是图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。在处理过程中各项可以作为一本图书的不同属性来进行处理。3结构体系设计图 1.1 :主函数结构;图 1.2 :新书信息录入流程;图 1.3 :图书信息查询(管理员)流程;图 1.4 :图书信息查询(学生)流程;图 1.5 :图书信息删除流程;图 1.6 :办理借书手续流程;图 1.7 :办理还

4、书手续流程;§ 1.3 程序设计及代码分析1程序设计:下面,我大致介绍一下我的系统的主要功能和注意事项:1 . 管理员登陆(密码:123) ,2 . 学生登陆, 0. 退出系统;选择 1 后进入管理员系统, 验证密码成功后显示管理员功能菜单, 按数字键选择所需服务。管理员功能菜单中, 1. 新书信息录入, 2. 图书信息查询, 3. 图书信息删除,4 . 返回主菜单, 0. 退出系统;当出现“请选择”时,输入选项前的数字,输完之后按回车(下同) 。首次运行系统需要先选择 1 录入库存书籍信息,图书各信息项须用空格键隔开,输入完毕后信息自动储存并更新至数据库,然后再选择其他操作。当选择

5、 3 时会进入图书信息删除,在这里可以选择删除图书信息等操作,需要注意的是每次执行删除操作需要手动选择保存图书信息的操作,不然磁盘文件信息不会改变。选择 2 后进入学生系统,然后显示学生功能菜单,按数字键选择所需服务。学生功能菜单中, 1. 图书信息查询, 2. 办理借书手续, 3. 办理函数手续, 4. 返回主菜单,0. 退出系统;当出现“请选择”时,输入选项前的数字。当进入办理借书和还书手续功能时需要注意的是每次执行操作需要手动选择确认等操作,否子磁盘文件信息不会改变。所有信息最后均以磁盘文件方式保存,而且格式固定,输入和输出均按这种格式,用户在使用时必须要按这种格式输入,否则会出现文件信

6、息错误。2代码分析:/*源程序代码*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define LONG sizeof(struct Book)struct Bookchar title100;char author50;char press100;char year5;char claim_number30;int collection;int can_borrow;char unit_price10;char student_name50;char sex5;char student_id2

7、0;long long int number;*void main_meun();/ 【主界面函数】void manager_menu();/void student_meun();/int book_add(int back);/int search_2(int back);/int search_1(int back);/int search_number(int back);/int search_title(int back);/【管理员功能界面函数】【学生功能界面函数】【新书信息录入函数】【图书信息查询(学生版) 】【图书信息查询函数(管理员版) 】【按编号查询函数(管理员版)【按书

8、名查询函数(管理员版)void search_menu();/ 【图书查询函数界面(管理员版) 】int book_delete(int back);/ 【图书信息删除函数】int borrow(int back);/【办理借书手续函数】int return_book(int back);/【办理还书手续函数】/* 主函数 */int main()int a,b,c,z;int back=0,back2=0,back3=0;A:system("cls");/A 为一个标志位,用于从子函数返回主界面back=0;back2=0;back3=0;main_meun();/ 【主

9、界面函数】while(1)/ 主程序循环运行scanf("%d",&a);switch(a)case 1:/ 进入管理员界面printf(" 登陆密码【123】 : ");scanf("%d",&z);if(z!=123)goto A;B:system("cls");/B 为一个标志位,用于从子函数返回管理员功能界面back=0;back2=0;back3=0;manager_menu();/【管理员功能界面函数】 while(1)scanf("%d",&b);switc

10、h(b)case 1:back2=book_add(back2);if(back2=1)goto B;/进入新书信息录入case 2:back2=search_1(back2);if(back2=1)goto B;/进入图书信息查询case_3:back2=book_delete(back2);if(back2=1)goto B;/ 进入图书信息删除case 4:goto A;/ 返回主菜单case 0:/退出系统system("cls");printf("An");printf("感谢使用,再见!n");printf("n

11、");exit(0);break;case 2:/ 进入学生界面C:system("cls");/C 为一个标志位,用于从子函数返回学生功能界面back=0;back2=0;back3=0;student_meun();/ 【学生功能界面函数】while(1)scanf("%d",&c);switch(c)case 1: back3=search_2(back3);if(back3=1)goto C; / 进入图书信息查询case 2: back3=borrow(back3);if(back3=1)goto C; / 办理借书手case

12、 3: back3=return_book(back3);if(back3=1)goto C; /办理还书手case 4:goto A;/ 返回主菜单case 0:/ 退出系统system("cls");printf("n");printf("-=感谢使用,再见! =-n");printf("n");exit(0);break;case 0:/ 退出系统system("cls");printf("n");printf("-=感谢使用,再见! =-n");p

13、rintf("n");exit(0);/*其他函数*/void main_meun()/【主界面函数】(printf(" =n");printf(" |n");printf(" |欢迎使用图书管理系统|n");printf(" |n");printf(" |n");printf(" |1,管理员登陆2,学生登陆0.退出系统|n");printf(" |n");printf(" =n");printf("请选

14、择:");) void manager_menu()/【管理员功能界面函数】printf("n");printf(" |n");printf(" |1.新书信息录入|n");printf(" |n");printf(" |2.图书信息查询|n");printf(" |n");printf(" |3.图书信息删除|n");printf(" |n");printf(" |4.返回主菜单|n");printf(&

15、quot; |n");printf(" |0.退出系统|n");printf(" |n");printf(" =n");printf("请选择:");void student_meun()/【学生功能界面函数】(.xr/ni. h .piinti(n);printf(" |n");printf(" |1.图书信息查询|n");printf(" |n");printf(" |2.办理借书手续|n");printf("

16、|n");printf(" |3.办理还书手续|n");printf(" |n");printf(" |4.返回主菜单|n");printf(" |n");printf(" |0.退出系统|n");printf(" |printf("|n");n");printf("请选择:");int book_add(int back)/ 【新书信息录入函数】FILE *fp;struct Book *p1;long long int a

17、,b;int n;fp=fopen(" 图书信息数据库.txt","a+");if(fp=NULL)printf(" 数据库打开错误!请检查.n");exit(0);while(1)A:system("cls");/A 为一个标志位,用于返回本函数首界面p1=(struct Book*)malloc(LONG);fseek(fp,-11,SEEK_END);fscanf(fp,"%lld",&a);fseek(fp,0,SEEK_END);printf("上一本图书编号:%ll

18、dn",a);printf("请输入新图书信息:n");printf("= =n");printf("书名作者 出版社年份 索取号 单价数量n");printf("n");p1->number=a+1;strcpy(p1->student_id," 未知)strcpy(p1->student_name," 未知");strcpy(p1->sex,”未知)scanf("%s %s %s %s %s %s %d",p1->titl

19、e,p1->author,p1->press,p1->year,p1->c laim_number,p1->unit_price,&p1->collection);p1->can_borrow=p1->collection;fprintf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lldn",p1->title,p1->author, p1->press,p1->year,p1->claim_number,p1->unit_price,p1->

20、collection,p1->can_borrow,p1->student_name,p1->sex,p1->student_id,p1->number);fflush(fp);if(1<p1->collection)for(b=2;b<=p1->collection;b+)p1->number=a+b;fprintf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lldn",p1->title,p1->author, p1->press,p1->year,p1

21、->claim_number,p1->unit_price,p1->collection,p1->can_borr ow,p1->student_name,p1->sex,p1->student_id,p1->number);fflush(fp);printf("a");printf(" n");printf("1.继续录入2. 结束录入n");printf("n");printf(" 请选择: ");scanf("%d",&a

22、mp;n);switch(n)case 1:goto A;case 2:fclose(fp);back=1;return(back);int search_2(int back)/ 【进入图书信息查询(学生版) 】FILE *fp;char title100;struct Book *p;int a1=0,b1;A:system("cls");/A为一个标志位,用于返回本函数首界面back=0;printf("请输入书名:");scanf("%s",title);fp=fopen("图书信息数据库.txt",&qu

23、ot;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 %lldn",p->title,p->author,p-> press,p->year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p-

24、>s tudent_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%dn",p->title,p->author,p->press,p->ye ar,p->claim_n

25、umber,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)

26、;case 0:system("cls");printf("n");printf("-=感谢使用,再见! =-n");printf("n");exit(0);if(a1=0)fclose(fp);printf("a n 未找到与条件相符的图书! nn");printf(" n");printf(" 1. 继续搜索 2. 返回学生功能菜单0. 退出系统 n");printf(" n");printf(" 请选择: ")

27、;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)/int a,back3;A:system("cls");/A 为一个标志位,用于返回本函数首界面back=0;bac

28、k3=0;search_menu();scanf("%d",&a);while(1)switch(a)进入编号查询进入书名查询case 1:back3=search_number(back3);if(back3=1)goto A;/case 2:back3=search_title(back3);if(back3=1)goto A;/case 3:return(back=1);int search_number(int back)/ 【按编号查询函数(管理员版) 】FILE *fp;long long int number;struct Book *p;int b1

29、;A:system("cls");/A 为一个标志位,用于返回本函数首界面back=0;printf(" 请输入图书编号(数字) : ");scanf("%lld",&number);fp=fopen(" 图书信息数据库.txt","r");if(fp=NULL)printf(" 数据库打开错误!请检查.n");exit(0);p=(struct Book*)malloc(LONG);while(1)if(feof(fp)fclose(fp);printf("

30、;an 未找到与条件相符的图书! nn");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(&quo

31、t;-= 感谢使用,再见! =-n");printf("n");exit(0);fscanf(fp,"%s %s %s %s %s %s %d %d %s %s %s %lldn",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-&g

32、t;number);if(number=p->number)(fclose(fp);printf("= =nn");printf(" %-6s%-12lld%-8s%-12s%-6s%-8s%s%snn"," 编号:",p->number," 索取号:",p->claim_number," 年份:",p->year," 单价:",p->unit_price);printf(" 书名:snn",p->title);prin

33、tf(" %-6s%-12s%s%snn"," 作者:”,p->author,"出版社:",p->press);printf(" %-6s%-12d%s%dnn"," 馆藏:”,p->collection," 可借: ",p->can_borrow);printf("借书人信息 |%-6s%-10s%-6s%-7s%-7s%snn"," 姓名:",p->student_name,"性别:",p->se

34、x,"学号:",p->student_id);printf("= =n");printf("n");printf("感谢使用,再见!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&qu

35、ot;);n");printf("n");exit(0);int search_title(int back)/ 【按书名查询函数(管理员版) 】FILE *fp;char title100;struct Book *p;int a1,b1;A:system("cls");/A为一个标志位,用于返回本函数首界面back=0;a1=0;printf("请输入书名:");scanf("%s",title);fp=fopen("图书信息数据库.txt","r");if(f

36、p=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 %lldn",p->title,p->author,p-> press,p->year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->s tudent_nam

37、e,p->sex,p->student_id,&p->number);if(strcmp(title,p->title)=0)a1=1;printf(" %-6s%-12lld%-8s%-12s%-6s%-8s%s%snn"," 编号: ",p->number," 索取号:",p->claim_number," 年份:",p->year," 单价:",p->unit_price);printf(" 书名:%sn",p-&

38、gt;title);printf(" %-6s%-12s%s%snn"," 作者:",p->author," 出版社: ",p->press);printf(" %-6s%-12d%s%dn"," 馆藏:”,p->collection," 可借: ",p->can_borrow);printf(" 借书人信息 |%-6s%-10s%-6s%-7s%-7s%snn"," 姓名:",p->student_name,&qu

39、ot;性另",p->sex,"学号:",p->student_id);printf("= =n");if(a1=1)fclose(fp);An");printf("printf(" 1.继续搜索 2. 返回上一级菜单0. 退出系统n");printf(" n");printf(" 请选择: ");scanf("%d",&b1);while(1)switch(b1)case 1:goto A;break;case 2:retur

40、n(back=1);case 0:system("cls");printf("n");printf("感谢使用,再见!n");printf("n");exit(0);if(a1=0)fclose(fp);printf("a n 未找到与书名相符的图书! nn");printf(" n");退出系统printf(" 1. 继续搜索2. 返回上一级菜单0.n");printf(" n");scanf("%d",&

41、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()/【图书查询函数界面(管理员版)】(printf(" =n");printf(" |n");printf(" |1.按图书编号查询|n")

42、;printf(" |n");printf(" |2.按图书名称查询|n");printf(" |n");printf(" |3.返回级菜单|n");printf(" |printf("|n");n");printf(" 请选择: ");int book_delete(int back)/ 【图书信息删除函数】FILE *fp;char title100,d100;struct Book n1000;int i,j;struct Book *p;int a

43、,b,c,e,f;A:system("cls");/A 为一个标志位,用于返回本函数首界面back=0,i=0,j=0,b=0,a=0;printf(" 请输入书名: ");scanf("%s",title);fp=fopen(" 图书信息数据库.txt","r");if(fp=NULL)printf(" 数据库打开错误!请检查.n");exit(0);p=(struct Book*)malloc(LONG);while(!feof(fp)(fscanf(fp,"%

44、s %s %s %s %s %s %d %d %s %s %s %lldn",p->title,p->author,p-> press,p->year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->s tudent_name,p->sex,p->student_id,&p->number);if(strcmp(title,p->title)=0)(a=1;if(strcmp(p->student_n

45、ame," 未知")!=0)b=1;printf("= =nn");printf(" %-6s%-12lld%-8s%-12s%-6s%-8s%s%snn"," 编号: ”,p->number," 索取号:",p->claim_number," 年份:",p->year," 单价:",p->unit_price);printf(" 书名:sn",p->title);printf(" %-6s%-12s%s%

46、snn"," 作者:",p->author,"出版社:",p->press);printf(" %-6s%-12d%s%dn"," 馆藏:",p->collection," 可借:",p->can_borrow);printf(" 借书人信息 |%-6s%-10s%-6s%-7s%-7s%snn"," 姓名:",p->student_name,“性另",p->sex,"学号:",p

47、->student_id);printf("= =n");fclose(fp);if(b=1)fclose(fp);printf("a nn此书正在出借,无法删除信息!nn");printf("n");printf(" 1.重新搜索2.返回管理员功能菜单0.退出系统n");printf("n");printf("请选择:");scanf("%d",&b);while(1)switch(b)case 1:goto A;break;case 2:

48、return(back=1);case 0:system("cls");printf("n");printf("-=感谢使用,再见! =-n");printf("n");exit(0);if(a=1&&b!=1)printf("ann 确认删除? n");printf(" n");printf("1.是 2. 否n");printf(" n");scanf("%d",&c);while(1)s

49、witch(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 %lldn",&ni.title,&ni.author,&ni.press,&ni.year,&ni.claim_number,&ni.unit_price,&ni.co

50、llection ,&ni.can_borrow,&ni.student_name,&ni.sex,&ni.student_id,&ni.number);if(strcmp(title,ni.title)=0)strcpy(d,ni.press);strcpy(ni.press,ni.title);strcpy(ni.title,d);e=ni.number/10000;ni.collection=e;f=ni.number%10000;ni.can_borrow=f;i+=1;j=i;fclose(fp);fp=fopen(" 图书信息数据库

51、.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 %lldn",ni.title,ni.author,ni.press,ni.year,ni.claim_number,ni.unit_price,ni.collection,ni.can_borrow,ni.student_name,ni.sex,ni.student_id,ni.number);f

52、flush(fp);i+=1;j-=1;fclose(fp);system("cls");printf(" n 删除成功! nn");printf("n");printf("感谢使用,再见!统 n");printf("n");printf(" 请选择: ");scanf("%d",&b);while(1)switch(b)case 1:goto A;break;case 2:return(back=1);case 0:system("cl

53、s");printf("n");n");printf("n");exit(0);case 2:return(back=1);if(a!=1)fclose(fp);printf("a n 未找到与书名相符的图书! nn");printf(" n");printf(" 1. 重新搜索 2. 返回管理员功能菜单0. 退出系统 n");printf(" n");printf(" 请选择: ");scanf("%d",&

54、;b);while(1)switch(b)case 1:goto A;break;case 2:return(back=1);case 0:system("cls");printf("n");感谢使用,再见!printf("printf("n");exit(0);int borrow(int back)/ 【办理借书手续函数】FILE *fp;char title100;char student_name50,sex5,student_id20;struct Book *p,n1000;int a,b,c,d,i,j;A:s

55、ystem("cls");/A 为一个标志位,用于返回本函数首界面back=0;a=0;b=0;i=0;j=0;d=0;printf("请输入书名:");scanf("%s",title);fp=fopen("图书信息数据库.txt","r");if(fp=NULL)printf("数据库打开错误!请检查.n");exit(0);p=(struct Book*)malloc(LONG);while(!feof(fp)fscanf(fp,"%s %s %s %s %s

56、 %s %d %d %s %s %s %lldn",p->title,p->author,p-> press,p->year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->s tudent_name,p->sex,p->student_id,&p->number);if(strcmp(title,p->title)=0)a=1;if(p->can_borrow!=0)b=1;printf("

57、;n");printf(" 书名作者 出版社年份 索取号 馆藏 可借 n");printf("n");printf("%-28s%-8s%-19s%-6s%-11s%-5d%dn",p->title,p->author,p->press,p->ye ar,p->claim_number,p->collection,p->can_borrow);break;if(a!=1)fclose(fp);printf("a n 无该书信息! nn");printf("

58、; 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"

59、;);exit(0);if(b!=1)fclose(fp);printf("a n 无法办理该书借阅手续! nn");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("ann是否办理该书借书手续?n");printf("n");printf("1.是 2. 否n");printf("n");scanf("%d",&c);while(1)(switch(c)(case 1:(system("cls&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论