


免费预览已结束,剩余50页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中南大学C+课程设计实践报告题 目: 学生信息管理系统专业班级: 城地1502指导老师:蒋冲姓 名:杨帆学 号:0202150222完成时间:2016年 7 月 13 日中南大学课程设计报告目录成员设计内容简介1第一章 系统概述11.1 功能简介21.2 设计思路3第二章 第二章系统功能的分析和简要框图32.1 主函数42.2 初始化文件42.3 主菜单52.4 查询72.5 借书操作82.6 还书操作92.7 新增图书102.8 删除图书112.9 新增读者122.10 读者信息132.11 借阅记录14第三章 调试及运行结果153.1 主菜单153.2查询图书信息163.3归还图书163.4 借阅图书:173.5读者注册:183.6图书信息修改193.7新书采编入库193.8删除图书信息203.9借阅记录203.10读者信息:21第4章 总结21 4.1 遇到的问题及解决方法21 4.2 收获和体会23 4.3 致谢23 第五章 源代码235.1 book.h235.2 head.h235.3 addbook.cpp245.4 addreader.cpp265.5 brbook.cpp285.6 checkbr.cpp325.7 checkreader.cpp325.8 delbook.cpp335.9 findbook.cpp355.10 main.cpp425.11 mainmenu.cpp425.11 return.cpp445.11 setfile.cpp46- 3 -前言图书管理在生活中运用非常广泛,因此需要用许多的程序来对它们进行管理。此程序包含了图书信息的录入、图书信息的浏览、图书的查询和排序、图书信息的删除与借书,还书等。通过编译一个C+语言函数,其中包含一个主函数,多个子函数,主函数调用其余的子函数实现人们能够简易、快捷的了解并找到自己所想要的信息的功能。该图书信息管理系统记录了图书馆中图书的图书号、书名、作者姓名、出版社名、图书的现存量和总库存量等书籍数据,同时有对书籍数据以及借阅者的信息进行管理,可以实现对书籍和借阅者进行添加和管理。成员设计内容简介一、题目及要求题目三:图书管理系统设计图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等功能描述1、新进图书基本信息的输入。2、图书基本信息的查询。3、对撤消图书信息的删除。4、为借书人办理注册。5、办理借书手续。6、办理还书手续要求:使用二进制文件方式存储数据,系统以菜单方式工作二、目的与意义C+语言课程设计课程设计是计算机科学与技术专业实践性环节之一,要求明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;通过课程设计的综合训练可以使学生进一步理解和掌握面向对象程序设计课程的基本知识;掌握面向对象程序设计的思路和方法;基本具有利用面向对象的方法以及 C+的编程思想来完成系统设计的能力提高学生用高级语言进行程序设计的能力,重点提高用C语言进行文件操作和绘图应用的编程技术水平。三、小组成员及小组分工 小组成员:杨帆、余华龙、姚翔宇杨帆: brkook() findbook() addbook() delbook()姚翔宇:checkreader(),checkbr(),returnbook();mainmenu(), 余华龙:头文件,main(),setfile(),addreader()四、主要参考文献C+语言程序设计(第三版),郑莉,清华大学出版社,2004C+ Primer Plus(第六版),Stephen Prata,人民邮电出版社,2012第一章 总体设计1.1 功能简介本软件是一个简单的图书管理系统,软件为win32控制应用台程序。完成以下功能:1.新进图书基本信息的输入2.图书基本信息的查询3.对撤销图书信息的删除4.为借书人办理注册5.办理借书手续(非注册会员不能借书)6.办理还书手续补充要求:使用二进制文件方式存储数据系统以菜单方式工作 1.2 设计思路基本功能:主菜单(1)新书采编入库:新购入一种书,登记到图书信息中去。如果这种书在帐中已有,则只将总库存量增加。(3)删除图书:某种书已无保留价值,将它从图书帐目中删除。(4)查询已在图书库中的图书信息。(5)对读者的信息进行管理:新增,查询。(6)查看借阅记录查询图书信息:a)按书名查询: 如查找所有书名为“数据结构”的图书。b)按作者姓名查询:如查找所有“张三”编写的图书。c)按出版社名查询:如查找所有“机械工业出版社”出版的图书。d)按书籍编号查询:如查找书籍编号为“978-7-115-27946-0”的图书。e)组合查询:如查找所有“张三”编写的、由“机械工业出版社”出版的图书。(2)借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的信息,改变该书的现存量。(3)归还:注销对借阅者的登记,改变该书的现存量。46整个程序的主函数由以下部分构成:头文件head.h、头文件book.h、setfile、mainmenu1.头文件head.h、book.h实现两个类的定义bookdate图书类,实现对图书的描述:图书基本信息如图书编号、书名、作者、出版社、单价等;图书的管理信息如查找图书及新增图书、删除图书(通过书的现存量、书的总库存量描述)等;Readerdata读者及图书管理类,公有继承图书类,实现对读者信息的描叙:读者的个人资料如借阅者姓名、学号、性别、登陆密码等;读者借阅信息如借还图书本数等;类的数据成员和各函数的功能描述class bookdata/数据成员:char bookisn50/图书编号,bookname50/书名writer50/作者 publishing50/出版社;、nowstore, /书的现存量allstore,书/的总库存量 price/单价class managebook数据成员:reader50/借阅者姓名, rdID50/学号gender50/性别 password50/登陆密码num/借还图书本数各个功能函数:void setfile(); /初始化数据文件void mainmenu(); /主菜单函数void findbook(char*file); /查询图书 void brbook(char*file); /借阅图书void returnbook(); /归还图书void returnf(char*file, readerdata p);void addbook(); /新书采编入库void add(char*file, bookdata p);void delbook(); /清除库存,删除图书信息void del(char*file, bookdata p);void addreader(); /新增读者信息void checkreader(); /查询读者信息void checkbr(); /查看借阅记录 第2章 系统功能的分析和简要框图算法分析:在本程序中,头文件定义了两个类:class bookdata和class managebook,以及各个功能函数。运行程序,首先执行void setfile();函数,该函数初始化数据文件,将在exe程序所在文件夹生成所有数据文件,若该文件夹没有数据文件,则生成空的数据文件,数据文件记录图书馆管理系统的所有数据。然后由void mainmenu();生成主菜单,主菜单运用switch语句区分指令进行执行功能,其他菜单亦雷同形成。 1.查询图书信息 2.归还图书 3.图书信息修改 4.读者注册 5.读者信息 6.借阅记录 0.退出系统 分别调用相应函数直接在数据文件上对图书执行相应功能。在让借阅者执行查询,借阅,归还图书等操作之前,首先要在初始化的数据文件中添加图书信息, 整个图书馆管理系统大体结构就如上所述,大概可分为图书信息管理和借阅者信息管理2个模块,外加一个借阅记录则构成图书馆管理系统。本程序对数据文件中数据的编辑是通过将数据文件中的数据编辑后转移至中转文件中,再将中转文件的数据复制回清空了的数据文件当中,即可完成编辑。2.1main.cpp /主函数包含三个部分:建立数据文件setfile();设置背景为紫色字体亮白色/修改窗口名称2.2 setfile.cpp /初始化数据文件初始化数据文件,将在exe程序所在文件夹生成所有数据文件,若该文件夹没有数据文件,则生成空的数据文件,数据文件记录图书馆管理系统的所有数据。包括:中转文件.dat Readerdata.dat record.dat bookdata.dat 中转文件1.dat通过将数据文件中的数据编辑后转移至中转文件中,再将中转文件的数据复制回清空了的数据文件当中,完成编辑。2.3 mainmenu.cpp /主菜单 2.4 findbook.cpp /查询图书 2.5 brbook.cpp /借阅图书是是是否否否是否继续查询图书本数不足,请重新输入成功借阅 本此图书!Nowstore0?是否请输入要借阅此图书的本数是k=Y,k=y或k=N,k=n?i=1?该图书现存量为0,无法借阅按要求输入读者信息nowstore=o?输出图书信息确定要借阅此书是否否输入错误请重新输入work=y或work=Y?结束开始bookname;reader;rdID;num;图书是否存在?修改借阅记录图书信息修改借阅记录图书信息是否继续归还?mainmenuTrueTrueFalseFalse开始结束2.6 returnbook .cpp /归还图书booknamewriterpublishing bookisnnowstore是否添加新书?调用addbookname、writer、publishing相同?TrueFalse开始TrueFalse该书籍已存在输入新增加的本数并通过中传文件写入数据文件直接将新书籍信息写入数据文件继续添加新书?FalseTruemainmenu结束2.7 addbook.cpp /新书采编入库2.8 delbook.cpp /清除库存,删除图书信息否输错请重试结束否K=1?是K=1或k=2?请根据下面提示输入所要注销的书籍的信息是是否是否继续删除图书本数不足,请重新输入请输入注销本书是否是W=1或w=0?该图书信息不存在!w=o?否输入错误,请重新输入!开始2.9 addreader.cpp /新增读者信息reader;num;读者信息是否存在?是否要继续查询借阅者信息?mainmenuTrueTrueFalseFalse以读的方式打开数据文件进行查询readergenderrdIDnum;该借阅者信息不存在!num;结束开始2.10 checkreader.cpp /查询读者信息2.11 checkbr.cpp /查看借阅记录 开始findbook借阅记录:bookisn bookname readerrdIDnum结束mainmenu从借阅记录(record.dat)中直接读取第三章 调试及运行结果3.1主菜单3.2查询图书信息3.3归还图书3.4借阅图书:3.5读者注册:3.6图书信息修改3.7新书采编入库3.8删除图书信息3.9借阅记录3.10读者信息:第四章 总结4.1遇到的问题及解决方案问题一:常出现没有与这些操作符匹配的运算符解决方案是:引入合适的头文件,并重新输入#include内容,编译器的报错就会消失。问题二:不懂得对数据文件的操作解决方案:通过对模板程序的模仿,并了解自学fstream常用方法的使用。问题三:程序常因错误输入而崩溃解决方案:运用一些可以容错的语句来防止多余的输入,并能返回重新输入。也可以运用提示词来减少用户的非法输入。问题四:运用二进制文件读写解决方案:意我们不再使用插入和提取操作符(译者注: 操作符). 你可以这么做,但它不会用二进制方式读写。你必须使用read() 和write() 方法读取和写入二进制文件. 创建一个二进制文件, 看下一行。ofstream fout(file.dat, ios:binary); 这会以二进制方式打开文件, 而不是默认的ASCII模式。问题五:文件结构的混乱解决方案:在书写时保持良好的书写习惯,并在适当的地方增加注释4.2 收获和体会虽然在这个学期中,我们已经学习了C+语言程序设计这门课,但是知识的运用完全是一个更高水平的要求。这次设计,不仅巩固了我以前所学的知识,还让我对c+语言有了更深一步的了解,掌握了更多的技巧和技能。在这次课程设计中,我们首先对系统的整体功能进行了构思,然后用结构化分析方法进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽可能的将模块细分,最后在进行函数的调用。我们在函数的编写过程中,我们不仅用到了for循环、while循环和switch语句,还用到了函数之间的调用(包括递归调用)。编写一个完整并且有严密逻辑,以及抗非法输入的程序对于初学者来说还是有相当的挑战性的,我们在编写的过程中遇到了重重困难,有些克服了进步了。然而更多地是感受到自己知识储备的不足与实现按想法之间的矛盾。当然,我们的程序还有很多不完善的地方,比如说,我们试图以二进制的方式保存文件,最终也是心有余而力不足没有做到,程序在调试中不断的冒出bug,大晚上面对电脑debug到生无可恋。总之,这次设计程序让我受益良多,我好好珍惜了这种难得的机会,并且在这个过程中深刻认识到了自己的不足。4.3 致谢 为期半个月的课设总算是结束了,特此向在这短时间指导过我们的老师,还有机房和蔼可亲的管理老师,一起写报告的同学,深夜debug的自己,道一声谢谢。第五章 源代码Book.h#pragma once#include #include head.h#include #include #include using namespace std;void setfile(); /初始化数据文件void mainmenu(); /主菜单函数void findbook(char*file); /查询图书 void brbook(char*file, readerdata p);/借阅图书void returnbook(); /归还图书void returnf(char*file, readerdata p);void addbook(); /新书采编入库void add(char*file, bookdata p);void delbook(); /清除库存,删除图书信息void del(char*file, bookdata p);void addreader(); /新增读者信息void checkreader(); /查询读者信息void checkbr(); /查看借阅记录 Head.h#pragma once#include#include #include #include#include using namespace std;/图书类class bookdatapublic:/构造函数bookdata(char*bn = bookname0, char*w = writer0, char*p = publishing0, char *bisn = bookisn0, int n = 0, int a = 0, int pri = 0)strcpy_s(bookname, bn);strcpy_s(writer, w);strcpy_s(publishing, p);strcpy_s(bookisn, bisn);nowstore = n;allstore = a;price = pri;bookdata *next;/数据成员char bookisn50, bookname50, writer50, publishing50;/图书编号、书名、作者、出版社int nowstore, allstore, price; /书的现存量、书的总库存量、单价;/读者及图书管理类,公有继承图书类class readerdata :public bookdatapublic:/构造函数readerdata(char*rn = reader0, char *id = 02021502220, char*ge = 男0, char*p = password0)strcpy_s(reader, rn);strcpy_s(rdID, id);strcpy_s(gender, ge);strcpy_s(password, p);char reader50, rdID50, gender50, password50;/借阅者姓名、学号、性别、登陆密码int num; /借还图书本数;Addbook.cpp#includehead.h#includebook.hvoid addbook()system(cls);while (1)bookdata p;char work;cout t确定要添加新书?(y/n) : work;if (work = Y | work = y)break;else if (work = N | work = n) system(cls); return; else cout nt输入错误,请重新输入! endl; continue; system(cls);cout endl tt根据下面提示输入新书籍的信息 endl endl p.bookname;cout p.writer;cout p.publishing;cout p.bookisn;cout p.price;cout p.nowstore;add(bookdata.dat, p);system(cls);char ch;cout t添加成功!nt是否要继续添加新书?(y/n) : ch;if (ch = Y | ch = y)system(cls); addbook(); /函数嵌套调用,判断是否继续进行添加操作else if (ch = N | ch = n) system(cls);return; else cout nt输入错误,请重新输入! t.bookname t.writer t.bookisn t.price t.publishing t.nowstore t.allstore)if (!strcmp(t.bookname, p.bookname) & (!strcmp(t.writer, p.writer) & (!strcmp(t.publishing, p.publishing)cout c;t.nowstore = t.nowstore + c;t.allstore = t.allstore + c; j = 1; /新添加的书籍已存在,则直接改动现存量和总库存量f t.bookname t t.writer t t.bookisn t t.price t t.publishing t t.nowstore t t.allstore t.bookname t.writer t.bookisn t.price t.publishing t.nowstore t.allstore)f t.bookname t t.writer t t.bookisn t t.price t t.publishing t t.nowstore t t.allstore endl;fa.close();f.close();else fa.close(); f.close();f.open(file, ios:binary | ios:app);p.allstore = p.nowstore;/新添加的书籍尚未存在,则直接在数据文件中追加f p.bookname t p.writer t p.bookisn t p.price t p.publishing t p.nowstore t p.allstore endl;f.close();Addreader.cpp#includehead.h#includebook.hvoid addreader()system(cls);readerdata p, t;char work;cout t确定要添加新的借阅者信息?(y/n) : work;if (work = Y | work = y)break;else if (work = N | work = n) system(cls); return; else cout nt输入错误,请重新输入! endl; continue; cout endl tt根据下面提示输入新的借阅者的信息 endl endl p.reader;cout p.rdID;cout p.gender;cout p.password;int i = 0;ifstream f(readerdata.dat, ios:binary | ios:in);while (f t.reader t.rdID t.gender t.password)if (!strcmp(t.reader, p.reader) & (!strcmp(t.rdID, p.rdID) /判断新添加的借阅者是否已存在cout t该借阅者已记录在案! endl; i = 1; break;f.close();if (!i) ofstream f1(readerdata.dat, ios:binary | ios:app);f1 p.reader t p.rdID t p.gender t p.password endl; /新添加的借阅者若不存在,则进行添加f1.close();system(cls);char ch;cout t添加成功!n是否要继续添加新的借阅者信息?(y/n) : ch;if (ch = Y | ch = y)system(cls); addreader();else if (ch = N | ch = n) system(cls); mainmenu(); else cout nt输入错误,请重新输入! t.bookname t.writer t.bookisn t.price t.publishing t.nowstore t.allstore)if (!strcmp(t.bookisn, p.bookisn) cout tt = endl;cout t该书信息: endl;cout endl;cout t书名: t.bookname endl;cout t作者: t.writer endl;cout t图书号: t.bookisn endl;cout t图书单价: t.price endl;cout t出版社: t.publishing endl;cout t现存量: t.nowstore endl;cout t总库存量: t.allstore endl;char k;while (1)cout nt确定要借阅此图书?(y/n) : k;if (k != Y&k != y&k != N&k != n)cout t输入错误,请重新输入! endl; continue;else break;if (k = Y | k = y)while (1)if (t.nowstore = 0)system(cls); cout t该图书现存量为0,无法借阅! endl; mainmenu();system(cls);cout p.reader;cout p.rdID;cout p.password;int i = 0;ifstream f(readerdata.dat, ios:binary | ios:in);while (f t.reader t.rdID t.gender t.password)if (!strcmp(t.reader, p.reader) & (!strcmp(t.rdID, p.rdID)if (!strcmp(t.password, p.password)i = 1; break;elsei = 2; break;elsei = 0;/i为判断标志,该借阅者信息存在为1.不存在为0,密码输入错误为2,其它输入容错f.close();if (i = 0) system(cls);cout nt该借阅者信息不存在!n endl;brbook(bookdata.dat,p);else if (i = 2)system(cls);cout nt密码输入错误!n endl; brbook(bookdata.bat,p);while (1)system(cls);cout t请输入要借阅此图书的本数: p.num;t.nowstore = t.nowstore - p.num; /成功借阅后,对图书信息的现存量进行修改if (t.nowstore 0) /判断图书本数足够与否t.nowstore = t.nowstore + p.num;cout t图书本数不足,请重新输入! q.bookisn q.bookname q.reader q.rdID q.num)if (!strcmp(t.bookisn, q.bookisn) &(!strcmp(t.bookname, q.bookname) & (!strcmp(t.reader, q.reader) &(!strcmp(t.rdID, q.rdID) & !strcmp(t.password, q.password)q.num = q.num + p.num; a = 1; /a为判断标志,该借阅记录存在为1.不存在为0f0 q.bookisn t q.bookname t q.reader t q.rdID t q.num q.bookisn q.bookname q.reader q.rdID q.num)f0 q.bookisn t q.bookname t q.reader t q.rdID t q.num endl;f0.close(); f.close();else ofstream f1(record.dat, ios:binary | ios:app); /借阅记录不存在,直接添加新的记录f1 t.bookisn t t.bookname t p.reader t p.rdID t p.num endl;break;break;else if (k = N | k = n)return;f t.bookname t t.writer t t.bookisn t t.price t t.publishing t t.nowstore t t.allstore t.bookname t.writer t.bookisn t.price t.publishing t.nowstore t.allstore)f t.bookname t t.writer t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 9944-2025不锈钢丝绳
- 农业机械设计课件
- 农业布局概述课件讲解稿
- 洗浴老人免责协议范文8篇
- 农业安全产的知识培训课件
- 冒号和上引号的课件
- 化工仓库管理安全培训课件
- 化安全培训课件
- 中秋月饼营销解决方案(3篇)
- 内容营销方案分析模板(3篇)
- 农业现代化种植技术培训课件
- 中城汽车(山东)有限公司审计报告
- 大学博士竞赛试题及答案
- 钢结构彩钢瓦施工工艺与技术交底
- 2025版煤矿安全规程宣贯培训课件
- 梁启超家教家风课件
- 第5课 我们说方言教学设计-2025-2026学年小学地方、校本课程浙教版(2024)人·自然·社会
- (2025秋新版)青岛版科学三年级上册全册教案
- 顾客联络服务 人工与智能客户服务协同要求 编制说明
- 2025年全国通信专业技术人员职业水平考试(通信专业实务·传输与接入·无线)历年参考题库含答案详解(5套)
- 医院汽车管理办法
评论
0/150
提交评论