教学计划编制程序课题实验报告 本文关键词:教学计划,课题,编制,实验,程序
教学计划编制程序课题实验报告 本文简介:目录1课题需求描述31.1课题题目31.2需求分析32总体功能与数据结构设计42.1总体功能设计42.2数据结构设计53算法设计和程序设计53.1算法设计63.2程序设计63.3流程图214调试与测试225设计总结221课题需求描述1.1课题题目图书借阅管理系统是一个学校不可缺少的部分,它的内容对于
教学计划编制程序课题实验报告 本文内容:
目录
1课题需求描述3
1.1课题题目3
1.2需求分析3
2总体功能与数据结构设计4
2.1总体功能设计4
2.2数据结构设计5
3算法设计和程序设计5
3.1算法设计6
3.2程序设计6
3.3流程图21
4调试与测试22
5设计总结22
1
课题需求描述
1.1课题题目
图书借阅管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。
编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加会员、查询会员、删除会员、借书信息、到期书催还等智能化管理过程。图书管理者只需略懂电脑知识就可以简易的操作该图书借阅管理系统。
1.2需求分析
1.2.1系统需求分析
图书借阅管理系统主要两大功能:
(1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书);
(2)会员管理(增加会员、查询会员、删除会员、借书信息);
要完成这个题目,主要是建立解决图书和会员的信息的存储,解决的方法是建立两个带头结点的单链表,分别用于存储图书和会员。解决了这个问题后就是何建立这两个链表的联系了,解决的方法是在图书结点中设一个借书人编号,在会员结点中设一个数组用于存会员借的书。解决了这两个问题,剩下的工作就简单了。只需按链表的操作就可以了。
1.2.1.1功能要求
在图书借阅管理程序中须实现以下功能:
(1)图书修改功能:能对图书借阅系统存储的信息进行修改。提供两种修改方式,如按照图书编号修改、按照书名修改。图书编号是图书记录的自然顺序编号。(2)图书删除功能:能对图书借阅系统的图书信息进行删除。删除时以记录为单位,能一次删除一条记录。
(3)借书功能:能对借出的图书作记录信息,能一次借出一本图书。
(4)还书功能:能将被借出的图书信息还原,能一次借出一本图书。
(5)保存功能:能将记录保存在任何自定义的文件中,如保存在:c:/books
、c:/lenders。
(6)通信录管理结束后,能够正常退出图书借阅管理程序。
1.2.1.2
技术要求
(1)每个借阅者记录至少包括如下信息:姓名、学号、姓别等。每本图书记录至少包括如下信息:编号、书名、作者、价格等。
(2)图书、借阅者信息以磁盘文件的形式存储,存储位置、文件名、文件格式由设计者确定。
(3)对于图书借阅系统功能中数据输入、显示、查询、修改、删除、保存等功能,要求编写功能独立的函数或主控函数予以实现,其所属的各项功能尽量由独立的函数实现。
(4)以菜单方式实现功能选择控制。
(5)本图书借阅管理程序能够实现100条记录的管理。
1.2.2
方案分析
此题是设计一个图书借阅管理系统,根据需要应包含图书管理和会员管理。其中对图书和会员的增加、查询和删除都是基本操作。在图书管理中对图书的借阅和归还是重点,这两个操作也是整个系统关键。在会员管理中增加了会员借书信息的查询和对到期书的催还信息。实现这些操作的关键在于建立的两个带头结点的单链,分别用于存储图书和会员的基本信息。在这两个链表之间还应建立起相互的联系,便于查询的操作的实现。另外,在美观方面,需要设计一个操作界面供用户选择使用。
2
总体功能与数据结构设计
2.1
总体功能设计
1.
能够存储一定量的图书信息,并方便有效的进行相应的书籍操作和管理,这主要有:
(1)、图书信息的录入、删除及修改。
(2)、图书信息的多关键子检索查询。
(3)、图书出借、返回及超时惩罚等。
2.
能对一定数量的读者、管理员进行相应的信息存储与管理,包括:
(1)、读者信息的登陆,删除及修改。
(2)、管理员信息的增加,删除及修改。
(3)、读者资料的统计与查询等。
3.能够提供一定安全机制,提供数据信息授权访问,防止随意删改、查询。
(1)、安全性要求
系统安全性要求体现在数据库安全性、信息安全性和系统平台的安全性等方面。安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过分配权限、设置权限级别来区别对待不同操作者对数据库的操作来提高数据库的安全性;系统平台的安全性体现在操作系统的安全性、计算机系统的安全性和网络体系的安全性等方面。
(2)、完整性要求
系统完整性要求系统中数据的正确性以及相容性。可通过建立主、外键,使用check约束,或者通过使用触发器和级联更新。
对查询、统计的结果能够列表显示。
核心算法:Floyd算法(弗洛伊德算法-每一对顶点之间的最短路径)
输入数据:单位个数,各单位名称,距离,频度.
输出数据:路径长度,最佳单位地址名称.
2.2
数据结构设计
对查询、统计的结果能够列表显示。
核心算法:Floyd算法(弗洛伊德算法-每一对顶点之间的最短路径)
输入数据:单位个数,各单位名称,距离,频度.
输出数据:路径长度,最佳单位地址名称.
采用模块化的算法实现。
3
算法设计和程序设计
第一步,让所有路径加上中间顶点1,取A[i][j]与A[i][1]+A[1][j]中较小的值作A[i][j]的新值,完成后得到A(1),如此进行下去,当第k步完成后,A(k)[i][j]表示从i到就且路径上的中间顶点的路径的序号小于或等于k的最短路径长度。当第n-1步完成后,得到A(n-1),A(n-1)即所求结果。A(n-1)[i][j]表示从i到j且路径上的中点顶点的序号小于或等于n-1的最短路径长度,即A(n-1)[i][j]表示从i到j的最短路径长度。
3.1算法设计
如果超市是要选在某个单位,那么先用floyd算法得出各顶点间的最短距离/最小权值。
假设顶点个数有n个,那么就得到n*n的一张表格,arcs(i,j)表示i单位到j单位的最短距离/最小权值,这张表格中和最小的那一行(假设为第t行),那么超市选在t单位处就是最优解
3.2程序设计
#include
3.2.1
图书信息类
Book
声明
class
Book
{
public:
Book();
//
默认构造函数
Book(long
_bno,char_name,bool
_status,long
_bin,long
_bout
=
0,long
_btotal
=
0);//
带参数的构造函数
Book(const
Book
//
拷贝构造函数
~Book();
//
析构函数
Book
//
赋值运算符重载函数
void
borrow(long
_bno);
//
图书借阅
void
giveBack(long
_bno);
//
图书归还
long
getBin()
const;
//
获取馆藏图书量
long
getBout()
const;
//
获取在外图书量
long
getBtotal()
const;
//
获取借阅总量
boolsearchBno(long
_bno)
const;
//
比较图书编号
boolsearchName(char_name)
const;
//
比较图书名
void
printInfo()
const;
//
打印图书信息
friend
std::istream
//
提取运算符重载函数
friend
std::ostream
int
main()
{
Management
manage;
//
图书信息管理类对象
char
fileName[100];
//
存放文件名的字符数组
long
bno;
//
图书编号
char
name[30];
//
图书名
bool
status;
//
在馆状态
long
bin;
//
馆藏图书量
long
bout;
//
在外图书量
long
btotal;
//
借阅总量
int
option;
//
系统功能菜单选项
while(true)
{
//
输出系统功能提示菜单
cout>option;
//
输入功能菜单选项
switch(option)
{
case
1:
//
录入图书信息
cout>fileName;
manage.input(fileName);
break;
case
2:
//
删除图书信息
cout>bno;
manage.deleteBook(bno);
break;
case
3:
//
增加图书信息
cout>bno>>name>>status>>bin>>bout>>btotal;
manage.insertBook(bno,name,status,bin,bout,btotal);
break;
case
4:
//
查询图书信息
cout>bno;
manage.searchBook(bno);
break;
case
5:
//
图书借阅
cout>bno>>bout;
manage.borrowBook(bno,bout);
break;
case
6:
//
图书归还
cout>bno>>bin;
manage.returnBook(bno,bin);
break;
case
7:
//
图书借阅量排序
manage.sort();
break;
case
8:
//
统计在馆状态
manage.statistics();
break;
case
9:
//
图书信息保存
cout>fileName;
manage.save(fileName);
break;
case
0:
exit(0);
default:
cout
#include
using
namespace
std;
3.2.4Book
类成员函数实现部分
//
默认构造函数
Book::Book()
{
bno
=
0;
name
=
NULL;
status
=
false;
bin
=
0;
bout
=
0;
btotal
=
0;
}
//
带参数的构造函数
Book::Book(long
_bno,char_name,bool
_status,long
_bin,long
_bout,long
_btotal)
{
bno
=
_bno;
status
=
_status;
bin
=
_bin;
bout
=
_bout;
btotal
=
_btotal;
name
=
new
char[strlen(_name)+1];
//
开辟堆空间
strcpy(name,_name);
//
字符串拷贝
}
//
拷贝构造函数
Book::Book(const
Book
status
=
book.status;
bin
=
book.bin;
bout
=
book.bout;
btotal
=
book.btotal;
name
=
new
char[strlen(book.name)+1];
//
开辟堆空间
strcpy(name,book.name);
//
字符串拷贝
}
//
析构函数
Book::~Book()
{
if(name!=NULL)
delete
[]
name;
//
释放堆空间
}
//
赋值运算符重载函数
Book
bno
=
book.bno;
status
=
book.status;
bin
=
book.bin;
bout
=
book.bout;
btotal
=
book.btotal;
name
=
new
char[strlen(book.name)+1];
//
重新开辟堆空间
strcpy(name,book.name);
returnthis;
}
//
图书借阅
void
Book::borrow(long
_bno)
{
bin
-=
_bno;
bout
+=
_bno;
btotal
+=
_bno;
if(bin==0)
status
=
false;
}
//
图书归还
void
Book::giveBack(long
_bno)
{
bin
+=
_bno;
bout
-=
_bno;
if(status==false)
status
=
true;
}
//
获取馆藏图书量
long
Book::getBin()
const
{
return
bin;
}
//
获取在外图书量
long
Book::getBout()
const
{
return
bout;
}
//
获取借阅总量
long
Book::getBtotal()
const
{
returnbtotal;
}
//
比较图书编号
bool
Book::searchBno(long
_bno)
const
{
returnbno==_bno;
}
//
比较图书名
bool
Book::searchName(char_name)
const
{
returnstrcmp(name,_name)==0;
}
//
打印图书信息
void
Book::printInfo()
const
{
cout>(istream
is>>book.bno>>name>>book.status>>book.bin>>book.bout>>book.btotal;
if(book.name!=NULL)
delete
[]
book.name;
book.name
=
new
char[strlen(name)+1];
strcpy(book.name,name);
return
is;
}
//
插入运算符重载函数
ostream
for(int
i=0;
i>book;
books[i]
=
book;
}
ifile.close();
cout0)
{
if(bnum0)
{
if(bnum0)
{
if(bnum0)
{
if(bnum<=books[entry].getBout())
{
books[entry].giveBack(bnum);
cout<<“还书成功!“< } else cout<<“还书量超过借阅量,还书失败“< } else cout<<“还书量不正确!“< } else cout<<“未查找到相关图书信息!“< } // 按借阅量对图书排序 void Management::sort() const { longbnum = new long[count]; intindex = new int[count]; for(int i=0; i ++i) { bnum[i] = books[i].getBtotal(); index[i] = i; } // 冒泡排序,降序排列 for(int k=1; k ++k) for(int i=0; i ++i) { if(bnum[i] { longtmp = bnum[i]; bnum[i] = bnum[i+1]; bnum[i+1] = tmp; intitmp = index[i]; index[i] = index[i+1]; index[i+1] = itmp; } } for(int i=0; i ++i) books[index[i]].printInfo(); delete [] bnum; delete [] index; } // 统计在馆状态 void Management::statistics() const { for(int i=0; i ++i) if(books[i].getBin()==0) books[i].printInfo(); } // 图书信息保存 void Management::save(const charname) const { ofstreamofile(name); if(!ofile.fail()) { ofile< for(int i=0; i ++i) ofile< ofile.close(); cout<<“图书信息保存成功!“< } else { ofile.close(); cout<<“图书信息保存失败!“< } } 3.3流程图 4 调试与测试 5 设计总结 这次基础强化训练的课程设计对于我们来说,有一定的难度。因为他要求我们较完整的去实现一个比较可行的程序。将其应用到实际的生活中去。我被分配到的题目是图书借阅系统的实现与设计。这个题目相对来说贴近生活,比较容易理解。但是设计一个较为完整的程序却不是这么简单的。 首先我分析了相关的题目内容,并由此而进行了相关资料和书籍的查询工作然后才开始正式进行设计。一开始不知从何下手但后来分析了一下题目,并结合这学期所学的知识,再加上相关提示我决定用指针、链表和文件的内容来编写程序。图书管理主要就是有一些操作来完成,这些操作包括:新进图书基本信息的输入、图书基本信息的查询、对撤消图书信息的删除、为借书人办理注册、办理借书手续(非注册会员不能借书)、办理还书手续等等。我想用数据结构知识来实现函数:添加图书,图书查询,删除图书,增加会员,会员查询,删除会员,借阅图书,,归还图书,借书信息,到期书催还。最后编写退出系统的函数。 在具体编写程序时考虑到图书的相关操作与会员基本相同,所以实际上只要编写前三个函数,后面的函数把相应变量改变就可以了。添加图书:考虑到图书的信息较多,所以用结构体对其定义。又考虑到图书量大,所以添加后要保存到文件中去。图书查询:用所学过的顺序查找法来写。删除图书:把保存到文件中的内容写到链表中去,用链表删除结点的方法来删除图书。我们所学过的指针这时正好用上。 最后把各函数同主函数相连,用主函数调用它们,编写好好看的界面就可以了。 同时通过这几天的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。尤其是编写大型的程序所要拥有的知识和技能比较缺乏。程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的。我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。才能进一步提高自己的编程能力。 最后,还要感谢我们实验指导老师寇老师的细心指导、热心帮助。路漫漫其修远兮,虽然本学期数据结构课程结束了,但仍觉得自己还有很多东西要学,我会在自己在以后的学习生活中不断努力、不断提高,争取更大的进步。 22