销售管理系统

以某公司销售管理业务为背景,设计、开发一套“销售管理系统”软件。 通过该题目的设计过程,可以培养学生结构化程序设计的思想,掌握和利用C 语言,加深对高级语言基本语言要素和控制结构的理解,针对c 语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。得到软件工程的综合训练,提高解决实际问题的能力,学会调试和分析一个较长程序的基本用法。

关键词: 销售管理;C 语言;设计

Abstract

Sales management business of a company as the background, design, develop a set of "sales management system" software.

Through the design process of this subject, students can be structured programming ideas, grasp and the use of C language, to deepen high-level language basic language elements and controls the understanding of the structure, conduct training for emphasis and difficulty in C language, independent of the completion of a certain job programming tasks, while emphasizing the programming style good. Comprehensive training in software engineering, improving the ability to solve practical problems, learn to debug and analyze the basic usage of a longer program.

Keywords :sales management; C; design

目录

1 概述 ······················································································································· 1 1.1设计内容 ········································································································ 1 1.2 设计目的 ······································································································ 2 2总体设计 ················································································································ 3 2.1 总体流程图 ·································································································· 3 2.2系统流程图 ···································································································· 4 3. 详细设计 ··············································································································· 5 3.1源程序 ············································································································ 5 3.3函数的功能介绍 ·························································································· 13 3.4功能函数流程图 ·························································································· 14 4. 调试分析 ············································································································· 19 4.1调试方法 ······································································································ 19 4.2测试方法 ······································································································ 19 4.3程序分析 ······································································································ 20 5总结 ·················································································································· 25 参考文献 ················································································································· 26 致谢 ························································································································· 27

1 概述

近年来,随着销售规模的不断扩大,职员数目和产品数量也相应的增加,有关职员和产品的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致销售系统管理上的混乱,人力与物力过多浪费,销售管理费用的增加,从而使公司的负担过重,影响整个公司的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的销售管理系统,对各种资料进行集中统一的管理。系统开发的总的设计目标是实现销售管理的系统化、规范化和自动化,实现对各种资料的集中统一的管理。

1.1设计内容

1)程序设计(包括框图设计、源程序编辑、编译、调试) 2)对问题有完整的分析过程,要求把分析过程写入报告 3)编写设计报告

本程序设计的主要内容:

该系统是一个销售管理系统,即对某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)进行合理管制。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:

1)销售员的代号 2)产品的代号

3)这种产品的当天的销售额

每位销售员每天可能上缴0-5张便条。假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况(自己设定),进行如下处理。

1)计算上个月每个人每种产品的销售额。

2)按销售额对销售员进行排序,输出排序结果(销售员代号)

3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)

4)输出统计报表 1.2

设计目的

1) 进一步掌握运用C 进行程序设计的能力;

2) 进一步理解和运用面向过程程序设计的思想和方法;3) 初步掌握开发一个小型实用系统的基本方法; 4) 学会调试一个较长程序的基本方法; 5) 学会利用流程图或N-S 图表示算法; 6) 掌握书写实训开发文档的能力; 7) 掌握书写实训开发文档的能力;

8)对C 语言进行更深层次的理解和学习; 9)理解C 语言的结构;

10)提升自己编写与运行程序的能力;

2总体设计

当用户进入这个程序时, 系统会出现一个主菜单,有七个功能,进商品销售管理系统;输入商品信息;删除与更改信息;确认购买并输入购买信息;系统信息统计系统;保存所有信息写入文件,读取一份已存在的信息,退出系统。

本程序是通过对文件的读写来实现的,主要运用了循环、数组结构,对数据的输入、修改、删除的连续进行,进入系统后,能够根据提示进行输入、修改、删除以及查询等功能。在输入信息的时候,可以根据提示进行重复输入多个信息,修改、删除、查询也可以重复使用,这些就是运用的循环结构。

在输入、修改、删除、查询信息、信息写入文件、读取信息、退出系统时该系统会用(1 退出系统 2 继续)提示你。

注意:在使用过程中,查询商品时只能先输入商品的代号; 输入的各项数据不能超过其本身设定的最大的位数。

2.1 总体流程图

图 2.1 总体流程图

系统流程图

图2.2 系统流程图

2.2

3. 详细设计

3.1源程序

#include #include #include #include #define Z 5

#define R 4 /*定义宏常量便于程序的一般化*/ /*R表示销售员个数*/

typedef struct /*缩短结构体变量名*/

{ int shangpin[Z]; /*定义结构体便于信息的存储和读写,辨别*/ }data;

/*R是表示商品的种类, 最后一个为该销售员商品总和*/

