C语言程序设计销售管理系统_第1页
C语言程序设计销售管理系统_第2页
C语言程序设计销售管理系统_第3页
C语言程序设计销售管理系统_第4页
C语言程序设计销售管理系统_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序设计工程训练报告 销售管理系统设计 课程名称 C语言程序设计工程训练姓 名 院(系) 信息科学与工程学院专业班级 学 号 指导教师 教务处制目 录1 需求分析12 系统总框图和功能模块说明12.1 系统总框图12.2 功能模块说明23 系统设计33.1 主要结构体33.2主要功能函数33.3 关键函数的流程图44 系统调试55 总结146源程序清单201 需求分析 某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1)销售员的代号,2)产品的代号,3)这种产品的当天的销售额。每位销售员每天上缴1张便条

2、。试设计一个便条管理系统,使之能提供以下功能:1、系统以菜单方式工作2、便条信息录入功能(便条信息用文件保存)输入3、收集到了上个月的所有便条后,读取销售情况1)计算每个人每种产品的销售额。2)按销售额对销售员进行排序,输出排序结果(销售员代号)3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)4)删除便条.5)对所有便条打印.2 系统总框图和功能模块说明2.1 系统总框图对所有便条信息打印销售管理系统输入便条信息统计销售量对销售员排名对产品销售量排名图1 系统总框图2.2 功能模块说明初始化模块 完成储存信息文件的创建。读取模块 完成对储存数据的

3、读取。输入模块 完成便条数据输入和储存。统计模块 完成对每个人每种产品总销售量的统计、对各种产品销售量统计、对每个销售员总销售量的统计。排序模块 完成各种产品销售总量的排名及输出,完成销售员销售总量的排名及输出。菜单模块 完成菜单的打印。选择模块 完成功能的选择。删除模块 完成边条删除打印模块 完成所有便条的打印3 系统设计3.1 主要结构体struct Productint count;/*记录每人每种产品的便条数*/int num;/*编号*/int sale31;/*用于储存每次输入的产品销售量*/int zsale;/*记录每个人每种产品的销售总额*/struct Sellerchar

4、 name15;/*记录员工姓名*/int num;/*记录员工代号*/int sale;/*记录每人所有产品的总销售额*/struct Product product5;/*记录员工旗下的五个产品*/seller4; 3.2主要功能函数void chushihua(void);/*对系统初始化*/void add(void);/*对每个人每种产品总销售量的统计、对各种产品销售量统计、对每个销售员总销售量的统计。*/int read(void); /*读取数据*/void arrange(int a,int n,int sign);/*销售量排序及排名,内置函数*/void s_arrange

5、(void);/*对销售员销售量排序及排名*/void p_arrange(int sale);/*对每种产品总销售量的排序及排名*/void input(void);/*完成便条的输入和储存*/void menu(void);/*完成菜单的打印*/void choice(void);/*完成功能模块的选择*/void bianhao(void);/*对销售员和产品的编号赋值及计算量置0*/void delect(void);/*删除便条*/void show(show);/*打印所有便条*/3.3 关键函数的流程图 下面这个是选择法排序的程序框图,同时将销售员代号或产品代号也加进去排序,写这

6、个比写个程序艰难得多。这也只是根据自己的理解写出来的,不知道是否正确。传入参数a,sign,ni=0,j,k,tempin-1 ?k=i;j=i;jn ?akaj?k=j;是是j+;否是否k!=i ?否temp=ak;ak=ai;ai=temp;temp=signk;signk=signi;signi=temp;是i+;结束否void arrange(void)函数的程序框图4 系统调试初始化时的界面D盘根目录文件写入状况菜单如下选择1输入便条询问是否继续输入继续依次写入3,2,1004,5,200,3,5,2302,1,1402,5,1201,2,3202,4,200后文本储存状况选择3时对

7、销售员销售额排名。销售员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后文本储存状况对其输出下面两个图片是演示插入便条时排错功能初始化时什

8、么也不输入,程序会排除空文件时读取时错误并重新初始化,下面两个图片演示了这一功能5 总结一、这个是我测试菜单时写的测试函数。#includemain()void menu(void);void choice(void);menu();choice();getch();void menu(void)printf(*n);printf(* *n);printf(* 1.输入便条 *n);printf(* 2.按销售额对销售员排序并输出 *n);printf(* 3.统计每种产品的总销售额并排序输出 *n);printf(* 0.退出 *n);printf(* *n);printf(*n);void

