操作系统课程设计-图书管理系统_第1页
操作系统课程设计-图书管理系统_第2页
操作系统课程设计-图书管理系统_第3页
操作系统课程设计-图书管理系统_第4页
操作系统课程设计-图书管理系统_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE5《操作系统》课程设计说明书设计题目:图书管理系统专业:指导教师:班级:学号:姓名:同组人:计算机科学与工程系前言图书管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以图书管理系统应该能够为管理员和读者提供充足的信息和快捷的查询手段。现在我国的绝大多数农村中小学校中图书管理水平还停留在纸介质的基础上,这样的机制已经不能适应时代的发展,因为这种管理方式存在着许多缺点,如:效率低下、保密性差,另外时间一长,将产生大量的文件和数据,这对于数据的查找、更新和维护都带来了不少的困难,并且浪费了许多人力和物力。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。在信息时代这种传统的图书管理方式必然被计算机为基础的信息管理系统所取代。因为作为计算机应用的一部分,使用计算机对图书信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书管理的效率。虽然现在计算机的发展越来越迅速,但是仍然有很多人热爱书本的质感。但是由于大量图书的收入借出给图书管理人员带来的沉重的负担。只有把图书管理系统的软件编制的更好,更方便,才能进一步减轻管理人员和读者的负担。为了进一步加强我们所学习的操作系统的知识,本次课程设计我们小组进行图书管理系统的编写。首先介绍的是整体程序设计的组成框图、流程图、类图等。接下来详细的介绍了各模块的具体功能。最后是经过调试后的结果输出方法和解决措施。报告的后面附有本程序设计的源程序代码,同时还有相应的注释。本程序代码在编写过程中,得到了很多同学的的大力支持与帮助。此外,本组成员在整个课程设计的过程中都付出了一定的努力,学到了很多知识。为了能够使本程序在规定的时间内如约完成,每位小组成员都花费了大量的时间和精力,在此想帮助过我们的同学们表示衷心的感谢。本程序代码虽然经过多次反复修改,突出了图书管理系统的一些主要功能。以操作系统为基本概念编写的代码反映了当代操作系统的新技术。但是由于编者也就是我们的水平有限,没办法更好的结合现在流行技术开发出功能强大的软件。在本次编写的代码中,仍难免会有错误和不当之处,恳请大家批评指正。同时希望本程序能够给大家减轻负担并能让大家学习到更多的知识。

