毕业设计论文 超市收银系统.docx

上传人:b****5 文档编号:7370616 上传时间:2023-01-23 格式:DOCX 页数:30 大小:534.23KB
下载 相关 举报
毕业设计论文 超市收银系统.docx_第1页
第1页 / 共30页
毕业设计论文 超市收银系统.docx_第2页
第2页 / 共30页
毕业设计论文 超市收银系统.docx_第3页
第3页 / 共30页
毕业设计论文 超市收银系统.docx_第4页
第4页 / 共30页
毕业设计论文 超市收银系统.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

毕业设计论文 超市收银系统.docx

《毕业设计论文 超市收银系统.docx》由会员分享,可在线阅读,更多相关《毕业设计论文 超市收银系统.docx(30页珍藏版)》请在冰豆网上搜索。

毕业设计论文 超市收银系统.docx

毕业设计论文超市收银系统

目录

1.课程设计目的3

2.课程设计任务与要求3

3.课程设计说明书4

4.课程设计成果8

5.程序调试过程24

6.设计问题的不足和改进方案25

7.课程设计心得26

8.参考文献27

要求:

本次课程设计利用《软件设计基础-C++》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。

要求:

1、对系统进行功能需求分析

2、设计合理的数据结构和系统框架

3、编程简练,程序功能齐全,能正确运行

4、说明书、流程图要清楚

5、课题完成后必须按要求提交课程设计报告

任务:

1.基本要求:

(1)显示超市库存商品信息。

(2)显示购物流程提示信息。

(3)实现收款过程,反复输入所购各种商品的索引号和购买数量,直到输入商品索引号“-1”,结束购物流程。

(4)实现收银,根据顾客所交现金,自动找零。

2.创新要求

在基本要求达到后,可以进行创新设计。

(1)为了简单起见,本设计只要求处理一个购物篮,即假定整个超市只有一个顾客。

这不是一个对真实场景的模拟,真正的场景应该是有多个顾客,可能会同时去收银台结账。

因此,收银台处理的应该是一个购物篮队列,应该单独创建一个线程来追加这个队列,然后由收银台分别为每个购物篮结账,结完一个删除一个。

(2)对于超市的店主来说,还应该有一个交互的界面,可以让店主来完成更改货物的单价、追加货物等操作。

 

概要设计

模块说明:

在我们的程序中一共包括了四个模块,分别是:

收银模块、查询模块、管理模块、退出系统模块。

其中退出模块是在主菜单函数中,其他三个通过是作为switch语句中的一部分,通过switch语句,把六大模块联系了起来。

在查询模块中又分为四部分:

查找商品、查询所有、商品排名、退出查询,总体思路和整体的设计思路一样,退出模块在查询函数中,其他的模块也是通过switch语句将它们俩接起来的。

在排名菜单中包括总金额排名和销售量排名,他们之间是通过if-else结构连接的。

其中排名用的是冒泡法。

管理模块:

也是分为四部分,新建商品、删除商品、修改商品和退出模块,思路和上米娜的一样。

其中删除商品菜单中包括删除全部和单个删除,他们之间的链接也是通过if-else结构连接的。

模块结构图:

 

 

详细设计

总体流程图:

 

各功能模块流程图:

我的课题设计是合作的我主要负责商品查询和商品管理,其中商品管理中的商品排名是合作伙伴的部分。

下面是我制作部分的功能模块流程图:

商品查询流程图:

 

 

商品管理流程图:

 

4.课程设计成果

源代码:

类的定义:

classGoods//商品类

{

public:

//成员函数的说明

Goods(){name[0]='\0';price=0;n1=0;n2=0;syh=0;}//构造函数

~Goods(){}//析构函数

voidsetn(char*n){strcpy(name,n);}//设置属性

voidsetsyh(intsyh){this->syh=syh;}

voidsetp(floatp){price=p;}

voidsetn1(intn1){this->n1=n1;}

voidsetn2(intn2){this->n2=n2;}

char*getn(){return(char*)name;}//得到属性

intgetsyh(){returnsyh;}

floatgetp(){returnprice;};

intgetn1(){returnn1;}

intgetn2(){returnn2;}

Goods*getnext();//得到next指针值

voidsetnext(Goods*next);//设置next指针值

private:

//数据成员的说明

charname[20];//商品名称

intsyh;//商品索引号

floatprice;//价格

intn1;//总件数

intn2;//已卖出

Goods*next;//指向下一个商品对象

};

Goods*Goods:

:

getnext()

{returnnext;}

voidGoods:

:

setnext(Goods*next)//类成员函数的实现

{this->next=next;}

classSale//销售类

{

public:

//成员函数的说明

Sale(){}//构造函数

~Sale(){}//析构函数

voidinig();//初始化

voidaddg();//增加商品

voidshow();//显示商品

voidrank();//排名商品

voidquery();//查询商品

voidmodify();//修改商品

voiddelg();//删除商品

voidsellg();//销售商品

voidsaveg();//保存信息

voidrun();//运行

voidzhucaidan();

voidguanli();

voidchaxun();

private:

//数据成员的说明

Goods*head;//商品头指针

Goods*last;//最后的商品

};

