《实验四实验报告》由会员分享,可在线阅读,更多相关《实验四实验报告(28页珍藏版)》请在金锄头文库上搜索。
1、实验四实验报告1120131317 周任然1.图书管理(1)问题描述有一个小型书库保管了大量图书,关于图书有大量信息需要处理,这些信息包括图书的分类、书名、作者名、购买日期、价格等。现要求编写一个程序以便于对图书的管理。(2)基本要求:a建立图书信息。b提供想找功能,按照多种关键字查找需要的书籍。例如按书名查找,输入书名后,将显示出该图书的所有信息,或显示指定信息。c提供排序功能,按照多种关键字对所有的书籍进行排序,例如按出版日期进行排序。d提供维护功能,可以对图书信息进行添加、修改、删除等功能。(3)数据结构与算法分析数据存储结构可根据需要自选。如:顺序表、单链表、双链表、栈等。算法主要要求
2、用到对数据的查询与排序算法。二、概要设计有八个模块(1)图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书借书模块读者输入读书证号,证号存在输入要借的图书编号,不能借同一本书,如果借书数量以达到最大也不能借书。还书模块归还已借的图书,要先输入读者书证号,书证号存在继续输入要还的图书编号,图书编号存在并且借来此书,归还成功。查询图书信息查询读者信息可查询读者姓名书证号,借了几本书,都是什么书和还书日期,还可
3、以借几本书。退出退出读书管理系统并保存读者和图书信息。三、算法设计进入系统后首先进行图书初始化,输入图书的信息。初始化之后,进入系统,显示功能列表,可选择任意系统,但在借书之前先要输入读者信息。1)采编入库录入图书信息判断是否有此图书是在原有的纪录上加上现有的图书数量否向系统中加入新纪录2)输入读者信息开始输入读者信息:读者书证号结束3)借阅图书输入读者书证号判断读者是否存在否输出次读者编号不存在!按任意键返回是输入要借的图书编号判断图书编号是否存在否输出此图书编号不存在!按任意键返回是看是否还有此图书否输出此书已借完,按任意键返回是看读者的借书数目是否满了是输出借书数目已满不能借书,按任意键
4、返回否看读者是否借了相同的书是输出同一读者不能借相同的两本书否输入归还图书的日期图书现有数量和库存数量都减1输出读者结束成功,按任意键返回结束4)归还图书输入要还书的读者编号判断读者编号是否存在否输出读者编号不存在按任意键返回是输入读者还书编号判断图书编号是否存在否输出此图书编号不存在按任意键返回是此图书编号和还书日期等于0库存和现有图书数量加1,借书数量减1输出读者还书完毕,按任意键返回结束5)查询图书信息判断图书信息是否为空否输出图书信息:编号、名称、作者、现有和库存结束6)查询读者信息判断读者信息是否为空否输出读者书证号、姓名、图书编码和还书日期输出读者信息打印完毕结束四、运行结果和调试
5、分析图书信息初始化同一本新书入库的运行结果图不同的新书采编入库采编入库后查询图书信息的运行结果图登记读者信息借书借书后查询图书信息的运行结果图借同一本书的运行结果图借不同的书借两本书后查询读者信息的运行结果图还书运行结果图还书之后再查询读者信息的运行结果图还书后查询图书信息退出五、总结体会虽然这次的程序是通过上网查出来的,但是通过这次的实验使我知道了图书管理系统的流程,知道了一些以前不知道的知识,在运行程序时也遇到了一些问题,借书时只能借一本书,再借书就不能显示是借了还是不能借,把最多能借书的数量改了一下还是不行,最后在每一个判断输出之后都加了goto END借书,就能正常借书了。程序有点长,
6、本来一个函数就能完成一个功能,他用了两个函数就我把自己能改成一个的改了。借书系统比较复杂,不容易懂,和同学交流了一下自己看了看才明白。这次的实验还让我复习了数据结构的一些知识,如数组,while语句,switch语句,链表,还知道了如何使用system(cls)清屏,还知道了strcmp是用来比较字符串s1和s2大小的,strcpy使用来把字符串s2的值赋给s1的。这次的实验增加了我们自己动手动脑的能力,希望多做一些这样的实验,很有意义,和现实生活结合的程序增加了我的兴趣。源代码#include#include #include #include#define Max 4 typedef st
7、ruct bookchar book_num10;char book_name20;char book_writer10;int book_xy;int book_kc;struct book *next;BK;typedef struct borrowchar borrow_book_num10;char limit_date8;BO;typedef struct readerchar reader_num10;char reader_name10;int right;BO borrowMax;struct reader *next;RD;BK *h_book;RD *h_reader;vo
8、id Login(); int Menu(); void Init(); void Init_book(); void Menu_select(); void Insert_New_Book(); void Find_Book(); void add_reader();void Print_reader(); void Print_book(); void Borrow_Book(); void Return_Book(); void Save(); void Save_Book(); void Save_Reader(); void Load();void Load_Reader(); vo
9、id Load_Book(); void Login()system(cls);printf(nnntt*n);printf(nnnttt欢迎使用图书管理系统n);printf(nnntt*n);printf(nntt本程序制作人 学号:nnnnnnn);printf(nnntt 按任意键进入系统.);getch(); system(cls);int Menu() /*主菜单*/ int dm;printf(ntt图书管理系统主菜单n);printf(=n);printf(*t0-退出系统 n);printf(*t1-采编入库 n);printf(*t2-登记读者 n); printf(*t3
10、-借阅登记 n);printf(*t4-还书管理 n);printf(*t5-查询图书信息 n);printf(*t6-查询读者信息 n);printf(=n);printf(请选择相应的代码:); for(;) scanf(%d,&dm); /dm输入的数字 if(dm6) printf(n错误!请重新输入:); else break;return dm; void Menu_select()/*主菜单选择函数*/for(;) switch(Menu() /*功能选择*/ case 0: system(cls); Save();printf(nnt文件保存成功!n); printf(nnt欢
11、迎下次使用本系统!n); getch(); exit(0); case 1:Insert_New_Book();break; case 2:add_reader();break; case 3:Borrow_Book();break; case 4:Return_Book();break; case 5:Print_book();break; case 6:Print_reader();break; default:printf(n错误!); exit(0);void Init() /*初始化*/ BK *p0;printf(n图书初始化开始,请输入图书信息.n包括编号.书名.数量.n);p0
12、=(BK*)malloc(sizeof(BK);h_book=p0; printf(n请输入图书信息:n); printf(图书编号:); /*输入图书编号(唯一)*/ scanf(%s,p0-book_num); printf(图书名称:); /*输入图书名称*/ scanf(%s,p0-book_name);printf(图书作者:); /*输入图书作者*/ scanf(%s,p0-book_writer); printf(图书数量:); /*输入图书数量*/ scanf(%d,&p0-book_kc); p0-book_xy=p0-book_kc; /*开始时图书现有量和库存量相等*/ p0-next=NULL; p