void menu() {

system("cls"); printf("\n\n");

printf("\t ┏━━━━━━━━━━━━主菜单━━━━━━━━━━┓\n"); printf("\t ┃ 1. 计算上个月每个人每种产品的销售额 ┃\n"); printf("\t ┃ 2. 按销售额对销售员进行排序,输出排序结果 ┃\n"); printf("\t ┃ 3. 统计每种产品的总销售额, 输出排序结果 ┃\n"); printf("\t ┃ 4. 输出统计报表 ┃\n"); printf("\t ┃ 5. 结束操作 ┃\n");

/*清屏命令*/

printf("\t ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

}

void f1(data *x) /*计算上个月每个人每种产品的销售额*/ {

FILE *fp;

char fname[10],hitkey;

int j,t; /*用于控制循环*/

int i,k,s; /*用于定义职工序号,产品序号,产品数量*/ system("cls");

/*清屏命令*/

printf("您想计算哪个月?\n");

printf("请输入月份:"); /*输入文件名, 这样可以进行各个月份信息写入*/ scanf("%s",fname); strcat(fname,".dat");

if((fp=fopen(fname,"wb"))==NULL) /*打开文件*/ { }

for(j=0;j

for(t=0;t

(x+j)->shangpin[t]=0;

销售数量\n"); /*提示用户写入

printf("不能打开文件!!!\n"); exit(0);

/* 正常exit(0);结束程序*/

printf("请输入:\n职工编号 产品编号

信息的格式*/

for(j=0;hitkey!=27;j++) {

scanf("%d%d%d",&i,&k,&s); if(i>R||iZ||k

(x+i-1)->shangpin[k-1]=(x+i-1)->shangpin[k-1]+s; /*统计各个人的printf("信息错误!\n"); /*提示语,避免输入信息出错*/ continue;

各种产品的数量,-1为了和数组中的序号相匹配*/

}

printf("继续输入请按回车,结束输入请按esc\n");

printf("━━━━━━━━━━━━━━━━━━━━━━\n"); hitkey=getch();

for (;hitkey!=13&&hitkey!=27;) hitkey=getch();

for(j=0;j

if(fwrite((x+j),sizeof(data),1,fp)!=1) /*把信息写入文件中便有以后调

用*/

printf("write error!\n");

fclose(fp); /*关闭文件避免信息遗漏*/ printf("\n\n\n\n\n\n\t\t\t保存成功,按任意键返回主菜单!");

getch(); }

void f2(data *x) /*按销售额对销售员进行排序,输出排序结果*/ {

FILE *fp; char fname[10];

int i,k,j,t,bianhao[R]={0},z; system("cls");

/*清屏命令*/

printf("你要哪个月的?\n");

printf("请输入月份:"); /*输入文件名, 这样可以进行各个月份信息读入*/ scanf("%s",fname); strcat(fname,".dat");

if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/ { }

for(i=0;i

printf("不能打开文件!!!\n"); exit(0);

if(fread(x+i,sizeof(data),1,fp)!=1) printf("读入信息出错!"); /*读入信息提示*/ for(i=0;ishangpin[k]shangpin[k])/*调用职工各自对应的结构体内的产品数量*/ t=j;

}

void f3(data *x)

{

} if(t!=i) { } z=bianhao[i]; bianhao[i]=bianhao[t]; bianhao[t]=z; printf("\t\t\t按%d产品对销售员排序为:\n",k+1); printf("━━━━━━━━━━━━━━━━━━━━━\n"); for(i=0;i

char fname[10]; int i,j,sum[Z]={0},bianhao[Z]={0},z,t,k;

/*清屏命令*/ system("cls");

printf("您想计算哪个月的?\n"); printf("请输入月份:"); scanf("%s",fname); strcat(fname,".dat"); if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/ { } for(i=0;ishangpin[i]; for(i=0;i

for(i=0;i

{ t=i; for(j=i+1;j

} } } sum[t]=k; z=bianhao[i]; bianhao[i]=bianhao[t]; bianhao[t]=z; printf("输出产品排序\n"); printf("产品编号 数量\n"); printf("━━━━━━━━━━━━━\n"); for(i=0;i

void f4(data *x) /*输出统计报表*/

{

FILE *fp; char fname[10];

int i,j,sum[Z+1]={0};

system("cls");

/*清屏命令*/ printf("您想计算哪个月?\n"); printf("请输入月份:"); /*实为输入一个文件名, 这样可以进行各个月份的信息读入*/

scanf("%s",fname); strcat(fname,".dat"); if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/ { printf("不能打开文件!!!\n"); } exit(0);

for(i=0;i

if(fread(x+i,sizeof(data),1,fp)!=1)

printf("读入信息出错!");

for(i=0;i

sum[i]=sum[i]+(x+j)->shangpin[i];

for(i=0;i

sum[Z]=sum[Z]+sum[i];

printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("输出统计报表如下:\n"); /*按要求输出统计表*/ printf("销售员代号 产品代号 销售之和\n");

for(i=0;i

for(j=0;j

printf(" 员工%-8d产品%-6d数量%-10d\n",i+1,j+1,(x+i)->shangpin[j]); printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); for(i=0;i

{ if(i==0)

printf("产品%d之和 %-10d 总和 %-10d\n",i+1,sum[i],sum[Z]); else

printf("产品%d之和 %-10d\n",i+1,sum[i]);

}

printf("\n\n\n\t\t\t按任意键返回主菜单!");

getch();

}

void main()

{ int i,choice;

data sxy[R]; /*R表示职工的个数,前面的宏常量*/

printf("\n\n\n\n\n\n\t━━━━━━━━━━━━━━━━━━━━━━━━━\n");

printf("\t---------------欢迎进入商品销售系统!-------------\n"); printf("\t━━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("\n\n\n\n\n\n\t\t\t按任意键进入主菜单!"); getch(); for(i=0;;i++) { system("cls"); /*清屏命令*/ menu(); /*主菜单函数提示用户怎样选择*/ printf("你想做什么?\n"); printf("请选择:"); /*输入要进行的操作*/ scanf("%d",&choice); if(choice==5) { system("cls"); /*清屏命令*/

printf("\n\n\n\n\n\n\t━━━━━━━━━━━━━━━━━━━━━━━━━\n\n");

*/

case 2 : f2(sxy); break; /*按销售额对销售员的销售情况进行 printf("\t---------------谢谢使用商品销售系统!-------------\n\n"); printf("\t━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"); printf("\n\n\n\n\n\n\t\t\t按任意键退出!(^.^)"); getch(); break; /*退出整个程序*/ } else switch(choice) { case 1 : f1(sxy); break; /*计算上个月每个人每种产品的销售额排序,并且输出排序的结果*/

case 3 : f3(sxy); break; /*统计每种产品的总共得销售额, 并且输出排序的结果*/

case 4 : f4(sxy); break; /*输出统计报表*/

}

}

3.2流程图

}

图3.1 总程序图

3.3函数的功能介绍

1)功能函数f1()

函数的功能: 计算上个月每个人每种产品的销售额

函数的入口: 从main()的switch()开关结构中进入,即choice 的值为1时进入该函数,打开.dat 数据文件,然后提示用户通过键盘对该月的员工销售情况进行数据的读入。

函数调用关系: 被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。

函数的出口: 当程序执行提示语“printf("继续输入请按回车,结束输入请按esc\n");”的时候,对用户的操作进行提示,如果用户选择了按“ESC ”键,则用户选择了结束数据的录入,将结束该函数,而执行主函数main()中“break; ”跳出switch()开关函数,继续执行for 循环结构。

2) 功能函数f2()

函数的功能: 按销售额对销售员进行排序,输出排序结果。

函数的入口: 程序从main()的switch()开关结构中进入,即choise 的值为2时,开始进入该函数,进入函数后,首先用“fopen ()”打开文件,然后利用“fread ()”读取二进制数据,最终利用选择排序法,按销售员的所选产品的总销售额对销售员进行排序。

函数调用关系:被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。

函数的出口: 当输出排序结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“break; ”跳出switch()开关函数,继续执行for 循环结构。

3)功能函数f3()

函数的功能: 统计每种产品的总销售额, 输出排序结果

函数的入口: 从main()的switch()开关结构中进入,即choise 的值为3的时侯,进入该函数,开始读取数据对用户进行提示,然后统计每种产品的总销售额。将计算后的总销售额进行排序,最终把排序的结果用printf ()标准输出函数,将结果输出在屏幕上。

函数调用关系:被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。

函数的出口:当输出排序结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“break; ”跳出switch()开关函数,继续执行for 循环结构。

4)功能函数f4()

函数的功能: 输出统计报表

函数的入口: 从main()的switch()开关结构中进入,即choise 的值为3时,进入该函数,然后通过fopen()函数。即:“if((fp=fopen(fname,"rb"))==NULL)” 打开文件。进入数据的处理。

函数调用关系: 被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。

函数的出口: 开始时读取数据后,统计报表已经输出到屏幕上时,然后利用而执行主函数main()中“break; ”跳出switch()开关函数,继续执行for 循环结构。

5)功能函数主菜单 menu()

函数的功能: 主要作用是提示用户操作,体现模块化思想,主要是显示出菜单让用户选择要进行的任务。

函数的入口: 从主函数main()中的system("cls"); /*清屏命令*/menu(); /*菜单函数提示用户怎样选择*/进入函数,这是直接被主函数main()调用的。

函数调用关系:被主函数调用。并在文中无返回值的空值void 函数。

函数的出口:执行完所有的printf()函数后自动退出该函数。

6)功能函数主函数 main()

函数的功能: 用于联系各个功能函数模块,以及退出程序时的退出画面提示。 函数的入口: 整个程序是从主函数开始的。

函数的出口: 当从main()的switch()开关结构中进入,即choise 的值为5时通过break; 跳出for 循环,然后退出main()函数,即:退出整个程序。

函数调用关系:该函数不被其它函数调用。

3.4功能函数流程图(见下图3.2-3.5)

4. 调试分析 4.1调试方法

打开Microsoft Visual C++ 6.0,先将各个功能函数的的内容清空,只保留主函数main(),然后编译检验main()函数中是否有错,如果没有错误,再连接、运行。确认main()函数一切无误后,然后加入功能函数menu()函数与f1()函数,由于menu()函数比较简单,所以与f1()函数一起进行调试,f1()函数中主要注意读取文件,与写入文件,这都是二进制的形式。若menu()函数与f1()函数编译、连接、运行没问题,继续加入f2()函数,就这样的方法依次检查调试f3()函数、f4()函数。当所有的功能函数都加上且正确无误时,就可以进入下一个环节—程序的测试。

4.2测试方法

运行程序,然后进入销售管理系统的界面,在这里需要做的就是把自己当成一个公司的程序使用者,来对该程序进行使用,看该程序有哪些方面用着不够爽,把这些问题依次整理出来,再对源程序进行修改,在这个过程中也需要对程序进行调试,不过不必将各个功能函数的的内容清空再进行如上述的调试方法,而是,改一部份运行一次,看是否有无。

如f1()函数有误,则先修改f1()函数,一块一块的进行修改,就是遵循C 语言的模块化设计原理,若所有的都改过来了,且运行无误,那就大功告成了。

4.3程序分析

1. 程序要写正确,不然不能读出。

2. 信息代码也要输入正确,按照程序要求输入,不然正确输出信息。 3. 循环与否点击您是否继续进行信息录入(y/n)即可。 在调试中遇到的问题:

在调试过程中,我们遇到诸多小问题,但都在我们共同讨论后解决了。

1、问题: 标点符号在输入的时候,使用的是中文输入法,这种错误一般都

难以发现,让修改的时候找不到目标。

解决方法: 用“替换”。如果程序中的error 很多,不管error 是什么,先将标

点替换成英文的标点。

2、问题: 调试时,有的时候编译后没什么问题,就是在点击连接link 时出现

了错误。而且,这种错误让我们不知道怎么修改。但是我们的程序的确正确。

解决方法: 将源程序保存(save ),然后关掉Microsoft Visual C++ 6.0,重

新启动Microsoft Visual C++ 6.0,

4.4调试结果

图4.1 主菜单

图4.2 界面

图4.3 程序

图4.4 程序

5总结

经过C 语言课程设计实践学习,使我对c 语言有了更进一步的认识和了解,板通过实践,我也发现我的好多不足之处,首先是在程序输入上还不够熟练,经常按错字母,通过学习也有所改进;再有对c 语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c 语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

熟练地掌握了C 语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,以及文件的读写操作等。

我认为要学好c 语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。所以我觉得学习任何一门语言还是需要多看书,多编写程序,特别是当自己突然有一丝灵感的时候,最好记录下来,甚至把它想出来,想明白。实践的过程中,要明确自己写这些程序是为了达到什么目的,实践后,要考虑这样编写是不是最好的,还能不能做其它方法来做,在编写这个程序中遇到了什么样的错误,为什么会遇到,以后应该怎样避免。这样的学习,就会更深入,学习得更好!

参考文献

谭浩强. C语言程序设计教程. 高等教育出版社. 1997

[2]张小东、郑宏珍·C 语言程序设计与应用·人民邮电出版社. 2009 [3]高敬阳·C 语言设计教程与实训·清华大学出版社. 2009 [4]胡泉、谢芳. C语言程序设计·华中科技大学出版. 2008 [5]马俊· C#程序设计及教程·人民邮电出版. 2009 谭浩强. C程序设计. 清华大学出版社. 1999 郭浩志.C 语言程序设计. 北京邮电大学出版社. 2005 柳盛、王国全. 人民邮电出版社. 2008

谭浩强、张基温. C语言程序设计教程. 高等教育出版社. 2006 柳盛、王全国. C语言通用范例开发金典. 电子工业出版社. 2008 [1] [6][7][8][9][10]

致 谢

在编写程序的过程中,我们得到了杨书鸿老师的精心指导,在老师的指导下,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯,也学会了运用程序编写一个简易系统,加强了操纵与实践能力。在此,我们对老师的精心栽培表示衷心的感谢!

感谢我的同伴对我的帮助和指点,在课设即将完成之际,我的心情无法平静,从开始进入课题到课设的顺利完成,有老师、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意。

31

32

以某公司销售管理业务为背景,设计、开发一套“销售管理系统”软件。 通过该题目的设计过程,可以培养学生结构化程序设计的思想,掌握和利用C 语言,加深对高级语言基本语言要素和控制结构的理解,针对c 语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。得到软件工程的综合训练,提高解决实际问题的能力,学会调试和分析一个较长程序的基本用法。

关键词: 销售管理;C 语言;设计

Abstract

Sales management business of a company as the background, design, develop a set of "sales management system" software.

Through the design process of this subject, students can be structured programming ideas, grasp and the use of C language, to deepen high-level language basic language elements and controls the understanding of the structure, conduct training for emphasis and difficulty in C language, independent of the completion of a certain job programming tasks, while emphasizing the programming style good. Comprehensive training in software engineering, improving the ability to solve practical problems, learn to debug and analyze the basic usage of a longer program.

Keywords :sales management; C; design

目录

1 概述 ······················································································································· 1 1.1设计内容 ········································································································ 1 1.2 设计目的 ······································································································ 2 2总体设计 ················································································································ 3 2.1 总体流程图 ·································································································· 3 2.2系统流程图 ···································································································· 4 3. 详细设计 ··············································································································· 5 3.1源程序 ············································································································ 5 3.3函数的功能介绍 ·························································································· 13 3.4功能函数流程图 ·························································································· 14 4. 调试分析 ············································································································· 19 4.1调试方法 ······································································································ 19 4.2测试方法 ······································································································ 19 4.3程序分析 ······································································································ 20 5总结 ·················································································································· 25 参考文献 ················································································································· 26 致谢 ························································································································· 27

1 概述

近年来,随着销售规模的不断扩大,职员数目和产品数量也相应的增加,有关职员和产品的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致销售系统管理上的混乱,人力与物力过多浪费,销售管理费用的增加,从而使公司的负担过重,影响整个公司的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的销售管理系统,对各种资料进行集中统一的管理。系统开发的总的设计目标是实现销售管理的系统化、规范化和自动化,实现对各种资料的集中统一的管理。

1.1设计内容

1)程序设计(包括框图设计、源程序编辑、编译、调试) 2)对问题有完整的分析过程,要求把分析过程写入报告 3)编写设计报告

本程序设计的主要内容:

该系统是一个销售管理系统,即对某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)进行合理管制。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:

1)销售员的代号 2)产品的代号

3)这种产品的当天的销售额

每位销售员每天可能上缴0-5张便条。假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况(自己设定),进行如下处理。

1)计算上个月每个人每种产品的销售额。

2)按销售额对销售员进行排序,输出排序结果(销售员代号)

