当前位置:文档之家› 图书管理系统课程报告

图书管理系统课程报告

课程报告课程名称:专业班级:学生姓名:学号:任课教师:学期:课程报告任务书开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。

使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入(2)图书信息浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按书名查询②按作者名查询③按照价钱排序④按出版时间排序等等(4)图书信息的删除与修改扩展功能:可以按照自己的程度进行扩展。

比如(1)简单的权限处理(2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。

(4)模糊查询(5)综合查询(6)统计功能比如统计处某一类别的图书信息或筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。

成绩评定教师:1 需求分析本次实验目的是开发一个图书管理系统,且该图书管理系统中应包含以下基本功能:(1)图书信息录入功能(2)图书信息浏览功能(3)查询功能例如:按书名查询、按作者名查询等等(4)排序功能例如:按照价钱排序、按出版时间排序等等(5)图书信息的删除与修改除此之外,个人还可以根据自己的爱好进行各方面的扩展。

例如权限处理、图书排序等等。

在我们设计自己的程序时不仅可以利用课本上的知识,还可以在互联网上查询有关该类信息,将其学习总结并利用在此次程序设计中。

利用这次程序设计实验,我们可以提高自己的设计和编辑程序的能力、了解一般程序的编写过程,还可以巩固加深我们对C语言程序基本知识的了解与掌握。

我在该实验中不仅利用了课本上的函数知识、文本的输入和读出,还用互联网查阅了相关知识。

如“system("cls")”,用汉语解释就是清屏功能;还有“getch()”函数,输入不读出,不过在利用“getch()”进行密码的改写时老是出错误,就舍弃了该函数。

在利用“system("cls")”时感觉还是很好的,用该函数后不仅可以使程序在运行时美观大方,还可以一眼扫描到我们要找的信息。

而我在我编写的程序中设计了如下的功能:①登陆权限功能②查找全部图书并总图书本数功能③查找每本图书功能④添加图书功能⑤删除图书功能⑥修改图书功能⑦图书排序功能⑧金额管理功能2 概要设计在实验中我主要是用函数来解决该程序的文件模块问题,用函数的嵌套调用来解决各模块间的联系问题。

在编写程序时,我首先用结构数组struct list d[40]来定义图书的各种信息。

如:编号、书名、作者、出版社、类别等等。

然后定义了全局变量number和total用来计算书本总数和金额总量。

而后在主函数中用循环变量中的while语句和分支结构中的switch语句,来编写登录权限;创建文本并用文本的输入和输出语句将图书信息输入文本;用函数的嵌套来将各部分联系下面介绍一下各个部分的程序:1.查看全部图书功能该功能函数名称为:search_allbook。

先定义整形变量:i;而后用system("cls")进行清屏;再输入提示信息“查看全部图书!”,后利用for循环进行循环输出。

最后输出总书本数number。

2.查找每本图书功能该函数名称为find_book。

这个函数也是这样,首先用system("cls")进行清屏处理;然后进行定义:int i, fg=0,char s[20];然后输出:输入图书编号和查找图书!再利用for循环语句将输入的图书编号与该程序中的图书编号相等再输出该本图书的所有信息即图书的编号、书名、作者、出版社、类别、出版时间、价格。

这个程序的流程图与上一流程图差别不大,这里就不再写。

3.添加图书功能该部分函数名称为:add_book。

首先定义int i, count=0, choice3、struct list p和文件指针FILE *fp2,然后进行清屏处理。

然后输出:添加图书!接着依次输入图书的编号、书名、作者、出版社、类别、出版时间、价格。

然后显示是否显示添加后信息,如果选择是则会用switch函数和for循环进行依次输出,最后显示“谢谢您对图书添加!”并且最后以一排星号结束,选择否则会显示“谢谢您对图书添加!”并且最后以一排星号结束。

其函数流程图如下:4.删除图书功能该部分函数名称为:delete_book。

先定义int i, fg= 0,ch;char s[20];和文件指针FILE *fp3,然后利用system("cls")进行清屏处理。

然后输出:删除图书,接着输出“请输入图书编号”,然后利用for循环语句将输入的图书编号与该程序中的图书编号相等,再将这个图书编号所在的图书删除并将信息录入文档。

接着显示“是否显示删除后的信息”,如果选择是则会用switch函数和for循环进行依次输出该图书的编号、书名、作者、出版社、类别、出版时间、价格。

最后以一排星号结束。

选择否也会显示一排星号结束。

该函数的流程图与查看全部图书的流程图类似,这里也不再写出。

5.修改图书功能该函数名称为:xiugai_book。

先定义int i,k;char s[20];和文件指针FILE *fp2,然后利用 system("cls")进行清屏处理。

然后输入要修改图书的编号,将新图书的信息重新输入保存到文档中即可。

6.图书排序功能该函数名称为:paixu_book。

先定义int a;然后用system("cls")进行清屏处理!然后会输出1-按图书编号排序 2-按出版时间排序 3-按图书价格排序,然后根据输入数据会进入不同的子函数。

当选择1时,其函数名称为:num_paixu。

在这个函数中先对变量进行定义:int i,k,index,b和struct list temp。

然后清屏,用for函数进行对图书编号的大小比较,然后利用变量temp将不符合次序的进行交换。

然后显示“排序成功!”和“是否显示排序结果? 1:是 ; 2:否”,如果输入1则会依次输出排序后的图书,最后以一排星号结束。

当选择2当选择3时,其函数名称为:price_paixu。

该函数与选择1时基本类似,在这就不一一叙述了。

7.金额管理功能该函数名称为:cash_manage。

该函数就是将全局变量total输出。

3 详细设计①主函数根据程序要求,一个程序只能有一个主函数。

因此主函数是一个程序好坏的基础,也是一个程序在运行时外在的表现,因此对主函数设计我做了很多修改,一直修改到让我满意。

我把函数分为几个部分说吧!1.写完函数库及建立一个结构数组:#include<stdio.h>#include<string.h>#include<stdlib.h>struct list{ /*图书结构体*/char num[50]; /*图书编号*/char name[50]; /*图书名称*/char author[50]; /*作者*/char press[50]; /*图书出版社*/char sort[50]; /*图书类别*/int time; /*图书出版时间*/double price; /*图书价格*/struct list *next;};struct list d[40] ;2.全局变量;int number=0;double total;3.所有的函数声明;void search_allbook (struct list d[]) ; /*查看全部图书*/ void find_book (struct list d[]) ; /*查找图书*/void add_book (struct list d[]) ; /*添加图书*/double delete_book (struct list d[]) ; /*删除图书*/void paixu_book (struct list d[]) ; /*图书排序*/void num_paixu(struct list d[]); /*按图书编号排序*/void time_paixu(struct list d[]); /*按图书出版时间排序*/void price_paixu(struct list d[]); /*按图书价格排序*/void xiugai_book(struct list d[]); /*图书丢失*/ double cash_manage();4.Main函数的头以及定义的变量和文本指针;int main(){int q=1,w,r,l,i=0;char b[20],b1[20]="gpf";char m[20],m1[20]="1";FILE *fp ;5.登陆权限功能函数while(q){system("cls");printf("\n\n\n\n");printf(" ********** 欢迎光临**********\n\n");printf(" *************图书管理系统**************\n\n");printf(" 1.用户登录\n");printf(" 0.退出登录\n");printf(" 请输入您的选择:");scanf("%d",&w);printf("\n");getchar();switch(w){case 0:q=0;break;case 1:printf(" 请输入用户名:");scanf("%s",b);printf("\n");printf(" 请输入密码:");scanf("%s",m);getchar();printf("\n");if(strcmp(b,b1)!=0||strcmp(m,m1)!=0){printf(" 用户名或密码错误!\n");printf(" 请重新输入:");scanf("%c",&l);getchar();system("cls");}else{printf(" 验证通过!请按Enter键进入!\n");scanf("%c",&l);}6.文本的输出;fp = fopen ("f.txt" , "r") ;if(fp == NULL){printf("File open the file 1!\n") ;exit (0) ;}while (! feof(fp)){fscanf(fp," %s %s %s %s %s %d %lf\n",d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, &d[i].time, &d[i].price) ;i++ ;}number=i;fclose (fp);7.图书管理系统的功能列表函数及main函数结尾;do{system("cls");printf("\n\n\n\n");printf("|**********************************************|\n");printf(" | *图书信息管理系统* |\n");printf("|**********************************************|\n");printf(" 1.查看全部图书5.修改图书\n");printf(" 2.查找图书6.图书排序\n");printf(" 3.添加图书7.金额管理\n");printf(" 4.删除图书8.退出程序\n");printf("\n\n");printf("请输入所选择的序号:");scanf("%d",&r);getchar();switch(r){case 1:search_allbook(d);getchar();break ;case 2:find_book(d);getchar();break ;case 3:add_book(d);getchar();break ;case 4:delete_book(d);getchar();break ;case 5:xiugai_book(d);getchar();break ;case 6:paixu_book(d);getchar();break ;case 7:cash_manage();getchar();break;case 8:break;}}while (r!=8);printf("谢谢使用!\n");}}return 0;}②查看全部图书函数void search_allbook(struct list d[]){int i;system("cls");printf("|**********************************|\n");printf(" | 查看全部图书! |\n");printf("|**********************************|\n");printf("图书的相关信息:编号书名作者出版社类别出版时间价格\n");for(i=0;i<number;i++){printf(" %s %s %s %s %s %d %.2lf\n", /*将数据输出到屏幕中*/d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i].price);}printf("书本总数:%d \n" , number);printf("********************************************************************************\n");}③查找图书void find_book(struct list d[]){system("cls");int i, fg=0;char s[20];printf("输入图书编号:\n") ; /*提示输入图书编号*/scanf("%s" ,s);printf("|***********************************|\n");printf(" | 查找图书! |\n");printf("|***********************************|\n");for(i=0;i<number;i++)if (strcmp(s, d[i].num)==0){printf("该图书的相关信息:编号书名作者出版社类别出版时间价格\n");printf("%s %s %s %s %s %d %.2lf\n",d[i].num, d[i].name, d[i].author,d[i].press, d[i].sort, d[i].time, d[i].price);fg = 1;break;}if (fg == 0){printf("该图书编号不存在!\n");printf("是否要继续查找? y:是 ; n:否\n") ;getchar();switch(getchar()){case 'y':find_book(d); /*调用函数本身继续查找*/case 'n' :break ;}}printf("**************************************************** ****************************\n");getchar();}④添加图书函数;void add_book(struct list d[]){int i, count=0, choice3;struct list p ;FILE *fp2 ;system("cls");printf(" |***********************************|\n"); printf(" | 添加图书! |\n"); printf(" |***********************************|\n");printf("请输入图书编号:");scanf("%s",p.num);printf("请输入图书名:");scanf("%s",);getchar();printf("请输入作者名:");scanf("%s",p.author);getchar();printf("请输入出版社:");scanf("%s",p.press);getchar();printf("请输入类别:");scanf("%s",p.sort);getchar();printf("请输入出版时间:");scanf("%d",&p.time);getchar();printf("请输入价格:");scanf("%lf",&p.price);printf(" 是否添加并显示添加后的信息? 1:是 ; 2:否 \n"); printf(" 请选择:");scanf("%d" , &choice3);switch (choice3){case 1 :{for(i=0;i<number;i++)if(strcmp(p.num,d[i].num)>0)count ++ ;for(i=number;i>count;i--)d[i] = d[i-1] ;d[i] = p ;number++; /*每添加一本图书,图书数目都会增加一个*/fp2= fopen ("f.txt" , "w") ;if(fp2== NULL){printf("File open the file 2 !\n");exit (0) ;}for(i=0;i<number;i++)fprintf(fp2," %s %s %s %s %s %d %.2lf\n" ,d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i].pri ce);fclose (fp2) ;printf("添加后的图书信息:\n编号书名作者出版社类别出版时间价格\n");for(i=0;i<number;i++)printf(" %s %s %s %s %s %d %.2l f\n" ,d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i].pri ce);printf("谢谢您对图书的添加!\n");break;}case 2 :printf("谢谢您对图书的添加!\n");break ;}printf("************************************************************** ******************\n");getchar();}⑤删除图书函数double delete_book(struct list d[]){int i,count=0,fg= 0,ch;char s[20];FILE *fp3;system("cls");printf(" |***********************************|\n"); printf(" | 删除图书 |\n"); printf(" |***********************************|\n");printf("请输入图书编号:");scanf("%s", s);for(i=0;i<number;i++)if(strcmp(s,d[i].num)==0){printf(" 是否删除并显示删除后的信息? 1:是 ; 2:否 \n");printf(" 请选择:");scanf("%d" , &ch);getchar();switch (ch){case 1 :{for(i=0;i<number;i++)if(strcmp(s,d[i].num)>=0)count ++ ;for(i=(count-1);i<number;i++)d[i]=d[i+1];// d[i] = p ;number--; /*每删除一本图书,图书数目都会减少一个*/fp3=fopen ("f.txt" , "w") ;if(fp3== NULL){printf("File open the file 3 !\n");exit (0) ;}for(i=0;i<number;i++)fprintf(fp3," %s %s %s %s %s %d %.2lf\n " ,d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i]. price);fclose (fp3) ;printf("删除后的图书信息:\n编号书名作者出版社类别出版时间价格\n");for(i=0;i<number;i++){//if(strcmp(s,d[i].num)!=0)printf("%s %s %s %s %s %d %.2lf\n",d[i].num, d[i].name, d[i].author,d[i].press, d[i].sort, d[i].time, d[i].price);}break ;case 2 :break ;}}fg = 1 ;getchar();//break ;}if(fg == 0)printf("该图书编号不存在!\n");printf("************************************************************** ******************\n");return total;getchar();}⑥修改图书函数void xiugai_book(struct list d[]){int i,k;char s[20];FILE *fp4;system("cls");printf(" |***********************************|\n"); printf(" | 图书修改 |\n"); printf(" |***********************************|\n");printf("请输入图书编号:");scanf("%s", s);for(i=0;i<number;i++)if(strcmp(s,d[i].num)==0){printf("您要修改的图书信息为:\n编号书名作者出版社类别出版时间价格\n");printf("%s %s %s %s %s %d %.2lf\n",d[i].num, d[i].name, d[i].author, d[i].press,d[i].sort, d[i].time, d[i].price);printf("请输入修改后的图书信息:\n");printf("请输入图书名:");scanf("%s",d[i].name);getchar();printf("请输入作者名:");scanf("%s",d[i].author);getchar();printf("请输入出版社:");scanf("%s",d[i].press);getchar();printf("请输入类别:");scanf("%s",d[i].sort);getchar();printf("请输入出版时间:");scanf("%d",&d[i].time);getchar();printf("请输入价格:");scanf("%lf",&d[i].price);fp4=fopen ("f.txt" , "w") ;if(fp4==NULL){printf("File open the file 4 !\n");exit (0) ;}for(i=0;i<number;i++)fprintf(fp4," %s %s %s %s %s %d %.2lf\n " ,d[i].num,d[i].name,d[i].author,d[i].press,d[i].sort,d[i].time,d[i]. price);fclose (fp4) ;}printf("是否显示修改后的图书信息: 1:是 ; 2:否\n");scanf("%d",&k);getchar();switch(k){case 1:for(i=0;i<number;i++)if (strcmp(s, d[i].num)==0){printf("该图书的相关信息:\n编号书名作者出版社类别出版时间价格\n");printf("%s %s %s %s %s %d %.2lf\n",d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, d[i].time, d[i].price);}case 2:printf("谢谢您对图书的修改!\n");break;default:printf("您的输入有误!\n");break;printf("*********************************************************** *********************\n");getchar();}}⑦图书排序函数void paixu_book(struct list d[]){int a;system("cls");printf("****************************************************************\n");printf(" * ** 1-按图书编号排序 2-按出版时间排序 ** *\n");printf(" * ** 3-按图书价格排序 0-取消排序操作 ** *\n");printf("****************************************************************\n");printf("请输入您选择的编号:");scanf("%d",&a);getchar();switch(a){case 0:break;case 1:num_paixu(d);getchar();break;case 2:time_paixu(d);getchar();break;case 3:price_paixu(d);getchar();break;default:printf("您的输入有误!\n");break;}}/*按图书编号排序*/void num_paixu(struct list d[]){int i,k,index,b;struct list temp;system("cls");for(k=0;k<number-1;k++){index=k;for(i=k+1;i<number;i++){if(strcmp(d[i].num,d[index].num)<0)index=i;temp=d[index];d[index]=d[k];d[k]=temp;}}printf("排序成功!\n");printf("是否显示排序结果? 1:是 ; 2:否\n");scanf("%d",&b);switch(b){case 1:printf(" 编号书名作者出版社类别出版时间价格 \n");for(i=0;i<number;i++){printf(" %s %s %s %s %s %d %.2lf \n",d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, d[i].time, d[i].price );}break;case 2:break;default:printf("您的输入有误!\n");break;}getchar();}/*按出版时间排序*/void time_paixu(struct list d[]){int i,k,index,b;struct list temp;system("cls");for(k=0;k<number-1;k++){index=k;for(i=k+1;i<number;i++){if(d[i].time<d[index].time)index=i;temp=d[index];d[index]=d[k];d[k]=temp;}}printf("排序成功!\n");printf("是否显示排序结果? 1:是 ; 2:否\n");scanf("%d",&b);switch(b){case 1:printf(" 编号书名作者出版社类别出版时间价格 \n");for(i=0;i<number;i++){printf(" %s %s %s %s %s %d %.2lf \n",d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, d[i].time, d[i].price );}break;case 2:break;default:printf("您的输入有误!\n");break;}getchar();}/*按图书价格排序*/void price_paixu(struct list d[]){int i,k,index;char b;struct list temp;system("cls");for(k=0;k<number-1;k++){index=k;for(i=k+1;i<number;i++){if(d[i].price<d[index].price)index=i;temp=d[index];d[index]=d[k];d[k]=temp;}}printf("排序成功!\n");printf("是否显示排序结果? 1:是 ; 2:否\n");scanf("%d",&b);switch(b){case 1:printf(" 编号书名作者出版社类别出版时间价格 \n");for(i=0;i<number;i++){printf(" %s %s %s %s %s %d %.2lf \n",d[i].num, d[i].name, d[i].author, d[i].press, d[i].sort, d[i].time, d[i].price );}break;case 2:break;default:printf("您的输入有误!\n");break;}getchar();}⑧金额管理函数;double cash_manage(){system("cls");int i;double total=0;for(i=0;i<number;i++)total=total+d[i].price;printf("共计金额:%f \n" ,total);return total;getchar();}4 调试分析测试数据,每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想等。

相关主题