C++课程设计仓库管理系统报告.docx
《C++课程设计仓库管理系统报告.docx》由会员分享,可在线阅读,更多相关《C++课程设计仓库管理系统报告.docx(35页珍藏版)》请在冰点文库上搜索。
C++课程设计仓库管理系统报告
C++课程设计仓库管理系统报告
第一章、设计题目
仓库管理程序
功能设计:
1.建立文件
(1)存储文件可以使用默认文件名或指定文件名。
(2)可以不保存输出记录,但需要确认是否保存输入记录。
(3)如果已经有文件,只能在其后追加。
(4)新增的记录继续存入原文件中。
2.文件的存取和显示
(1)可以单独存取文件。
(2)可以随时显示内存中记录的全部内容。
(3)可以直接存取指定文件
3.删除记录
(1)可以按“商品名称”方式删除(报损)并且将记录修改更新。
(2)能给出被删除记录的信息。
(3)如果库存已经是空的,删除(报损)时应给出提示信息并返回主菜单。
(4)如果没有要删除的这个商品信息,输出没有找到的提示信息
(5)删除操作仅限于内存,只有执行存记录操作时,才能覆盖原记录。
4.查询记录
(1)可以按“商品名称”、“商品价格”或“商品种类”三种方式查询记录。
(2)能给出查询记录的信息。
(3)如果查询的信息不存在,输出“没有找到”的信息。
5、使用菜单实现功能的正确选择
6、测试程序
(1)应列出测试大纲对程序进行测试
(2)应保证测试用例能测试到程序的各种边缘情况。
编写此程序至少要用二个以上的下列面向对象工具:
类
继承与派生
友元函数
构造函数
虚函数
模板
文件输入输出
通过设计一个较为简单的《商场库存货物管理系统》,进一步熟悉C++中类的概念、类的封装、继承的实现方式。
了解系统开发的需求分析、类层次设计、模块分析、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯。
第二章、问题分析
2.1问题描述
随着二十一世纪的到来,计算机已成为一块极其活跃的、崇尚发展与创新的领地,并成为我们这一时代决定性的先驱技术。
计算机是现代文化不可或缺的级成部分,是现代科学技术发展的先导,并成为世界经济巨量增长的根本引擎。
C语言和C++语言是当今世界最流行的两种计算机语言,倍受人们的喜欢。
许多著名的系统软件,如DBASEⅢPLUS、DBASEⅣ都是由C语言编写的。
用C语言加上一些汇编语言子程序,就更能显示C语言的优势了, 像PC-DOS、WORDSTAR等就是用这种方法编写的。
归纳起来C语言具有如下特点:
1、C语言简洁、紧凑,使用方便、灵活。
有32个关键字。
2、运算符丰富。
共有34种运算符。
3、数据结构丰富,具有现代化语言的各种数据结构。
4、具有结构化的控制语句。
5、语法限制不太严格,程序设计自由度大。
6、C语言允许直接访问物理地址,能进位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。
7、生成目标代码质量高,程序执行效率高。
8、用C语言写的程序可移植性好(与汇编语言比)。
C++语言是在C语言的基础上扩展而成的,它保留了C语言原有的所有优点,增加了面向对象的机制。
所以C++与C完全兼容。
C++是对C的扩充,是C的超集。
它既可用于结构化程序设计,又可用于面向对象的程序设计,功能强大。
C++中加入了面向对对象程序设计。
C++的多继承机制能更好地描述对象的属性和行为,它的特点是面向对象程序设计。
C++实现了类的封装、数据隐藏、继承及多态,它还支持模板、操作符重载、内联函数定义、预处理、宏、全局静态类变量、嵌套类定义等等,使得其代码容易维护及高度可重用。
本课程设计要求的功能如下:
1、建立文件:
存储文件可以使用默认文件名或指定文件名
可以不保存输出记录,需要确认是否保存输入记录
如果已经有文件,只能在其后追加
2、文件存取和显示:
可以单独存取文件,可以随时显示内存中记录的全部内容
可以直接存取默认文件或指定文件
3、删除记录:
可以按“商品名称”方式删除记录并更新内存链表内容
4、查询记录:
可以按“商品名称”、“商品价格”或“商品种类”三种方式查询记录
2.2需求分析
根据题目要求,做出如下的具体分析:
一.继承——是面向对象语言的重要特征之一,它是指从一个或多个基类中继承数据和操作,形成新的派生类的一种机制。
该机制自动地为一个类提供来自另一个类的操作和数据,使程序员只需在新类中定义已有类中所没有的成分。
在C++中有两种继承:
单一继承和多重继承。
当一个派生类仅由一个基类派生时,称为单一继承;而当一个派生类由一个以上的基类派生时,称为多重继承。
继承不仅简化了程序设计方法,显著提高了软件的重用性,而且还使程序具有一种层次结构,使之变得更容易维护。
二.类——是构成面向对象系统的最基本的单位,是面向对象系统中最基本的概念之一。
类是创建对象的模板,以操作、表示和算法的形式完整地定义了一组对象的行为,被认为是一种用户自定义的数据类型,它完整地描述了规范说明和实现。
类可以作为面向对象系统的具有特定功能一个模块,可以作为模块划分的一种手段和依据。
类还是代码共享的手段。
三.输入/输出——是指程序与计算机的外部设备之间所进行的信息交换。
在C++中提供了输入/输出流库。
C++的流库是一个较复杂的标准类库,它是用继承的方法建立起来的实用流库,不仅提供了与C语言标准函数类似的各种I/O操作功能,更重要的是使I/O操作具有面向对象的特征,功能更灵活,更强大。
四.标准模板库STL——C++的标准类库STL是C++语言标准库的一个重要组成部分,利用类库来开发的应用软件,有利于减少源程序中的BUG,提高软件的正确性。
它通常具有以下的特点:
1、通用性
2、可扩充性
3、概念性与层次性
4、灵活性
五.项目要求与简介
此程序是为了更好的处理货物的详细信息。
包括货物的货物的入库、出库、查询、统计。
并且能够很好的让使用者了解库存货物的有关信息。
系统要求能够按编号显示、查找、增加、删除、和保存各类货物的信息。
输入和输出货物的有关信息并且对输入保存文件里确定程序至少具备以下功能:
查询模块、增加模块、删除模块、货物的有关信息数据存盘等的基本模块。
系统具有“货物的有关信息数据存盘”的功能,所以货物的有关信息数据可以保存到磁盘文件,那么也就意味着今后可以从磁盘文件读出货物的有关信息,可以方便用户使用,避免数据重复录入,考虑到系统实现简洁,货物数据文件采用文本文件,货物数据文件名:
date.dat。
作为一个完整的系统,除了具有增加货物,删除货物的信息模块,还应该具有修改货物相关信息的功能,所以本系统具备了“商品入库”、“商品出库”、“查询统计”、“商品报损”、“退出系统”,这5个基本功能,就可以以最简捷的方式实现对货物的管理,也就实现了系统的要求。
第三章、总体设计
1、功能分析
使用面向对象的程序设计进行分析,整个系统涉及两大类可操作,仓库、商品。
所以系统主要涉及两大类:
仓库类、商品类。
系统框架就是仓库类和商品类的定义;主函数中定义一个仓库对象,循环显示主菜单并根据用户选择调用仓库类的相应方法(成员函数)。
考虑系统操作的货物信息具有不确定性,所以考虑使用链表保存、处理货物信息。
仓库类包含:
所有货物信息的一个不带头结点的链表及可以对货物信息进行增,改,删除,查询,数量设置,数据存盘等操作的相关模块为成员函数。
所有货物都具有的公共信息及操作可以使用仓库类进行描述。
由于系统具有3类货物且3类货物信息数据,操作基本相同,所以可以为他们创立相同的类,并且采用继承和派生。
2、数据抽象
a.仓库管理员类
classadmin
{
public:
admin();
private:
stringname;
};
b.仓库货架类
classshelf
{
public:
shelf();
private:
adminmen;//管理员
stringstoreNo;//仓库编号
stringkinds;//商品大类
stringshelfNo;//货架号
};
3、结构关系
3.1主系统块:
3.2商品入库块:
3.3商品出库块:
3.4查询统计块:
3.5商品报损块:
3.6退出系统块:
第四章、详细设计
一、头文件定义
#include
#include
#include
#include
#include
#include
usingnamespacestd;
二、仓库管理员类
classadmin
{
public:
admin();
private:
stringname;
};
三、仓库货架类
classshelf
{
public:
shelf();
private:
adminmen;//管理员
stringstoreNo;//仓库编号
stringkinds;//商品大类
stringshelfNo;//货架号
};
四、电器类
classele
{
public:
ele();
private:
stringname;//商品名
doubleprice;//价格
shelfsh;//所属货架
longcount;//商品数量
};
五、管理组合类
classmana
{
public:
mana();
charfirst_face();//首页
voidin_storage();//入库
voidout_storage();//出库
voidselect_ele();//查询
voidselect_name();//按商品名称查询
voidselect_price();//按商品价格查询
voidselect_kind();//按大类查询
voidcall_break();//商品报损
private:
eleaele;
shelfashelf;
adminabs;
};
六、仓库电器类默认构造函数
ele:
:
ele():
sh()
{
name="xxx";//商品名
price=0.0;//价格
count=0;//商品数量
}
七、仓库货架类默认构造函数
shelf:
:
shelf():
men()
{
storeNo="xxx";//仓库编号
kinds="xxx";//商品大类
shelfNo="xxx";;//货架号
}
八、仓库管理员类默认构造函数
admin:
:
admin()
{
name="xxx";
}
九、仓库管理组合类默认构造函数
mana:
:
mana():
aele(),ashelf(),abs()
{
}
第五章、功能测试
一、录入、保存、显示、读取测试:
1.商场库存货物管理系统首页
2.商品入库
3.商品查询
4.按商品名称查询
5.按商品价格查询
6.按商品大类查询
7.商品报损
8.商品出库
9.退出系统
二、运行界面:
MicrosoftVisualC++6.0
小结
本次C++课程设计,收获还是很多的,从刚刚拿到课程设计题目后,我就先分析这个程序的一些基本的功能,从这些基本功能出发来定下一个程序的大致框架结构,这里面主要包括程序中所设计的类,类与类之间的继承关系以及一些主要的函数的设计思想。
比如:
删除记录函数、增加记录函数等等。
从一开始我就从图书馆借阅了不少的其他相关的c++资料,这些都是很宝贵的参看资料,可以说给我最后顺利的完成程序的编写打下了很扎实的基础。
这次的课程设计,是自己独立完成了一个相对比较大的程序,里面用到的面向对象的知识也是比较多的,通过一番实践,很好的总结、强化了之前学习过的知识要点,并且也发现了自己还没好好掌握的知识点,对于没掌握的,我查阅了参考书籍及时补上。
感觉代码写到也是后来,状态越好,我感觉是由于自己对于一些基本的知识的比较好的掌握了。
有些问题虽然没遇到过,但是通过查阅资料,只要了解了它们的用法,自己就可以很快的模仿下来,不是照抄。
这一点我觉得在今后的程序设计中也是蛮重要的,因为我发现要写出好程序,首先应该去学习人家的程序,看懂他们的程序并且转化为自己的。
其次才有可能去创新。
对于程序的编写,用的时间还是蛮多的,这期间有的是写代码、有的是查阅资料、有的是和同学一起探讨问题。
在和同学讨论问题的过程中,我发现了合作带来的效率,彼此自己要善于沟通,让对方了解自己编程的方法和大致的思想,然后大家一起讨论,这样问题会解决的比较快。
通过学生的分组设计,使学生能够基本掌握C++程序设计的方法,并且在此基础上掌握类的构造方法,明确类中构造函数、成员函数的建立以及调用,此外,并且,结合C++中,字符串函数的编译系统给定的库函数,采用一定的逻辑编译,实现题目中要求的各项要求,达到基本实验母的,提高自己的C++语言使用水平。
最后希望自己今后能有比较多的机会来做一些这样的课程设计,这样一方面锻炼了自己的编程能力,另一方面又使得自己复习巩固了基础的知识。
参考文献
面向对象程序设计思想和方法
C/C++语言参考手册
主要参考文献:
[1]谭浩强.C语言程序设计(第二版)清华大学出版社,2003年
[2]吴文虎.程序设计基础清华大学出版社,2003年
[3]钱启平.C语言程序设计基础辅导教程铁道出版社,2000年
[4]钱能.C++程序设计教程清华大学出版社,1999年
[5]刘斌,王忠.面向对象程序设计——VisualC++清华大学出版社,2003年
致谢:
这次c++的课程设计,得到了陈群贤老师和同学的帮助,在这里表示感谢!
附录:
源代码清单
#include
#include
#include
#include
#include
#include
usingnamespacestd;
//仓库管理员类
classadmin
{
public:
admin();
private:
stringname;
};
//仓库货架类
classshelf
{
public:
shelf();
private:
adminmen;//管理员
stringstoreNo;//仓库编号
stringkinds;//商品大类
stringshelfNo;//货架号
};
//electricalclass
classele
{
public:
ele();
private:
stringname;//商品名
doubleprice;//价格
shelfsh;//所属货架
longcount;//商品数量
};
//管理(组合类)
classmana
{
public:
mana();
charfirst_face();//首页
voidin_storage();//入库
voidout_storage();//出库
voidselect_ele();//查询
voidselect_name();//按商品名称查询
voidselect_price();//按商品价格查询
voidselect_kind();//按大类查询
voidcall_break();//商品报损
private:
eleaele;
shelfashelf;
adminabs;
};
//仓库电器类默认构造函数
ele:
:
ele():
sh()
{
name="xxx";//商品名
price=0.0;//价格
count=0;//商品数量
}
//仓库货架类默认构造函数
shelf:
:
shelf():
men()
{
storeNo="xxx";//仓库编号
kinds="xxx";//商品大类
shelfNo="xxx";;//货架号
}
//仓库管理员类默认构造函数
admin:
:
admin()
{
name="xxx";
}
//管理组合类默认构造函数
mana:
:
mana():
aele(),ashelf(),abs()
{
}
charmana:
:
first_face()
{
system("cls");//系统清屏
cout<<"\n"
<<<<<<<<<<<<<<<cout<<"\n\n\t\t";
returngetch();
}
//入库
voidmana:
:
in_storage()
{
system("cls");//系统清屏
stringname;//商品名
doubleprice;//价格
stringstoreNo;//仓库编号
stringkinds;//商品大类
stringshelfNo;//货架号
longcount=0;//商品数量
cout<<"\n";
cout<<"商品入库,请输入相关信息:
";
cout<";
cin>>name;
cout<";
cin>>price;
cout<";
cin>>count;
cout<";
cin>>storeNo;
cout<";
cin>>kinds;
cout<";
cin>>shelfNo;
ofstreamstoreFile("store.txt",ios:
:
app);
storeFile<:
left)<<<<storeFile.close();
cout<<"\n\n\t该商品已经入库……\n\n\t";
system("pause");//系统暂停
}
//出库
voidmana:
:
out_storage()
{
system("cls");//系统清屏
stringname;//商品名
cout<"<cout<<"\n\t商品名称:
";
cin>>name;
ifstreamstoreFile("store.txt");
if(!
storeFile)
{
ofstreamstoreFile1("store.txt");
storeFile1.close();
cout<<"\n\n\t库存为空……\n\n\t";
system("pause");
return;
}
boolflag=false;//布尔型枚举类,只有一个字节,取值true或false(1或0)
stringname1;//商品名
doubleprice1;//价格
stringstoreNo1;//仓库编号
stringkinds1;//商品大类
stringshelfNo1;//货架号
longcount1=0;//商品数量
ofstreamtempFile("temp.txt");
while(storeFile>>name1>>price1>>count1>>storeNo1>>kinds1>>shelfNo1)
{
if(name1==name)
flag=true;
else
{
tempFile<:
left)<<<<}
}
tempFile.close();
storeFile.close();
if(!
flag)
{
cout<<"\n\n\t该商品仓库没有……\n\n\t";
system("pause");
return;
}
ofstreamstoreFile1("store.txt");
ifstreamtempFile1("temp.txt");
storeFile1<storeFile1.close();
tempFile1.close();
cout<<"\n\t这些商品已经出库,请仔细复查!
!
!
\n\n\t";
system("pause");
}
//查询
voidmana:
:
select_ele()
{
while
(1)
{
system("cls");
cout<<"\n"<cout<<"\t============================================================="<<<"\t||||"<<<"\t||商品查询||"<<<"\t||||"<<<"\t||1.按商品名称查询||"<<<"\t||||"<<<"\t||2.按商品价格查询||"<<<"\t||||"<<<"\t||3.按大类查询||"<<<"\t||||"<<<"\t||4.返回||"<<<"\t||||"<<<"\t========================================