找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6893|回复: 2
收起左侧

c++商品销售管理系统源码与综合程序课程设计说明书

[复制链接]
ID:359090 发表于 2018-6-26 10:23 | 显示全部楼层 |阅读模式
综合程序课程设计说明书
课程设计名称:        软件综合课程设计      
课程设计题目:         商品销售统计系统      
学 院 名 称:          信息工程学院         
专业:电子信息工程   班级:   150411  
学号:   15041113    姓名:   高*
评分:  教师:    邹*

    综合程序    课程设计任务书
20 17 -20 18学年 第 2 学期  第 1 周- 2
题目
商品销售统计系统
内容及要求
编写商品销售统计程序,商品的信息有:商品的名称,计量单位(重量或件),单价。所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。
要求:
程序分为两个部分:第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。程序运行时由用户选择进入哪一部分功能,并能在运行时在两部分之间切换。第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码表示本次购物结束。此时。程序计算出应付钱款数并显示。
进度安排
1周周一至第1周周二:查资料;
1周周三至第2周周四:程序编写与调试;
2周周五:设计结果检查。
学生姓名:  15041106郑文婷  15041113高志华
指导时间  周一、周三、周五
指导地点:  E311
任务下达
2018年2月26 日
任务完成
2018  年 3 月9 日
考核方式
1.评阅     2.答辩       3.实际操作      4.其它□
指导教师
邹*
系(部)主任
孙*
注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。
2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。


摘要
销售统计系统是销售统计软件的通俗化名称,销售统计系统是管理销售线索、销售活动、业务报告、统计销售业绩的先进工具,适合企业销售部门办公和管理使用,协助销售经理和销售人员快速管理客户、销售和业务的重要数据。
由于经济的飞速发展,销售人员付出大量的时间,得到的效率很低。因此为了提高工作效率,减轻销售人员查找等繁杂的工作,设计出一个功能完善、合理的销售管理系统。本课题设计出此系统以供操作者进行商品销售管理,方便操作者随时添加、查询和修改商品信息。
关键字:c语言;查找;删除;修改;保存。
目录
第一章需求分析·························1
第二章系统组成及设计原理····················2
2.1 系统组成·····················2
2.2 设计原理·····················2
第三章概要设计························3
3.1 系统层次图·····················3
3.2 方案对比······················4
详细设计························5
4.1商品录入·····················5
4.2 商品查询······················6
4.3 显示商品······················7
4.4 购买商品······················8
4.5 保存信息······················9
    4. 6  修改商品·····························10
4. 7 主函数模块······ ·····················11
第五章调试及测试及结果与分析···················12
5.1 调试过程 ···························12
5.2 调试结果 ···························14
结论······························18
参考文献····························19
附录A·······························20
                                                                                
  • 需求分析
分析此课题题目的要求,本系统需要具备以下功能:能够统计所销售商品的代码、名称、价格、数量等信息;能够通过输入选择键调出仓库中所有商品的所有信息;实现通过代码来查询某个商品,并且输出该商品的所有信息;能够在用户购买商品时,根据情况给予用户反馈信息,其中包括购买商品名称、代码、单价、所买数量,并对该商品进行一次小结,告知用户消费情况;购买结束后,统计用户所消费的总金额,记录其所付金额以及找零金额。
  • 系统组成及设计原理
2.1系统的组成
系统的组成包括以下几个模块
1.录入商品
2.商品查询
3.显示数据
4.购买商品
5.保存信息
6.修改信息
7.退出系统
2.2  设计原理
实现这些功能,需要声明构造函数Sale(),此函数中包含数据成员商品代码、名字、价格、数量。另外,创建链表,用于储存商品录入信息,购买情况,以及所有商品的信息。利用switch语句来实现根据需要选择不同的功能。
创建链表,对头结点进行初始化,对数据域分配内存大小,通过指针域访问结点,来实现元素的储存调用等。
定义子函数,来实现商品的录入、查询、显示、购买等功能。录入功能需要包含商品的一些信息,如:代码、名称、价格等;查询功能则是为了方便用户获得所需购买物品的一些信息;显示功能可以使用户对仓库的储存情况一目了然;购买功能主要是进行商品的结算。
编写过程中,代码和名字需应用字符串,数量以整型输出,考虑到上平的数量可能会很多,故定义为unsigned int quality,价格以浮点型输出。
第三章概要设计
3.1 系统结构层次图
本销售系统使用设置主菜单,从主菜单进入分应用的模式。一方面使人机交互界面人性化,便于操作者的操作,另一方面使系统模块化,以便在日后调试检测时较为方便。系统结构层次图如图3.1所示
图3.1 结构层次图
3.2方案对比
图3.2 对比结构层次图
图3.2为备选设计方案,菜单选项分两级,实际操作过程中从每级子程序退出时需要进入第一级人机界面,所以操作过于繁琐,再与方案一对比过后选择更为简便的第一种方案。
  • 详细设计