目录Ⅰ·设计题目 4Ⅱ·系统环境 42.1硬件环境 42.2软件环境 4Ⅲ·设计目的 4Ⅳ·总体设计 4Ⅴ·流程图 5Ⅵ·详细设计 8Ⅶ·源程序代码 8Ⅷ·调试与测试 14Ⅸ·设计中遇到的问题及解决方案 14Ⅹ·心得体会 14参考文献 14Ⅰ·设计题目以UNIX系统文件部分系统调用为基础设计一个简易的图书管理系统。Ⅱ·系统环境2.1硬件环境CPU为pentium4双线程技术,频率为2.8GHZ,内存为512MB。2.2软件环境使用操作系统环境是RedHatLinux9,言语开发环境是Linux的 GNUC或C++。Ⅲ·设计目的能够在一个友好的界面上实现基本的图书管理功能,要求实现:图书的录入、查询、借阅、清理、统计等功能、还要实现对每天的借阅情况进行统计,操作界面要尽量完善。Ⅳ·总体设计在主函数中采用一个分支语句,从而实现其不同的功能操作。在每一种对应的功能中,分别设计相对应的函数。同时在每个函数内部,实现从其他函数的调用。如设计一个借书部分,那么我们就必须首先完成目的图书的搜索,然后将该图书对应的信息做出相关的修改后,从而完成该操作。对于图书,我们定义一个结构体变量来存放其相关信息,并且每次的操作都是对于这个结构体的操作,以此来保证其完整性和准确性。Ⅴ·流程图主函数的结构图如下:主函数main()主函数main()图书添加图书的删除图书的借阅图书的归还图书的统计图书的查询Switch(c)输入选择项图书选择函数search_book()初始化一个关于结构体books的数组初始化一个关于结构体books的数组Returnn输入目标图书的idIf(books[n].id=id将图书信息填入该数组books[]For(i=1;I<n;i++)图书借阅函数book_out()输入目标图书id输入目标图书idBooks_search()提示借书成功将数据写回books[]还书操作与该操作的步骤一样,区别在于不同操作时将该书数量的增减变化。将该数量的变化信息随着书本的相应操作而进行操作可以降低程序的复杂程度。图书的注册books_add():在books[]中申请一个空间在books[]中申请一个空间输入添加图书的id等信息将信息添加至books[]中图书注册成功图书的删除books_del():输入目标图书的id输入目标图书的id调用books_search()将目标图书在结构体中的变量修改为空写回数组books[]并显示成功图书的日借出量我们通过定义一个结构体的变量并将其同时储存在数组中,让其随着图书的操作而做出对应的修改,在图书的借阅和归还部分已经有所提及,在需要查询时,我们直接使其显示即可。Ⅵ·详细设计结构体的定义首先我们需要定一个结构体变量,使用这个结构体变量来储存每本书所对应的基本信息,从而保证了在以后的调用时对各个子项的调用,进而降低程序的开支。同时为了便于统计,我们将每种书的数量和库存量也一并定义于之中,定义的方式如下:structBOOK{intid,usr[10],total,store,days[10];charname[31],author[21];}同时为了检索图书借阅的数量和归还数量,我们定义了两个整形常量,out和in来统计图书的借阅量。程序中的检索查询过程通过使用for和if语句实现检索。使用方法如下:printf("请输入图书序号:");scanf("%d",&i);for(n=0;n<100;n++){if(books[n].id==i){……}图书借阅以及查询等操作时对查询方法的调用:通过直接调用search_book()方法,判断其返回值,来执行下步操作。使用如下:if((n=search_book())!=-1){……}主函数中的选择语句的控制在主函数中我们需要通过一个switch选择语句实现各个功能的实现,因此我们通过用户的选择输入来确定定义:scanf("%c",&c);switch(c){……}Ⅶ·源程序代码/*图书管理系统*/#include<stdio.h>#include<stdlib.h>structBOOK{intid,usr[10],total,store,days[10];charname[31],author[21];}books[100];/*上面是结构体的定义,用于存放书籍及借书的信息。*/intout=0,in=0;/*统计借出和归还*/voidpage_title(char*menu_item){printf(">>>图书管理系统<<<\n\n-%s\n\n",menu_item);}/*上面是打印页眉的函数,同时通过参数menu_item,可以显示当前的状态。*/intsearch_book(){chara;/*用以查看结果*/intn=0,i=0;FILE*fp;if((fp=fopen("bbb","r"))==NULL)/*读方式打开*/{printf("cannotopenfile\n");}while(!feof(fp))/*把文件写入内存,books[]要初始化*/{fread(&books[i],sizeof(structBOOK),1,fp);i++;}fclose(fp);printf("请输入图书序号:");scanf("%d",&i);for(n=0;n<100;n++){if(books[n].id==i){printf("书名:%s\n",books[n].name);printf("作者:%s\n",books[n].author);printf("存数:%d\n",books[n].store);printf("总数:%d\n",books[n].total);do{printf("结束??y/n");scanf("%c",&a);}while(a!='y');returnn;}}printf("\n输入错误或无效图书序号.\n");do{printf("结束??y/n");scanf("%c",&a);}while(a!='y');return-1;}/*上面的函数是在数组中找到图书号匹配的记录,显示其信息并返回数组下标,如果找不到相应记录则提示错误并返回-1。*/voidbook_out(){chara;intn,s,l,d;page_title("借阅图书");if((n=search_book())!=-1&&books[n].store>0){printf("请输入借书证序号:");scanf("%d",&s);printf("请输入可借天数:");scanf("%d",&d);for(l=0;l<10;l++){if(books[n].usr[l]==0){books[n].usr[l]=s;books[n].days[l]=d;break;}}books[n].store--;out++;}if(n!=-1&&books[n].store==0)printf("此书已经全部借出.\n");do{printf("结束??y/n");scanf("%c",&a);}while(a!='y');}/*上面是借书的函数,首先调用找书函数*/voidbook_in(void){chara;intn,s,l;page_title("归还图书");if((n=search_book())!=-1&&books[n].store<books[n].total){printf("借阅者图书证列表:\n");for(l=0;l<10;l++)if(books[n].usr[l]!=0)printf("[%d]--%d天n",books[n].usr[l],books[n].days[l]);printf("请输入借书证序号:");scanf("%d",&s);for(l=0;l<10;l++){if(books[n].usr[l]==s){books[n].usr[l]=0;books[n].days[l]=0;break;}}books[n].store++;in--;}if(n!=-1&&books[n].store==books[n].total)printf("全部入藏.\n");do{printf("结束??y/n");scanf("%c",&a);}while(a!='y');}voidbook_add(){chara;FILE*fp;intn=0;intc;if((fp=fopen("bbb","ab+"))==NULL)/*读写方式打开或建立新文件*/{printf("cannotopenfile\n");return;}page_title("注册新书");do{printf("序号:");scanf("%d",&books[n].id);printf("书名:");scanf("%s",&books[n].name);printf("作者:");scanf("%s",&books[n].author);printf("数量:");scanf("%d",&books[n].total);books[n].store=books[n].total;n++;printf("继续注册:1.是2.否");scanf("%d",&c);}while(c==1);if(fwrite(books,sizeof(structBOOK),n,fp)!=n)printf("filewriteerror");fclose(fp);do{printf("结束??y/n");scanf("%c",&a);}while(a!='y');}voidbook_del(void){chara;intn,i;FILE*fp;page_title("注销旧书");if((n=search_book())!=-1){/*fp=fopen(books[n],"rb+");*/books[n].id=0;for(i=0;i<31;i++)books[n].name[i]=NULL;for(i=0;i<21;i++)books[n].author[i]=NULL;books[n].total=0;books[n].store=0;fwrite(books,sizeof(structBOOK),n,fp);}printf("该书已注销.\n");do{printf("结束??y/n");scanf("%c",&a);}while(a!='y');}voidtongji(){chara;printf("借出总数%d\n",out);printf("归还总数%d\n",in);do{printf("结束??y/n");scanf("%c",&a);}while(a!='y');}voidmain(void){charc;inti,j;for(i=0;i<100;i++){for(j=0;j<30;j++)books[i].name[j]=NULL;for(j=0;j<20;j++)books[i].author[j]=NULL;}menu:page_title("操作选单");printf("请用数字键选择操作\n\n");printf("1借阅图书\n2归还图书\n\n");printf("3注册新书\n4注销旧书\n\n");printf("5统计\n");printf("6图书查询\n");printf("\n0退出\n");scanf("%c",&c);switch(c){case'1':book_out();break;case'2':book_in();break;case'3':book_add();break;case'4':book_del();break;case'5':tongji();break;case'6':search_book();break;case'0':exit(0);}gotomenu;}Ⅷ·调试与测试Ⅸ·设计中遇到的问题及解决方案在设计过程中我们首先遇到的主要问题是怎么将文件写入结构体中,并且将其读出。通过比对,我们选择了使用二进制文件来完成这一系列的操作,因此通过对流的一些操作来完成功能。其定义和使用部分如下:FILE*fp;fp=fopen("bbb","r");fread(

温馨提示

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

评论

0/150

提交评论