《图书管理系统 (c语言)》由会员分享,可在线阅读,更多相关《图书管理系统 (c语言)(18页珍藏版)》请在金锄头文库上搜索。
1、 程序设计方法课程设计程序设计方法课程设计问题提出:问题提出: 设计一个图书馆的图书管理,具体要求如下: 1录入新采购的图书信息,做成文件book.in,要求有良好的输 入界面; 2查询各种图书的基本信息,设计出良好的查询界面; 3按图书编号进行排序,将排好序的图书信息输出到文件 book.out中。 4统计各类图书册数、图书馆的图书总册数。 5统计图书的借阅情况。1. 需求分析对于图书馆的管理系统,应该满足以下的用户需求: 用户能够增加和删除一些图书。 1用户根据一些基本信息查询相应的图书,系统可以准确输出 2 所有符合条件的图书信息。 用户可以借阅和归还图书馆中的图书。 3系统可以对图书做
2、出统计,包括图书总数,各类图书数目, 4 图书的借阅情况。 2. 设计分析定义图书结构体,其成员包括书名、作者、类型、出版社、 价格、是否借阅(整型,1 为借出,0 为未借)、编号。 输入新书时,利用结构体储存书的信息,同时将新书信息 以二进制写入 book.in 文件中,录入结束后,将新书按输入顺 序写入 book.out 中,并且以原来存书的最大编号为基准对新 书进行编号,这样可以保证 book.out 文件存储的图书都是按 编号进行排序的。 查找图书时,获得所查书目基本信息后,以二进制依次读 取文件中的每一本图书信息,并与输入信息相比较,输出符合 信息的图书。 删除图书时,通过输入的图书
3、编号(编号可通过查找图书 获得)查找相应图书,删除相应数据并保存。 借阅或归还图书时,通过图书编号(编号可通过查找图书 获得)查找相应图书,修改图书的属性(是否借阅)并保存。 实现统计功能时,以二进制依次读取文件中的每一本图书 信息,设置变量统计图书类型、借阅情况和图书总数,到文件 结尾时,输出各个变量的值。3. 系统设计(流程图表示)是开始欢迎界面打印主菜单输入选择 nn=1将新书保存至 book.in输入新书信息是输出图书信息输入查找图书信息将 book.in 中图书按编号保存至 book.out在 book.out 中能找到相应图书是选择查找方式n=2是n=3输入删除图书信息(编号)否否
4、否出错提示4. 程序代码主函数main() int i,a;是是统计图书借阅情况并输出n=4删除相应图书输入图书信息(编号)对图书相应属性进行修改选择借书或还书操作统计 book.out 中总书数并输出统计各类型书数并输出结束是n=5否否否是n=0是否否在 book.out 中能找到相应图书出错提示否在 book.out 中能找到相应图书出错提示Struct book standard=“a“,“a“,“000000000“,0,0,“a“,“others“;FILE *fp;if(fp=fopen(“book.out“,“r“)=NULL)if(fp=fopen(“book.out“,“wb
5、“)=NULL)printf(“wrong!“);exit(0);fwrite(fclose(fp);for(i=0;i=0;i-)if(ssi=58) ssi=0;ssi-1+; void minusone(char ss) /*图书编号减一*/ int i; if(ss8=0) ss8=9;ss7=ss7-1;else ss8=ss8-1;for(i=7;i=0;i-)if(ssi=47) ssi=9;ssi-1-; 函数 save_books()将 book.in 的数据写入 book.out 中void save_books() /*保存图书*/ FILE *fp1,*fp2; str
6、uct book oldbook,newbook; char ssl10; int n,i; if(fp2=fopen(“book.out“,“rb+“)=NULL) printf(“wrong!“); exit(0); if(fp1=fopen(“book.in“,“rb“)=NULL) printf(“wrong!“); exit(0); fseek(fp2,-100L,2); fread( fclose(fp2);fseek(fp1,-1L,2); fscanf(fp1,“%d“, rewind(fp1); if(fp2=fopen(“book.out“,“ab“)=NULL) prin
7、tf(“wrong!“); exit(0); for(i=1;i=n;i+) fread( addone(ssl); strcpy(newbook.number,ssl); /*为新图书编号*/fwrite( fclose(fp1); fclose(fp2); 函数 input_book 将新书的信息读入 book.in 中 void input_books() /*从键盘输入图书函数*/ FILE *fp; struct book newbook; int a=121,n=0;if(fp=fopen(“book.in“,“wb“)=NULL)printf(“wrong!“);exit(0);
8、while(a=121) clrscr();n+;printf(“New book %d:n“,n);printf(“Name:“);scanf(“%s“,newbook.name);printf(“Author:“);scanf(“%s“,newbook.author);printf(“Price:“);scanf(“%f“,printf(“Type:“);scanf(“%s“,newbook.type);printf(“Press:“);scanf(“%s“,newbook.press);newbook.isborrowed=0;strcpy(newbook.number,“0000000
9、00“);fwrite( /*将图书保存 到 book.in 中*/printf(“continue ? (y/n)“);a=getch();clrscr();fprintf(fp,“%d“,n);printf(“Successfully saved!nPress any key to back“);fclose(fp);save_books();getch(); 函数 delete_book 实现对图书的删除操作void delete_book() /*删除图书函数*/ long int totalbook,i; int done=0; char a=y,ss10; FILE *fp1,*f
10、p2; struct book sbook; clrscr();if(fp1=fopen(“book.out“,“rb“)=NULL) printf(“wrong!“); exit(0); if(fp2=fopen(“book1.out“,“wb“)=NULL) printf(“wrong!“);exit(0); fseek(fp1,-100L,2); fread( totalbook=atol(sbook.number); /*获得图书数目*/ rewind(fp1);while(a=121) clrscr(); printf(“Please input the number of the
11、book:“);scanf(“%s“,ss); clrscr(); fread( fwrite( for(i=1;i=totalbook;i+=1) fread( /*删除操作*/if(strcmp(sbook.number,ss)=0) /*将删除过 相应图书的数据写入book1.out*/done=1;printf(“The information of the book:n“);printf(“Name:%sn“,sbook.name);printf(“Author:%sn“,sbook.author);printf(“Number:%sn“,sbook.number);printf(“
12、Price:%-9.2fn“,sbook.price);printf(“Press:%sn“,sbook.press);printf(“Are you sure to delete the book?(y/n)“) ;a=getch();if(a!=121) break;elseif(done=0) fwrite(else minusone(sbook.number);fwrite( fclose(fp1); fclose(fp2); if(done=0) printf(“Wrong number!“); if(done=1 clrscr();printf(“Successfully dele
13、ted!n“); getch(); clrscr(); printf(“Continue ? (y/n)“); a=getch(); remove(“book1.out“); void exchange(long int i,long int totalbook) /*将 book1.out 的数 据写入 book.out 中*/ FILE *fp1,*fp2; struct book sbook; if(fp1=fopen(“book1.out“,“rb“)=NULL) printf(“wrong!“);exit(0); fp2=fopen(“book.out“,“wb“);for(i=1;
14、i=totalbook;i+=1) fread(fwrite(fclose(fp1);fclose(fp2);函数 search_books 实现对图书的查找void search_books() /*查找图书函数*/ int n,total=0; long int totalbook,i; char item20; char ss=y; FILE *fp; struct book sbook; if(fp=fopen(“book.out“,“rb“)=NULL) printf(“wrong!“); exit(0); fseek(fp,-100L,2); fread( totalbook=at
15、ol(sbook.number); fseek(fp,100L,0); while(ss=121) clrscr(); printf(“Please select a way to search:n“); /*查找方式设置 */ printf(“1:namen2:authorn3:numbern“); n=getch();switch(n) case 49: clrscr();printf(“Please input the name of the book:n“); scanf(“%s“,item); clrscr(); printf(“n“);for(i=1;i=totalbook;i+=1) fread(if(strcmp(sbook.name,item)=0) /*打印图书信息*/ printf(“Book %dn“,total+1);printf(