软件工程实习报告.docx
- 文档编号:910225
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:19
- 大小:174.09KB
软件工程实习报告.docx
《软件工程实习报告.docx》由会员分享,可在线阅读,更多相关《软件工程实习报告.docx(19页珍藏版)》请在冰点文库上搜索。
软件工程实习报告
软件工程实习
2012-6-28
2012/6/28
实验一
1、题目
编写一个程序实现简单的图书信息的管理功能。
2、需求分析
本程序用C++实现,在VC上编写,其中用到自编的一些数据结构,如List、String和Stack。
这虽然没有标准类库的好用,但也能满足自己程序的基本需求了。
本图书管理系统实现了图书的插入、删除、查找和显示所有图书的功能。
3、概要设计
为了实现上述图书管理功能,需要对图书和图书管理系统进行数据抽象。
其中用到List和String。
需要包含头文件:
#include”String.h”
#include”List.h”
抽象出一个图书结构体BOOK
其数据成员有:
intnum;//存储图书编号
Stringname;//存储图书名字
Stringactor;//存储图书作者
Stringpublicer;//存储图书出版社
floatprice;//存储图书价格
抽象出一个图书管理类LIB
其数据成员有:
List
intall;//记录所存储的图书数目
其成员函数有:
LIB();//LIB构造函数
voidadd(intn,Stringna,Stringa,Stringpu,floatpr);
//添加图书
voidadd(BOOKb);
//添加图书
voiddel_num(intn);
//按图书编号进行删除
voiddel_nam(Stringn);
//按图书名字进行删除
voidfind_num(intn)const;
//按图书编号进行查找
voidfind_nam(Stringn)const;
//按图书名字进行查找
voidfind_act(Stringn)const;
//按图书作者进行查找
voidfind_pub(Stringn)const;
//按图书出版社进行查找
voidfind_act_pub(Stringn,Stringn1)const;
//按图书作者和出版社进行组合查找
voidfind_pub_nam(Stringn,Stringn1)const;
//按图书出版社和书名进行组合查找
voidfind_act_nam(Stringn,Stringn1)const;
//按图书作者和书名进行组合查找
voidfind_pub_act_nam(Stringn,Stringn1,Stringn2)const;
//按图书作者、书名和出版社进行组合查找
voidfind_act_m(Stringn)const;
//按图书作者进行模糊查找
voidfind_nam_m(Stringn)const;
//图书名字进行模糊查找
voidfind_pub_m(Stringn)const;
//按图书出版社进行模糊查找
intsize();//获取图书数目
voidoutput();//显示所有图书
主函数
主函数主要是把图书管理功能有机结合起来,起到方便使用的作用。
其流程图如下:
4、详细设计
图书数据结构定义
structBOOK
{
intnum;
Stringname;
Stringactor;
Stringpublicer;
floatprice;
BOOK();
};
图书管理类的定义
classLIB
{
private:
List
intall;
public:
LIB()
{初始化all}
voidadd(intn,Stringna,Stringa,Stringpu,floatpr)
{判断图书编号是否已存在
若存在,则添加失败
否则,添加成功
将图书信息保存到文本文件}
voidadd(BOOKb)
{和上述类似的算法};
voiddel_num(intn)
{判断图书是否存在
若存在,将其删除
否则,删除失败
将图书信息保存到文本文件}
voiddel_nam(Stringn)
{同上}
voidfind_num(intn)const
{循环检测是否存在该图书编号的图书
若存在,将其图书信息输出
否则,查找失败}
voidfind_nam(Stringn)const
{同上,只是将编号换成书名}
voidfind_act(Stringn)const
{同上,只是将编号换成作者}
voidfind_pub(Stringn)const
{同上,只是将编号换成出版社}
voidfind_act_pub(Stringn,Stringn1)const
{同上,只是将编号换成作者和出版社的组合}
voidfind_pub_nam(Stringn,Stringn1)const
{同上,只是将编号换成出版社和书名}
voidfind_act_nam(Stringn,Stringn1)const
{同上,只是将编号换成作者和书名的组合}
voidfind_act_nam_pub(Stringn,Stringn1,Stringn2)const
{同上,只是将编号换成作者、书名和出版社的组合}
voidfind_act_m(Stringn)const
{循环检测是否存在该图书作者子串的图书
若存在,将其图书信息输出
否则,查找失败}
voidfind_nam_m(Stringn)const;
{同上,只是将图书换成书名}
voidfind_pub_m(Stringn)const
{同上,只是将图书换成出版社}
intsize()
{返回图书管理系统的图书数目}
voidoutput()
{输出所有图书}
voidoutput_file()
{将图书保存到文本文件}
};
5、调试分析
本图书管理系统的函数比较多,我在每完成一个函数时,就用驱动函数来执行一下。
这样子做有助于及时发现问题并更正。
6、使用说明
运行程序,在显示主菜单之前,程序已经把文本文件的一些图书信息读入内存了(为了方便测试)。
之后显示菜单:
1:
插入图书记录
2:
删除图书记录
3:
查找图书记录
4:
显示图书记录
0:
退出系统
请选择:
输入1,则进入添加图书的分支。
即程序会收集图书信息,然后插入到系统。
输入2,进入删除图书的分支。
程序会提示:
1:
按编号删除
2:
按书名删除
请选择:
输入1,将会提示要输入编号;
输入2,将会提示要输入书名。
输入3,进入查找图书分支。
程序会提示:
1:
精确查找
2:
模糊查找
3:
组合查找
请选择:
输入1,进入精确查找,程序提示:
1:
按作者查找
2:
按出版社查找
3:
按书名查找
4:
按图书编号查找
请选择:
输入1,程序会提示要输入图书作者,回车,输出查找结果
输入2,程序会提示要输入图书出版社,回车,输出查找结果
输入3,程序会提示要输入图书名字,回车,输出查找结果
输入4,程序会提示要输入图书编号,回车,输出查找结果
输入2,进入模糊查找,程序提示:
1:
按作者查找
2:
按出版社查找
3:
按书名查找
请选择:
输入1,程序会提示要输入图书作者,回车,输出模糊查找结果
输入2,程序会提示要输入图书出版社,回车,输出模糊查找结果
输入3,程序会提示要输入图书名字,回车,输出模糊查找结果
输入3,进入组合查找,程序提示:
1:
按作者和出版社查找
2:
按出版社和书名查找
3:
按作者和书名查找
4:
按作者、书名和出版社查找
输入1,程序会提示要输入作者和出版社,回车,输出组合查找结果
输入2,程序会提示要输入出版社和书名,回车,输出组合查找结果
输入3,程序会提示要输入作者和书名,回车,输出组合查找结果
输入4,程序会提示要输入作者、书名和出版社,回车,输出组合查找结果
输入4,程序会把所有图书信息显示到屏幕
在以上的每一个菜单选择中,如果输入的是非法命令,程序会停留在该菜单界面,直到用户输入的命令是合法的。
以上没执行完一个操作,程序会跳回到主菜单,让用户选择。
7、测试结果
程序开始时,已经从文本文件读入以下信息:
111111shujujiegoulimingdianzigongyechubanshe32.6
111112suanfashejihudongrenminchubanshe23.5
111113lisanshuxuechenhongyoudiandaxuechubanshe25.0
111114ruanjianshixibinyuandongfangjiaoyuchubanshe12.3
111115美国文化戴特斯曼(美)世界图书出版公司48.0
111116高等数学(上册)吴赣昌中国人民大学出版社39.0
111117高等数学(下册)吴赣昌中国人民大学出版社33.0
111118C语言设计教程谭浩强清华大学出版社25.0
111119数字电子技术教程余孟尝高等教育出版社41.7
111120C++面向对象程序设计姚全珠电子工业出版社29.0
1)插入图书记录
输入:
111666程序设计谭老电子工业出版社30.2
输出:
插入成功!
输入:
111111程序设计谭老电子工业出版社30.2
输出:
111111已经存在!
2)删除图书记录
输入:
111111
输出:
删除成功。
输入:
111111
输出:
111111不存在!
输入:
美国文化
输出:
删除成功。
输入:
美国文化
输出:
美国文化不存在!
3)查找图书记录
精确查找:
输入:
吴赣昌
输出:
111116高等数学(上册)吴赣昌中国人民大学出版社39.0
111117高等数学(下册)吴赣昌中国人民大学出版社33.0
输入:
李勇
输出:
李勇的记录不存在!
输入:
高等教育出版社
输出:
111119数字电子技术教程余孟尝高等教育出版社41.7
输入:
C语言设计教程
输出:
111118C语言设计教程谭浩强清华大学出版社25.0
输入:
111118
输出:
111118C语言设计教程谭浩强清华大学出版社25.0
模糊查找:
输入:
吴
输出:
111116高等数学(上册)吴赣昌中国人民大学出版社39.0
111117高等数学(下册)吴赣昌中国人民大学出版社33.0
输入:
出版社
输出:
111116高等数学(上册)吴赣昌中国人民大学出版社39.0
111117高等数学(下册)吴赣昌中国人民大学出版社33.0
111118C语言设计教程谭浩强清华大学出版社25.0
111119数字电子技术教程余孟尝高等教育出版社41.7
111120C++面向对象程序设计姚全珠电子工业出版社29.0
111666程序设计谭老电子工业出版社30.2
输入:
教程
输出:
111118C语言设计教程谭浩强清华大学出版社25.0
111119数字电子技术教程余孟尝高等教育出版社41.7
输入:
数子
输出:
数子的记录不存在!
组合查找:
输入:
谭老程序设计
输出:
111666程序设计谭老电子工业出版社30.2
输入:
老谭程序设计
输出:
老谭和程序设计的记录不存在!
输入:
谭老电子工业出版社
输出:
111666程序设计谭老电子工业出版社30.2
输入:
高等教育出版社数据电子技术教程
输出:
111119数字电子技术教程余孟尝高等教育出版社41.7
输入:
吴赣昌高等数学(上)中国人民大学出版社
输出:
111116高等数学(上册)吴赣昌中国人民大学出版社39.0
输入:
吴赣昌高等数学(上)高等教育出版社
输出:
吴赣昌和高等数学和(上)高等教育出版社的记录不存在!
4)显示图书信息
选择显示图书记录命令
输入:
4
输出:
111112suanfashejihudongrenminchubanshe23.5
111113lisanshuxuechenhongyoudiandaxuechubanshe25.0
111114ruanjianshixibinyuandongfangjiaoyuchubanshe2.3
111116高等数学(上册)吴赣昌中国人民大学出版社39.0
111117高等数学(下册)吴赣昌中国人民大学出版社33.0
111118C语言设计教程谭浩强清华大学出版社25.0
111119数字电子技术教程余孟尝高等教育出版社41.7
111120C++面向对象程序设计姚全珠电子工业出版社29.0
111666程序设计谭老电子工业出版社30.2
5)退出系统
输入:
0
退出系统
实验二
1、题目
假设表达式中允许有两种括号:
圆括号和方括号,其嵌套的顺序随意,即(()[])或
[([][])]等为正确格式,[()]或((()均为不正确的格式。
2、需求分析
用户输入一个括号串,程序输出该括号串是否匹配正确。
3、概要设计
本程序要用到自编的数据结构字符串和单链表
所以要包含头文件:
#include”String.h”
#include”List.h”
除了主函数之外,还有一个函数boolmatch(charc1,charc2),其作用是判断c1和c2是否为相互匹配的括号对。
本程序所用的变量:
Strings;//存储用户输入的括号串
Stack
以下是本主程序的流程图:
4、详细设计
函数定义
boolmatch(charc1,charc2)
{如果c1为‘(‘并且c2为’),返回真
如果c1为‘[‘并且c2为’],返回真
如果c1为‘{‘并且c2为’},返回真
如果c1为‘<‘并且c2为’>,返回真
返回假}
主函数
intmain()
{定义变量s和st
输入括号串
求括号串长度len
i=0;
如果i 如果栈为空,s[i]入栈 否则,s[i]与栈顶元素匹配 若匹配,删除栈顶元素 否则,s[i]入栈 循环结束后 判断栈是否为空 为真,则括号匹配 否则,括号不匹配 return0;} 5、调试分析 本程序做简单的括号匹配,算法实现也比较简单。 主要思想是先匹配好后输入的左括号,再匹配先输入的左括号。 其中,待匹配的左括号压入栈中。 最后判断栈是否为空,为空,则说明完全匹配,否则匹配失败。 6、使用说明 本程序使用简单 运行程序,程序提示用户输入要匹配的括号串 回车,程序输出运行结果 程序提示是否继续 7、测试结果 输入: {[]()} 输出: 括号匹配 输入: {}[} 输出: 括号比配不合法 实验三 1、题目 建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。 2、需求分析 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。 3、概要设计 本程序用到数据结构 structnode {data//存储节点数值 leftnode//存储左子节点的地址 rightnode//存储右子节点的地址} 二叉树类定义 classbnrtree {root//存储二叉树根节点的地址 all//记录节点个数 add()//创建二叉树 xianxu()//先序遍历二叉树 zhongxu()//中序遍历二叉树 houxu()//后序遍历二叉树} 主函数流程图如下: 4、详细设计 节点结构体 structnode {chardata; node*leftnode; node*rightnode;} 二叉树类 classbnrtree {private: node*root; intall; public: voidadddata() {调用函数add(),把返回值赋值给root} node*add() {输入字符c 判断c是否代表空节点 是,则不用动态分配节点内存 否,则动态分配节点内存 把c赋值给新节点的data数据成员 调用函数add(),把返回值赋值给新节点的leftnode 调用函数add(),把返回值赋值给新节点的rightnode} voidxianxu() {调用函数xianxu(root)} voidxianxu(node*n) {输出n->data 如果n->leftnode不为空,则调用函数xianxu(n->leftnode) 如果n->rightnode不为空,则调用函数xianxu(n->rightnode)} voidzhongxu() {调用函数zhongxu(root)} voidzhongxu(node*n) {如果n->leftnode不为空,则调用函数zhongxu(n->leftnode) 输出n->data 如果n->rightnode不为空,则调用函数zhongxu(n->rightnode)} voidhouxu() {调用函数houxu(root)} voidhouxu(node*n) {如果n->leftnode不为空,则调用函数houxu(n->leftnode) 如果n->rightnode不为空,则调用函数houxu(n->rightnode)} 输出n->data} } 5、调试分析 本程序运用递归的方法进行插入和遍历的,这样子实现比较简单,代码量也少。 但如果二叉树很大,其对内存的要求较大,即运行空间大。 6、使用说明 本程序操作简单。 运行本程序,程序提示输入要建立的二叉树 按规则输入二叉树,回车 程序输出该二叉树的先序遍历、中序遍历和后序遍历的结果 程序结束 7、测试数据 输入: abc##d##e#fg### 输出: 先序遍历二叉树 abcdefg 中序遍历二叉树 cbdaegf 后序遍历二叉树 cdbgfea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 实习 报告