综合程序课程设计说明书 课程设计名称: 软件综合课程设计 课程设计题目: 商品销售统计系统 学 院 名 称: 信息工程学院 专业:电子信息工程 班级: 150411 学号: 15041113 姓名: 高* 评分: 教师: 邹*
综合程序 课程设计任务书 20 17 -20 18学年 第 2 学期 第 1 周- 2周 | | 内容及要求 编写商品销售统计程序,商品的信息有:商品的名称,计量单位(重量或件),单价。所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。 要求: 程序分为两个部分:第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。程序运行时由用户选择进入哪一部分功能,并能在运行时在两部分之间切换。第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码表示本次购物结束。此时。程序计算出应付钱款数并显示。 | 进度安排 第1周周一至第1周周二:查资料; 第1周周三至第2周周四:程序编写与调试; 第2周周五:设计结果检查。 | 学生姓名: 15041106郑文婷 15041113高志华 | | | | | | | | 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为备选设计方案,菜单选项分两级,实际操作过程中从每级子程序退出时需要进入第一级人机界面,所以操作过于繁琐,再与方案一对比过后选择更为简便的第一种方案。 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++实现了题目所有的要求,达到了商品销售系统所实现的功能。将整个程序分成了多个模块,每个模块相互独立而又彼此联系,通过主函数调用来实现各个模块的功能。模块化设计在实际中应用广泛,本课题提高了学生对软件设计的兴趣,不仅巩固了所学知识,在编程过程中学到了很多课堂之外的知识,实际应用了模块化设计实例。
源码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include<fstream>
- #define null 0
- #include<iostream>
- #include <iomanip>
- #include<string> //控制字符串的头文件
- using namespace std;
- class tong
- {
- public:
- tong();
- tong(char co[20],char n[20],
- char dw[20],double pr,int qu);
- ~tong();
- void save();
- void take();
- void Set(); //商品信息录入
- void Alter(); //商品信息修改
- void list(); //商品信息显示
- void Display();
- float Checkout(int quantity); //单个商品小结
- void Total(); //总计
- void buy(); //商品买入
- private :
- char code[20];char name[20];char danwei[20];double price;int quantity;
- };
- tong::tong(){}
- tong::tong(char co[20],char n[20],char dw[20],double pr,int qu){
- strcpy(code,co);
- strcpy(name,n);
- strcpy(danwei,dw);
- price=pr;
- quantity=qu;}
- tong::~tong(){}
- tong *s[50];
- int i=0;
- int j=0;
- char code[20];char name[20];char danwei[20];double price; int quantity;
- void tong::save() //写入数据至文件
- {
- ofstream outfile;
- outfile.open("商品销售管理系统.txt");
- if(!outfile)
- {
- cout<<"cannot open the file!"<<endl;
- return ;
- }
- else
- outfile<<"商品代码及名称"<<""<<"商品单价"<<""<<"请输入商品数量"<<""<<"计量单位"<<endl;
- cout<<"商品代码及名称"<<""<<"商品单价"<<""<<"请输入商品数量"<<""<<"计量单位"<<endl;
- for(int k=0;k<i;k++){
-
- 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;
- 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;
- }
- cout<<"*************Save Success!*****************"<<endl;
- outfile.close();
- }
-
-
-
- void tong::Set() //商品信息录入
- {
- cout<<"请输入商品代码及名称:"<<endl;
- cin>>code>>name;
- cout<<"请输入计量单位:"<<endl;
- cin>>danwei;
- cout<<"请输入商品单价:"<<endl;
- cin>>price;
- cout<<"请输入商品数量:"<<endl;
- cin>>quantity;
- j++;
- s[i]=new tong(code,name,danwei,price,quantity);
- i++;
- cout<<"信息录入成功!"<<endl;
- cout<<"是否继续录入?(y or n)"<<endl;
- if(getch()=='y')
- Set();
- else return;
- }
- void tong::Alter()//商品信息修改
- {
- cout<<"请输入您所修改的商品名称:"<<endl;
- cin>>name;
- for(int h=0;h<i;h++)
- if(strcmp(name,s[h]->name)==0)
- {
- char newcode[20];
- char newname[20];
- char newdanwei[20];
- double newprice;
- int newquantity;
- int n;
- cout<<"你想要修改:代码及名称按3) 、数量(请按4)"<<endl;
- cin>>n;
- switch(n)
- {
- case 1:
- { cout<<"请输入商品代码及名称:"<<endl;
- cin>>newcode[20]>>newname[20];
- s[h]->code[20]=newcode[20];
- s[h]->name[20]=newname[20];
-
- cout<<"数据修改成功!";
- }break;
- case 2:
- {
- cout<<"请输入计量单位:"<<endl;
- cin>>newdanwei;
- s[h]->danwei[20]=newdanwei[20];
- cout<<"数据修改成功!";
- }break;
- case 3:
- {
- cout<<"请输入单价:"<<endl;
- cin>>newprice;
- s[h]->price=newprice;
- cout<<"数据修改成功!";
- }break;
-
- case 4:
- {
- cout<<"请输入数量:"<<endl;
- cin>>newquantity;
- s[h]->quantity=newquantity;
- cout<<"数据修改成功!";
- }break;
- }
- }
- else
- cout<<"你所要修改的商品的信息不存在,请修正后在更改!"<<endl;
- cout<<"是否继续修改?(y/n)"<<endl;
- if(getch()=='y')
- Alter();
- else return ;
- }
- void tong::list() //商品信息显示
- {
- cout<<"=========================================================="<<endl;
- cout<<"===================所有商品信息==================="<<endl;
- cout<<"=========================================================="<<endl;
- cout<<"货品代码=======货品名称======货品价格======货品数量======计量单位"<<endl;
- if(i==0)
- cout<<"系统中没有录入商品信息或该商品信息已被删除!"<<endl;
- for(int k=0;k<i;k++){
- 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;
- }
- }
- void tong::buy() //商品买入
- {
- cout<<"请输入你想购买的商品的代码及名称:"<<endl;
- cin>>code>>name;
- cout<<"请输入您想购买的商品的数量:"<<endl;
- cin>>quantity;
- Checkout(quantity);
- Display();
- Total();
- }
- void tong::Display()
- {
- int k;
- k=atoi(code)-1;
-
- cout<<"货品代码=======货品名称======货品价格======购买数量======计量单位=====小计(元)=="<<endl;
- cout<<setw(15)<<left<<s[k]->code
- <<setw(15)<<left<<s[k]->name
- <<setw(15)<<left<<s[k]->price
- <<setw(15)<<left<<quantity
- <<setw(15)<<left<<s[k]->danwei
- <<setw(15)<<left<<quantity*s[k]->price<<endl;
- }
-
-
- float tong::Checkout(int quantity) //单个商品小结
- {
- int k=0;
- float sum(0.0);
- sum=s[k]->price * quantity;
- return sum;
- }
- void tong::Total() //总结帐
- {
- float sum = 0;
- float factly;
- char GoOn;
- while(1)
- {
- cout<<"要结束商品买入请按'N/n',其继续买入请按'Y/y': "<<endl;
- cin>>GoOn;
- if(GoOn=='Y'||GoOn=='y'){ //int quantity;
- cout<<"请输入商品代码:"<<endl;
- cin>>code>>name;
- cout<<"请输入商品数量:"<<endl;
- cin>>quantity;
- sum+=Checkout(quantity);
- cout<<"你购买的商品为:"<<endl;
- Display();
- }
- else if(GoOn=='N'||GoOn=='n')
- break;
- }
- cout<<"----------------------------------------------------"<<endl;
- sum+=Checkout(quantity);
- cout<<"你应该付 "<<sum<<"元!"<<endl;
- cout<<"你实际付(元): ";
- cin>>factly;
- cout<<"应该找回你 "<<factly-sum<<"元!"<<endl; //找零。
- }
- void caozuoa(int p){
- tong t;
- switch(p){
- case 0:t.Set();break;
- case 1:t. Alter ();break;
- case 2:t.save();break;
- case 8:exit(0);break;
- }
- }
- void caozuob(int p){
- tong t;
- switch(p){
- case 0:t.list();break;
- case 1:t.buy();break;
- case 8:exit(0);break;
- }
- }
- void main()
- {
- int a;
- char w;
- cout<<"***************************************************"<<endl; cout<<"\n"<<endl;
- cout<<"*------------欢迎进入商品销售统计系统-------------*"<<endl; cout<<"\n"<<endl;
- cout<<"***************************************************"<<endl; do{
- cout<<"请选择您的操作:商品信息管理系统(M)商品销售系统(S)"<<endl; cin>>w;
- cout<<"*---------------------菜单选项--------------------*"<<endl;
- cout<<"*-------------------------------------------------*"<<endl;
- cout<<"\n"<<endl;
- if(w=='M'||w=='m')
- { cout<<"商品信息录入(请输入0) 修改信息(请输入1) 保存信息(请输入2) "<<endl;
- cin>>a;
- caozuoa(a);
- }
- else if(w=='S'||w=='s')
- {
- cout<<"显示商品信息(请输入0) 商品买入(请输入1) "<<endl;
- cin>>a;
- caozuob(a);
- }
- else
- {
- cout<<"请输入'M' 、'm' 或'S' 、's'"<<endl;}
- cout<<"您想继续进行其他操作吗?(y/n)"<<endl;
- cin>>w;
- }while(w=='y');
- }
复制代码
完整的Word格式文档51黑下载地址:
课设报告.docx
(510.27 KB, 下载次数: 17)
|