我制作部分:

#include

#include

#include

#include"Goods.h"

#include"Sale.h"

voidSale:

:

inig()//初始化

{

head=last=NULL;//将指针置空

//读取文件

ifstreamrf("Good.txt",ios:

:

out|ios:

:

nocreate,filebuf:

:

openprot);//ios:

:

nocreat打开一个已有的文件,如文件不存在,则打开失败,filebuf:

:

openprot通过构造函数打开文件。

if(rf.fail())cout<<"\n\n现在还没有产品信息";//文件读取错误!

else

{

rf.seekg(0,ios:

:

end);//文件置尾

longn=rf.tellg()/sizeof(Goods);//求取个数

rf.seekg(0);//文件置开头

for(inti=0;i

{

Goods*p=newGoods;

rf.read((char*)p,sizeof(Goods));

p->setnext(NULL);

if(head)

{last->setnext(p);

last=p;

}

elsehead=last=p;

}

cout<<"\n\n"<<"现在数据库中有"<

}//关闭文件

rf.close();

}

voidSale:

:

query()//查询商品

{

if(head==NULL)cout<<"产商品信息为空!

(库中暂无商品)";

else

{loop:

cout<<"\n\n\n\n█查找商品信息█\n";

inty=1;

Goods*p=head;

cout<<"\n请输入索引号";

intsyh;

cin>>syh;

cout<<"\n请输入商品名:

";

charn[20];

cin>>n;

while(p)

{

if(strcmp(n,p->getn())==0)

{

cout<<"\n|---------------------------------------------------------------------------|";

cout<<"\n|商品索引号:

"<getsyh()<<"商品名"<getn()<<"\t单价:

"<getp()<<"\t总数:

"<getn1()<<"\t已卖数:

"<getn2()<<"\t剩余数:

"<getn1()-p->getn2();

cout<<"\n|---------------------------------------------------------------------------|";

y=0;

}

p=p->getnext();

}

if(y)cout<<"\n错误,无该商品!

";

elsecout<<"\n恭喜,操作成功!

\n";

}

cout<<"\n\n\n|-------------------------|";

cout<<"\n|您想继续查找商品信息吗?

|\n|是(Y)否(N)|";

cout<<"\n|-------------------------|\n";

chary;

cin>>y;

if(y=='Y'||y=='y')gotoloop;//loop是一个c语言语句行的标号,就是为了配合goto(跳转)语句而给某行程序起的名字。

}

voidSale:

:

show()//显示商品

{

if(head==NULL)cout<<"\n\n产商品信息为空!

(库中暂无商品)";

else

{

cout<<"\n\n\n\n█商品价目信息█\n";

inti=0;

Goods*p=head;

cout<<"\n|---------------------------------------------------------------------------|";

while(p)

{

if(p->getn1()-p->getn2()>0)

{

cout<<"\n|["<

"<getsyh()<<"商品名"<getn()<<"\t单价:

"<getp()<<"总数:

"<getn1()<<"已卖数:

"<getn2()<<"剩余数:

"<getn1()-p->getn2();

cout<<"\n|---------------------------------------------------------------------------|";

}

if(p->getn1()-p->getn2()<=0)

{

cout<<"\n|["<

"<getsyh()<<"商品名"<getn()<<"\t单价:

"<getp()<<"总数:

"<getn1()<<"已卖数:

"<getn2()<<"剩余数:

"<getn1()-p->getn2()<<"\

\n(注意,货源为零。

请及时进货!

)";

cout<<"\n|---------------------------------------------------------------------------|";

}

p=p->getnext();

i++;

}

cout<<"\n|商品种类数:

"<

cout<<"\n|---------------|\n\n\n\n";

}

}

voidSale:

:

addg()//增加商品

{loop1:

cout<<"\n\n\n█创建新商品█\n";

Goods*p=newGoods;

loop:

intsyh;

cout<<"\n请输入商品索引号";

cin>>syh;

p->setsyh(syh);

charc[20];

cout<<"\n\n请输入商品名\n";//还应输入商品条形码

cin>>c;

//检验---------------------------

Goods*p1=head;

while(p1)

{

if(strcmp(c,p1->getn())==0)

{cout<<"\n错误,商品名重复!

\n";gotoloop;

}

p1=p1->getnext();

}//------------------------------

p->setn(c);

cout<<"\n请输入价格\n";

floatpr;

cin>>pr;

p->setp(pr);

cout<<"\n请输入商品总数\n";

intn1;

cin>>n1;

p->setn1(n1);

p->setn2(0);

p->setnext(NULL);

if

(head==NULL)head=last=p;

else

{last->setnext(p);

last=last->getnext();

}

cout<<"\n恭喜,操作成功!

\n";

cout<<"\n\n\n|-------------------------|";

cout<<"\n|您想继续新建商品吗?

|\n|是(Y)否(N)|";

cout<<"\n|-------------------------|\n";

chary;

cin>>y;

if(y=='Y'||y=='y')gotoloop1;

}

voidSale:

:

delg()//删除商品

{

if(head==NULL)cout<<"产商品信息为空!

(库中暂无商品)因此不能进行此操作";//应弹出是否录入产品信息选项

else

{

cout<<"\n\n\n\n█删除商品信息█\n";

cout<<"\n|---------------------------------------|";

cout<<"\n|█删除菜单█|";

cout<<"\n|--------------------------------------|";

cout<<"\n|A全部删除|";

cout<<"\n|---------------------------------------|";

cout<<"\n|B单个删除|";

cout<<"\n|----------------------------------------|\n请您选择一个任务:

";

chary;

cin>>y;

if(y=='A'||y=='a')//全部删除

{

Goods*p=head;

while(p)

{

Goods*temp=p->getnext();

deletep;

p=temp;

}

head=last=NULL;

cout<<"\n\n数据库已经全部删除!

";

}

else//删除单个

{

loop:

inty=1;

Goods*p=head;

cout<<"\n请输入要删除商品名:

";

charn[20];

cin>>n;

while(p)

{

if(strcmp(n,head->getn())==0)

{head=head->getnext();

deletep;y=0;break;

}//第一个就是

else

{

if((p->getnext()->getn()!

=NULL)&&(strcmp(n,p->getnext()->getn()))==0)

{Goods*temp=p->getnext();

p->setnext(temp->getnext());

deletetemp;y=0;break;

}

}

p=p->getnext();

}

if(y)cout<<"\n错误,无该商品!

";

elsecout<<"\n恭喜,操作成功!

\n";

cout<<"\n\n\n|-------------------------|";

cout<<"\n|您想继续删除商品信息吗?

|\n|是(Y)否(N)|";

cout<<"\n|-------------------------|\n";

charc;

cin>>c;

if(c=='Y'||c=='y')gotoloop;

}

}

}

voidSale:

:

modify()//修改商品

{

if(head==NULL)cout<<"产商品信息为空!

(库中暂无商品)因此不能进行此操作";//应弹出是否录入产品信息选项

else

{loop:

cout<<"\n\n\n\n█修改商品信息█\n";

inty=1;

Goods*p=head;

cout<<"\n请输入要修改商品名:

";

charn[20];

cin>>n;

while(p)

{

if(strcmp(n,p->getn())==0)

{

cout<<"\n请修改索引号[原索引号:

"<getsyh()<<"]\n\n";

intsyh;

cin>>syh;

p->setsyh(syh);

cout<<"\n请修改价格[原价格:

"<getp()<<"]\n\n";

floatpr;cin>>pr;

p->setp(pr);

loop1:

cout<<"\n请修改商品总数[原总数:

"<getn1()<<",已卖数:

"<getn2()<<"]\n\n";

intn3;

cin>>n3;

p->setn1(n3);

y=0;

}

p=p->getnext();

}

