c程序设计语言课程设计收银台结算程序.docx
- 文档编号:4138499
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:17
- 大小:47.24KB
c程序设计语言课程设计收银台结算程序.docx
《c程序设计语言课程设计收银台结算程序.docx》由会员分享,可在线阅读,更多相关《c程序设计语言课程设计收银台结算程序.docx(17页珍藏版)》请在冰豆网上搜索。
c程序设计语言课程设计收银台结算程序
合肥学院
计算机科学与技术系
课程设计报告
2009~2010学年第二学期
课程
程序设计语言Ⅱ课程设计
课程设计名称
收银台结算程序
学生姓名
学号
0904032024
专业班级
网络工程
(2)班
指导教师
何立新、刘洁群
2010年7月
(一)需求分析
现在某大型超市由于购物人员太多需要一个收银台结算程序,以方便消费者能够快速付账。
该程序中能够各种商品的全部信息,包括商品的编号、名称、数量、进价、售价等。
程序主要是用来方便消费者付账,当消费者选定商品时收银台的工作人员只要把消费者买的商品的数量输进去就可以了,该程序会自动的计算其总额并告知消费者要交多少金额。
因此该程序的主要功能就是帮助收银台的工作人员实现收款的目的。
所以在制作该软件时首先要有一系列的子函数:
当输入商品的编号时就可以知道它的数量、进价、售价等。
当工作人员收银时只要输入商品的编号,并输入其数量就可以知道消费者要付金多少,然后系统就会根据消费者给的金额会打印出相应的购物小票。
小票上会显示消费者所购商品的编号、数量、以及消费者所给的金额和应该找零多少。
当消费者不能提供所购商品的编号时,系统则无法进行其各项的操作。
在收银的过程中如果遇到了消费者所给的金额不够则系统会自动出现提示:
所交金额不足。
每当消费者买走一件商品时系统在显示时变回显示其数量减少一个,在开始设计时为了能够满足要求因此要定义空间足够大的id,name,count.分别各为100.在计算时输入商品的数量然后系统就会用该商品的单价乘以数量就得到了消费者应付的金额。
(二)设计
根据上诉需求应该定义一个DATA类,该类中定义了产品的编号id,产品名称name,商品的已售数量salecount,还有商品的进价buy,和商品的售价sale。
在public中有成员函数getid,用于得到商品的编号;getname,用于得到商品的名称;getsale,用于得到商品的售价;getbuy,用于得到商品的进价。
在此基础上又派生出另一个类WAY。
在WAY类中有成员函数newfile,用于新建各种商品的信息,在newfile中会分别要求输入商品的编号、名称、数量、进价、售价。
在一次输入各种商品的各种信息后可以调用另一个成员函数save,将输入的商品的各种信息储存起来。
要进行收银工作时选择sale子函数进行收银工作,在输入商品的各种信息后可以调用函数showdata把商品的编号、名称、数量以及进价和售价都显示出来以方便查看。
在WAY类中open函数主要是用来打开已经保存好的各种商品的各种基本信息。
在程序运行时将开始准备好的数据输入这样就变的更加方便了。
在有很多商品的情况下要临时找到一个商品的基本信息一般比较困难,因此还要用到binsearch来查找商品。
当要想找到摸个商品时只要将其编号输入系统就可以根据编号进行查找,从而找到所要的商品。
在商品已经销售了一部分时可以计算一下这些商品的总的进价因而sumsale函数就是来计算已经销售出去的商品的总的进价,同样,当想知道已经售出的这些商品所得到的利润时就可以用函数sumgain,这些函数都是主函数countmenu中的子函数,在countmenu函数中包括已售总额、已售总进价、已得纯利润、预销售总额。
在商场进行交易时便会用到函数sale来进行收银工作,开始时输入商品的编号如果没有改编号则说明仓库中没有该商品,此时便会输出“此产品已缺”,有该商品的则会提示你输入“输入数量”,在有提示:
“输入收到金额”,此时如果输入的是负数或者超出该产品的库存量则系统会提示:
“数量输入不真确”,等到一切都正确后系统便会输出一个购物小票:
上面有商品的名称、数量、单价、应收、找零。
在该系统实现其收银功能后,我们可以对这一段时间所销售的商品做一个统计,包括对他的数量、售出量、进价、售价、盈利多少等,当选择计算的子函数时便可以对这些已经售出的商品做一个系统的统计,在统计之后会输入一个清单。
上面写着这段时间所有售出的商品的各种信息,已列表的形式把商品的编号、名称、已售出量、售价、进价等。
在类的设计中主要是数据成员以及成员函数,在WAY类中我们首先要把商品的基本信息能用数据成员表示,于是便要定义编号、名称、数量、进价、售价。
在主函数menu中有1.输入产品信息2.显示3.保存4.打开5.菜单6.收银7.计算0.返回"这几项功能。
在设计该程序时要考虑到开始时可以对商品的信息进行输入,于是在子函数newfile中便是将商品的信息输入其中。
但考虑到由于商品要是太多的话临时输入这些商品的信息太麻烦并且耽误时间,所以我们考虑到用磁盘文件来处理,在磁盘文件中我们先把各种商品的基本信息保存在里面,等到要用的时候就可以直接打开,因此我们用open函数来实现这个功能。
(三)用户手册
当我们把收银台结算程序编写好用于商场之后,在消费者来付账时,我们首先运行该程序,这是主页面会显示1.输入产品信息2.显示3.保存4.打开5.菜单6.收银7.计算0.返回",“选择菜单”的字样。
这是选择1系统就会显示id、name、count、buy、sale。
这是我们依次输入商品的编号、名称、数量、进价、售价后,系统又会显示sn这是再选择所要操作的,当选择6时进入收银状态。
这时系统会提示你输入产品编号、输入数量、输入收到金额、等全部输入完成后系统便会打印一个购物小票出来:
购物小票
名称:
奶粉
数量:
2
单价:
140元
应收:
280元
找零:
12元
当输入的编号无法找到时系统便会显示:
notfind。
当选择7时系统便会输出:
1.已售总额2.已售总进价3.已得纯利润4.预销售总额5.进价成本总额0.返回"。
这时还要进行子函数的选择,选择1时这是时在计算已经售出商品的总额,系统会显示280。
选择2时这是在计算已经售出商品的总进价,系统会显示200,当选择3时这是在计算已经售出商品所得的总利润,系统会显示80,当选择4时这是在计算预销售总额,系统会显示310,当选择5时这是在计算进价成本总额,系统会显示230。
当我们想结束计算着子函数的调用时选择0这是系统会自动跳出该子函数的运行然后显示:
输入“选择菜单”作为提示。
当我们已经输入很多商品的信息并都已成功售出时由于看不见主菜单的内容了这时就可以选择5系统便会把住菜单显示出来:
1.输入产品信息2.显示3.保存4.打开5.菜单6.收银7.计算0.返回",当我们选择2时系统就会把商品现在信息显示出来。
编号名称当前量已售量进价售价
12奶粉1002100140
13洗衣机200105002000
等各种商品的信息。
只要按照系统的提示操作就会很顺利的完成。
(四)调试及测试
由于该程序要包含各种商品的信息因此在运行该系统时首先要把各种商品的基本信息放在磁盘文件中,在应用时直接就可以读出这些商品的信息。
在开始编写该程序时没有考虑到商品数量、价格的容量大小导致了在输入商品的信息时系统出现了错误,后来打开书本时看到书上的例子时想起来的从而改正了错误,在编写showdata,函数时我们要把商品的各种信息都显示出来由于商品的基本信息比较多,要考虑到输出时的整齐所以要要运用到setw函数来控制输出时的界面
开始时由于没有注意到所输出来的空格数进而导致了输出来的界面有有点乱,之后又调整了输出时的空格数才使得输出来的界面变得相对美观,在编写sale函数时开始没考虑到输入提示,当系统运行时不知道系统要我们做什么,之后意思到后就在开始时输入了输入提示,这样当系统运行时就可以按照系统对你的提示进操作了。
在有很多商品的情况下要临时找到一个商品的基本信息一般比较困难,因此还要用到binsearch来查找商品。
当要想找到摸个商品时只要将其编号输入系统就可以根据编号进行查找,
从而找到所要的商品。
在商品已经销售了一部分时可以计算一下这些商品的总的进价因而sumsale函数就是来计算已经销售出去的商品的总的进价,同样,当想知道已经售出的这些商品所得到的利润时就可以用函数sumgain该系统中为了使得能够把商品的各种信息都能输出来并能够显示出来因此就运用了countmenu函数来把已经售出商品和未售的出商品的各种信息输入。
系统会显示1.已售总额2.已售总进价3.已得纯利润4.预销售总额5.进价成本总额。
这样就可以知道未售出商品和已售出商品的数量和已经所得的盈利。
当选择菜单1时系统就会让你输入各种商品的信息,这时按照要求输入时然后选择6就可以进行收银工作,我们在系统的提示下会输入商品的编号、名称、数量、和进价售价。
可以
进行操作了。
然后就当选择7时系统便会输出:
1.已售总额2.已售总进价3.已得纯利润4.预销售总额5.进价成本总额0.返回"。
这时还要进行子函数的选择,选择1时这是时在计算已经售出商品的总额,系统会显示134。
选择2时这是在计算已经售出商品的总进价,系统会显示92,当选择3时这是在计算已经售出商品所得的总利润,系统会显示42,当选择4时这是在计算预销售总额,系统会显示6838,当选择5时这是在计算进价成本总额,系统会显示5440。
当我们想结束计算着子函数的调用时选择0这是系统会自动跳出该子函数的运行然后显示:
输入“选择菜单”作为提示。
(5)小结
通过一个学期C++语言的学习,现在对程序设计有了一定程度上的了解并会进行简单的程序设计,开始学习C++语言时可以说是在听天书,啥都不会,整天晕头转向的,加之老师是如此的严格,因此对C+语言充满了恐惧感!
但由于认识到了C++语言的重要性,因此又加紧学习,上课认真听讲,课后认真看书,所以才对C++语言有了一定的了解和体会,之后才慢慢的会编写一些简单的程序,随着学习的深入,越来越难,之后又学习了数组和指针使得学习变得更难,数组的学习可以解决很多数据类型一样的数,然后又学习了结构体,结构体的学习使得程序越来越大,越来越复杂,以前的程序都是一些简单的小程序,学了结构体后就可以编写一些相对较大的程序了,结构体可以吧一些数据类型一样的集合在一起,
在编写收银台结算系统时,开始不知道怎样写,主要是前面学的不好,还有一些小的知识不知道,所以在编写相对较大的程序时会遇到很多困难,
通过一个学期的学习,现在对C++语言不再那么的害怕,一些简单的程序可以自己独立的解决,现在也可以吧学生成绩管理系统编写出来了。
由此可以看出只要自己努力就可以解决很多问题,C++语言的学习主要是以动手为主,不断的自己写程序代码,然后自己上机调试,不断的写程序不断地上机调试就可以熟能生巧,收银台结算系统就是不断的上机调试的结果,只有自己认真了努力了才能不断的进步。
(六)参考文献
[1]刘振安等编著《C++程序设计课程设计》机械工业出版社
[2]吴乃陵等编著《C++程序设计》北京:
高等教育出版社
[3]李龙澍《C++程序设计实训教程》北京:
清华大学出版社
[4]宁正元《数据结构(C语言)》南京:
东南大学出版社。
2000年6月
[5]严蔚敏等《数据结构(C语言版)》北京:
清华大学出版社,1997年
[6]胡学钢等《数据结构算法设计指导》北京:
清华大学出版社,1999年
[7]明日科技编著《VisualC++程序开发范例宝典》北京:
人民邮电出版社
附录
#include
#include
#include
#include
#defineLENname100
#defineLENnode100
#defineLENfname100
classDATA
{
intid;//产品编号
charname[LENname];//产品名称
intcount;//库存数量
intsaleCount;//已售数量
floatbuy;//进价
floatsale;//售价
booldelTag;
public:
intgetId()
{
returnid;
}
char*getName()
{
returnname;
}
intgetCount()
{
returncount;
}
intgetSaleCount()
{
returnsaleCount;
}
floatgetBuy()
{
returnbuy;
}
floatgetSale()
{
returnsale;
}
boolgetDelTag()
{
returndelTag;
}
//----------------------
voidsetId(intn)
{
id=n;
}
voidsetName(charna[])
{
strcpy(name,na);
}
voidsetCount(intn)
{
count=n;
}
voidsetSaleCount(intn)
{
saleCount=n;
}
voidsetBuy(floatn)
{
buy=n;
}
voidsetSale(floatn)
{
sale=n;
}
//...................
voidDel()
{
delTag=1;
}
voidunDel()
{
delTag=0;
}
};
classWAY
{
DATAnode[LENnode];
intLEN;
intLenWillDel;
public:
voidnewFile()
{
intid;
charname[LENname];
intcount;
floatbuy;
floatsale;
if(LEN<0)
LEN=0;
LenWillDel=0;
inti;
DATAtemp;
for(LEN=1;LEN<3;LEN++)
{
cout<<"id:
";
cin>>id;
if(id==-1)
break;
node[LEN].setId(id);
cout<<"name:
";
cin>>name;
node[LEN].setName(name);
cout<<"count:
";
cin>>count;
node[LEN].setCount(count);
cout<<"buy:
";
cin>>buy;
node[LEN].setBuy(buy);
cout<<"sale:
";
cin>>sale;
node[LEN].setSale(sale);
node[LEN].unDel();
node[LEN].setSaleCount(0);//售出此产品0个
for(i=0;i { if(node[i].getId()>node[LEN].getId()) { temp=node[i]; node[i]=node[LEN]; node[LEN]=temp; } } } } voidshowData(inti) { cout< < < < < < < < } voidshowData() { cout<<"编号" < < < < < < for(inti=0;i if(node[i].getCount()>0&&node[i].getDelTag()==0) showData(i); } voidsave() { charfname[LENfname]; cout<<"fname: "; cin>>fname; fstreamf(fname,ios: : out|ios: : binary); for(inti=0;i if(node[i].getCount()>0&&node[i].getDelTag()==0) f.write((char*)&node[i],sizeof(node[i])); f.close(); cout<<"savesuccess"< } voidopen() { charfname[LENfname]; cout<<"fname: "; cin>>fname; LEN=-1; LenWillDel=0; fstreamf(fname,ios: : in|ios: : binary); for(LEN=1;LEN<3;LEN++) { if(! f) break; LEN++; f.seekg(LEN*sizeof(node[LEN])); f.read((char*)&node[LEN],sizeof(node[LEN])); } f.close(); } intBinSearch() { intid; cout<<"id: "; cin>>id; intlow=0,mid,high=LEN-1; while(low<=high) { mid=(low+high)/2; if(node[mid].getId()==id) returnmid; elseif(node[mid].getId()>id) high=mid-1; else low=mid+1; } return-1; } floatsumSale()//已销售总额 { floattemp=0.0; for(inti=0;i if(node[i].getSaleCount()>0&&node[i].getDelTag()==0) temp+=node[i].getSale()*node[i].getSaleCount(); returntemp; } floatsumBuy()//(已售产品的)进价总额 { floattemp=0.0; for(inti=0;i if(node[i].getSaleCount()>0&&node[i].getDelTag()==0) temp+=node[i].getBuy()*node[i].getSaleCount(); returntemp; } floatsumGain()//(已得)纯利润总额 { returnsumSale()-sumBuy(); } floatsumSaleAll()//预销售总额(包括已售和未售) { floattemp=0.0; for(inti=0;i if(node[i].getDelTag()==0) temp+=node[i].getSale()*(node[i].getSaleCount()+node[i].getCount()); returntemp; } floatsumBuyAll()//进价成本总额(包括已售和未售) { floattemp=0.0; for(inti=0;i if(node[i].getDelTag()==0) temp+=node[i].getBuy()*(node[i].getSaleCount()+node[i].getCount()); returntemp; } voidcountMenu() { cout<<"1.已售总额2.已售总进价3.已得纯利润4.预销售总额5.进价成本总额0.返回"< intyy; intt; for(t=1;t<7;t++) { cout<<"yy: "; cin>>yy; switch(yy) { case1: cout< case2: cout< case3: cout< case4: cout< case5: cout< case0: break; } } } voidsale() { cout<<"产品编号"; inttemp; temp=BinSearch(); if(temp==-1) { cout<<"notfind"< return; } if(node[temp].getCount()<=0) { cout<<"此产品已缺"< return; } intcount; cout<<"输入数量: "; cin>>count; floatmoney; cout<<"输入收到金额(元): "; cin>>money; if(count<=0&&count>node[temp].getCount())//输入的是负数或超出该产品库存量 cout<<"数量输入不正确"< else { node[temp].setCount(node[temp].getCount()-count);//当前库存减少count node[temp].setSaleCount(node[temp].getSaleCount()+count);//出售量增加count cout<<"┌┄┄┄┄┄┄┄┐"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计语言 课程设计 收银台 结算 程序