C++大作业图书管理系统 实验报告Word下载.docx
《C++大作业图书管理系统 实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《C++大作业图书管理系统 实验报告Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
一设计目的…………………………………………………………….1
二大作业的内容........................................2
三大作业的要求与数据..................................3
四大作业应完成的工作..................................4
五总体设计(包含几大功能模块)...........................5
六详细设计(各功能模块的具体实现算法——流程图)………….6
七调试分析(包含各模块的测试用例,及测试结果)…………….7
八总结………………………………………………………………...8
十参考资料…………………………………………………………….9
一大作业的目的
《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。
二大作业的内容
对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数等)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.将图书的信息进行记录,信息内容包含:
(1)图书的编号
(2)图书的书名(3)图书的库存量。
假设,现收集到了一个图书馆的所有图书信息,要求用C语言编写一个简单的图书管理系统,可进行录入、查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
三大作业的要求与数据
1、用C语言实现系统;
2、对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.
3、图书信息包括:
其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:
(1)每一条记录包括一本图书的编号、书名、库存量
(2)图书信息录入功能:
(图书信息用文件保存,可以一次完成若干条记录的输入。
)
(3)图书信息显示浏览功能:
完成全部图书记录的显示。
(4)查询功能:
完成按书名查找图书记录,并显示。
(5)图书信息的删除:
按编号进行图书某图书的库存量.
(6)借书登记系统:
可以输入读者编号和所借书号来借书。
(7)还书管理系统:
可以输入读者编号和所借书号来还书。
(8)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
四大作业应完成的工作
(1)编写算法;
(2)算法测试,并有具体的测试结果和结果分析;
(3)撰写大作业报告。
内容包括:
1)封面扉页
2)设计任务书
3)目录
4)总体设计方案(包括流程图)
5)使用说明及运行实例(包括界面)
6)成员设计内容简介
7)项目源程序代码(注意注释的使用)
8)指导教师评语
五总体设计(包含几大功能模块)
1、新书入库模块;
2、查询模块;
3、借阅管理模块;
4、借书登记模块;
5、还书管理模块;
6、输出信息模块;
7、退出系统模块;
六详细设计(各功能模块的具体实现算法——流程图)
6.1各函数的功能和实现
1、新书入库模块:
形参分别为:
书名,书号,以及有多少本书要入库,再根据要求将信息写入文件boot.dat中。
又由于最开始要输入三本新书,故可以加一个初始化函数init_book(),但是初始化函数只执行一次,也就是在系统第一次运行的时候执行,此时可以根据判断是否存在boot.dat这个文件来决定是否执行初始化函数。
Y
根据数量修改库存
N
book.dat中增加此新
书,根据数量设置库存
2、查询模块:
可用一个函数voidfind_book(charbook_num[])来实现。
找到就输出此书全部信息,找不到就输出查找失败信息。
3、成绩查询功能
NY
3、借阅管理模块:
用初始化函数init_reader()来实现对读者的初始化。
因为读者初始化函数也只是在系统第一次运行的时候执行一次,故也可以根据是否存在reader.dat文件来确定是否执行此函数。
(到现在可以发现在系统初始化函数里,至少已经需要调用两个初始化函数了)
4、借书登记模块:
可用一个函数borrow_book(charreader_num[],charbook_num[])来实现。
在函数中要分别判断
A该读者的编号是否已经存在,如果不存在,则提示错误。
B该读者的借阅书是否已满(即最多只能借1本书)如果是,则提醒该用户先去还书
C输出的书号对应的书是否存在,如果不存在,则提醒读者不存在此书。
借书过程完成后,则对读者信息里的借书信息写上所借书号,并修改库存量。
NN
YN
N
借书登记,修改book.dat
中的现存信息,reader.dat
中的借书卡信息Y
5、还书管理模块:
可用一个函数return_book(charreader_num[],charbook_num[])来实现。
在实现此函数时要判断:
A该读者的姓名是否已经存在,如果不存在,则提示错误。
B该读者是否已经借阅此书。
如果没有,则提示错误。
C还书过程完成后,则对读者信息里的借书信息清零,并修改库存量。
N
错误
正确
还书将读者信息借书卡清0
修改book.dat现存信息
N
6、输出信息模块:
可分别用模块print_book()和print_reader()来实现直接从book.dat文件和reader.dat文件中读取信息并输出。
图书
7、退出系统模块:
可用一个函数exit()来实现。
首先将信息保存到文件,释放动态创建的内存空间,再退出此程序。
如图6.1
七调试分析(包含各模块的测试用例,及测试结果)
7.1源程序
#include<
stdio.h>
math.h>
string.h>
typedefstructbk{
charbook_num[11];
charbook_name[41];
intbook_kc;
intbook_xc;
structbk*next;
}book;
/*图书信息*/
typedefstructrd{
charreader_num[11];
charreader_name[11];
charreader_book_num[11];
structrd*next;
}reader;
/*读者信息*/
structbk*h_book,*h_reader;
/*全局变量,分别为指向图书信息链表和读者信息链表的头指针*/
voidForm_Insert_New_Book();
/*新书入库菜单*/
voidForm_Find_Book();
/*查询图书菜单*/
voidForm_Borrow_Book();
/*借书菜单*/
voidForm_Return_Book();
/*还书菜单*/
voidFind_Book(char*);
/*查询图书*/
voidInsert_New_Book(char*,char*,int);
/*新书入库,即在链表中插入一个新节点*/
voidBorrow_Book(char*,char*);
/*借书,修改读者借阅信息和图书的现存信息*/
voidReturn_Book(char*,char*);
/*还书,修改读者借阅信息和图书的现存信息*/
voidprint_book(structbk*);
/*输出全部图书信息*/
voidprint_reader(structrd*);
/*输出全部读者信息*/
voidload_data();
/*从文件中读取数据,链表头指针指向第一个节点*/
voidinit_reader();
/*第一次运行程序时对三个读者的初始化*/
voidinit_book();
/*第一次运行程序时对三本图书的初始化*/
voidsave();
/*将链表中的信息保存到文件中*/
voidM_Form()/*主菜单*/
{charch;
printf("
\n图书管理系统主窗口"
);
\n0:
退出系统"
\n1:
新书入库"
\n2:
图书查询"
\n3:
借书登记"
\n4:
还书管理"
\n5:
输出全部信息"
do{/*此循环用来保证选择正确的数字键执行相应的功能*/
\n\n请选择相应的功能代码:
"
scanf("
%c"
&
ch);
fflush(stdin);
/*用于清除键盘缓冲区中的多余字符*/
}while(ch!
='
0'
&
ch!
1'
2'
3'
4'
5'
switch(ch)/*根据输入的字符进行选择执行相应的模块*/
{case'
:
exit(0);
case'
Form_Insert_New_Book();
break;
Form_Find_Book();
Form_Borrow_Book();
Form_Return_Book();
load_data();
print_book(h_book);
print_reader(h_reader);
M_Form();
default:
printf("
error\n"
}
}
voidForm_Find_Book()
\n图书查询功能模块,请选择相应的功能代码:
\n"
0:
返回到主菜单\n"
1:
do{
switch(ch)
/*选择0,则返回到上一级目录,即主菜单*/
{printf("
\n请输入需要需要查询的书的编号:
%s"
book_num)