C语言程序设计课程设计实训报告基于文件的小型图书管理系统的设计与实现.doc
防灾科技学院实训报告书专 业 网络工程 系 别 灾害信息工程系 课 程 C语言程序设计 报告题目 基于文件的小型图书管理系统的设计与实现 报告人 班级及学号 指导教师 带队教师 实训时间 8.22-8.26 实训单位 4#301 教务处监制说 明报告要有实训目的、要求、原理简述、方法、步骤、实训体会等,具体内容按各系及实训教师要求。以下模板内容,如果你的程序里没有体现,就不用写。目 录1 前言42 系统需求分析42.1 问题定义42.2 需求分析52.3 项目开发计划63 系统设计83.1 系统功能框架83.2 数据结构设计93.3功能模块设计114 系统实现124.1 系统硬件环境124.2 系统软件环境124.3 开发工具124.4 系统功能模块设计与实现124.4.1 图书管理界面125 系统测试285.1 测试用例设计285.2 测试结果分析28实训体会281 前言图书管理系统对于现代图书馆而言,是能否发挥其教学科研的作用的至关重要技术平台。随着当今社会发展,信息化水平逐步提高,对图书管理有了新的要求,因此,编写一个信息管理系统是十分有必要的。2 系统需求分析2.1 问题定义该软件主要是实现对图书信息进行系统化的管理,本系统要求实现以下的几个基本功能:(1) 要求把所有录入的数据以文件的形式,保存在硬盘上。(2) 实现简易的提示菜单界面,用所学的知识尽量实现良好的、美观的“人机界面”,便于软件的操作使用。(3) 管理员登录时,需要验证密码,密码输入超过三次,自动退出系统。(4) 图书管理功能:包括图书添加功能、图书修改功能、图书删除功能和图书查询功能;(5) 读者管理功能:包括读者添加功能、读者修改功能、读者删除功能和读者查询功能;(6)借阅管理功能:借书功能,还书功能,续借功能。2.2 需求分析(1) 要求把所有录入的数据以文件的形式,保存在硬盘上。实现简易的提示菜单界面,用所学的知识尽量实现良好的、美观的“人机界面”,便于软件的操作使用管理员登录时,需要验证密码,密码输入超过三次,自动退出系统。(2) 图书管理功能:包括图书添加功能、图书修改功能、图书删除功能和图书查询功能;a) 图书添加功能:新书入库。图书购入后由图书管理人员将书籍编码并将其 具体信息进行录入。b) 图书查询功能:提供按照图书名、作者和出版社三种方式来查询图书,只考虑精确查询;c) 图书修改功能:如果有录入错误,可以实现管理员对图书信息进行修改;d) 图书删除功能:如果有图书丢失或损坏等情况,把图书注销掉。(3) 读者管理功能:包括读者添加功能、读者修改功能、读者删除功能和读者查询功能;e) 读者添加功能:为新的读者办卡功能;f) 读者查询功能:按照读者姓名或者读者编号进行精确查询;g) 读者删除:注销读者操作。(4) 借阅管理功能h) 借书管理:根据借阅卡编号和图书编号,进行借书登记。在借阅信息中插入一条借书记录,该记录包括读者编号、图书编号、借出日期、借阅编号信息,更新该记录的相应数据。把超期图书以列表的形式显示出来,并以电子邮件。i) 还书管理:根据借阅卡编号、图书ID等,在借阅信息表中找到相应的记录,将借书记录删除,更新该记录的相应数据(图书信息表)。根据违反规定情况计算和登记罚款记录。j) 丢书管理:每本书赔偿书价的3倍;k) 过期管理:借书日期时间为30天,没按照预期还书的,超过还书日期一天赔偿5毛钱;2.3 项目开发计划序号实习项目任务主要内容学时1需求分析根据项目需求,描述模型12系统分析分析系统,建立模型。23系统设计系统架构1结构设计1功能设计14系统实现硬件环境实现5软件环境实现7功能实现75系统测试单元测试设计测试用例,对单个类及类的方法进行测试。3功能测试设计测试用例,对系统关键功能进行测试。2性能测试使用测试工具,对系统进行性能测试。36系统部署描述具体部署过程37整理项目文档根据自己完成的情况,整理项目文档43 系统设计3.1 系统功能框架3.2 数据结构设计图书(图书编号,书名,ISBN,价格,作者,出版社,总数量,剩余数量)具体如下:struct book_typelong booknum; /*图书编号*/char booknam20 ;/*图书名字*/char ISBN20; /*图书ISBN*/;float price; /*图书价格*/char writer20; /*图书名字*/char pubhouse20; /*图书出版社*/ long leftcount; /*图书剩余量*/bookbookcount;读者(读者编号,姓名,借书数量,电子邮件)具体如下图:struct reader_typelong readernum; /*读者编号*/char readernam20; /*读者姓名*/int borcount; /*借阅数量*/readerreadercount;借阅信息(读者编号,图书编号,借阅编号,借书日期),具体如图:struct lend_typelong booknum; /*图书编码*/ long readernum; /*读者编号*/ char bordate15;/*借书日期*/ char redate15;/*还书日期*/lendlendcount;3.3功能模块设计case 4case 3case 2case 1结束P!=1调用addbook()P=1printf("-欢迎进入图书查询管理系统-n");do ()判断n>0?p=1printf("请选择所需要的功能n");输入选择p调用upbook()调用delbook()调用finbook()p进入图书查询系统返回主界面或退出4 系统实现4.1 系统硬件环境显示器、主机、键盘、鼠标、512M内存4.2 系统软件环境Windows Xp4.3 开发工具Vc6.04.4 系统功能模块设计与实现 4.4.1 图书管理界面由主界面进入图书管理系统,由提示进入各个功能模块的界面。而图书管理系统主要有添加、删除、更新、查询四部分组成,而查询功能又包括按照图书名、作者和出版社三种方式来查询图书。因此在实现时一定要注意这方面的问题。主界面选择1进入图书管理系统,2进入读者管理系统,3进入借阅管理系统。图书管理系统,下分图书的添加、删除、统计和修改四个选项,可以通过选择选项,进入所需要的服务:/*实现图书管理功能:包括添加图书信息,修改图书信息,删除图书信息,图书信息查询*/# include<stdio.h># include<stdlib.h>#include<string.h># define bookcount 1000struct book_typelong booknum;char booknam20;char ISBN20;float price;char writer20;char pubhouse20;long totalcount; long leftcount;bookbookcount;void addbook()/实现添加图书信息功能 int i,j,n,k;FILE *fp;printf("是否添加图书信息?请选择服务项目:n1: 是n2: 返回上一菜单n3: 退出n请输入服务项目代码n");scanf("%d",&i); printf("n"); switch (i) case 1: printf("请输入一次性最多添加的图书数量n"); scanf("%d",&n); printf("n"); k=n; printf("请依次输入图书编号,书名,ISBN,价格,作者,出版社,总数量,剩余数量n"); for(j=0;j<k;j+) scanf("%ld %s %s %f %s %ld %ld ",bookj.booknum,bookj.booknam,bookj.ISBN,bookj.price,bookj.writer,bookj.pubhouse,bookj.totalcount,bookj.leftcount); if(fp=fopen("book_list","a")=NULL) printf("cannot open filen"); return; for (n=0;n<k;n+) if(fwrite(&booki,sizeof(struct book_type),1,fp)!=1) printf("file write errorn"); fclose(fp);break; case 2: addbook();break; case 3: exit(0);void upbook()/实现修改图书的功能,假设图书编号无误int m=0,i,choice;long booknum1;FILE *fp,*fp1;fp=fopen("book_list.txt","r");fp1=fopen("book_list 1.txt","w");printf("请输入需要修改的图书的编号:n");scanf("%s", booknum1); printf("n");for(i=0;fread(&booki,sizeof(struct book_type),1,fp)!=0;i+)if(booki.booknum!= booknum1)fwrite(&booki,sizeof(struct book_type ),1,fp1);else printf("您所需要修改的信息为:n 编号:%ldn书名:%snISBN:%sn价格:%fn作者:%sn出版社:%sn总数量:%dn剩余数量:%dn", booki.booknum,booki.booknam,booki.ISBN,booki.price,booki.writer,booki.pubhouse,booki.totalcount,booki.leftcount);printf("请输入修改后的信息:n");scanf("%ld%s%s%f%s%ld%ld ",&booki.booknum,&booki.booknam,&booki.ISBN,&booki.price,&booki.writer,&booki.pubhouse,&booki.totalcount,&booki.leftcount); fwrite(&booki,sizeof(struct book_type),1,fp1);m=1;fclose(fp);fclose(fp1);fp=fopen("book_list.txt","w"); fp1=fopen("book_list 1.txt","r");for(i=0;fread(&booki,sizeof(struct book_type),1,fp1)!=0;i+)fwrite(&booki,sizeof(struct book_type),1,fp);fclose(fp);fclose(fp1);if(m=1)printf("修改成功n");else printf("此读者信息不存在n");printf("是否返回? 1.是 2.否n");scanf("%d",&choice);switch (choice) case 1:upbook();break; case 2:printf("程序退出n");break; default : printf("程序退出n");void delbook()/*函数名称:delreader() 函数功能:按图书编号进行删除*/ FILE *fp,*fp1; int i; int booknum1; int choice; fp=fopen("book_list.txt","r"); fp1=fopen("book_list1.txt","w"); printf("请输入要删除的图书编号:n"); printf("如果你输入的图书编号存在,系统自动删除该信息!如果不存在,系统不做任何改动n"); scanf("%d",&booknum1); printf("n"); for(i=0;fread(&booki,sizeof(struct book_type),1,fp)!=0;i+) if(booki.booknum!=booknum1)fwrite(&booki,sizeof(struct book_type),1,fp1); fclose(fp); fclose(fp1); printf("是否真的要删除该书籍?删除后该书籍的所有信息将无法恢复,则:1是,0:否"); scanf("%d",&choice); printf("n"); if(choice = 1) fp=fopen("book_list.txt","w"); fp1=fopen("book_list1.txt","r"); for(i=0;fread(&booki,sizeof(struct book_type),1,fp1)!=0;i+) fwrite(&booki,sizeof(struct book_type),1,fp); printf("已经删除成功,按任意键退出n"); getchar(); else printf("没有删除,按任意键退出n"); getchar(); fclose(fp); fclose(fp1); void finbooknam()/实现图书信息查询功能,按书名查询 int i, k; char booknam120;FILE *fp;fp=fopen("book_list","r");printf("请输入您需要查询的图书的名字:n");scanf("%s",booknam1); printf("n");for(i=0;fread(&booki,sizeof(struct book_type),1,fp)!=0;i+) if(strcmp(booki.booknam,booknam1) printf("您所查询的图书为:n编号:%ldn书名:%snISBN:%sn价格:%dn作者:%sn出版社:%sn总数量:%dn剩余数量:%dn", booki.booknum,booki.booknam,booki.ISBN,booki.price,booki.writer,booki.pubhouse,booki.totalcount,booki.leftcount); printf("是否返回上一级菜单?n1:是n0:否(退出该系统)n请输入选项代码n"); scanf("%d",&k); printf("n"); switch (k) case 1: finbooknam ();break; case 0:exit(0);break; default :printf("erronn"); fclose(fp); else printf("没有你所查询的书籍n"); printf("是否返回上一级菜单?n1:是n0:否(退出该系统)n请输入选项代码n"); scanf("%d",&k); printf("n"); switch (k) case 1: finbooknam ();break; case 0:exit(0);break; default :printf("erronn"); fclose (fp);void finbooknum()/按图书编号查询 int i,k; long booknum1;FILE*fp;fp=fopen("book_list","r");printf("请输入您需要查询的图书的编号:n");scanf("%d",booknum1); printf("n");for(i=0;fread(&booki,sizeof(struct book_type),1,fp)!=0;i+) if(booknum1=booki.booknum) printf("您所查询的图书为:n编号:%ldn书名:%snISBN:%sn价格:%fn作者:%sn出版社:%sn总数量:%dn剩余数量:%dn", booki.booknum,booki.booknam,booki.ISBN,booki.price,booki.writer,booki.pubhouse,booki.totalcount,booki.leftcount); printf("是否返回上一级菜单?n1:是n0:否(退出该系统)n请输入选项代码n"); scanf("%d",&k); printf("n"); switch (k) case 1: finbooknam ();break; case 0:exit(0);break; default :printf("erronn"); fclose(fp); else printf("没有你所查询的书籍n"); printf("是否返回上一级菜单?n1:是n0:否(退出该系统)n请输入选项代码n"); scanf("%d",&k); switch (k) case 1: finbooknam ();break; case 0:exit(0);break; default :printf("erronn"); fclose (fp);void finbookpub()/按出版社查询 int i, m=0,k; char pubhouse120;FILE*fp;fp=fopen("book_list","r");printf("请输入您需要查询的图书出版社的名字:n");scanf("%s",pubhouse1); printf("n");for(i=0;fread(&booki,sizeof(struct book_type),1,fp)!=0;i+) if(strcmp(pubhuose1,booki.pubhouse)=0) printf("您所查询的图书为:n编号:%ldn书名:%snISBN:%sn价格:%dn作者:%sn出版社:%sn总数量:%dn剩余数量:%dn", booki.booknum,booki.booknam,booki.ISBN,booki.price,booki.writer,booki.pubhouse,booki.totalcount,booki.leftcount); m=1; printf("是否返回上一级菜单?n1:是n0:否(退出该系统)n请输入选项代码n"); scanf("%d",&k); printf("n"); switch (k) case 1: finbooknam ();break; case 0:exit(0);break; default :printf("erronn"); fclose(fp); else printf("没有你所查询的书籍n"); printf("是否返回上一级菜单?n1:是n0:否(退出该系统)n请输入选项代码n"); scanf("%d",&k); printf("n"); switch (k) case 1: finbooknam ();break; case 0:exit(0);break; default :printf("erronn"); fclose (fp);# include<stdio.h># include<stdlib.h>void finbook()/实现图书查询功能:按书名查询,图书编号查询,出版社查询 int i; printf("欢迎使用图书查询管理系统,请选择查询方式:n1:图书名n2:图书作者n3:图书出版社n4:返回上一级菜单n5:退出该系统n请输入查询方式代码n"); scanf("%d",&i);printf("n"); switch(i) case 1:finbooknam();break; case 2:finbooknum();break; case 3:finbookpub();break; case 4:finbook();break; case 5:exit(0);void bookmanage() int i; printf("欢迎使用图书管理系统,请选择服务项目:n1:添加n2:更新n3: 删除n4:查询n5:返回上一级菜单n6:退出n请输入服务项目代码n"); scanf("%d",&i);printf("n"); switch(i) case 1:addbook();break; case 2:upbook();break; case 3:delbook();break; case 4:finbook();break; case 5: bookmanage();break; case 6: exit(0);void main()bookmanage();5 系统测试5.1 测试用例设计5.2 测试结果分析此次C程序设计的是图书馆管理系统。由于图书馆管理系统复杂且程序较大。因此此次在运行时程序不太流畅,总是会出现死机现象。但总体来说,程序调试完之后,没有错误,运行则比较容易且把图书馆的基本功能都能够体现。实训体会通过这几天的上机操作,使我们进一步了解了C语言的深奥及其应用。使平时学的知识联系在了一起,对文件操作有了切身体会。有利于进步学习专业知识,提高学习兴趣。为以后的学习提供了一个良好的机会与锻炼机会。希望这样的实习不仅仅集中在暑期实训期间,而在平时的学习过程中也能够多上机,多练习。报告内容摘要:这次主要编辑了图书馆管理程序的设计。内容主要包括:1: 主界面的设计;2: 各个模块功能的设计:模块主要有图书管的图书管理,读者管理,借阅管理三部分。指导教师评语:该生在实训过程中,态度(认真、较好、一般、较差);工作(积极主动、较主动、不积极主动);出勤率(高、较高、一般、较低、低)。系统需求分析(完整、较完整、基本完整、不完整);系统设计(合理、较合理、基本合理、不合理);系统实现(完善、较完善、基本完善、不完善);系统测试(全面、较全面、基本全面、不全面)。实训报告(很好、较好、一般、基本合格)。成绩:优秀、良好、中等、及格、不及格指导教师(签名): 2011 年 8 月 28 日