9、 choice(void)int choice;printf(输选择(03)n);while(scanf(%d,&choice)!=1|(choice3)while(getchar()!=n)continue;/*此处*/printf(输入有误,请重新输入03n);switch(choice)case 1:printf(111);break;case 2:printf(222);break;case 3:printf(333);break;case 0:printf(000);break;default:printf(*);break;刚开始时没有写程序中注释的那句,导致输入的选择为一个字符串

10、时printf()执行多次。此句可以吃掉错误输入的字符。二、这是读取函数。int read(void)FILE *fp;int i,j,pnum,snum,sale;if(fp=fopen(d:a.txt,r)=NULL)printf(读取失败!初始化n);return 0;for(i=0;i4;i+)selleri.num=i+1;for(j=0;j5;j+)ductj.num=j+1;fscanf(fp,%s %s %s %s,,,,);while(!feof(fp)fsc

11、anf(fp, %d %d %dn,&snum,&pnum,&sale);/*此处*/ductpnum-1.count+;ductpnum-1.count-1=sale;fclose(fp);return 1;写这个函数时fscanf(fp,%s %s %s %sn,,,,);语句中%s %s %s %sn处少了n导致最后一条数据读取了两次,导致统计的结果不对,修改这个问题花费

12、我很多时间。三、void choice(void)int choice,i;char b;while(scanf(%d,&choice)!=1|(choice4)while(getchar()!=n)continue;printf(输入有误,请重新输入04n);switch(choice)case 1:input();printf(你想继续输入?(Y继续,其他退出));scanf(%c,&b);getchar();/*此处*/while(b=y|b=Y)input();printf(你想继续输入?(Y继续,其他退出));scanf(%c,&b);getchar();break;case 2:d

13、elect();printf(你想继续删除?(Y继续,其他退出));scanf(%c,&b);getchar();/*此处*/while(b=y|b=Y)delect();printf(你想继续删除?(Y继续,其他退出));scanf(%c,&b);getchar();break;case 3:clean();add();s_arrange();break;case 4:clean();add();p_arrange(p_sale);break;case 0:exit(1);break;default:break;在程序注释处缺少了getchar();而不能吃掉scanf()读取留下的回车,导

14、致了连续输入两次数据后程序自动关闭。后来为了避免因错误输入而带来的影响,在其中添加了while(getchar()!=n) continue;来去除错误输入。下面是修改后的选择函数。void choice(void)int choice,i,judge;char b;while(scanf(%d,&choice)!=1|(choice5)while(getchar()!=n)continue;/*此处添加了*/printf(输入有误,请重新输入05n);switch(choice)case 1:input();printf(你想继续输入?(Y继续,其他退出));scanf(%c,&b);whi

15、le(getchar()!=n)continue; /*此处添加了*/while(b=y|b=Y)input();printf(你想继续输入?(Y继续,其他退出));scanf(%c,&b);while(getchar()!=n)continue;/*此处添加了*/break;case 2:system(cls);if(judge=delect()=1)printf(删除成功!);else if(judge=0)printf(删除失败!);printf(你想继续删除?(Y继续,其他退出));scanf(%c,&b);while(getchar()!=n)continue;/*此处添加了*/wh

16、ile(b=y|b=Y)if(judge=delect()=1)printf(删除成功!);else if(judge=0)printf(删除失败!);printf(你想继续删除?(Y继续,其他退出));scanf(%c,&b);while(getchar()!=n)continue;/*此处添加了*/break;case 3:clean();add();s_arrange();break;case 4:clean();add();p_arrange(p_sale);break;case 5:show();break;case 0:exit(1);break;default:break;四、下

17、面这个是失败的删除函数,本想用最后一条便条覆盖要删除的便条,然后把最后那条便条删除而达到删除便条的目的。但是下面这个函数有局限性,销售量要都为3位数才行。void delect(void)int a,b,c,e,f,g,d3;char k410;char yes;FILE *fp;if(fp=fopen(d:a.txt,r+)=NULL)printf(打开文件失败!);getch();exit(0);fscanf(fp,%s %s %s %s,k0,k1,k2,k3);loop:printf(请输入要删除的边条:(格式:员工号,产品号,销售量)n);scanf(%d,%d,%d,&a,&b,&

18、c);fseek(fp,-10,2);fscanf(fp, %d %d %dn,&d0,&d1,&d2);rewind(fp);fscanf(fp,%s %s %s %s,k0,k1,k2,k3);while(!feof(fp)fscanf(fp, %d %d %d n,&e,&f,&g);if(e=a&f=b&g=c)printf(%d %d %dn,e,f,g);fseek(fp,-9,1);fprintf(fp,%dt%dt%d,d0,d1,d2);printf(删除成功!);fseek(fp,-9,2);fprintf(fp,%ct%ct%ct%c%c%c, , , , , , );g

19、etch();fclose(fp);exit(1);printf(该便条不存在!重新输入请输入Y,退出删除按其他。n);while(scanf(%d,&yes)!=1)while(getchar()!=n)continue;printf(输入有误,重新输入请输入Y,退出删除按其他。n);if(yes=y|yes=Y)goto loop;elseexit(1);为了解决这问题,我重做了函数。下面这个是在创建另一个文件接收便条,从储存便条的文件中读取便条然后写入新建文件,读取过程中忽略要删除的便条从而达到删去便条的目的。void delect(void)int count=0,a,b,c,e,f,

20、g,name410;FILE *fp,*fp_1;if(fp=fopen(d:a.txt,r+)=NULL)printf(打开a.txt文件失败!);exit(0);if(fp_1=fopen(d:b.txt,w)=NULL)printf(打开b.txt文件失败!);exit(0);fscanf(fp,%s %s %s %sn,name0,name1,name2,name3);fprintf(fp_1,%st%st%st%sn,name0,name1,name2,name3);printf(请输入要删除的便条:(格式:员工号,产品号,销售量)n);scanf(%d,%d,%d,&a,&b,&c

21、);getchar();while(!feof(fp)fscanf(fp, %d %d %d n,&e,&f,&g);if(e=a&f=b&g=c&count!=1)count+;continue;fprintf(fp_1,%dt%dt%dn,e,f,g);fclose(fp);remove(d:a.txt);fclose(fp_1);rename(d:b.txt,d:a.txt);6 源程序清单#include#includeint p_sale5=0,0,0,0,0;/*记录每种产品的总销售额*/struct Productint count;/*记录每人每种产品的便条数*/int num

22、;int sale31;/*输入每次的销售量*/int zsale;/*记录每个人每种产品的销售总额*/;struct Sellerchar name15;int num;int sale;/*记录每人所有产品的总销售额*/struct Product product5;seller4;/*主函数*/void main()void chushihua(void);void clean(void);void show(void);void add(void);int delect(void);int read(void);void arrange(int a,int n,int sign);vo

23、id s_arrange(void);void p_arrange(int sale);void input(void);void menu(void);void choice(void);void bianhao(void);system(color 0e);bianhao();if (read()=0)chushihua();while(1)menu();choice();printf(按任意键返回菜单。);getch();system(cls);getch();/*读取函数*/int read(void)FILE *fp;int i,j,pnum,snum,sale;if(fp=fope

24、n(d:a.txt,r)=NULL)printf(读取失败!初始化n);return 0;if(getc(fp)=EOF)/*排除空文件时读取错误*/fclose(fp);remove(fp);printf(文件为空,重新初始化!n);chushihua();return 1;for(i=0;i4;i+)selleri.num=i+1;for(j=0;j5;j+)ductj.num=j+1;fscanf(fp,%s %s %s %s,,,,);while(!feof(fp)fs

25、canf(fp, %d %d %dn,&snum,&pnum,&sale);ductpnum-1.count+;ductpnum-1.count-1=sale;fclose(fp);return 1;/*初始化函数*/void chushihua(void)FILE *fp;int i,j;fp=fopen(d:a.txt,w);for(i=0;i4;i+)selleri.num=i+1;for(j=0;j5;j+)ductj.num=j+1;pr

26、intf(分别输入编号为1-4员工的名字(格式为姓名回车):n);for(i=0;i4;i+)scanf(%s,);system(cls);fprintf(fp,%st%st%st%sn,,,,);fclose(fp);/*输入函数*/void input(void)FILE *fp;int pnum,snum,sale;if(fp=fopen(d:a.txt,a)=NULL)printf(输入时打开文件失败!);exit(0);system(cls);printf(请输入当

27、天销售状况,输入格式为:员工号,产品号,销售量n);scanf(%d,%d,%d,&snum,&pnum,&sale);system(cls);while(getchar()!=n)continue;while(snum4|pnum5)printf(输入有误,请重新输入。格式为:员工号,产品号,销售量(员工号14,产品号15)n);scanf(%d,%d,%d,&snum,&pnum,&sale);while(getchar()!=n)continue;fprintf(fp,%dt%dt%dn,snum,pnum,sale);ductpnum-1.count+;

28、ductpnum-1.count-1=sale;fclose(fp);/*统计函数*/void add(void)int i,j,k;for(i=0;i4;i+)for(j=0;j5;j+)for(k=0;ductj.count;k+)ductj.zsale=ductj.zsale+ductj.salek;for(i=0;i4;i+)for(j=0;j5;j+)selleri.sale=selleri.sale+

29、ductj.zsale;for(i=0;i5;i+)for(j=0;j4;j+)p_salei+=ducti.zsale;/*排序函数*/void arrange(int a,int n,int sign)int i,j,temp,k;for(i=0;in-1;i+)k=i;for(j=i;jn;j+)if(akaj)k=j;if(k!=i)temp=ak;ak=ai;ai=temp;temp=signk;signk=signi;signi=temp;/*销售员总额排序*/void s_arrange(void)int i,a4,sign4;for(

30、i=0;i4;i+)ai=selleri.sale;for(i=0;i4;i+)signi=selleri.num;arrange(a,4,sign);printf(销售员的销售排名为(由高到低):n);for(i=0;i4;i+)printf(%d,signi);printf(n);printf(销售员的销售总量分别为:n);for(i=0;i4;i+)printf(%d,ai);printf(n);/*各种产品排序函数*/void p_arrange(int sale)int sign5,i;for(i=0;i5;i+)signi=ducti.num;arrange(

31、sale,5,sign);printf(产品的排名为(由高到低):n);for(i=0;i5;i+)printf(%d,signi);printf(n);printf(产品总销售量分别为:n);for(i=0;i5;i+)printf(%d,salei);printf(n);/*对结构体里的计算量清零和编号的赋值*/void bianhao(void)int i,j,k;for(i=0;i4;i+)selleri.sale=0;for(j=0;j5;j+)ductj.count=0;ductj.zsale=0;for(k=0;k31;k+)selle

32、ductj.salek=0;/*输出菜单函数*/void menu(void)printf(*n);printf(* *n);printf(* 1.输入便条 *n);printf(* 2.删除便条 *n);printf(* 3.按销售额对销售员排序并输出 *n);printf(* 4.统计每种产品的总销售额并排序输出 *n);printf(* 5.打印所有便条 *n);printf(* 0.退出 *n);printf(* *n);printf(*n);printf(输选择(05)n);/*选择函数*/void choice(void)int choice,i,judge;char

33、b;while(scanf(%d,&choice)!=1|(choice5)while(getchar()!=n)continue;printf(输入有误,请重新输入05n);switch(choice)case 1:input();printf(你想继续输入?(Y继续,其他退出));scanf(%c,&b);getchar();while(b=y|b=Y)input();printf(你想继续输入?(Y继续,其他退出));scanf(%c,&b);getchar();break;case 2:system(cls);if(judge=delect()=1)printf(删除成功!);else

34、 if(judge=0)printf(删除失败!);printf(你想继续删除?(Y继续,其他退出));scanf(%c,&b);while(getchar()!=n)continue;while(b=y|b=Y)if(judge=delect()=1)printf(删除成功!);else if(judge=0)printf(删除失败!);printf(你想继续删除?(Y继续,其他退出));scanf(%c,&b);while(getchar()!=n)continue;break;case 3:clean();add();s_arrange();break;case 4:clean();add();p_arrange(p_sale);break;case 5:show();break;case 0:exit(1);break;default:break;/*对累加量清0函数*/void clean(void)int i,j;for(i=0;i4;i+)for(j=0;j5;j+)ductj.zsale=0;for(i=0;i4;i+)selleri.sale=0;for(i=0;i5;i+)p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论