《12-小组-大作业剖析》由会员分享,可在线阅读,更多相关《12-小组-大作业剖析(20页珍藏版)》请在金锄头文库上搜索。
1、Hefei University 面向过程程序设计大作业报告 BACHELOR DISSERTATION项目题目: 图书管理系统的设计与实现 年级系别专业班级:15级电子系通信工程(二)班 组员姓名: 张凯 谢跃兵 李亚南 导师姓名: 方小红 完成时间: 2016.6.16 目录一基本概念1.C/C+语言的特点2.指针的使用方法3.数组传递技术二需求分析三概要分析四界面设计五. 模型设计六. 模块设计1.Main.cpp文件2.Menu.cpp文件3.Input.cpp文件4.Output.cpp文件5.Search.cpp文件6.Delete.cpp文件7.Keep.cpp文件8.Load.
2、cpp文件9.Menu.h文件10.BookManager.h文件11.Book.h文件七运行测试八项目总结九课程心得张凯的心得:李亚南的心得:谢跃兵的心得:十致谢十一参考文献C/C+图书管理系统设计综合报告中 文 摘要对于本次实验,工程要求包含图书的数据输入功能,数据的显示(输出)功能,数据查询(按照作者姓名查询)功能,数据删除(根据输入图书序号)功能,图书数据保存功能和调用图书数据功能。针对这些我们运用到选择语句,循环语句,结构体,数组,指针,宏定义等方式共同创建工程代码。我们的大致思路是:首先针对每个功能进行创建工程代码,以结构体,数组形式表示图书的编号、书名、作者姓名、价格、书籍出版社
3、、书籍ISBN。运用循环语句将每本书的数据依次输入、输出、保存、调用;根据指针,地址传递的方式(根据输入的编号)删除图书数据;根据指针,地址传递的方式(根据输入的作者姓名)查询并输出该图书的数据。然后创建程序起始页面(Menu)模块。最后创建主模块将所有的模块连接起来(使用函数调用,传递地址)。通过以上三步将程序代码串联在一起,并结合相应的头文件声明来结束这个工程。通过调试,使工程达到预期要求。关键词:结构体;数组;指针;宏定义;循环I一基本概念1.C/C+语言的特点C语言兼有高级语言和低级语言的特点:高级语言特点:语言简洁,运算符丰富,使用灵活方便,适合结构化编程。低级语言特点:可操作内存单
4、元和数据位操作,目标代码质量高,适合开发系统软件和嵌入式软件。C+保留了C的所有特点(编译生成的目标代码质量、效率只比C稍差),并在其基础上增加了面向程序设计的语法,更容易完成复杂环境模型建立和问题解决。2.指针的使用方法指针的使用包含三个步骤:抛地址(抛钥匙或抛绣球)如:调用交换模块代码:swap(&a,&b),实参&a、&b分别是a、b的地址,也就是抛地址。当一个模块中的变量需要在另一个模块中即时改变,除了将这些变量地址抛出去之外,别无他法。类型匹配(门当户对)交换模块定义头部:如:void swap(0int *pA,int*pB),定义了两个形参,这两个形参的类型是整数型的指针变量,必
5、须与抛过来的地址类型匹配。当然,一切函数参数传递都要遵循类型匹配这个规则,匹配有两个含义:第一,要求相同类型;第二,数据个数相同。使用间接方式操作(芝麻开门)如:在swap模块内部使用pA和pB的时候,前面都加上了指针运算符*,这是间接操作数据方式(芝麻开门)。读者揣测一下发送者和接收者的心思,接收者接到了地址接着就是对*pA和*pB操作。3.数组传递技术传地址数组名实质是一个固定地址,数组名作为实参传递,实际是将这个数组的头地址传过去(抛过去的不是一个数,是一把打开宝库的钥匙)。自定义函数的形参拿到了头地址(钥匙)后,实质上控制了原来的数组,就可以按图索骥地改变原来数组中的元素内容。所以,自
6、定义模块sort的形参形式float pArrayN等价于float *pArray,本质上是指针变量。正是由于数组名作为函数参数传递的实质是地址传递,所以不需要显示ruturn语句。传长度Float pArryN等价于float *pArry,这说明Float pArryN中的N可有可无。事实上,sort模块的头部写成:void sort(float pArray0)或void sort (float PArry1000)都可以,排序代码真正决定轮次变化的是模块前“define N 4”中定义的常量N。这里有一个很不好的现象:sort模块代码写死了,被N限制住了,N被定义为4,sort代码只
7、能进行长度是4的数组排序,N被定义为5,sort代码只能进行长度是5的数组排序。Sort模块只能满足固定长度为N的数组排序,sort模块不具通用性。之所以造成这种现象的根本原因是没有将一个数组的完整信息传递过来,除了传递数组名之外,还应传递数组的长度。二需求分析列出所有功能(以图形表达),并给以必要文字说明各功能的作用。图1其中“输入功能”:要求将图书的编号、书名、作者姓名、书本价格、图书出版社、图书ISBN使用数组和指针地址传递、循环语句输入系统。其中“输出功能”:要求将图书的编号、书名、作者姓名、书本价格、图书出版社、图书ISBN使用数组和指针地址传递、循环语句输出系统。其中“查找功能”:
8、要求根据输入的作者姓名使用指针以及循环语句从图书管理系统中,一个一个的查找直到找的与之对应的书籍,并将书籍的其他信息(如:价格,书名)输出显示。其中“删除功能”:要求根据输入的书籍序号使用指针和循环语句从图书管理系统之中找到对应书籍并删除此书籍的所有信息。其中“保存功能”:要求使用指针、循环语句、函数调用、文件指针函数等将所有的图书数据保存在Book.txt文件中。其中“调用功能”:要求使用指针、循环语句、函数调用、文件函数等将所有的图书数据从文件Book.txt中调出来。三概要分析本系统使用结构体数组来保存图书信息并给信息进行相应的处理,结构体结构如下:struct Bookfloat fN
9、umber; /编号char fName41; /书名char fAuthor21; /作者姓名float fPrice; /定价char fSource20; /出版社char fISBN20; /ISBN;四界面设计运行的多个界面的设计。*主界面欢迎进入图书管理系统 1 输入功能 2输出功能 3 查询功能 4删除功能 5 保存功能 6调入功能 7 退出系统请选择功能(1,2,3,4,5,6,7):图2*输入界面请输入数据(编号/书名/作者/价格/出版社/ISBN):图3输出界面 *数据输出如下* * 编号 书名 作者 价格 出版社 ISBN *图4查询界面请输入作者的姓名: 编号 书名 作
10、者 价格 出版社 ISBN 图5删除界面请输入要删除的序号: 图6五. 模型设计图7六. 模块设计1.Main.cpp文件主模块 main模块功能:编写一个程序,任意选择一个功能号然后执行相应的功能。输入输出:系统模块,暂不考虑模块级别的输入输出,输入输出在内部完成。形式:int main()归属:Main解决思路:选择自己要进行的程序,通过功能号选择功能执行。算法提纲:第一步:先选要进行的程序项目,选择功能号; 第二步:到达功能号后按要求输入相应数据即可。模块代码:#include#include#include#includeMenu.h#define N 1000#includeBook
11、Manager.h#includeBook.hint main()Book bookAllN;int num=0;while(1)switch(menu()case 1:inputBook(bookAll,N,&num);coutendl;break;case 2:outputBook(bookAll,N,num);coutendl;break;case 3:searchBook(bookAll,N,num);coutendl;break;case 4:delBook(bookAll,N,&num); outputBook(bookAll,N,num);coutendl;break;case
12、5:keepBook(bookAll,N,num);coutendl;break;case 6:loadBook(bookAll,N,&num);outputBook(bookAll,N,num);coutendl;break;case 7:exit(0);default:cout提示出错endl;return 0;2.Menu.cpp文件自定义模块 menu模块功能:在打开程序时显示文字“欢迎进入图书管理系统”输入输出:有输入,有输出,在打开程序时显示文字“欢迎进入图书管理系统”形式:int menu()归属:Menu解决思路:算法提纲:模块代码:#includeint menu()int choose;coutt*