if(y)cout<<"\n错误,无该商品!

";

elsecout<<"\n恭喜,操作成功!

\n";

}

cout<<"\n\n\n|-------------------------|";

cout<<"\n|您想继续修改商品信息吗?

|\n|是(Y)否(N)|";

cout<<"\n|-------------------------|\n";

chary;

cin>>y;

if(y=='Y'||y=='y')gotoloop;

}

voidSale:

:

saveg()//保存信息

{//写入文件

ofstreamwf("good.txt",ios:

:

in|ios:

:

trunc,filebuf:

:

openprot);

if(wf.fail())cout<<"\n\n文件读取错误!

";

else

{

Goods*p=head;

intn=0;

while(p)

{

wf.write((char*)p,sizeof(Goods));

p=p->getnext();

n++;

}

//cout<<"\n\n保存"<

";

}

//关闭文件

wf.close();

}

voidSale:

:

chaxun()//查询菜单

{

charc2;

do

{

cout<<"\n|-------------------------------------------|";

cout<<"\n|█查询菜单█|";

cout<<"\n|-------------------------------------------|";

cout<<"\n|A查找商品|";

cout<<"\n|--------------------------------------------|";

cout<<"\n|B查询所有|";

cout<<"\n|--------------------------------------------|";

cout<<"\n|C商品排名|";

cout<<"\n|--------------------------------------------|";

cout<<"\n|D退出查询|";

cout<<"\n|--------------------------------------------|";

cout<<"\n|请您选择一个任务|";

cout<<"\n|-------------------------------------------|\n\n\n";

cin>>c2;

switch(c2)

{case'a':

case'A':

query();break;

case'b':

case'B':

show();break;

case'c':

case'C':

rank();break;

case'd':

case'D':

break;

}

}

while(c2!

='d'&&c2!

='D');

}//break;

voidSale:

:

guanli()//管理菜单

{

charc3;

do

{

cout<<"\n|--------------------------------------------|";

cout<<"\n|█商品管理█|";

cout<<"\n|--------------------------------------------|";

cout<<"\n|A新建商品|";

cout<<"\n|-------------------------------------------|";

cout<<"\n|B删除商品|";

cout<<"\n|-----------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1