C语言程序设计销售管理系统Word文档下载推荐.docx
- 文档编号:16174313
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:34
- 大小:504.73KB
C语言程序设计销售管理系统Word文档下载推荐.docx
《C语言程序设计销售管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言程序设计销售管理系统Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
3系统设计
3.1主要结构体
structProduct
{intcount;
/*记录每人每种产品的便条数*/
intnum;
/*编号*/
intsale[31];
/*用于储存每次输入的产品销售量*/
intzsale;
/*记录每个人每种产品的销售总额*/
structSeller
{charname[15];
/*记录员工姓名*/
/*记录员工代号*/
intsale;
/*记录每人所有产品的总销售额*/
structProductproduct[5];
/*记录员工旗下的五个产品*/
}seller[4];
};
3.2主要功能函数
voidchushihua(void);
/*对系统初始化*/
voidadd(void);
/*对每个人每种产品总销售量的统计、对各种产品销售量统计、对每个销售员总销售量的统计。
*/
intread(void);
/*读取数据*/
voidarrange(inta[],intn,intsign[]);
/*销售量排序及排名,内置函数*/
voids_arrange(void);
/*对销售员销售量排序及排名*/
voidp_arrange(intsale[]);
/*对每种产品总销售量的排序及排名*/
voidinput(void);
/*完成便条的输入和储存*/
voidmenu(void);
/*完成菜单的打印*/
voidchoice(void);
/*完成功能模块的选择*/
voidbianhao(void);
/*对销售员和产品的编号赋值及计算量置0*/
voiddelect(void);
/*删除便条*/
voidshow(show);
/*打印所有便条*/
3.3关键函数的流程图
下面这个是选择法排序的程序框图,同时将销售员代号或产品代号也加进去排序,写这个比写个程序艰难得多。
这也只是根据自己的理解写出来的,不知道是否正确。
voidarrange(void)函数的程序框图
4系统调试
初始化时的界面
D盘根目录文件写入状况
菜单如下
选择1输入便条
询问是否继续输入
继续依次写入3,2,1004,5,200,3,5,2302,1,1402,5,1201,2,3202,4,200后文本储存状况
选择3时对销售员销售额排名。
销售员2销量:
200+120+200=520销售员3销量:
100+230=330销售员1销量:
320销售员4销量:
200
选择4时对产品销售排
由上面文件储存状况中可计算:
产品5总量=200+230+120=550产品2总量=100+320=420产品3总量=200产品4总量=200产品1总量=0
选择2为删除便条功能删除了2,5,120
现在文件储存状况
选择5是对所有便条打印
也可以手工在d:
\\a.txt中添加便条(格式为:
员工号(tab)产品号(tab)销售量(回车))手工添加351204210032150后文本储存状况
对其输出
下面两个图片是演示插入便条时排错功能
初始化时什么也不输入,程序会排除空文件时读取时错误并重新初始化,下面两个图片演示了这一功能
5总结
一、这个是我测试菜单时写的测试函数。
#include<
stdio.h>
main()
{voidmenu(void);
voidchoice(void);
menu();
choice();
getch();
}
voidmenu(void)
{
printf("
**************************************************\n"
);
**\n"
*1.输入便条*\n"
*2.按销售额对销售员排序并输出*\n"
*3.统计每种产品的总销售额并排序输出*\n"
*0.退出*\n"
voidchoice(void)
intchoice;
输选择(0~3)\n"
while(scanf("
%d"
&
choice)!
=1||(choice<
0||choice>
3))
{
while(getchar()!
='
\n'
)
continue;
/*此处*/
printf("
输入有误,请重新输入0~3\n"
}
switch(choice)
{case1:
printf("
111"
break;
case2:
222"
case3:
333"
;
case0:
000"
default:
****"
刚开始时没有写程序中注释的那句,导致输入的选择为一个字符串时printf()执行多次。
此句可以吃掉错误输入的字符。
二、这是读取函数。
intread(void)
{FILE*fp;
inti,j,pnum,snum,sale;
if((fp=fopen("
d:
\\a.txt"
"
r"
))==NULL)
读取失败!
初始化\n"
return0;
for(i=0;
i<
4;
i++)
{seller[i].num=i+1;
for(j=0;
j<
5;
j++)
seller[i].product[j].num=j+1;
}
fscanf(fp,"
%s%s%s%s"
seller[0].name,seller[1].name,seller[2].name,seller[3].name);
while(!
feof(fp))
fscanf(fp,"
%d%d%d\n"
snum,&
pnum,&
sale);
/*此处*/
seller[snum-1].product[pnum-1].count++;
seller[snum-1].product[pnum-1].sale[seller[snum-1].product[pnum-1].count-1]=sale;
fclose(fp);
return1;
写这个函数时fscanf(fp,"
%s%s%s%s\n"
seller[0].name,seller[1].name,seller[2].name,selle
[3].name);
语句中"
处少了\n导致最后一条数据读取了两次,导致统计的结果不对,修改这个问题花费我很多时间。
三、voidchoice(void)
intchoice,i;
charb;
4))
while(getchar()!
continue;
输入有误,请重新输入0~4\n"
input();
printf("
你想继续输入?
(Y继续,其他退出)"
scanf("
%c"
b);
getchar();
while(b=='
y'
||b=='
Y'
{
input();
printf("
scanf("
getchar();
}
break;
delect();
你想继续删除?
/*此处*/
delect();
}
clean();
add();
s_arrange();
case4:
p_arrange(p_sale);
exit
(1);
break;
}在程序注释处缺少了getchar();
而不能吃掉scanf()读取留下的回车,导致了连续输入两次数据后程序自动关闭。
后来为了避免因错误输入而带来的影响,在其中添加了
while(getchar()!
)
continue;
来去除错误输入。
下面是修改后的选择函数。
intchoice,i,judge;
5))
/*此处添加了*/
输入有误,请重新输入0~5\n"
while(getchar()!
continue;
/*此处添加了*/
while(getchar()!
continue;
/*此处添加了*/
system("
cls"
if((judge=delect())==1)
删除成功!
"
elseif(judge==0)
删除失败!
/*此处添加了*/
if((judge=delect())==1)
printf("
elseif(judge==0)
case5:
show();
四、下面这个是失败的删除函数,本想用最后一条便条覆盖要删除的便条,然后把最后那条便条删除而达到删除便条的目的。
但是下面这个函数有局限性,销售量要都为3位数才行。
voiddelect(void)
{inta,b,c,e,f,g,d[3];
chark[4][10];
charyes;
FILE*fp;
r+"
打开文件失败!
getch();
exit(0);
k[0],k[1],k[2],k[3]);
loop:
请输入要删除的边条:
(格式:
员工号,产品号,销售量)\n"
scanf("
%d,%d,%d"
a,&
b,&
c);
fseek(fp,-10,2);
d[0],&
d[1],&
d[2]);
rewind(fp);
%d%d%d\n"
e,&
f,&
g);
if(e==a&
&
f==b&
g==c)
{
%d%d%d\n"
e,f,g);
fseek(fp,-9,1);
fprintf(fp,"
%d\t%d\t%d"
d[0],d[1],d[2]);
fseek(fp,-9,2);
%c\t%c\t%c\t%c%c%c"
'
'
getch();
fclose(fp);
exit
(1);
}
该便条不存在!
重新输入请输入Y,退出删除按其他。
\n"
yes)!
=1)
输入有误,重新输入请输入Y,退出删除按其他。
if(yes=='
||yes=='
gotoloop;
else
为了解决这问题,我重做了函数。
下面这个是在创建另一个文件接收便条,从储存便条的文件中读取便条然后写入新建文件,读取过程中忽略要删除的便条从而达到删去便条的目的。
{intcount=0,a,b,c,e,f,g,name[4][10];
FILE*fp,*fp_1;
打开a.txt文件失败!
if((fp_1=fopen("
\\b.txt"
w"
打开b.txt文件失败!
name[0],name[1],name[2],name[3]);
fprintf(fp_1,"
%s\t%s\t%s\t%s\n"
请输入要删除的便条:
getchar();
g==c&
count!
{
count++;
fprintf(fp_1,"
%d\t%d\t%d\n"
remove("
fclose(fp_1);
rename("
6源程序清单
windows.h>
intp_sale[5]={0,0,0,0,0};
/*记录每种产品的总销售额*/
/*输入每次的销售量*/
/*主函数*/
voidmain()
voidchushihua(void);
voidclean(void);
voidshow(void);
voidadd(void);
intdelect(void);
intread(void);
voidarrange(inta[],intn,intsign[]);
voids_arrange(void);
voidp_arrange(intsale[]);
voidinput(void);
voidmenu(void);
voidbianhao(void);
system("
color0e"
bianhao();
if(read()==0)
chushihua();
while
(1)
{
menu();
choice();
按任意键返回菜单。
system("
/*读取函数*/
if(getc(fp)==EOF)/*排除空文件时读取错误*/
fclose(fp);
remove(fp);
文件为空,重新初始化!
return1;
/*初始化函数*/
voidchushihua(void)
inti,j;
fp=fopen("
{seller[i].num=i+1;
for(j=0;
seller[i].product[j].num=j+1;
分别输入编号为1-4员工的名字(格式为姓名回车):
scanf("
%s"
seller[i].name);
fprintf(fp,"
seller[0]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 销售 管理 系统