4.1  商品录入
商品录入功能用链表保存输入的商品信息,执行顺序流程,输入商品代码、名称、数量、单价。将数据保存在链表中。流程图如图4.1所示。
图4.1 商品录入流程图
4.2  商品查询
按商品名称查询通过Link Search(Link Head,string&num)函数实现,用到while循环语句和if-else语句。输入要查询商品的名称,在文件中读取,若该商品存在,则从文件中获取该商品信息,并显示到输出界面,若不存在,则输出界面显示“商品信息不存在”


图4.2 商品查询流程图

4.3  显示商品
商品显示功能通过定义Display函数实现,在此函数中要调用查询子函数Search,通过查找按顺序输出商品信息。         


图4.3 显示商品流程图

4.4   商品购买
商品购买功能子程序需要调用Total、Display、ChechOut三个函数,用while循环语句实现是否继续购买。使用if-else语句,另外使用sum=sum+=CheckOut语句实现多次小计累加求和。

图4.4  商品购买流程图

4.5  保存信息
此模块中运用到c语言中文件读写的相关知识,定义指针fq,若未按照正常格式写入,则输出文件写入错误,具体流程图如图4.5所示

图4.5 保存信息流程图

4.6  商品修改
修改商品信息用到了Alter()函数实现,调用Search()函数,通过输入商品名称确定所要修改商品的信息,除了用到switch语句,还用到if-else语句,判断所要修改的商品信息是否存在,若不存在,则输出“该商品不存在”;若存在,即可对商品信息进行相应的修改。流程图如图4.6所示。

图4.6 商品修改流程图
4.7  主函数模块
主函数主要运用switch-case选择判断语句来调用相关函数功能模块,系统的运行是循环里进行的,只有在主界面选择“退出时”,才会跳出循环,并退出程序。主函数中分别定义了各个模块所要调用的功能函数,整个程序从主函数开始执行。
图4.7 主函数流程图
第五章  调试及测试结果与分析
5.1调试过程
程序错误之处:
1、代码和名字分别定义为整型和字符型。
2、未对链表头结点进行初始化。
3、数据域中没有分配内存。
  4、在do-while语句结束时没有返回头结点。
  5、显示程序不能实现,卖出商品后没有办法在原有的数据上减去卖出的部分,显示的仍旧是录入商品的全部数量。
导致的后果:
第一个错误导致访问结点无法进行;与后面的不匹配。第二个错误,在运行程序时,无论是录入商品信息还是购买商品均不能进行第二步操作;第三个错误引发的后果与错误2一样;错误4则导致函数creat没有返回值。最后的一个错误不符合任务书上的要求。
改正方法:
1、定义代码和名字改用string;
2、对头结点进行初始化并动态分配一个内存大小:
             Head=(Link)new Node;//每次动态分配一个Node内存大小。
             Head->num="";
             Head->name="";
             Head->jiage=0.0;
Head->shuliang=0;
             Head->next=NULL;
3、返回头结点:return Head;。
在编写此程序时,定义变量num、name时没有注意其类型,无法与后面Head->num="";Head->name="";if(p->num==num)相匹配,程序出现错误。用以储存更多的元素内容,否则的话在运行的过程中,录入一种商品的信息完成后,程序会自动结束。
首先定义一个子函数:
Link Search(Link Head,string& num)
{
Link p;

p=Head;

while(p!=NULL)
{
if(p->num==num)
return p;
else
p=p->next;
}
cout<<"无此商品!"<<endl;
return p;。
}
通过输入商品代码,来查询仓库中是否有该商品。
另外在运行程序是发现,当选择查看所有商品信息时输出结果太乱,信息无法与提示对齐,我们可以在头文件中加入#include <iomanip>,后面的输出程序可以改成:
cout<<setw(15)<<left<<ptr->m_code
<<setw(15)<<left<<ptr->m_name
<<setw(15)<<left<<ptr->m_price
<<setw(15)<<left<<ptr->m_quantity<<endl;
     改进设想:
本程序最大的缺点就是没有在程序中预先储存商品信息,因此在运行程序过程中需要首先录入一部分商品。为了方便操作,可以针对此问题来进行修改,在容器中储存一些比较常用的商品(不少于二十种)。
运行程序过程中,如果选择了2,购买商品,首先会显示:结束买入请按‘N’,其他任意键表示继续买入!这里的任意键不为空格和输入键,并且输入数字的情况下只能为一位,否则无法输入代码,程序无法继续进行。
5.2调试结果
进入菜单界面,调试录入信息功能。根据提示输入数字1,然后显示出“商品信息”接着输入代码、名称、价格和数量,最后显示“数据输入成功!继续?(Y/N)”。接着输入下一个商品信息选择“Y”,否则键入“N”。此课题调试输入两种商品信息,实际操作如图5.1所示。

图5.1 录入信息调试图
查询功能调试结果:在两种商品信息录入成功之后,回到主菜单栏。输入所要查询的商品代码,回车。输出所查找商品的所有信息。例如输入代码01,回车,显示出商品电脑的所有信息。实际操作效果如图5.2所示。
图5.2 查询功能调试
显示功能调试,如图5.3所示,回到主界面选择“3 显示数据”进入显示功能程序,所有商品信息逐行显示。
图5.3 显示功能调试图
    进入系统另外一部分,实际购买商品流程。输入购买商品代码02,输入购买数量10台,显示出单个商品小结3000元。选择”Y”继续购买第二件商品,输入购买的第二件商品代码01,输入购买数量2台,显示出第二件商品小结。选择“N”结束商品购买。显示该支付34000元,实际支付40000元自动计算找零,如图5.4所示。
图5.4 显示功能调试图
商品信息保存功能测试结果:在完成两种商品录入后回到主菜单,输入数字5,将所有商品信息以文件形式保存到计算机磁盘中。结果如图5.5所示
图5.5 保存功能调试图
修改功能调试:从主界面进入修改功能,输入所要修改商品的名称,选择单价修改,输入正确信息4000.显示信息如图5.6所示,
图5.6 修改功能调试图
结论
    本次软件课程设计用c++实现了题目所有的要求,达到了商品销售系统所实现的功能。将整个程序分成了多个模块,每个模块相互独立而又彼此联系,通过主函数调用来实现各个模块的功能。模块化设计在实际中应用广泛,本课题提高了学生对软件设计的兴趣,不仅巩固了所学知识,在编程过程中学到了很多课堂之外的知识,实际应用了模块化设计实例。

