■-#lfilftITl»・a了:
丄・*・燎必|\|*£・・-10・
■wfk.・ltli丄”*•-_lll*IT-・il-j-*4i^.4・,■!
•.••--
■
ji.
FJ*■宮
*z%5-£
c..4F^*rli
M>”H>
la-mtrK"*
根据分析结果,销售管理系统可分为录入、读取、查询、退出、计算每个人每种产品的销售额、按销售额对销售员进行排序和统计每种产品的总销售额等模块。
系统总体结构如图1所示。
销售管理系统
计算每个人每种产品的销售额
按销售额对销售员进行排序
统计每种产品的总销售额
返回
图1系统总体结构框图
本系统采用数组存储数据,根据分析,系统设计了三个结构体:
note存储
便条的基本信息,noAndSum存储销售员代号和销售总额的信息,productAndSum存储产品代号和销售额的信息。
便条基本信息包括销售员代号、五种产品的销售额等信息。
具体结构如下:
typedefstructnote{//便条
intno;//销售员代号
floatsalesVolume[5];〃A~E产品代号的销售额
}Note;
typedefstructnoAndSum{//记录销售员代号和总销售额,用以进行排序intno;
floatsalesVolume;
}NoAndSum;
typedefstructproductAndSum{//产品代号和销售额charch;
floatsalesVolume;
}ProductAndSum;
为了实现系统的各项功能,本设计中自定义相关的各个函数,各函数的原型如下:
voidShowUI();//显示主菜单界面
voidShowSubmenu();〃显示次级菜单界面
intlsNumber(chars[]);//判断一个字符串是不是数字
voidInput();〃录入功能
voidRead(Notenote[],int*n);//读取数据
voidCalculation(Notenote[],intn);//计算功能
voidFind(Notenote[],int*n);//查询销售员信息
voidSort(Notenote[],intn);//排序功能
voidSort2(Notenote[],intn);//统计每种产品的类型金额
3.3主函数
主函数main()函数通过多分支结构switch实现功能的选择,调用不同函数实现不同功能,包括录入、读取、查询、退出、计算每个人每种产品的销售额、按销售额对销售员进行排序和统计每种产品的总销售额等模块等功能。
系统主界面
如图2,主函数流程图如图3所示。
图2系统主界面
select
查询
读取
输入选项selectl
录入
调用lnput()
note[],int*n)
调用Find(Note
结束
录入信息
查询信息
Selectl
按销售额对销售员
统计每种产品的总
计算每个人每种产
品的销售额
进行排序
返回
销售额
3.4录入功能
为了便于录入便条的信息,特别设计的Input()函数进行数据的录入
3.5读取功能
从二进制文本读取数据功能
3.6查询功能
D;\工乍文申彌阖臥交比大垃制ivtoneyg语言滞售苣遲嘉筑谶计倾耳Lexe
4C
"I■良
ItMSKXll弭H■•><;«JIKlEiMK^JOt娱弭■«]■€><:
«NWM:
吕息的文件名=l-txt
■KE“f进行查询:
t
186.00003020Q.Q0BQ&358.08B6803a.0»0M0M2gaMKM0
3.7计算每个人每种产品的销售额
E。
;口乍丈用黨直篌131仪优丸1:
简MtoneyUiS吉谓售罚黑艇屋计VJ3旦l.exe
MMMMMKMMJKMMKJKKMM-KKMMMMKMKMKKMMMM
1Q6.000Q00
2^6.000000
50.0Q0B&0
JM.LIUWUU
20.00009B
*&返叵
*3——块计每种卞品的总推普颔«
*2——按销售颔对销售员进丁菲序«
*1-----计算每个人每种产罷的销售额楷
自斤"n-'冃ir4TSPAT±k4b品口苗苗旺nc产产产产产flBcyE
隹星崔••冃冃ILL>^itsi口mh产产产ftBC
3.8按销售额对销售员进行排序
3.9统计每种产品的总销售额
£5Q;口乍宜阳爲直\宜回\5环比0简Moneys语言價盲苣章枣筑艇计何5耳让疋
计鼻每个人每种产眾朗销售畧恥按捎售额刈韬售员进行排序-统II每种产品的总销售额
伍叵
TTJCWXTTKlfWW)C・lCirX~M:
Kwrit■:
MifHUMNX!
K:
MM:
・M:
M!
・1IKK
400-0000302UU-UUMUULI100-060860G0.0Q9Q0Gd0.0k)SU8ld
佯11左口隹「隹口隹口
饷悴祐祐铀总总忌总总口咀品詰洁n皿产产产产产0A心DE
4软件调试分析
在编程当中也遇到了一些问题:
1)空文件读入乱码问题。
空文件读入乱码但系统不报错,给数据的处理造成阻碍。
为了保证数据的读入正确,在文件尾增加了一个字符'#'作为结束标
2)实现循环操作功能问题。
利用链表处理数据,容易忽视由于指针的移动造成的访问出错问题。
在实现数据添加、删除等功能时,增加了指针复位处理。
经验总结需多次调试,否则不易发现。
3)无文件条件下的数据读取的问题以及查询排序的实现。
该错误是空指针对数据读取造成的程序终止性错误。
用户使用手册
1、根据界面提示操作即可。
2、请勿输入非数字以外的字符
程序源代码
#include
#include
#include
#include
#include
#include
/*runthisprogramusingtheconsolepauseroraddyourowngetch,system("pause")orinputloop*/
typedefstructnote{//便条
intno;//销售员代号
floatsalesVolume[5];//A~E产品代号的销售额
}Note;
typedefstructnoAndSum{//记录销售员代号和总销售额,用以进行排序intno;
floatsalesVolume;
}NoAndSum;
typedefstructproductAndSum{//产品代号和销售额charch;
floatsalesVolume;
}ProductAndSum;
voidShowUI();//显示主菜单界面
voidShowSubmenu();//显示次级菜单界面
Input();//录入功能
intIsNumber(chars[]);//判断一个字符串是不是数字void
void
void
void
void
Read(Note
Calculation(
Find(Note
Sort(Note
note[],
Note
note[],note[],
int*n);//note[],intint*n);
intn);
//
//
void
Sort2(Notenote[],intn);
//
读取数据
n);//计算功能查询销售员信息排序功能统计每种产品的类型金额
intmain(void){
charselect='\0';
charselect1='\0';
Notenote[31];
intn=0;//记录读入的数据个数
do{
ShowUI();
select=getch();
switch(select){
case'1':
Input();break;
case'2':
Read(note,&n);
if(0>=n)
break;
do{
ShowSubmenu();
select1=getch();
break;
switch(select1){case'1':
Calculation(note,n);ca