C++课程设计图书管理系统.docx
- 文档编号:27043804
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:56
- 大小:703.71KB
C++课程设计图书管理系统.docx
《C++课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计图书管理系统.docx(56页珍藏版)》请在冰豆网上搜索。
C++课程设计图书管理系统
C++课程设计
题目图书管理系统
院(系)信息工程学院
专业班级12级信息与计算科学一班
学生姓名侯磊、高赣、李智
学号1242155107/04/10
设计地点教13#603
指导教师李春梅
起止时间:
2014年5月12日至2014年5月21日
1绪论
1.1设计目的
《C/C++语言课程设计》是信息管理与信息系统专业的重要实践性课程。
课程设计为学生提供了一个手脑并用、独立实践的机会。
目的在于培养学生分析问题和解决问题的能力,将课本的理论知识与实际应用问题进行有机结合,提高学生程序设计、程序调试及项目开发能力。
通过本课程设计的实践,全面总结C++课程学习中的数据类型、程序结构、数组、函数、指针、结构体等基本概念,掌握其使用方法。
培养使用面向过程的程序设计方法编写计算机程序的能力。
课题的目的主要是考查学生对C/C++语言的综合编程能力的掌握,培养学生的分析问题和解决问题的能力及逻辑思维能力。
该课题主要考察学生对函数、结构体,指针,文件等的操作,以及C/C++语言基本规则和算法的掌握,所以完成本颗题目要求学生较强的设计能力,特别是要具有综合应用能力。
如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。
1.2设计要求
①问题分析和任务定义:
根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么(而不是怎么做),限制条件是什么。
②概要设计:
对问题描述中涉及的操作对象定义相应结构体,并按照以设计需要为中心的原则,确定各个结构体之间的关系。
逻辑设计的结果应写出每个结构体抽象数据结构体型的定义(包括数据结构的描述和每个基本操作的功能说明)、各个主要模块的算法,并画出模块之间的调用关系图。
③详细设计:
定义相应的储存结构并写出各函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能做到明确具体。
详细设计的结果写出数据成员储存结构的码类型定义,写出函数形式的算法框架。
④程序编码:
把详细设计的结果进一步求精为程序设计语言程序,同时加入一些注解,使程序中逻辑概念清楚。
⑤程序调试与测试:
采用自底向上,分模块进行,即先调试低层函数。
能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。
调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果。
⑥结果分析:
程序运行结果包括正确的输入及输出结果和含有错误的输入及其输出结果。
1.3设计内容
设计一个小型图书借阅管理系统。
1.4系统功能简介
①管理员功能
A.添加新的图书资料
B.修改已有图书资料
C.删除已有图书资料
D.查找已有图书资料
E.查看所有图书资料
F.修改读者用户信息
G.删除读者用户信息
H.查看所有读者信息
②读者功能
A.借阅新的图书
B.归还已借图书
C.查找所需图书
D.查看借阅情况
1.5设计平台
本系统是在windows环境下开发的,使用软件为Microsoft公司的VisualC++6.0,并采用了面向过程的技术。
2图书管理系统的需求分析
2.1需求分析
2.1.1管理员功能:
①登录:
输入管理员密码,若密码错误则不得执行管理员操作。
②添加新书:
增加新的图书资料,同时需检查新书的图书编号是否已存在于原图书资料中,若已存在则应取消添加或提示重新输入。
③修改图书:
通过编号查询该图书资料,若该编号存在,则显示已有信息,允许修改,否则提示无该图书信息。
④删除图书:
通过编号查询该图书资料,若该编号存在,则显示已有信息,允许删除,否则提示无该图书信息。
删除对象包括该图书资料以及“图书状态”和“借阅人”中与此书相关的所有记录。
⑤查找图书:
A.按书号查找:
通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
B.按书名查找:
通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
C.按作者查找:
通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
⑥查看全部图书:
显示所有图书资料,包括书号、书名、作者、状态和借阅人等信息。
⑦修改读者:
通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许修改,否则提示无该读者信息。
⑧删除读者:
通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许删除,否则提示无该读者信息。
删除对象包括该读者姓名、班级、电话以及“图书状态”和“借阅人”中与此人相关的所有记录。
⑨查看所有读者:
显示所有读者资料,包括姓名、班级、电话等信息。
2.1.2读者功能:
①登录:
输入读者姓名,若未经注册则不得进入读者服务界面。
②注册:
新用户经注册方可登录系统并使用读者服务功能。
③借书:
A.输入所需图书编号,判断该编号是否存在,若不存在则提示重新输入。
B.若所输入图书编号存在,则判断该书籍是否已被借出,若已借则不允
许执行借书操作。
C.若所输入图书未借,则提示输入读者姓名,判断所输入读者姓名是否
存在,若不存在则提示重新输入。
D.若读者姓名存在,则允许执行借书操作。
E.借书处理包括在“图书状态”中加上“已借”标记。
④还书:
A.输入所借书编号,判断该编号是否存在,若不存在则提示重新输入。
B.判断该书是否已借出,若未借则不允许执行还书操作。
C.借书处理包括在“图书状态”中加上“未借”标记。
⑤查询图书:
A.按书号查找:
通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
B.按书名查找:
通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
C.按作者查找:
通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
⑥查看借阅情况:
输入读者姓名,若该姓名不存在则提示重新输入,若该姓名存在则显示该读者借阅信息。
2.2概要设计
2.2.1整体设计
经过需求分析,本系统共设计了五个大模块,分别是书籍数据维护模块、书籍管理模块、读者数据维护模块、读者管理模块和菜单模块。
接着相应定义了五个结构体,分别是书籍结构体(Book)、书籍管理结构体(BookManage)、读者结构体(Reader)、读者管理结构体(ReaderManage)和菜单结构体(Menu)。
书籍结构体(Book)的功能在于存放和维护书籍的基本信息,包括书号、书名、作者、状态(已借/在架)和借阅人;书籍管理结构体(BookManage)的功能在于实现对书籍的相关操作,包括读取书籍文档文件(book.txt)、保存书籍文档文件、添加图书、修改图书、删除图书、显示全部图书和查找图书;读者结构体(Reader)的功能在于存放和维护读者的基本信息,包括姓名、班级和电话;读者管理结构体(ReaderManage)的功能在于实现对读者的相关操作,包括读取读者文档文件(reader.txt)、保存读者文档文件、新读者注册、修改读者、删除读者、显示全部读者和查找读者;菜单结构体(Menu)的功能在于实现各界面的引导工作,包括主登录界面、系统管理界面、读者登录界面、读者服务界面、管理员书籍查找界面和读者书籍查找界面。
2.2.2系统层次结构图
图2.1系统层次结构图
2.2.3流程图(部分示例)
①管理员登录
图2.2管理员登录流程图
②读者登录
图2.3读者登录流程图
③读者借阅图书
图2.4读者借阅流程图
④管理员或读者按书名查找图书
图2.5管理员或读者按书名查找流程图
3系统设计
3.1详细设计
3.1.1书籍结构体(Book)
①私有数据
charbnum[10];//书号
charbname[20];//书名
charbauthor[10];//作者
charrname[10];//借阅人
②公有数据及公有函数
inttag;//状态标记判断指标(已借/在架)
Book()//构造函数初始化信息
voidset_bnum(char*no)//设置书号
char*get_bnum()//获得书号
voidset_bname(char*n)//设置书名
char*get_bname()//获得书名
voidset_bauthor(char*a)//设置作者
char*get_bauthor()//获得作者姓名
voidset_tag(intt)//状态设置
voidset_rname(char*rn)//设置借阅人
char*get_rname()//获得借阅人姓名
voidshow_tag()//显示图书状态
voidcopy(Bookm)//Book结构体copy函数
3.1.2书籍管理结构体(BookManage)
①私有数据及函数
Bookbooks[100];//定义Book书籍结构体数组对象,最大容量100本
intlength;//计数
voidsaveFile()//保存书籍文件
voidreadFile()//读取书籍文件
②公有数据及函数
BookManage()//构造函数,读取磁盘文件
~BookManage()//析构函数,保存磁盘文件
booladd(Bookbook)//添加图书资料
intbnu_search(char*bnu)//按书号查找书籍
intbna_search(char*bna)//按书名查找书籍
intbau_search(char*bau)//按作者查找书籍
intrn_search(char*rn)//按借阅人查找书籍
voidrevise(Bookbook,inti)//带参的修改书籍函数
voiddeleteBook(intindex)//带参的删除书籍资料函数
voidshow_book()//不带参的显示书籍函数
voidshow_book(inti)//带参的显示书籍函数
voidbr_book()//读者借、还书功能函数
boolin(inti)//判断图书是否在架函数
3.1.3读者结构体(Reader)
①私有数据及函数
charrname[10];//读者姓名
charrclass[10];//班级
charrtel[10];//电话
②公有数据及函数
Reader()//构造函数,实现数据初始化
voidset_rname(char*rn)//设置读者姓名
char*get_rname()//获得读者姓名
voidset_rclass(char*rc)//设置班级
char*get_rclass()//获得班级
voidset_rtel(char*rt)//设置电话
char*get_rtel()//获得电话
voidcopy(Readerm)//读者Reader结构体copy函数
3.1.4读者管理结构体(ReaderManage)
①私有数据及函数
Readerreaders[50];//定义读者结构体数组对象,最多50位
intlength;//计数
voidreadFile()//读取读者文件函数
voidsaveFile()//保存读者文件
②公有数据及函数
ReaderManage()//构造函数,读取读者文件
~ReaderManage()//析构函数,保存读者文件
voidadd_reader(Readerr)//添加读者用户函数
intsearch(char*rn)//按姓名查找读者函数
boolrevise(Readerreader,inti)//修改读者资料函数
voiddelete_reader(intindex)//删除读者函数
boollog_reader(Readerr)//登录时判断读者用户是否存在函数
voidreg_reader()//注册用户函数
voidshow_reader()//不带参的显示读者信息函数
voidshow_reader(inti)//带参的显示读者信息函数
3.1.5菜单结构体(Menu)
①私有数据及函数
BookManagebm;//定义书籍管理结构体对象bm
ReaderManagerm;//定义读者管理结构体对象rm
Readerr;//定义读者结构体对象r
intchoice;//菜单序号选择
intkey;//管理员密码
②公有数据及函数
voidheader()//页眉
voidlog_menu()//主界面登录菜单
voidadmin_menu()//管理员管理菜单
voidreader_menu()//读者服务菜单
voidbsearch_menu()//读者查找书籍菜单
voidabsearch_menu()//管理员查找书籍菜单
voidreader_lr()//读者登录或注册菜单
voidlog_admin()//管理员登录
voidrn_search()//按书号查找函数
voidbnu_search()//按书号查找函数
voidbna_search()//按书名查找函数
voidbau_search()//按作者查找函数
voidaddBook()//新增书籍函数
voidreviseBook()//修改书籍函数
voiddelBook()//删除书籍函数
voidreviseReader()//修改读者用户函数
voiddelReader()//删除读者用户函数
3.1.6主函数(main)
intmain()
4系统的实现
4.1各界面菜单显示
①主登录界面
图4.1.1主登录界面
②系统管理界面
图4.1.2系统管理界面
③读者登录界面
图4.1.3读者登录界面
④读者服务界面
图4.1.4读者服务界面
⑤书籍查找界面
图4.1.5书籍查找界面
4.2登录验证
①管理员登录
A.输入错误密码
B.输入正确密码
②读者登录
A.输入已注册姓名
B.输入未注册姓名
4.3注册新读者用户
4.4添加新的图书资料
①输入已存在图书书号②输入未存在图书书号
4.5修改已有图书资料
①输入不存在图书书号②输入已存在图书书号
.4.6删除已有图书资料
①输入不存在图书书号②输入已存在图书书号
4.7查找已有图书资料(以按书号查找为例)
①输入不存在图书书号
②输入已存在图书书号
2.4.8显示所有图书资料
5设计总结
经过近一个星期的努力,前后修修改改,调试又调试,我的C++图书管理系统终于得以诞生!
在这个过程中,我发现自己还有很多很多知识都没有学好,看别人的例子的时候好像很简单,自己一上机操作就有问题。
调试的时候系统总是报错,还有很多警告,每添加一个函数,往往都要要调试很久,有时候仅仅只是少了一个大括号,却花上近半个小时才找到问题的瓶颈所在。
系统虽然完成了,也可以运行,一些基本的功能也能够实现,但我知道,还有很多的不足。
另外,我发现帮助文件真的很有用,每当我看别人例子看不懂的时候,都是去帮助文件搜索,如果里面的信息不够完整,再利用各大网站的搜索引擎来寻找答案,比如更改背景颜色的问题,之前试了很多次都不行,后来偶然发现一个MS-DOS命令大全,然后再去网上搜索color命令的使用语法,原来以为很复杂的代码,只需一句system(colorfd),问题就迎刃而解了。
以后还会有很多课程设计,一定要吸取这次的教训,知识不是看过就可以了,而是要把知识学透、学精,才能够真正做到为我所用。
参考文献
1.MS-DOS命令大全[帮助文件]/落雪飞花;网络资料
2.C++函数库参考[帮助文件];刘双印老师提供
3.C++基础教程--从问题分析到程序设计[专著]/(美)D.S.Malik著;清华大学出版社
4.罗建军.《边陲快讯》在线投稿系统设计与实现[D].昆明:
昆明理工大学,2010
附录:
C++图书管理系统源代码
#include
#include
#include
#include
#include
#defineBookFile"book.txt"//将字符串BookFile替换原文件中的宏名称book
#defineReaderFile"reader.txt"
usingnamespacestd;
//**********读者结构体,用于存放读者基本信息**********
classReader
{
private:
charrname[10];
charrclass[10];
charrtel[10];
public:
Reader()//构造函数,实现数据初始化
{strcpy(rname,"");strcpy(rclass,"");strcpy(rtel,"");}
voidset_rname(char*rn)//设置读者姓名
{strcpy(rname,rn);}//将rn的字符复制给rname
char*get_rname()//获得读者姓名
{returnrname;}//返回rname的值
voidset_rclass(char*rc)//设置班级
{strcpy(rclass,rc);}
char*get_rclass()//获得班级
{returnrclass;}
voidset_rtel(char*rt)//设置电话
{strcpy(rtel,rt);}
char*get_rtel()//获得电话
{returnrtel;}
voidcopy(Readerm)//读者Reader结构体copy函数
{strcpy(rname,m.get_rname());strcpy(rclass,m.get_rclass());strcpy(rtel,m.get_rtel());}
};
//*********读者管理结构体,实现对读者用户的管理*********
classReaderManage
{
Readerreaders[50];//定义读者结构体数组对象,最多50位
intlength;
voidreadFile()//读取读者文件函数
{
ifstreamfread;//定义输入文件流对象fread
length=0;//计数
if(!
fread)
{cout<<"读取磁盘文件失败!
"< (1);} fread.open(ReaderFile,ios: : binary);//使文件流与文件关联,以二进制方式打开 inti=0; while((fread.read((char*)&readers[i],sizeof(Reader))))//计算并返回所占字节数 i++; length=i; fread.close();//关闭磁盘文件 } voidsaveFile()//保存读者文件 { ofstreamfwrite;//定义输出文件流对象fwrite if(! fwrite) {cout<<"文件保存失败! \n";exit (1);} fwrite.open(ReaderFile,ios: : binary);//使文件流与文件关联,以二进制方式打开 fwrite.write((char*)readers,length*sizeof(Reader));//计算并返回所占字节数 fwrite.close();//关闭磁盘文件 } public: ReaderManage()//构造函数,读取读者文件 {readFile();} ~ReaderManage()//析构函数,保存读者文件 {saveFile();} voidadd_reader(Readerr)//添加读者用户函数 { if(length>=50) {cout<<"对不起,注册人数已满! \n";return;} readers[length].copy(r);//调用读者结构体copy函数 length++; } intsearch(char*rn)//按姓名查找读者函数 { for(inti=0;i if(strcmp(readers[i].get_rname(),rn)==0)//判断是否相等 returni; return-1; } boolrevise(Readerreader,inti)//修改读者资料函数 { readers[i].copy(reader);//调用读者结构体cpoy函数 returntrue; } voiddelete_reader(intindex)//删除读者函数 { for(inti=index;i readers[i].copy(readers[i+1]);//用后面的地址覆盖前面的地址 length--; } boollog_reader(Readerr)//登录时判断读者用户是否存在函数 { for(inti=0;i if(strcmp(readers[i].get_rname(),r.get_rname())==0) returntrue; returnfalse; } voidreg_reader()//注册用户函数 { charn[10];//姓名name charc[10];//班级class chart[10];//电话tel Readerreader; cout<<"\n\t请输入您的姓名: "; cin>>n; cout<<"\n\t请输入您的所在班级: "; cin>>c; cout<<"\n\t请输入您的联系电话: "; cin>>t; reader.set_rname(n);//调用读者结构体设置读者姓名函数 reader.set_rclass(c);//调用读者结构体设置读者班级函数 reader.set_rte
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 图书 管理 系统