资源描述
1 设计内容和要求
1.1 管理系统的发展及现状
管理信息系统是现代信息管理工作不可缺少的一部分,是适应现代高科技信息管理尺度的要求、推动信息管理走向科学化、规范化的必要条件。只有信息管理规范了,才能给人们提供更好的生活环境及便利的生活空间。
管理信息系统是一个能进行管理信息的收集、传递、加工、保存、维护和使用的系统。
管理信息系统功能包括:信息收集、信息存储、问题处理及信息输出、信息管理。
现代社会、社会化趋势的扩大和社会产品需求使企业在生产经营活动中涉及的内外部信息积聚膨胀,随着科学技术突飞猛进和生产迅速发展,使人类知识量增长速度不断加快,信息量的增加,外部环境变化的变快,人工已无法胜任。如何收集足够的信息资源,强有力的信息并加以利用,积极的开发和及时利用信息爆炸有效的信息资源,已成为现代社会的难题。因此必须有一个系统来对这些数据进行管理。
1.2需求分析
1.2.1背景
食品店销售管理系统
销售员的代号A.B.C.D
产品的代号:面包bread、蛋糕cate、饼干pie、牛奶milk 饮料drink
1.2.2内容及要求
1)强化学习C语言中有关链表及外部文件的内容,独立设计一个销售管理系统。某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:
a.销售员的代号
b.产品的代号
c.这种产品的当天的销售额
2)每位销售员每天可能上缴0-5张便条。假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况(自己设定),进行如下处理。
a.计算上个月每个人每种产品的销售额。
b.按销售额对销售员进行排序,输出排序结果(销售员代号)
c.统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
d.输出统计报表
2 总体设计思路
2.1系统功能简介
1)输入销售员的销售信息并将其保存在文件中
2)从文件中读取销售员的销售信息
3)计算每个人每种产品的销售额
4)按销售额对销售员进行排序,输出排序结果(销售员代号)
5)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)
6)输出统计报表
2.2总体设计
在本软件中,主要运用函数调用来实现对食品销售的记录和管理。本软件实现了销售信息的记录功能(包括每个销售员每种产品的销售情况)、销售信息查询功能(按销售员查询、按销售总量查询等)和销售信息储存功能,以及输出统计报表的功能,和从文件中读取数据功能等,从而达到对食品销售情况的管理。
2.3总体程序模块图
按销售额对销售员
进行排序
产品销售额
读
入
数
据
保
存
Main()
函数
输入
输入
查询销售情况
清单
天数
及销
售员
销售
情况
输出统计表
退出
图2.1总体程序模块
2.4总体设计流程图
开始
Y
Menu_select()=1
N
Y
Length=enter(rec); Menu_select()=2
Break; N
Y
Salor(rec,length);
Break; Menu_select()=3
N
Y
List1(rec,length);
Break;
Menuselect()=4
+
+4
N
Menuselect()=5
List2(rec,length);berak
Y
N
Mwnuselt()=6
; ;
;
Y
A(rec,length)
break;
;
List3(rec,length);break
Menu_selec_()=7
N
Save(rc,length);Break
=7
Y
Menu select()=8
l N
Menu_select=9
Length=load(rec)break
;
Y
;
Y
Exit(0);
图2.2总体设计流程
3 系统功能模块设计
3.1 Main( )主函数模块
主函数是程序入口,采用模块化设计。首先在主程序中打印出主菜单界面,将会显示出八个功能函数,作为进入系统操作的一种方式,选择相应的代号便会进入相应的功能操作,当选择“000”时便会退出操作。
图3.1 主菜单界面
3.2 enter( )输入清单函数模块
本函数先通过system(“cls”)函数将主菜单界面清除;然后根据定义的清单天数输入销售员代号及各产品的销售量,并通过for函数将输入的内容存入结构体数组中,然后退出该模块。
图3.2输入清单函数模块
图3.3输入清单函数流程
3.3保存模块
该模块调用fopen函数将其保存在文件中。如果函数带回一个空指针,则不能打开该文件,退出;保存成功后就会关闭文件,并显示保存成功。然后按任意键便会继续运行程序。
图3.4保存数据界面
图3.5保存函数流程
3.4读入数据模块
该模块采用指针函数*fp,用fscanf对文件中的数据进行调用,此时屏幕会显示“恭喜您已成功从文件中读出数据”,然后便可运用文件中的数据进行下面的操作。
图3.6读入数据界面
图3.7读入数据流程
3.5 查询销售员销售额模块
该模块采用数组函数实现对销售员销售情况的调用,采用if条件函数可直接输出查询情况,只需输入销售员代号即可。
图3.8查询销售员销售额界面
图3.9查询销售员销售额流程
3.6排序模块
此部分用void list1( )函数,首先定义两个数组,然后利用for结构实现函数体的循环,用for的条件函数实现销售员销售额的排序。
图3.10排序界面
图3.11排序流程
3.7统计表模块
定义两个数组,通过对数组附初值实现对每一种产品销售额的求和
以及产品的排序。
图3.12统计表界
图3.13统计表流程
4 程序调试及分析
1)开始时不能从文件中读取数据,每次输入的数据只能在本次函数调用中使用,下次仍需重新输入,问题出在没有对附地址栏即fscanf(fp,"%10d%7d%7d%7d%7d%7d",t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,&[i].a5,修改后加入地址栏便能从文件中直接读入数据。
2)在Main( )函数中开始少一个case结构,导致在void list2 函数中“getch”未定义,加入case 5:a(rec,length);break;后便能正常运行。
3)在清单输入模块中,开始只能输入一天的销售记录,原因是少了循环的程序编译,添加for(j=0;j<num;j++)和 for(i=0;i<4;i++)后便能由外界定义输入清单的天数。
4)在求销售产品总和的模块中,忽略了将最后结果返回sum,虽不影响程序的运行,但这也是程序的不完善之处。
5 总结及体会
在做课程设计以前,我对销售管理信息系统的理解只是停留在理论和知识的水平上,并没有认真的去操作实践。只是所谓的“纸上谈兵”而已,缺乏实际的操作技术,缺乏对所学知识的融会贯通。通过这次课程设计,我通过自学、在同学们的帮助下完成了《食品店销售管理系统》的设计与开发。在课程设计的整个过程中我遇到了很多的问题,但我都在慢慢地学习过程中一点一点地克服了。同时我发现真正学好、学懂一门新的语言是有难度,值得庆幸的是,在此期间指导老师给了我很大的帮助和鼓励。使我通过这次课程设计,同时又学习了很多在平常考试过程中学习不到的知识和自己动手的能力。
在边自学边设计的过程中,我查阅了很多的资料,请教了不少的同学和老师。在刚开始编程的时候还是不能得心应手。在一次又一次的修改过程中不断地进步和提高,但是还是有些功能我无法把它用到我的程序中来,真有点遗憾,同时由于这次时间比较紧,无法更深入地去钻研这门课程。
这次课程设计是我本学期所学知识的综合应用,使我对一学期所学的内容有了更加深刻的认识,使得所学的知识得到融会贯通,得到了以前学习任何一门课都没有的提高与进步,对我来说是一次很好的锻炼,这不仅把以前所学的知识再重温习一遍,而且又学会了一门新的语言。
总之,通过本次课程设计,我最终完成了《食品店销售管理系统》的课程设计。在做本课程的过程中,我不仅更加深刻的体会了VC这门语言,还对结构体数组有了比较熟练的了解,更重要的是学到了很多编程思想。我会在以后的学习中去更加熟练的掌握C语言。
致谢
在以前,自己在上课时没有很好的听课,下来后也没有很好的去实践操作。致使自己的编程水平与同学们相差很远。通过此次实践,在老师和同学的帮助下,我的编程能力有了一定的提高。虽然没有达到理想中的效果,但较我自身而言,已经有了较大的进步。
其实学习也能体现出团结的力量,如果班上的同学都只顾自己学习,同学之间遇见什么问题也不互相讨论,只靠只身的力量去解决学习中遇到的问题在很多的时候都是很难实现的。在此次课程设计中,同学们让我再次体会到了团结的力量,在此我感谢同学们对我的帮助。
在以前,老师给我的感觉都总是高高在上,然而在这次课程设计时。指导老师的行动彻底让我改变了对老师的成见。在课程设计的过程中,我遇到了许多很浅显的问题,在询问老师时,他们是那样的认真讲解,遇到实在不懂得问题,他们会手把手的说教,直到我们弄懂为止。在此我感谢老师对我们孜孜不倦的教诲。
最后,我再次向帮助我的老师和同学致上最真挚的谢意。感谢他们对我的帮助!同时在以后的学习当中,我会加倍的努力,继续发扬同学们的这种互帮互助的精神!
参考文献
[1]谭浩强等.C语言程序设计教程.北京:高等教育出版社,1997.
[2]谭浩强.C程序设计.第2版.北京:清华大学出版社,1999.
[3]郭浩志.C语言程序设计.北京.北京邮电大学出版社,2005.
[4]林学焦.Turbo C2.0用户手册.北京.学苑出版社,1993.
[5]谭浩强、张基温. C语言程序设计教程.北京:高等教育出版社,2006.
源代码
#include <stdio.h>/*输入输出函数*/
#include <stdlib.h>/*通用应用程序函数*/
#include <string.h>/*字符串函数*/
#include <ctype.h>/*字符操作函数*/
typedef struct /*定义结构体变量*/
{
int name;
int a1;
int a2;
int a3;
int a4;
int a5;
}
RECODE;
int menu_select();/*声明函数*/
int enter(RECODE t[]);/*声明函数*/
void salor(RECODE t[],int n);/*声明函数*/
int sum(RECODE t[],int n,int m);/*声明函数*/
void list1(RECODE t[],int n);/*声明函数*/
void list2(RECODE t[],int n);/*声明函数*/
void list3(RECODE t[],int n);/*声明函数*/
void save(RECODE t[],int n);/*声明函数*/
int load(RECODE t[]);/*声明函数*/
int a(RECODE t[],int p)
{
int i,q,w[5]={0,0,0,0,0};
printf("请输入你查找的人的代号");
scanf("%d",&q);
for(i=0;i<4;i++)
t[i].name=i+1;
for(i=0;i<p;i++)
if(q==t[i].name)
{
w[0]=w[0]+t[i].a1;w[1]=w[1]+t[i].a2;w[2]=w[2]+t[i].a3;w[3]=w[3]+t[i].a4;w[4]=w[4]+t[i].a5;
printf("%d的销售情况bread:%d cake:%d pie:%d milk:%d drink:%d\n",q,w[0],w[1],w[2],w[3],w[4]);
}
}
main()/*主函数*/
{
RECODE rec[600];
int length;
system("cls"); /*清屏*/
for( ; ; ) /*无限循环*/
{
switch(menu_select()) /*根据用户的选择判断该调用哪个功能函数*/
{
case 1:length=enter(rec);break;
case 2:salor(rec,length);break;
case 3:list1(rec,length);break;
case 4:list2(rec,length);break;
case 5:a(rec,length);break;
case 6:list3(rec,length);break;
case 7:save(rec,length);break;
case 8:length=load(rec);break;
case 0:exit(0);
}
}
}
int menu_select() /*菜单函数*/
{
int n;
printf("-----------------------食品销售管理系统---------------------\n\n");
printf("-----------------------主菜单-------------------------------\n\n");
printf(" \t\t001 输入清单的天数\n");
printf(" \t\t002 销售员月销售额\n");
printf(" \t\t003 按销售额对销售员排序\n");
printf(" \t\t004 产品销售额\n");
printf(" \t\t005 查询销售情况\n");
printf(" \t\t006 统计表\n");
printf(" \t\t007 保存\n");
printf(" \t\t008 直接读入数据\n");
printf(" \t\t000 退出\n");
printf("---------------------------------end---------------------------\n\n");
printf(" 请选择序号从000至006: ");
scanf("%d",&n);
if(0<n<8) system("cls"); /*清屏*/
return n;
}
int enter(RECODE t[])/*清单输入函数*/
{
int i,num,j,z=0;
system("cls"); /*清屏*/
{
printf("输入所要写入的清单的天数:"); /*输入所要写入的清单的天数*/
scanf("%d",&num);
printf("销售员代号 bread cake pie milk drink\n");
for(j=0;j<num;j++)
{
for(i=0;i<4;i++)/*将所输入的条数存入结构体数组中*/
{
printf("\n\n----------------------------------------------------------------\n");
scanf("%d%d%d%d%d%d",&t[i].name,&t[i].a1,&t[i].a2,&t[i].a3,&t[i].a4,&t[i].a5);
z++;
}
printf("\n----------------------------------------------------------------------\n\n\n"); }}
return z;
}
void salor(RECODE t[],int n)
{
int i,s;
int b1=0,b2=0,b3=0,b4=0,b5=0;
printf("输入所要查看的售货员的代号(1-4):");
scanf("%d",&s); /*输入所要查看的售货员的代号*/
for(i=0;i<n;i++) /*对每种产品的销售额求和*/
if(t[i].name==s)
{
b1+=t[i].a1;
b2+=t[i].a2;
b3+=t[i].a3;
b4+=t[i].a4;
b5+=t[i].a5;
}
printf("销售员代号 bread cake pie milk drink\n");
printf("--------------------------------------------------------------------------\n");
printf("%-10d%-10d%-10d%-7d%-7d%-7d",s,b1,b2,b3,b4,b5);
printf("\n按任意键继续.......");
getchar();
}
int sum(RECODE t[],int n, int e)
{
int i,sum=0;
for(i=0;i<=n;i++)/*求销售产品的总和*/
if(e==t[i].name)
{
sum+=t[i].a1;
sum+=t[i].a2;
sum+=t[i].a3;
sum+=t[i].a4;
sum+=t[i].a5;
}
return sum;
}
void list1 (RECODE t[],int n)
{
int i,j,s;
int c[4],m[4]; /*定义两个数组*/
system("cls"); /*清屏*/
for(i=0;i<4;i++)
m[i]=i+1;
for(i=0;i<4;i++)
c[i]=sum(t,n,m[i]);
for(i=0;i<4;i++)/*按销售员的销售额进行排序*/
for(j=i+1;j<4;j++)
if(c[i]<c[j])
{
s=m[i];
m[i]=m[j];
m[j]=s;
s=c[i];
c[i]=c[j];
c[j]=s;
}
printf("销售员的销售额(从高至低)\n");
for(i=0;i<4;i++)/*输出销售员代号*/
printf("%d\n",m[i]);
printf("\n按任意键继续.......");
getchar();
}
void list2(RECODE t[],int n)
{
int i,j,s;
int c[5],m[5];
for(i=0;i<5;i++)/*产品代号*/
m[i]=i+1;
for(i=0;i<5;i++)/*给数组赋初值*/
c[i]=0;
for(i=0;i<n;i++)/*分别对每一种产品的销售额求总和*/
for(j=0;j<5;j++)
{
if(m[j]==t[i].a1)
c[j]+=t[i].a1;
if(m[j]==t[i].a2)
c[j]+=t[i].a2;
if(m[j]==t[i].a3)
c[j]+=t[i].a3;
if(m[j]==t[i].a4)
c[j]+=t[i].a4;
if(m[j]==t[i].a5)
c[j]+=t[i].a5;
}
for(i=0;i<5;i++)/*按销售额对产品排序*/
for(j=i+1;j<5;j++)
{
if(c[i]<c[j])
{
s=c[i];c[i]=c[j];
c[j]=s;
s=m[i];m[i]=m[j];
m[j]=s;
}
}
system("cls"); /*清屏*/
printf("产品的代号 \n");
printf("10 cake 20 bread 30 pie 40 milk 50 drink\n");
for(i=0;i<5;i++)/*输出产品的代号和销售额*/
printf("\n\t\t%-10d%-10d\n",m[i]*10,c[i]);
printf("按任意键继续 ......\n");
getch();
system("cls");
}
void list3(RECODE t[],int n)
{
int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
int c[4],b1[4]={0},b2[4]={0},b3[4]={0},b4[4]={0},b5[4]={0};
system("cls");
for(i=0;i<4;i++)
c[i]=sum(t,n,i+1);/*求每个人的总销售额*/
for(i=0;i<4;i++)
sum0+=c[i];/*所有产品的销售额*/
for(i=0;i<n;i++)/*求每个人每种产品的总销售额*/
for(j=0;j<4;j++)
{
if(j+1==t[i].name)
{
b1[j]+=t[i].a1;
b2[j]+=t[i].a2;
b3[j]+=t[i].a3;
b4[j]+=t[i].a4;
b5[j]+=t[i].a5;
}
}
for(i=0;i<4;i++)/*每种产品的总销售额*/
{
sum1+=b1[i];
sum2+=b2[i];
sum3+=b3[i];
sum4+=b4[i];
sum5+=b5[i];
}
printf("-------------------------销售额清单----------------------\n\n\n");
printf(" 产品的代号\n");
printf("--------bread cake pie milk drink 总和\n\n");
for(i=0;i<4;i++)
printf(" %-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",i+1,b1[i],b2[i],b3[i],b4[i],b5[i],c[i]);
printf(" 合计 %-10d%-10d%-10d%-10d%-10d%-10d",sum1,sum2,sum3,sum4,sum5,sum0);
printf("\n 按任意键继续.......");
getchar();
}
void save(RECODE t[],int n)
{
int i;
FILE *fp;/*调用fopen函数*/
if((fp=fopen("record.txt","wb"))==NULL)/*如果函数带回一个空指针值*/
{
printf("can not open file\n");/*不能打开文件*/
exit(1);
}
printf("\nSaving file\n");
fprintf(fp,"%d",n);
fprintf(fp,"\r\n");
for(i=0;i<n;i++)
{
fprintf(fp,"%-10d%-7d%-7d%-7d%-7d%-7d",t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5);/*将便条的信息输出到fp指向的文件上*/
fprintf(fp,"\r\n");
}
fclose(fp);/*关闭文件*/
printf("****save success***\n\n");/*显示保存成功*/
printf("按任意键继续......");
getchar();
}
int load(RECODE t[])
{
int i,n;
FILE *fp;
if((fp=fopen("record.txt","rb"))==NULL)/*如果函数带回一个空指针值*/
{
printf("can not open file\n");/*不能打开文件*/
exit(1);
}
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
fscanf(fp,"%10d%7d%7d%7d%7d%7d",&t[i].name,&t[i].a1,&t[i].a2,&t[i].a3,&t[i].a4,&t[i].a5);/*从fp指向的文件上读入便条信息*/
fclose(fp);
printf("\n 恭喜您已成功从文件中读出数据!!!\n");/*成功读入信息*/
printf("按任意键继续......\n\n");
getch();
return n;
}
3.3.202521:1621:16:4625.3.39时16分9时16分46秒3月. 3, 253 三月 20259:16:46 下午21:16:46
2025年3月3日星期一21:16:46
展开阅读全文