C语言程序设计销售管理系统Word文档下载推荐.docx

上传人:b****5 文档编号:16174313 上传时间:2022-11-21 格式:DOCX 页数:34 大小:504.73KB
下载 相关 举报
C语言程序设计销售管理系统Word文档下载推荐.docx_第1页
第1页 / 共34页
C语言程序设计销售管理系统Word文档下载推荐.docx_第2页
第2页 / 共34页
C语言程序设计销售管理系统Word文档下载推荐.docx_第3页
第3页 / 共34页
C语言程序设计销售管理系统Word文档下载推荐.docx_第4页
第4页 / 共34页
C语言程序设计销售管理系统Word文档下载推荐.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

C语言程序设计销售管理系统Word文档下载推荐.docx

《C语言程序设计销售管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言程序设计销售管理系统Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。

C语言程序设计销售管理系统Word文档下载推荐.docx

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]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1