源码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include<fstream>
  5. #define null 0
  6. #include<iostream>
  7. #include <iomanip>
  8. #include<string>     //控制字符串的头文件
  9. using namespace std;
  10. class tong
  11. {
  12. public:
  13. tong();
  14. tong(char co[20],char n[20],
  15. char dw[20],double pr,int qu);
  16. ~tong();
  17. void save();
  18. void take();
  19. void Set();                         //商品信息录入
  20. void Alter();                       //商品信息修改
  21. void list();                        //商品信息显示
  22. void Display();
  23. float Checkout(int quantity);        //单个商品小结
  24. void Total();                        //总计
  25. void buy();                          //商品买入
  26. private :
  27. char code[20];char name[20];char danwei[20];double price;int quantity;
  28. };
  29. tong::tong(){}
  30. tong::tong(char co[20],char n[20],char dw[20],double pr,int qu){
  31. strcpy(code,co);
  32. strcpy(name,n);
  33. strcpy(danwei,dw);
  34. price=pr;
  35. quantity=qu;}
  36. tong::~tong(){}
  37. tong *s[50];
  38. int i=0;
  39. int j=0;
  40. char code[20];char name[20];char danwei[20];double price; int quantity;
  41. void tong::save() //写入数据至文件
  42. {
  43. ofstream outfile;
  44. outfile.open("商品销售管理系统.txt");
  45. if(!outfile)
  46. {
  47. cout<<"cannot open the file!"<<endl;
  48. return ;
  49. }
  50. else
  51. outfile<<"商品代码及名称"<<""<<"商品单价"<<""<<"请输入商品数量"<<""<<"计量单位"<<endl;
  52. cout<<"商品代码及名称"<<""<<"商品单价"<<""<<"请输入商品数量"<<""<<"计量单位"<<endl;
  53. for(int k=0;k<i;k++){

  54. cout<<setw(10)<<left<<s[k]->code<<setw(10)<<left<<s[k]->name<<setw(15)<<left<<s[k]->price<<setw(10)<<left<<s[k]->quantity<<setw(15)<<left<<s[k]->danwei<<endl;
  55. outfile<<setw(10)<<left<<s[k]->code<<setw(10)<<left<<s[k]->name<<setw(15)<<left<<s[k]->price<<setw(10)<<left<<s[k]->quantity<<setw(15)<<left<<s[k]->danwei<<endl;
  56. }
  57. cout<<"*************Save Success!*****************"<<endl;
  58. outfile.close();
  59. }



  60. void tong::Set()                   //商品信息录入
  61. {
  62. cout<<"请输入商品代码及名称:"<<endl;
  63. cin>>code>>name;
  64. cout<<"请输入计量单位:"<<endl;
  65. cin>>danwei;
  66. cout<<"请输入商品单价:"<<endl;
  67. cin>>price;
  68. cout<<"请输入商品数量:"<<endl;
  69. cin>>quantity;
  70. j++;
  71. s[i]=new tong(code,name,danwei,price,quantity);
  72. i++;
  73. cout<<"信息录入成功!"<<endl;
  74. cout<<"是否继续录入?(y or n)"<<endl;
  75. if(getch()=='y')
  76. Set();
  77. else return;
  78. }
  79. void tong::Alter()//商品信息修改
  80. {
  81. cout<<"请输入您所修改的商品名称:"<<endl;
  82. cin>>name;
  83. for(int h=0;h<i;h++)
  84. if(strcmp(name,s[h]->name)==0)
  85. {
  86. char newcode[20];
  87. char newname[20];
  88. char newdanwei[20];
  89. double newprice;
  90. int newquantity;
  91. int n;
  92. cout<<"你想要修改:代码及名称按3) 、数量(请按4)"<<endl;
  93. cin>>n;
  94. switch(n)
  95. {
  96. case 1:
  97. { cout<<"请输入商品代码及名称:"<<endl;
  98. cin>>newcode[20]>>newname[20];
  99. s[h]->code[20]=newcode[20];
  100. s[h]->name[20]=newname[20];

  101. cout<<"数据修改成功!";
  102. }break;
  103. case 2:            
  104.               {                       
  105.                             cout<<"请输入计量单位:"<<endl;                       
  106.                             cin>>newdanwei;              
  107.                             s[h]->danwei[20]=newdanwei[20];                       
  108.                             cout<<"数据修改成功!";                  
  109.               }break;                    
  110. case 3:                    
  111.               {                       
  112.                             cout<<"请输入单价:"<<endl;                       
  113.                             cin>>newprice;           
  114.                             s[h]->price=newprice;                       
  115.                             cout<<"数据修改成功!";                        
  116.               }break;

  117. case 4:
  118. {
  119. cout<<"请输入数量:"<<endl;
  120. cin>>newquantity;
  121. s[h]->quantity=newquantity;
  122. cout<<"数据修改成功!";
  123. }break;
  124. }
  125. }
  126. else
  127. cout<<"你所要修改的商品的信息不存在,请修正后在更改!"<<endl;
  128. cout<<"是否继续修改?(y/n)"<<endl;
  129. if(getch()=='y')
  130. Alter();
  131. else return ;
  132. }
  133. void tong::list()                  //商品信息显示
  134. {
  135. cout<<"=========================================================="<<endl;
  136. cout<<"===================所有商品信息==================="<<endl;
  137. cout<<"=========================================================="<<endl;
  138. cout<<"货品代码=======货品名称======货品价格======货品数量======计量单位"<<endl;
  139. if(i==0)
  140. cout<<"系统中没有录入商品信息或该商品信息已被删除!"<<endl;
  141. for(int k=0;k<i;k++){
  142. cout<<setw(15)<<left<<s[k]->code<<setw(15)<<left<<s[k]->name<<setw(15)<<left<<s[k]->price<<setw(15)<<left<<s[k]->quantity<<setw(15)<<left<<s[k]->danwei<<endl;
  143. }
  144. }
  145. void tong::buy()                       //商品买入
  146. {
  147. cout<<"请输入你想购买的商品的代码及名称:"<<endl;
  148. cin>>code>>name;
  149. cout<<"请输入您想购买的商品的数量:"<<endl;
  150. cin>>quantity;
  151. Checkout(quantity);
  152. Display();
  153. Total();
  154. }
  155. void tong::Display()
  156. {
  157. int k;
  158. k=atoi(code)-1;

  159. cout<<"货品代码=======货品名称======货品价格======购买数量======计量单位=====小计(元)=="<<endl;
  160. cout<<setw(15)<<left<<s[k]->code
  161. <<setw(15)<<left<<s[k]->name
  162. <<setw(15)<<left<<s[k]->price
  163. <<setw(15)<<left<<quantity
  164. <<setw(15)<<left<<s[k]->danwei
  165. <<setw(15)<<left<<quantity*s[k]->price<<endl;
  166. }


  167. float tong::Checkout(int quantity)                    //单个商品小结
  168. {
  169. int k=0;
  170. float sum(0.0);
  171. sum=s[k]->price * quantity;
  172. return sum;
  173. }
  174. void tong::Total()                            //总结帐
  175. {
  176. float sum = 0;
  177. float factly;
  178. char GoOn;
  179. while(1)
  180. {
  181. cout<<"要结束商品买入请按'N/n',其继续买入请按'Y/y': "<<endl;
  182. cin>>GoOn;
  183. if(GoOn=='Y'||GoOn=='y'){      //int quantity;
  184. cout<<"请输入商品代码:"<<endl;
  185. cin>>code>>name;
  186. cout<<"请输入商品数量:"<<endl;
  187. cin>>quantity;
  188. sum+=Checkout(quantity);
  189. cout<<"你购买的商品为:"<<endl;
  190. Display();
  191. }
  192. else if(GoOn=='N'||GoOn=='n')
  193. break;
  194. }
  195. cout<<"----------------------------------------------------"<<endl;
  196. sum+=Checkout(quantity);
  197. cout<<"你应该付 "<<sum<<"元!"<<endl;
  198. cout<<"你实际付(元): ";
  199. cin>>factly;
  200. cout<<"应该找回你 "<<factly-sum<<"元!"<<endl;     //找零。
  201. }
  202. void caozuoa(int p){
  203. tong t;
  204. switch(p){
  205. case 0:t.Set();break;
  206. case 1:t. Alter ();break;
  207. case 2:t.save();break;
  208. case 8:exit(0);break;
  209. }
  210. }
  211. void caozuob(int p){
  212. tong t;
  213. switch(p){
  214. case 0:t.list();break;
  215. case 1:t.buy();break;
  216. case 8:exit(0);break;
  217. }
  218. }
  219. void main()
  220. {
  221. int a;
  222. char w;
  223. cout<<"***************************************************"<<endl;     cout<<"\n"<<endl;
  224. cout<<"*------------欢迎进入商品销售统计系统-------------*"<<endl;          cout<<"\n"<<endl;
  225. cout<<"***************************************************"<<endl;   do{
  226. cout<<"请选择您的操作:商品信息管理系统(M)商品销售系统(S)"<<endl;          cin>>w;
  227. cout<<"*---------------------菜单选项--------------------*"<<endl;
  228. cout<<"*-------------------------------------------------*"<<endl;
  229. cout<<"\n"<<endl;
  230. if(w=='M'||w=='m')
  231. {  cout<<"商品信息录入(请输入0) 修改信息(请输入1) 保存信息(请输入2) "<<endl;
  232. cin>>a;               
  233. caozuoa(a);               
  234. }        
  235. else if(w=='S'||w=='s')
  236. {           
  237.               cout<<"显示商品信息(请输入0)   商品买入(请输入1)  "<<endl;            
  238.               cin>>a;                 
  239.               caozuob(a);               
  240. }               
  241. else
  242. {               
  243.               cout<<"请输入'M' 、'm' 或'S' 、's'"<<endl;}               
  244. cout<<"您想继续进行其他操作吗?(y/n)"<<endl;                 
  245. cin>>w;  
  246. }while(w=='y');
  247. }
复制代码

完整的Word格式文档51黑下载地址:
课设报告.docx (510.27 KB, 下载次数: 17)
回复

使用道具 举报

ID:788442 发表于 2020-6-24 09:59 | 显示全部楼层
流程图方便发下
回复

使用道具 举报

ID:814444 发表于 2020-8-15 16:14 | 显示全部楼层
程序会报错啊楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表