高校图书管理系统.doc_第1页
高校图书管理系统.doc_第2页
高校图书管理系统.doc_第3页
高校图书管理系统.doc_第4页
高校图书管理系统.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

课程设计学 号班 级姓 名指导教师 2008 年 7 月 1 日xxxxxxxxxxx课程设计任务书一、课程设计时间200708第2学期第17周,共计1周,20学时。二、课程设计内容用C语言编写软件完成以下任务:1.录入图书信息(根据图书馆的管理情况自行设定,要具有实用性);2.查询某本书的库存情况;3.过期催还(显示所有的过期人员信息)。三、课程设计要求1. 程序质量: 贯彻结构化的程序设计思想。 用户界面友好,功能明确,操作方便。 用户界面中的菜单至少应包括“图书信息录入”、“图书信息查询(根据书名或编号等)”、“过期催还”、“退出”4项。 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、说明书成绩六、教师评语Ixxxxxxxxxxxxxxxxxx目录一、需求分析1二、程序流程图3三、 核心技术的实现说明及相应的程序段9四、个人总结19五、参考文献20六、源程序2127一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他们的功能分别是:图书信息输入函数input(),借阅图书函数(borrow),增加删除图书函数(adddelet),图书查询函数(search),以及归还图书信息函数(giveback)。在这些函数当中,这四个函数的实现严格按照题目的要求。1、 图书信息输入函数 主要功能是从键盘输入图书信息并将其写入文件中,作为图书馆的书库,以便对下面的函数进行运行,此函数是基础.2、 图书借阅函数 主要借阅图书的功能和录入学生应该还书的时间;3、 图书归还函数 主要实现借阅图书后,归还图书的功能,并把应该还书的时间和实际还书的时间进行比较过期时输出学生的信息,也是该程序的的一个重点4、 增加删除图书函数 实现的功能是实现对图书的删除;5、 图书查询函数 允许按照图书编号,书名,作者,出版社进行查询,并将查询信息输出;6、 退出函数 该函数主要实现退出运行界面的功能.除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。每一个图书记录都包含:图书编号,名称,出版社,作者,现有数量和总量在程序当中,将图书记录类型定义为结构体类型,并把它写入d:liuyan.txt中,其他函数每次对图书记录的访问,其数据来源都是d:liuyan.txt文件,这样做不但可以保证图书数据的一致性,而且可以对图书数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1、 程序总体流程图假当()真输入值q=1?假q=2?真输入图书函数input()假q=3?真查询图书函数search()q=5?假q=4?真假真借书函数增加删除函数借q=6退出还书函数图(1)程序总体结构图图(1)程序总体流程图2、具体功能框图(1)输入图书函数input()读写方式打开liuyan 文件不成功?假真输入要写入图书的数b量输出文件打开失败!将b的值写入文件循环变量i=0;当i小于b时输入图书编号,书名,出版社,作者,现有数量,总量将书的信息写入文件return;(2)读取学生数据reads关闭文件图3读取学生数据图()输入图书函数()查询图书函数读方式打开文件不成功?假真循环变量i输出文件打开失败!读出信息不等于1?输出file read error!假真假真变量w=6?w=7?输出图书信息假真return;返回 w=8?输出图书信息假真返回返回输出图书信息假真w=9?关闭文件图(3)图书查询函数(3) 借阅图书函开始数 Y读方式打开文件不成功?N输入你的学号和要借书的名字Y循环变量ii0?Y输出borrow success和输入应还书的日期borrow failedY输入应书日期关闭文件!结束 图(4)借阅图书函数(4)还书函数开始Y以读方式打开文件不成功?ReturnN输入学号输入书的编号循环变量ii1000?N输入的编号和书库编号一致Ybreak;Y输出还书成功关闭文件结束图(5)还书函数开始(5)添加删除函数N读方式打开文件不成功?Y输入t输入t值等于11Y输入t值等于12输入要加入书的编号Return;输入要删除图书的编号输入要添加书的数量循环变量 i=0循环变量i=0i10Ni10NY输入的编号和书库中的编号一致?从书库中删除Y写入书库关闭文件结束图(6)添加删除函数三、 核心技术的实现说明及相应的程序段本程序主要由五个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。这些函数中以写入图书函数、借阅图书函数、还图书函数、查询图书函数、添加和删除函数为核心技术,下面分别进行说明。1、写入图书函数:input() 首先要把图书写入文件,即书库,如果不存在文件 首先要创建一个新文件(d:liuyan.txt),并将图书信息信息写入该文件当中;其二是在学生文件(student.dat)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。此程序中原来不存在文件,所以先建立一个文件,具体的程序段如下:void input()/*图书写入函数*/ FILE *fp; char str210= ; int i; fp=fopen(liuyan。txt,wb+); printf(nHow many books do you want to input?n);/*输入写入书的本数*/ scanf(%d,&b); for(i=0;ib;i+)printf(Enter the %d books number name press writer now alln,i+1);/*输入书的编号,书名,出版社,作者,现有数量,总数*/scanf(%s%s%s%s%d%d,&ai.number,&,&ai.press,&ai.writer,&ai.n,&ai.m);fwrite(&ai,sizeof(struct book),1,fp); /*将书的信息写入文件*/ fclose(fp);/*关闭文件*/2、借阅图书函数:borrow()首先要输入你的学号,然后再输入你想要借的书的名字,通过一个if 语句判断此书在书库中即写入的文件中是否存在,如果存在且该书的现有量大于零,则借书成功!如若借书成功输入该学生应该还此书的日期。这是为了计算借的书是否过期。具体程序如下:void borrow()/*借阅图书函数*/ FILE *fp; int i; char xuehao20,number220 ,month10,day10; char jieyue20=borrow:; if(fp=fopen(liuyan.txt,ab+)=NULL) printf(Open failedn); return; printf(Enter your number:n);/*输入你的学号*/ scanf(%s,xuehao); printf(Enter the books number which you want to borrown);/*输入你想要借的书的编号*/ scanf(%s,number2); for(i=0;i0)/*在该书存在的情况下判断该书现有数量是否大于零*/ai.n-; printf(borrow sucess!n);/*输出借书成功*/putw(b,fp); printf(enter month and day which you should returnn); scanf(%s%s,&ai.month,&ai.day); fwrite(&ai,sizeof(struct book),1,fp);/*将应还书的日期写入文件*/ if(fwrite(&xuehao20,sizeof(xuehao20),1,fp)!=1) printf(file write errorn); if(fwrite(&jieyue20,sizeof(jieyue),1,fp)!=1)/*把书再写回到该文件中*/ printf(file write errorn); if(fwrite(&ai,sizeof(struct book),1,fp)!=1) printf(file write errorn); break; else printf(borrow failed!!);/*输出借书失败*/ fclose(fp);/*关闭文件*/ 3、归还图书函数: giveback() 本函数由主函数调用后,先打开存储图书信息的文件,输入你的学号和你要归还图书的名字,接着输入还书当天的日期,并和应该还书的日期进行比较如果过期输出过期人员的信息,如果没有过期则输出*。然后通过for 循环判断学号是否一致,然后将再进行还书的其他步骤,还书成功则有提示.具体程序如下:void giveback()/*定义还书函数*/ FILE *fp; int i,m=0,n=0; char xuehao20,number220,month210,day210; char guihuan220=give back; if(fp=fopen(liuyan.txt,w)=NULL)/*打开文件*/ printf(cannot open filen); return; printf(Enter your number:n); scanf(%s,xuehao);/*输入你的学号*/ printf(Enter the books number which you want to give backn); scanf(%s,number2);/*输入书的编号*/ printf(Enter month and day todayn ); scanf(%s,%s,month2,day2); if(strcmp(am.month,month2)0) printf(guo qi xue sheng de xue hao %sn,xuehao); else if(strcmp(am.month,month2)=0) if(strcmp(an.day,day2)=0) printf(*n); else printf(*n); for(i=0;i1000;i+) if(strcmp(ai.number,number2)=0) if(fwrite(&xuehao20,sizeof(xuehao),1,fp)!=1) printf(file write errorn); if(fwrite(&guihuan220,sizeof(guihuan2),1,fp)!=1) printf(file write errorn); if(fwrite(&ai,sizeof(ai),1,fp)!=1) printf(file write errorn); break; printf(give back sucess!n); fclose(fp); 4、查询图书函数: search()此函数用于对书库中的书进行查询,可按书的编号书的名字,书的出版社,书的作者来进行查询.本函数应用了循环结构及分支结构,查询信息方便快捷.具体程序如下:void Search()/*定义查询函数*/ FILE *fp;/*定义变量*/ int w,i;char str20; if(fp=fopen(liuyan.txt,w)=NULL) printf(Open failedn); return; for(i=0;ib;i+)/*寻找书的信息*/ if(fread(&ai,sizeof(struct book),1,fp)!=1) printf(file read errorn); printf(search by number-6n);/*按书的编号查询*/ printf(search by name-7n);/*按书的名字查询*/ printf(search by writer-8n);/*按书的作者查询*/ printf(search by press-9n);/*按书的出版社查询*/ scanf(%d,&w);printf(Enter the word you want to search:n);/*输入你想要查询的信息*/ scanf(%s,str);switch(w)/*多分支结构进行查询*/case 6: for(i=0;ib;i+) if(strcmp(ai.number,str)=0)printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/break; break; case 7:for(i=0;ib;i+) if(strcmp(,str)=0) printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/ break; break; case 8:for(i=0;ib;i+) if(strcmp(ai.press,str)=0) printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/ break;break;case 9: for(i=0;ib;i+) if(strcmp(ai.writer,str)=0) printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/ break; fclose(fp); 输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/ break; break; case 8:for(i=0;ib;i+) if(strcmp(ai.press,str)=0) printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/ break;break;case 9: for(i=0;ib;i+) if(strcmp(ai.writer,str)=0) printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m);输出书的编号,书的名字,书的出版社,书的作者,现有量,总量*/ break; fclose(fp); 5、添加、删除函数:adddelet()此函数用于对书库中的书进行添加或删除,出入要添加或是删除的书的编号,并输入要添加或删除的数量,利用for语句判断和书库的书编号一致的书,并进行添加或删除。具体程序如下:void adddelet()/*添加和删除信息函数*/ FILE *fp; char number320; int s,i,j,t; if(fp=fopen(liuyan.txt,w)=NULL) printf(cannot open filen); return ; printf(Chose what you want to do:);/*选择你要做什么*/ printf(add books-11n);/*输入11代表添加书的信息*/ printf(delet books-12n);/*输入12代表删除书的信息*/ scanf(%d,&t); switch(t)/*选择任务*/ case 11: printf(Enter the booknumber which you want to add:); scanf(%s,number3); printf(How many books do you want to add?:); scanf(%d,&s);/*输入要想要添加书的数量*/ for(i=0;i10;i+) if(strcmp(ai.number,number3)=0) ai.m=ai.m+s;/*书的总量增加*/ break; default : printf(Enter the booknumber which you want to delet:); scanf(%s,number3);/*输入要删除书的编号*/ for(i=0;i10;i+) if(strcmp(ai.number,number3)=0) for(;i10;i+) /*删除信息,左移覆盖即可以将信息删除*/for(j=0;j20;j+) ai.numberj=ai+1.numberj; for(j=0;j20;j+) j=ai+1.namej;for(j=0;j20;j+) ai.pressj=ai+1.pressj;for(j=0;j20;j+) ai.writerj=ai+1.writerj; ai.n=ai+1.n; ai.m=ai+1.m; fclose(fp);/*关闭文件*/ 四、个人总结在此次课设中,我充分运用了大一下学期c 语言中所学的知识,明白了为什么能通过一台计算机就能统计出图书管中上百万册的的图书,这就是程序在起的作用,虽然只用了一周的时间但是在这一周里我重新温习了c语言,使自己对c语言有了更深入了了解,也更加熟练的掌握了c语言编程序解决实际问题中的关键问题,我学会了用自己所学的知识去运用到生活中的各个方面,更体会到知识的重要性,也深刻体会到了思考问题时逻辑思维严密性的重要性,所以在以后的学习生活中应该锻炼完善的思考逻辑,并逐培养自己遇到问题独立解决问题的能力,总之在这短短的一周的时间里收获了很多,收益颇丰。五、参考文献1 谭浩强C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京:中国铁道出版社,20063 教育部考试中心、二级教程c语言程序设计、北京:高等教育出版社,1998六、源程序#includestdio.h#includestring.hstruct book/*定义书的结构体*/ char number20; char name20; char press20; char writer20; char month10; char day10; int n; int m;a10;int b;void menu();void input();void search();void borrow();void giveback();void adddelet();void exit();void menu() printf(nWelcome to labrary!nChose what you want to do:n); printf(Input books information-1;n);/*输入1代表输入图书信息*/printf(serach books-2;n);/*输入2代表查询图书信息*/printf(borrow books-3;n);/*输入3代表借阅图书信息*/printf(add or delet books-4;n);/*输入4代表添加和删除图书信息*/printf(give back books-5;n);/*输入5代表还书信息*/printf(quit-6;n);/*输入6 代表退出运行界面*/printf(Please chose zhe number:);void input()/*定义写入图书信息函数*/FILE *fp;char str210= ;int i;fp=fopen(liuyan.txt,wb+);printf(nHow many books do you want to input?n);/*输出写入书的数量*/scanf(%d,&b);putw(b,fp);for(i=0;ib;i+)printf(Enter the %d books number name press writer now alln,i+1);/*输出书的编号,书名,出版社,作者,现有量,总量*/scanf(%s%s%s%s%d%d,&ai.number,&,&ai.press,&ai.writer,&ai.n,&ai.m);fwrite(&ai,sizeof(struct book),1,fp);/*将书的信息写入文件*/ fclose(fp);/*关闭文件*/ /*/void Search()/*定义查询函数*/ FILE *fp;/*定义变量*/ int w,i;char str20; if(fp=fopen(liuyan.txt,w)=NULL) printf(Open failedn); return; for(i=0;ib;i+)/*寻找书的信息*/ if(fread(&ai,sizeof(struct book),1,fp)!=1) printf(file read errorn); printf(search by number-6n);/*按书的编号查询*/ printf(search by name-7n);/*按书的名字查询*/ printf(search by writer-8n);/*按书的作者查询*/ printf(search by press-9n);/*按书的出版社查询*/ scanf(%d,&w);printf(Enter the word you want to search:n);/*输入你想要查询的信息*/ scanf(%s,str);switch(w)/*多分支结构进行查询*/case 6: for(i=0;ib;i+) if(strcmp(ai.number,str)=0)printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/break; break; case 7:for(i=0;ib;i+) if(strcmp(,str)=0) printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/ break; break; case 8:for(i=0;ib;i+) if(strcmp(ai.press,str)=0) printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/ break;break;case 9: for(i=0;ib;i+) if(strcmp(ai.writer,str)=0) printf(number: %s name: %s press: %s writer: %s now: %d all:%dn,ai.number,,ai.press,ai.writer,ai.n,ai.m); /*输出书的编号,书的名字, 书的出版社,书的作者,书的现有数量,书的总量*/ break; fclose(fp); void borrow()/*借阅图书函数*/ FILE *fp; int i; char xuehao20,number220,month10,day10; char jieyue20=borrow:; if(fp=fopen(liuyan.txt,ab+)=NULL) printf(Open failedn); return; printf(Enter your number:n);/*输入你的学号*/ scanf(%s,xuehao); printf(Enter the books number which you want to borrown);/*输入想要借的书的编号*/ scanf(%s,number2); for(i=0;i0)/*判断该书的现有量是否大于零*/ai.n-; printf(borrow sucess!n);/*输出借书成功*/ putw(b,fp); printf(enter month and day which you should returnn); scanf(%s%s,&ai.month,&ai.day); fwrite(&ai,sizeof(struct book),1,fp);/*将应还书的日期写入文件*/ if(fwrite(&xuehao20,sizeof(xuehao20),1,fp)!=1) printf(file write errorn); if(fwrite(&jieyue20,sizeof(jieyue),1,fp)!=1) printf(file write errorn); if(fwrite(&ai,sizeof(struct book),1,fp)!=1) printf(file write errorn); break; else printf(borrow failed!!); fclose(fp);/*关闭文件*/ void giveback()/*定义还书函数*/ FILE *fp; int i,m=0,n=0; char xuehao20,number220,month210,day210; char guihuan220=give back; if(fp=fopen(liuyan.txt,w)=NULL)/*打开文件*/ printf(cannot open filen); return; printf(Enter your number:n); scanf(%s,xuehao);/*输入你的学号*/ printf(Enter the books number which you want to give backn); scanf(%s,number2);/*输入书的编号*/ printf(Enter month and day todayn ); scanf(%s,%s,month2,day2); if(strcmp(am.month,month2)0) printf(guo qi xue sheng de xue hao %sn,xuehao); else if(strcmp(am.month,month2)=0) if(strcmp(an.day,day2)=0) printf(*n); else printf(*n); for(i=0;i1000;i+) if(strcmp(ai.number,number2)=0) if(fwrite(&xuehao20,sizeof(xuehao),1,fp)!=1) printf(file write errorn); if(fwrite(&guihuan220,sizeof(guihuan2),1,fp)!=1) printf(file write er

温馨提示

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

评论

0/150

提交评论