- 需求分析:
1.设计题目:销售信息统计
2.系统功能需求分析:
程序的功能:
- 销售员信息录入
- 销售员信息显示
- 产品总销售额由大到小排序
- 统计产品销售额信息
- 插入销售员及其信息
- 删除销售员及其信息
- 退出销售信息统计系统
输入输出的要求:
输入运用了scanf和gets函数;输出则运用了printf函数。
- 概要设计:
系统总体设计框架:
- 详细设计:
主要阐述功能模块的算法设计思路:
1、程序由哪些模块组成以及一个模块之间的层次结构、模块的调用关系:每个模块的功能程序由主函数void main()、输入void input()、显示void show()、删除void del()、排序void sort()、添加void insert()、统计void statistic()、保存void save()、退出void exit()等九个模块组成。本系统涉及的知识点:分支,循环,函数,数组,结构体,文件等。各个函数模块的实现如下:
(1)关于void main():采用switch分支控制语句,通过键盘输入值作为开关值,用以调用主菜单各大函数,从而实现主控职能。C语言的函数调用遵循先定义后引用的原则,在程序的最开始就定义了众多的全局变量,如int i.其调用关系如下:
switch(i)
{
case 0:
printf("o 退出销售信息统计系统 o\n");
exit(0);break;
case 1:
printf("-----销售员信息录入------\n");
input();break;
case 2:
printf("-----销售员信息显示------\n");
show();break;
case 3:
printf("-----销售信息保存--------\n");
save();break;
case 4:
printf("-----总销售额信息排序----\n");
sort();break;
case 5:
printf("-----统计产品销售额信息--\n");
statistics_sailer();break;
case 6:
printf("-----插入销售员及其信息--\n");
insert();break;
case 7:
printf("-----删除销售员及其信息--\n");
del();break;
default:printf("输入错误,请重新选择!!");
break;
}
}
}
(2)录入函数void inprint()的实现:由主菜单按‘1’键进入。利用循环方式,将相关信息存入结构体数组,结构体组根据实际的纪录条数,建立销售员信息。按照要求,分步依次录入信息:销售员个数,销售员姓名,销售员工号,产品一销售额,产品二销售额,实现途径为:
void input()
{
int i;
printf("请输入销售员个数\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("输入销售员姓名:\n");
scanf("%s",seller[i].name);
printf("请输入销售员工号:\n");
scanf("%s",seller[i].num);
printf("请分别输入产品一和产品二的销售额:\n");
scanf("%d%d",&seller[i].sailerl ,&seller[i].sailerm );
}
system("cls");
}
(3)显示函数void show()的实现:该功能是输出销售员中的所有信息:
void show()
{
struct seller*p;
system("cls");
printf("姓名 工号 产品一销售额 产品二销售额:\n");
for(p=seller;p<seller+n;p++)
printf("%-8s %2s %6d %12d\n",p->name ,p->num ,p->sailerl , p->sailerm );
printf("\n\n");
}
(4)排序函数void sort()的实现:
void sort()
{
struct seller temp;
int i,j;
for(i=0;i<n;i++)
seller[i].sum =seller[i].sailerl +seller[i].sailerm ;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if(seller[i].sum <seller[i+1].sum)
{
temp=seller[i];
seller[i]=seller[i+1];
seller[i+1]=temp;
}
system("cls");
printf("姓名 工号 产品一销售额 产品二销售额 产品总销售额:\n");
for(i=0;i<n;i++)
printf("\n%s\t%s\t%d\t%8d\t%8d\n",seller[i].name,seller[i].num ,seller[i].sailerl ,seller[i].sailerm ,seller[i].sum );
}
(5)统计函数void statistics_sailer()的实验:运用的语句是:
void statistics_sailer()
{
int i,sum1,sum2,sum;
sum1=0;sum2=0,sum=0;
for(i=0;i<n;i++)
{
sum1+=seller[i].sailerl ;
sum2+=seller[i].sailerm ;
sum=sum1+sum2;
}
system("cls");
printf("产品一的销售额:%d\n",sum1);
printf("产品二的销售额:%d\n",sum2);
printf("产品总的销售额:%d\n",sum);
}
(6)保存函数void save()运用以下语句实现:
void save()
{
FILE*fp;
int i;
fp=fopen("seller.txt","w");
for(i=0;i<n;i++)
fwrite(&seller[i],sizeof(struct seller),1,fp);
system("cls");
printf("\n\n");
printf("保存成功!\n");
printf("\n\n");
}
(7)删除函数void del()的实现:输入要删除的销售员的姓名。运用的语句是:
void del()//删除数据函数
{
char seller_name[20];
int i,j;
printf("输入要删除销售员的姓名:");
fflush(stdin);
scanf("%s",seller_name);
for(i=0;i<n;i++)
{
if(strcmp(seller_name,seller[i].name )==0)
{
for(j=i;j<n;j++)
seller[i]=seller[i+1];
n=n-1;
}
break;
}
save();
system("cls");
}
2.此程序的数据库存储的数据为:销售员的姓名、工号(身份)、产品一的销售额、产品二的销售额、产品总的销售额。
- 调试分析过程描述:包括测试数据,测试分析结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等)
在编程过程中,我遇到了函数没有定义就运行的问题。一开始我还不知道,但通过向同学的询问终于改正了这个错误。后来又遇到了运行时出现删除一个销售员的信息,显示时又出现它的问题,通过查询原来是因为删除后没有保存,在删除模块中调入save()后就解决了。
- 测试结果:列出所有功能的运行界面,并作文字说明。
1.系统运行主界面
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<string.h>
#include<stdlib.h>
struct seller
{
char num[10];
char name[20];
int sailerl;
int sailerm;
int sum;
}seller[200];
FILE*fp;
int n;
void main()
{
void insert();
void del();
void input();
void show();
void save();
void sort();
void statistics_sailer();
int i;
while(1)
{
printf("-----------------------------------------\n");
printf(" 销售信息统计系统 \n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("! 0退出销售信息统计系统 !\n");
printf("! 1销售员信息录入 !\n");
printf("! 2销售员信息显示 !\n");
printf("! 3销售额信息保存 !\n");
printf("! 4产品总销售额由大到小排序 !\n");
printf("! 5统计产品销售额信息 !\n");
printf("! 6插入销售员及其信息 !\n");
printf("! 7删除销售员及其信息 !\n");
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
printf(" 请选择系统的功能项 \n");
printf("-----------------------------------------\n");
scanf("%d",&i);
switch(i)
{
case 0:
printf("o 退出销售信息统计系统 o\n");
exit(0);break;
case 1:
printf("-----销售员信息录入------\n");
input();break;
case 2:
printf("-----销售员信息显示------\n");
show();break;
case 3:
printf("-----销售信息保存--------\n");
save();break;
case 4:
printf("-----总销售额信息排序----\n");
sort();break;
case 5:
printf("-----统计产品销售额信息--\n");
statistics_sailer();break;
case 6:
printf("-----插入销售员及其信息--\n");
insert();break;
case 7:
printf("-----删除销售员及其信息--\n");
del();break;
default:printf("输入错误,请重新选择!!");
break;
}
}
}
void input()
{
int i;
printf("请输入销售员个数\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("输入销售员姓名:\n");
scanf("%s",seller[i].name);
printf("请输入销售员工号:\n");
scanf("%s",seller[i].num);
printf("请分别输入产品一和产品二的销售额:\n");
scanf("%d%d",&seller[i].sailerl ,&seller[i].sailerm );
}
system("cls");
}
void show()
{
struct seller*p;
system("cls");
printf("姓名 工号 产品一销售额 产品二销售额:\n");
for(p=seller;p<seller+n;p++)
printf("%-8s %2s %6d %12d\n",p->name ,p->num ,p->sailerl , p->sailerm );
printf("\n\n");
}
void save()
{
FILE*fp;
int i;
fp=fopen("seller.txt","w");
for(i=0;i<n;i++)
fwrite(&seller[i],sizeof(struct seller),1,fp);
system("cls");
printf("\n\n");
printf("保存成功!\n");
printf("\n\n");
}
void sort()
{
struct seller temp;
int i,j;
for(i=0;i<n;i++)
seller[i].sum =seller[i].sailerl +seller[i].sailerm ;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if(seller[i].sum <seller[i+1].sum)
{
temp=seller[i];
seller[i]=seller[i+1];
seller[i+1]=temp;
}
system("cls");
printf("姓名 工号 产品一销售额 产品二销售额 产品总销售额:\n");
for(i=0;i<n;i++)
printf("\n%s\t%s\t%d\t%8d\t%8d\n",seller[i].name,seller[i].num ,seller[i].sailerl ,seller[i].sailerm ,seller[i].sum );
}
void statistics_sailer()
{
int i,sum1,sum2,sum;
sum1=0;sum2=0,sum=0;
for(i=0;i<n;i++)
{
sum1+=seller[i].sailerl ;
sum2+=seller[i].sailerm ;
sum=sum1+sum2;
}
system("cls");
printf("产品一的销售额:%d\n",sum1);
printf("产品二的销售额:%d\n",sum2);
printf("产品总的销售额:%d\n",sum);
}
void insert()//插入数据函数
{
char ch;
do
{
printf("\n\t\t输入新插入销售员信息\n");
printf("\n输入销售员姓名:");
fflush(stdin);
gets(seller[n].name );
printf("\n输入销售员工号:");
scanf("%S",seller[n].num );
fflush(stdin);
printf("\n输入产品一销售额:");
fflush(stdin);
scanf("%d",&seller[n].sailerl);
printf("\n输入产品二销售额:");
fflush(stdin);
scanf("%d",&seller[n].sailerm );
printf("\n\n");
n=n+1;
sort();
printf("是否继续输入?(Y/N)");
ch=getch();
system("cls");
}
while(ch!='n');
}
void del()//删除数据函数
{
char seller_name[20];
int i,j;
printf("输入要删除销售员的姓名:");
fflush(stdin);
scanf("%s",seller_name);
for(i=0;i<n;i++)
{
if(strcmp(seller_name,seller[i].name )==0)
{
for(j=i;j<n;j++)
seller[i]=seller[i+1];
n=n-1;
}
break;
}
save();
system("cls");
}