软件工程实践报告.docx
《软件工程实践报告.docx》由会员分享,可在线阅读,更多相关《软件工程实践报告.docx(24页珍藏版)》请在冰豆网上搜索。
软件工程实践报告
软件工程实践报告
设计题目:
商品销售统计
学校:
南昌航空大学
班级:
姓名:
学号:
***********************************
完成日期:
2014年2月19日
摘要
商品销售统计系统程序设计利用计算机技术,使得企业生产、库存和销售能够有利结合起来,提高企业的效率和效益。
利用该系统可以为决策者和管理者及时掌握时常动态和企业的生产状况,以及对员工销售额的统计。
销售统计系统是一个商品企业单位不可缺少的部分,它的内容对于公司的决策者和管理者来说都至关重要,所以销售统计系统应该能够为管理人员提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点。
随着科学技术的不断提高,计算机科学
日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对员工信息及业绩进行管理,具有手工管理所无法比拟的优点。
关键字:
计算机技术、提高效益、日渐成熟、不可或缺。
前 言
近年来,随着商品销售市场的不断扩大,有关商品的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致商品销售管理上的混乱,人力与物力过多浪费,用于支付职员的工资不断增加,从而使各大商品经销商的负担过重,影响整个销售部门的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的商品销售管理系统,对欲要销售的商品进行集中统一的管理。
本系统开发的总设计目标是实现商品经销商对商品的系统化、规范化和自动化管理,实现对所经销商品的集中统一管理。
第一章课设设计目的与要求
1.1目的
《VisualC++面向对象与可视化程序设计》是计算机专业一门重要的专业基础课。
此次课程设计的目的是以程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。
从而提高自我分析问题、解决问题的能力。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《VisualC++面向对象与可视化程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象的程序设计方法。
(6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。
1.2要求
从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:
1)根据实现的功能,划分出合理的对象类,明确对象类间的关系。
2)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
3)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
4)为每个对象类设计正确的域和方法,为每个方法设计合理的方法体。
同时,为对象类及内部的域和方法运用正确的修饰符,如访问控制符等。
5)编程简练,程序功能齐全,能正确运行。
6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。
第二章课题介绍------商品销售系统
2.1 课设题目
编写商品销售统计程序,商品的信息有:
商品的名称,计量单位(重量或件),单价。
所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。
客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。
2.2任务和要求
程序分为两个部分:
第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。
程序运行时由用户选择进入哪一部分功能,并能在运行时在两部分之间切换。
第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码(如-1)表示本次购物结束。
此时。
程序计算出应付钱款数并显示。
测试数据:
程序应输入不少于10种商品的信息,并进行模拟运行。
实现提示:
本程序的商品信息管理可采用既定义一个商品类,每种商品作为商品类的实例(对象)存储在链表节点中的数据结构。
2.3问题分析:
按照要求这个程序的编写要求,由于包含多种实现要求,所以在编写时需要多个实现函数,这样就要定义一个类或机构体来统筹各个函数以及用链表或指针数组来储存输入的常量数据,并且在各个转换点设置相应的提示语句使整个程序便于操作。
在修改数据的函数实现时,由于一个商品包含多个变量,要想在修改某一个数据后而不影响其他的数据,所以就必须要有一个switch语句;在商品信息显示函数的实现时,由于中间要有一个购买函数的实现,所以商品数量会随着商品的购买而减少,所以要将购买的数量另外定义一个变量。
关于switch语句的运用在这个程序这可能要多次使用,主要在一个函数拥有多个变量或变量函数。
第三章算法的设计
3.1本程序的流程图
结束
3.2算法的思路
3.2.1定义一个结构体,该结构体用来存放商品的代码,名称等信息:
structshangpin
{intnumber;
charname[30];
floatweight;
floatprice;
shangpin*next;
};
3.2.2定义list链表类,用来动态的存放商品的信息:
classlist{//定义链表类
shangpin*elems;
public:
list(){elems=0;}
~list();
virtualboolinsert();
voidinsert1(shangpin*pr,floatwgt);//此虚函数在派生类中可重新定义
boolinsert2();
virtualbooldeletes(int);//此虚函数在派生类中可重新定义
boolcontain(int);//定义重载的构造函数
boolcontain1(int);
shangpin*chazhao(int);
voidprint();
voidprint1();
voidshanchu();
};
3.2.3定义list的派生类set类,用来对商品进行操作:
classset:
publiclist{
intcard;//将集合类set定义为链表类list的派生类
structshangpinshp;
public:
set(){}
boolinsert();//重定义此函数
booldeletes(int);//重定义此函数
};
第四章详细设计与调试
采用C++6.0作为开发工具,用面向对象编程,对所要处理的商品信息进行存储,分别调用各个功能函数来处理。
4.1系统界面管理
voidinr()
{cout<cout<<"****************************************************************"<cout<<"欢迎进入商店系统,请选择相应的功能,如按1键,进行商品管理操作"<cout<<"1:
商品管理"<<" "<<"2:
购物"<cout<<"a:
退出"<cout<<"****************************************************************"<4.2商品管理界面
voidini()
{cout<cout<<"****************************************************************"<cout<<"欢迎进入商品管理系统,请选择相应的功能,如按1键,进行添加操作"<cout<<"1:
添加"<<" "<<"2:
删徐"<cout<<"3:
查找"<<""<<"4:
显示"<cout<<"q:
退出"<cout<<"****************************************************************"<cout<<"请选择:
";
}
4.3商品管理各功能的实现
4.3.1商品的添加
boollist:
:
insert()//定义list类中插入元素的成员函数
{intnum;cout<<"请再次输入商品的代码"<cin>>num;
shangpin*elem=newshangpin;//为新元素分配存储
if(elem!
=0){
elem->number=num;
cout<<"请输入商品的名称"<cin>>elem->name;
cout<<"请输入商品的价格(单位:
元)"<cin>>elem->price;//将新元素插入到链表头
elem->next=elems;
elems=elem;
returntrue;
}
elsereturnfalse;
}
4.3.2商品的删除
boollist:
:
deletes(intnumber)//定义list类中删除元素的成员函数
{
if(elems==0)returnfalse;//若表为空,返回false
shangpin*tmp=elems;
if(elems->number==number)
{//若待删除的元素为表头元素
elems=elems->next;
deletetmp;
returntrue;
}
else
for(shangpin*elem=elems;elem->next!
=0;elem=elem->next)
if(elem->next->number==number)
{//循环查找待删除元素
tmp=elem->next;
elem->next=tmp->next;
deletetmp;
returntrue;
}
returnfalse;
}
4.3.3商品的查找
boollist:
:
contain1(intnumber)
{
if(elems==0){cout<<"没有此商品"<if(elems->number==number){cout<<"商品代码:
"<number<<"商品名称:
"<name<<"商品价格:
"<price<else
for(shangpin*elem=elems;elem->next!
=0;elem=elem->next)
if(elem->next->number==number){
cout<<"商品代码:
"<next->number<<"商品名称:
"<next->name<<"商品的价格:
"<next->price<<"元"<returntrue;}
cout<<"没有此商品"<returnfalse;
}
4.3.4商品的显示
voidlist:
:
print()//输出链表中各元素
{
if(elems==0)return;
for(shangpin*elem=elems;elem!
=0;elem=elem->next)
cout<<"商品代码:
"<number<<""<<"商品名称:
"<name<<""<<"商品价格:
"<price<<"元"<cout<}
voidlist:
:
print1()//输出链表中各元素
{
if(elems==0)return;
for(shangpin*elem=elems;elem!
=0;elem=elem->next)
cout<<"商品代码:
"<number<<""<<"商品名称:
"<name<<""<<"商品价格:
"<price<<"元"<<"商品的重量或件数:
"<weight<cout<}
4.4购物功能的实现
cout<<"请输入你所要购买的商品的代码"<cin>>num4;
cout<<"请输入你要购买的件数或重量"<cin>>weight;
shangpin*p;
p=ptr->chazhao(num4);
ptr1->insert1(p,weight);
zonge=zonge+(p->price)*weight;
cout<<"是否购物完毕?
"<cout<<"如果购物完毕,请输入**b**结束购物"<cout<<"如果继续购物,请随机输入一个字符,但不要输入**b**或**B**"<cin>>ch2;}
cout<<"你购买的商品清单如下:
"<ptr1->print1();
ptr1->shanchu();
cout<<"你所要支付的总金额为:
"<zonge=0;
第五章调试手册与测试数据
5.1调试手册
(1)、errorC2143:
syntaxerror:
missing';'before'}'行246少了一个分号
(2)、errorC2562:
'main':
'void'functionreturningavalue空类型不能有返回值
(3)、errorC2679:
binary'<<':
nooperatordefinedwhichtakesaright-handoperandoftype''(orthereisnoacceptableconversion)t[i].getName后面少了()
5.2测试数据:
进入演示程序后,即显示对话形式的提示操作过程:
第六章实验心得与体会
c++课程设计在基本知识上由老师引导,自己很多都靠自学,不明白的问老师,但由此自学能力得到了很大的培养。
在设计过程中,我感觉到一点:
程序是不能一气呵成的,至少一气呵成的程序不会尽善尽美,程序编写要一步一步的完成。
首先,对于要编写的程序要有一个总体思想,要明确想要什么,只要把思想理顺清楚了,如此才能够把程序分割成几个模块,即多个函数,一块一块的编写,然后将分散的函数用另外的函数链接起来或者用main函数链接。
到了这一步,程序的框架也就完成了,之后就是调试查错误以及修改了。
为了让自己的程序更加的美观和更加的简洁,最后我们还得对程序再进行进一步的修改,优化程序的阶段是很重要的。
附录一
源程序:
#include
#include
structshangpin
{intnumber;
charname[30];
floatweight;
floatprice;
shangpin*next;
};
classlist{//定义链表类
shangpin*elems;
public:
list(){elems=0;}
~list();
virtualboolinsert();
voidinsert1(shangpin*pr,floatwgt);//此虚函数在派生类中可重新定义
boolinsert2();
virtualbooldeletes(int);//此虚函数在派生类中可重新定义
boolcontain(int);
boolcontain1(int);
shangpin*chazhao(int);
voidprint();
voidprint1();
voidshanchu();
};
classset:
publiclist{
intcard;//将集合类set定义为链表类list的派生类
structshangpinshp;
public:
set(){}
boolinsert();//重定义此函数
booldeletes(int);//重定义此函数
};
shangpin*list:
:
chazhao(intnumber)
{//若表为空,返回false
shangpin*tmp=elems;
if(elems->number==number)//若待删除的元素为表头元素
returntmp;
else
for(shangpin*elem=elems;elem->next!
=0;elem=elem->next)
if(elem->next->number==number)
{//循环查找待删除元素
tmp=elem->next;
returntmp;
}
}
voidlist:
:
shanchu()
{
shangpin*tmp=elems;
for(shangpin*elem=elems;elem!
=0;)
{
tmp=elem;
elem=elem->next;
deletetmp;
}
}
list:
:
~list()//list类得析构函数定义,循环释放各元素所占的存储
{
shangpin*tmp=elems;
for(shangpin*elem=elems;elem!
=0;)
{
tmp=elem;
elem=elem->next;
deletetmp;
}
}
voidlist:
:
insert1(shangpin*pr,floatwgt)
{
shangpin*elem=newshangpin;//为新元素分配存储
if(elem!
=0){
elem->number=pr->number;
inti;
for(i=0;i<30;i++)
elem->name[i]=pr->name[i];
elem->weight=wgt;
elem->price=pr->price;//将新元素插入到链表头
elem->next=elems;
elems=elem;
}
}
boollist:
:
insert2()
{
intnum;
cin>>num;
shangpin*elem=newshangpin;//为新元素分配存储
if(elem!
=0){
elem->number=num;
elem->next=elems;
elems=elem;
returntrue;
}
elsereturnfalse;
}
boollist:
:
insert()//定义list类中插入元素的成员函数
{intnum;cout<<"请再次输入商品的代码"<cin>>num;
shangpin*elem=newshangpin;//为新元素分配存储
if(elem!
=0){
elem->number=num;
cout<<"请输入商品的名称"<cin>>elem->name;
cout<<"请输入商品的价格(单位:
元)"<cin>>elem->price;//将新元素插入到链表头
elem->next=elems;
elems=elem;
returntrue;
}
elsereturnfalse;
}
boollist:
:
deletes(intnumber)//定义list类中删除元素的成员函数
{
if(elems==0)returnfalse;//若表为空,返回false
shangpin*tmp=elems;
if(elems->number==number)
{//若待删除的元素为表头元素
elems=elems->next;
deletetmp;
returntrue;
}
else
for(shangpin*elem=elems;elem->next!
=0;elem=elem->next)
if(elem->next->number==number)
{//循环查找待删除元素
tmp=elem->next;
elem->next=tmp->next;
deletetmp;
returntrue;
}
returnfalse;
}
boollist:
:
contain(intnumber)
{//判元素val在链表中是否存在
if(elems==0)returnfalse;
if(elems->number==number)returntrue;
else
for(shangpin*elem=elems;elem->next!
=0;elem=elem->next)
if(elem->next->number==number)
returntrue;
returnfalse;
}
boollist:
:
contain1(intnumber)
{
if(elems==0){cout<<"没有此商品"<if(elems->number==number){cout<<"商品代码:
"<number<<"商品名称:
"<name<<"商品价格:
"<price<else
for(shangpin*elem=elems;elem->next!
=0;elem=elem->next)
if(elem->next->number==number){
cout<<"商品代码:
"<next->number<<"商品名称:
"<next->name<<"商品的价格:
"<nex