3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)

4)输出统计报表 1.2

设计目的

1) 进一步掌握运用C 进行程序设计的能力;

2) 进一步理解和运用面向过程程序设计的思想和方法;3) 初步掌握开发一个小型实用系统的基本方法; 4) 学会调试一个较长程序的基本方法; 5) 学会利用流程图或N-S 图表示算法; 6) 掌握书写实训开发文档的能力; 7) 掌握书写实训开发文档的能力;

8)对C 语言进行更深层次的理解和学习; 9)理解C 语言的结构;

10)提升自己编写与运行程序的能力;

2总体设计

当用户进入这个程序时, 系统会出现一个主菜单,有七个功能,进商品销售管理系统;输入商品信息;删除与更改信息;确认购买并输入购买信息;系统信息统计系统;保存所有信息写入文件,读取一份已存在的信息,退出系统。

本程序是通过对文件的读写来实现的,主要运用了循环、数组结构,对数据的输入、修改、删除的连续进行,进入系统后,能够根据提示进行输入、修改、删除以及查询等功能。在输入信息的时候,可以根据提示进行重复输入多个信息,修改、删除、查询也可以重复使用,这些就是运用的循环结构。

在输入、修改、删除、查询信息、信息写入文件、读取信息、退出系统时该系统会用(1 退出系统 2 继续)提示你。

注意:在使用过程中,查询商品时只能先输入商品的代号; 输入的各项数据不能超过其本身设定的最大的位数。

2.1 总体流程图

图 2.1 总体流程图

系统流程图

图2.2 系统流程图

2.2

3. 详细设计

3.1源程序

#include #include #include #include #define Z 5

#define R 4 /*定义宏常量便于程序的一般化*/ /*R表示销售员个数*/

typedef struct /*缩短结构体变量名*/

{ int shangpin[Z]; /*定义结构体便于信息的存储和读写,辨别*/ }data;

/*R是表示商品的种类, 最后一个为该销售员商品总和*/

void menu() {

system("cls"); printf("\n\n");

printf("\t ┏━━━━━━━━━━━━主菜单━━━━━━━━━━┓\n"); printf("\t ┃ 1. 计算上个月每个人每种产品的销售额 ┃\n"); printf("\t ┃ 2. 按销售额对销售员进行排序,输出排序结果 ┃\n"); printf("\t ┃ 3. 统计每种产品的总销售额, 输出排序结果 ┃\n"); printf("\t ┃ 4. 输出统计报表 ┃\n"); printf("\t ┃ 5. 结束操作 ┃\n");

/*清屏命令*/

printf("\t ┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

}

void f1(data *x) /*计算上个月每个人每种产品的销售额*/ {

FILE *fp;

char fname[10],hitkey;

int j,t; /*用于控制循环*/

int i,k,s; /*用于定义职工序号,产品序号,产品数量*/ system("cls");

/*清屏命令*/

printf("您想计算哪个月?\n");

printf("请输入月份:"); /*输入文件名, 这样可以进行各个月份信息写入*/ scanf("%s",fname); strcat(fname,".dat");

if((fp=fopen(fname,"wb"))==NULL) /*打开文件*/ { }

for(j=0;j

for(t=0;t

(x+j)->shangpin[t]=0;

销售数量\n"); /*提示用户写入

printf("不能打开文件!!!\n"); exit(0);

/* 正常exit(0);结束程序*/

printf("请输入:\n职工编号 产品编号

信息的格式*/

for(j=0;hitkey!=27;j++) {

scanf("%d%d%d",&i,&k,&s); if(i>R||iZ||k

(x+i-1)->shangpin[k-1]=(x+i-1)->shangpin[k-1]+s; /*统计各个人的printf("信息错误!\n"); /*提示语,避免输入信息出错*/ continue;

各种产品的数量,-1为了和数组中的序号相匹配*/

}

printf("继续输入请按回车,结束输入请按esc\n");

printf("━━━━━━━━━━━━━━━━━━━━━━\n"); hitkey=getch();

for (;hitkey!=13&&hitkey!=27;) hitkey=getch();

for(j=0;j

if(fwrite((x+j),sizeof(data),1,fp)!=1) /*把信息写入文件中便有以后调

用*/

printf("write error!\n");

fclose(fp); /*关闭文件避免信息遗漏*/ printf("\n\n\n\n\n\n\t\t\t保存成功,按任意键返回主菜单!");

getch(); }

void f2(data *x) /*按销售额对销售员进行排序,输出排序结果*/ {

FILE *fp; char fname[10];

int i,k,j,t,bianhao[R]={0},z; system("cls");

/*清屏命令*/

printf("你要哪个月的?\n");

printf("请输入月份:"); /*输入文件名, 这样可以进行各个月份信息读入*/ scanf("%s",fname); strcat(fname,".dat");

if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/ { }

for(i=0;i

printf("不能打开文件!!!\n"); exit(0);

if(fread(x+i,sizeof(data),1,fp)!=1) printf("读入信息出错!"); /*读入信息提示*/ for(i=0;ishangpin[k]shangpin[k])/*调用职工各自对应的结构体内的产品数量*/ t=j;

}

void f3(data *x)

{

} if(t!=i) { } z=bianhao[i]; bianhao[i]=bianhao[t]; bianhao[t]=z; printf("\t\t\t按%d产品对销售员排序为:\n",k+1); printf("━━━━━━━━━━━━━━━━━━━━━\n"); for(i=0;i

char fname[10]; int i,j,sum[Z]={0},bianhao[Z]={0},z,t,k;

/*清屏命令*/ system("cls");

printf("您想计算哪个月的?\n"); printf("请输入月份:"); scanf("%s",fname); strcat(fname,".dat"); if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/ { } for(i=0;ishangpin[i]; for(i=0;i

for(i=0;i

{ t=i; for(j=i+1;j

} } } sum[t]=k; z=bianhao[i]; bianhao[i]=bianhao[t]; bianhao[t]=z; printf("输出产品排序\n"); printf("产品编号 数量\n"); printf("━━━━━━━━━━━━━\n"); for(i=0;i

void f4(data *x) /*输出统计报表*/

{

FILE *fp; char fname[10];

int i,j,sum[Z+1]={0};

system("cls");

/*清屏命令*/ printf("您想计算哪个月?\n"); printf("请输入月份:"); /*实为输入一个文件名, 这样可以进行各个月份的信息读入*/

scanf("%s",fname); strcat(fname,".dat"); if((fp=fopen(fname,"rb"))==NULL) /*打开文件*/ { printf("不能打开文件!!!\n"); } exit(0);

for(i=0;i

if(fread(x+i,sizeof(data),1,fp)!=1)

printf("读入信息出错!");

for(i=0;i

sum[i]=sum[i]+(x+j)->shangpin[i];

for(i=0;i

sum[Z]=sum[Z]+sum[i];

printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("输出统计报表如下:\n"); /*按要求输出统计表*/ printf("销售员代号 产品代号 销售之和\n");

for(i=0;i

for(j=0;j

printf(" 员工%-8d产品%-6d数量%-10d\n",i+1,j+1,(x+i)->shangpin[j]); printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); for(i=0;i

{ if(i==0)

printf("产品%d之和 %-10d 总和 %-10d\n",i+1,sum[i],sum[Z]); else

printf("产品%d之和 %-10d\n",i+1,sum[i]);

}

printf("\n\n\n\t\t\t按任意键返回主菜单!");

getch();

}

void main()

{ int i,choice;

data sxy[R]; /*R表示职工的个数,前面的宏常量*/

printf("\n\n\n\n\n\n\t━━━━━━━━━━━━━━━━━━━━━━━━━\n");

printf("\t---------------欢迎进入商品销售系统!-------------\n"); printf("\t━━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("\n\n\n\n\n\n\t\t\t按任意键进入主菜单!"); getch(); for(i=0;;i++) { system("cls"); /*清屏命令*/ menu(); /*主菜单函数提示用户怎样选择*/ printf("你想做什么?\n"); printf("请选择:"); /*输入要进行的操作*/ scanf("%d",&choice); if(choice==5) { system("cls"); /*清屏命令*/

printf("\n\n\n\n\n\n\t━━━━━━━━━━━━━━━━━━━━━━━━━\n\n");

*/

case 2 : f2(sxy); break; /*按销售额对销售员的销售情况进行 printf("\t---------------谢谢使用商品销售系统!-------------\n\n"); printf("\t━━━━━━━━━━━━━━━━━━━━━━━━━\n\n"); printf("\n\n\n\n\n\n\t\t\t按任意键退出!(^.^)"); getch(); break; /*退出整个程序*/ } else switch(choice) { case 1 : f1(sxy); break; /*计算上个月每个人每种产品的销售额排序,并且输出排序的结果*/

case 3 : f3(sxy); break; /*统计每种产品的总共得销售额, 并且输出排序的结果*/

case 4 : f4(sxy); break; /*输出统计报表*/

}

}

3.2流程图

}

图3.1 总程序图

3.3函数的功能介绍

1)功能函数f1()

函数的功能: 计算上个月每个人每种产品的销售额

函数的入口: 从main()的switch()开关结构中进入,即choice 的值为1时进入该函数,打开.dat 数据文件,然后提示用户通过键盘对该月的员工销售情况进行数据的读入。

函数调用关系: 被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。

函数的出口: 当程序执行提示语“printf("继续输入请按回车,结束输入请按esc\n");”的时候,对用户的操作进行提示,如果用户选择了按“ESC ”键,则用户选择了结束数据的录入,将结束该函数,而执行主函数main()中“break; ”跳出switch()开关函数,继续执行for 循环结构。

2) 功能函数f2()

函数的功能: 按销售额对销售员进行排序,输出排序结果。

函数的入口: 程序从main()的switch()开关结构中进入,即choise 的值为2时,开始进入该函数,进入函数后,首先用“fopen ()”打开文件,然后利用“fread ()”读取二进制数据,最终利用选择排序法,按销售员的所选产品的总销售额对销售员进行排序。

函数调用关系:被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。

函数的出口: 当输出排序结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“break; ”跳出switch()开关函数,继续执行for 循环结构。

3)功能函数f3()

函数的功能: 统计每种产品的总销售额, 输出排序结果

函数的入口: 从main()的switch()开关结构中进入,即choise 的值为3的时侯,进入该函数,开始读取数据对用户进行提示,然后统计每种产品的总销售额。将计算后的总销售额进行排序,最终把排序的结果用printf ()标准输出函数,将结果输出在屏幕上。

函数调用关系:被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。

函数的出口:当输出排序结果用printf()标准输出到屏幕上,然后结束该函数,而执行主函数main()中“break; ”跳出switch()开关函数,继续执行for 循环结构。

4)功能函数f4()

函数的功能: 输出统计报表

函数的入口: 从main()的switch()开关结构中进入,即choise 的值为3时,进入该函数,然后通过fopen()函数。即:“if((fp=fopen(fname,"rb"))==NULL)” 打开文件。进入数据的处理。

函数调用关系: 被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。

函数的出口: 开始时读取数据后,统计报表已经输出到屏幕上时,然后利用而执行主函数main()中“break; ”跳出switch()开关函数,继续执行for 循环结构。

5)功能函数主菜单 menu()

函数的功能: 主要作用是提示用户操作,体现模块化思想,主要是显示出菜单让用户选择要进行的任务。

函数的入口: 从主函数main()中的system("cls"); /*清屏命令*/menu(); /*菜单函数提示用户怎样选择*/进入函数,这是直接被主函数main()调用的。

函数调用关系:被主函数调用。并在文中无返回值的空值void 函数。

函数的出口:执行完所有的printf()函数后自动退出该函数。

6)功能函数主函数 main()

函数的功能: 用于联系各个功能函数模块,以及退出程序时的退出画面提示。 函数的入口: 整个程序是从主函数开始的。

函数的出口: 当从main()的switch()开关结构中进入,即choise 的值为5时通过break; 跳出for 循环,然后退出main()函数,即:退出整个程序。

函数调用关系:该函数不被其它函数调用。

3.4功能函数流程图(见下图3.2-3.5)

4. 调试分析 4.1调试方法

打开Microsoft Visual C++ 6.0,先将各个功能函数的的内容清空,只保留主函数main(),然后编译检验main()函数中是否有错,如果没有错误,再连接、运行。确认main()函数一切无误后,然后加入功能函数menu()函数与f1()函数,由于menu()函数比较简单,所以与f1()函数一起进行调试,f1()函数中主要注意读取文件,与写入文件,这都是二进制的形式。若menu()函数与f1()函数编译、连接、运行没问题,继续加入f2()函数,就这样的方法依次检查调试f3()函数、f4()函数。当所有的功能函数都加上且正确无误时,就可以进入下一个环节—程序的测试。

4.2测试方法

运行程序,然后进入销售管理系统的界面,在这里需要做的就是把自己当成一个公司的程序使用者,来对该程序进行使用,看该程序有哪些方面用着不够爽,把这些问题依次整理出来,再对源程序进行修改,在这个过程中也需要对程序进行调试,不过不必将各个功能函数的的内容清空再进行如上述的调试方法,而是,改一部份运行一次,看是否有无。

如f1()函数有误,则先修改f1()函数,一块一块的进行修改,就是遵循C 语言的模块化设计原理,若所有的都改过来了,且运行无误,那就大功告成了。

4.3程序分析

1. 程序要写正确,不然不能读出。

2. 信息代码也要输入正确,按照程序要求输入,不然正确输出信息。 3. 循环与否点击您是否继续进行信息录入(y/n)即可。 在调试中遇到的问题:

在调试过程中,我们遇到诸多小问题,但都在我们共同讨论后解决了。

1、问题: 标点符号在输入的时候,使用的是中文输入法,这种错误一般都

难以发现,让修改的时候找不到目标。

解决方法: 用“替换”。如果程序中的error 很多,不管error 是什么,先将标

点替换成英文的标点。

2、问题: 调试时,有的时候编译后没什么问题,就是在点击连接link 时出现

了错误。而且,这种错误让我们不知道怎么修改。但是我们的程序的确正确。

解决方法: 将源程序保存(save ),然后关掉Microsoft Visual C++ 6.0,重

新启动Microsoft Visual C++ 6.0,

4.4调试结果

图4.1 主菜单

图4.2 界面

图4.3 程序

图4.4 程序

5总结

经过C 语言课程设计实践学习,使我对c 语言有了更进一步的认识和了解,板通过实践,我也发现我的好多不足之处,首先是在程序输入上还不够熟练,经常按错字母,通过学习也有所改进;再有对c 语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c 语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。

熟练地掌握了C 语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用,以及文件的读写操作等。

我认为要学好c 语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。所以我觉得学习任何一门语言还是需要多看书,多编写程序,特别是当自己突然有一丝灵感的时候,最好记录下来,甚至把它想出来,想明白。实践的过程中,要明确自己写这些程序是为了达到什么目的,实践后,要考虑这样编写是不是最好的,还能不能做其它方法来做,在编写这个程序中遇到了什么样的错误,为什么会遇到,以后应该怎样避免。这样的学习,就会更深入,学习得更好!

参考文献

谭浩强. C语言程序设计教程. 高等教育出版社. 1997

[2]张小东、郑宏珍·C 语言程序设计与应用·人民邮电出版社. 2009 [3]高敬阳·C 语言设计教程与实训·清华大学出版社. 2009 [4]胡泉、谢芳. C语言程序设计·华中科技大学出版. 2008 [5]马俊· C#程序设计及教程·人民邮电出版. 2009 谭浩强. C程序设计. 清华大学出版社. 1999 郭浩志.C 语言程序设计. 北京邮电大学出版社. 2005 柳盛、王国全. 人民邮电出版社. 2008

谭浩强、张基温. C语言程序设计教程. 高等教育出版社. 2006 柳盛、王全国. C语言通用范例开发金典. 电子工业出版社. 2008 [1] [6][7][8][9][10]

致 谢

在编写程序的过程中,我们得到了杨书鸿老师的精心指导,在老师的指导下,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯,也学会了运用程序编写一个简易系统,加强了操纵与实践能力。在此,我们对老师的精心栽培表示衷心的感谢!

感谢我的同伴对我的帮助和指点,在课设即将完成之际,我的心情无法平静,从开始进入课题到课设的顺利完成,有老师、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意。

31

32


相关内容

  • 十几年的销售管理心得
  • 十几年的销售管理心得 营销管理是为了实现各种组织目标,创造.建立和保持与目标市场之间的有益交换和联系而设计的方案的分析.计划.执行和控制.通过计划.执行及控制企业的销售活动,以达到企业的销售目标. 在谈销售管理的过程之前必须要知道什么是销售管理,而谈到销售管理又必须先知道什么是营销管理,并将其与销售 ...

  • 中国销售管理专业水平证书考试
  • 中国销售管理专业水平证书考试 中国销售管理专业水平证书(Sales Management Accreditation Test,简称:SMAT )考试是为了培养适应我国经济发展需要和满足不同行业.不同层次需求的专业销售管理人员. 其基本要求是:应试人员通过对有关课程的学习,掌握销售管理基本知识和职业 ...

  • 如何有效管理销售人员
  • 如何有效管理销售人员 一.企业销售人员管理的现状 提到销售人员的管理,作为市场一线的资深管理者,有一种难言的感慨.无论是任何一本营销教材或是企业管理书籍,无一不将销售人员管理列为重点,但销售人员管理的思路仍然在控制论与人性论的矛盾之间徘徊. 当前中小型企业里存在着销售人员管理的悖论现象:宏伟的营销战 ...

  • 如何管理好销售人员
  • 一.企业销售人员管理的现状 提到销售人员的管理,作为市场一线的资深管理者,有一种难言的感慨.无论是任何一本营销教材或是企业管理书籍,无一不将销售人员管理列为重点,但销售人员管理的思路仍然在控制论与人性论的矛盾之间徘徊. 当前中小型企业里存在着销售人员管理的悖论现象:宏伟的营销战略.销售计划最后都需要 ...

  • 水泥销售公司部门及岗位职责
  • 目 录 财务部部门职责.......................................................................... 2 价格管理办公室部门职责 .................................................. ...

  • 产品全生命周期管理-销售管理
  • 产品全生命周期管理-PLM > 销售管理 产品全生命周期管理 - 销售管理 现代企业的面临越来越挑剔的客户需求,客户期望值不断上升,销售已经成为决定企业是否能良性运行的根本保证,没有良好的销售业绩,就不可能由企业的良好业绩.守株待兔式的销售时代已经一去不复返了.但所有企业的管理者都面临如下问题 ...

  • 如何从销售团队管理中提高业绩
  • 如何从销售团队管理中提高业绩 根据多年对销售理论与实践的研究,业内人士发现了销售团队管理中存在的七个战略性问题,如果销售经理们能够很好地解决,就可以大幅度地提高销售业绩.时代光华小编整理了以下销售团队管理中存在的七个战略性问题,以供参考. 1.有效抑制销售指标的棘轮效应.销售指标的棘轮效应是指销售管 ...

  • 李成林销售类培训课程大纲
  • 初级销售人员培训 课件包括:初级销售技巧.关系销售.上门拜访技巧.有效的销售陈述.快速达成销售协议.商务谈判.销售沟通.销售人员的素养与态度 销售技巧培训 课程设置24小时 1 销售员的角色认知 1.1 销售员的6项基本职责 1.2 成功销售员的基本特征 1.3 销售员的5项知识构成 1.4 销售员 ...

  • 论销售人员的管理模式-朱腾飞
  • 湖南商学院 高等教育自学考试学生毕业论文 题 目 学生姓名 考 号 专 业 助 学 点 通讯地址 联系电话 论销售人员的管理模式 朱腾飞 [1**********]5 销售管理 卡耐基教育 长沙市雨花区香樟路22号 [1**********] 2014 年 9 月 目 录 一.两类销售管理者的困境„ ...

  • 销售工作流程和销售管理规范
  • 销售工作规范和销售管 理制度(内贸部试行) 批准: 编制: 二O一O年二月 内部资料 严禁外传 编制说明 为推动公司市场开发,促进公司销售活动规范化,理顺公司内部管理关系,调动销售人员积极性:根据总经理要求,在充分听取各职能部门,特别是销售部意见和建议基础上,编制了<销售工作规范和 销售管理制 ...