实现功能
看代码的首部或自己运行。
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
//时间结构体
typedef struct date
{
short year,month,day;
}SJ;
//配件信息结构体
typedef struct pj
{
char bianhao[10];
char peijianm[30];
char xinghao[20];
char pinpai[20];
float jinjia;
int shul;
}PJ;
//销售结构体
typedef struct xx
{
char bianhao[12];
char peijianm[31];
char xinghao[21];
char pinpai[21];
char kehuming[30];//客户名
char khlxdh[20];//客户联系电话
float jinjia,xsjeph;//售价
int shul;
SJ rq;
}XSQK;
typedef struct kh
{
char khm[20],mima[20];
}KH;
#define SJLEN sizeof(SJ)
#define PJLEN sizeof(PJ)
#define XSQKLEN sizeof(XSQK)
#define KHLEN sizeof(KH)
#define PJS 1000
#define XS 200
PJ sl[PJS]={0};//配件数组
XSQK mc[XS]={0};//销售数组
//KH khx[XS]={0};//客户信息
//KH zhuce(KH k);//注册函数
int pjxx(void);//首次配件信息查询函数
int xsxx(void);//销售信息函数
//-----------------------
//配件信息管理模块
int denglu();//登录
void guanli(int *pj,int *sn);//配件信息管理
int originalpj(void);//配件信息初始化函数
void intonepj(int i);//输入一个配件信息函数
void modifypj(int pj);//配件信息修改
int addpj(int pj);//增加配件函数
int delp(int ppj);//删除配件信息函数
void outputonepj(int k);//输出一个配件的全部信息
void outallpj(int pj);//输出所有配件信息
void outputbrief(int pj);//简要输出配件信息
void saveallpj(int i);//保存所有配件信息函数
void saveonepj(int k);//保存一个配件信息到文件
//-----------------------
//查询模块
void searchpjm(int pj);//按配件名称查询函数
void searchxh(int pj); //按型号查询函数
void searchkhm(int pj);//按客户名查询函数
void searchmenu(int pj,int xs);//寻找菜单
//-----------------------
// 配件销售模块
void outputonepjxs(int k);//输出一个配件销售信息
void intonepjxs(int k);//输入一个配件销售情况
void saveallpjxs(int k);//保存所有配件销售函数
int originalpjxs(void);//配件销售信息初始化
void intonepjxs(int i);//输入一个配件销售信息函数
void saveallpjxs(int i);//保存所有配件销售信息函数
void outallpjxs(int xs);//输出所有销售信息函数
void outputonepjxs(int k);//输出一个销售信息函数
int addpjxs(int xs);//增加配件销售信息函数
//-----------------------
//统计模块
void pjxstj(int *xs,int pj);//配件销售统计函数
void searchtime(int xs);//销售信息统计函数
void searchqh(int xs);//配件缺货情况函数
//主函数
int pj,xs;//全局变量
int main()
{
int xuanze;
KH k,q;
pj=pjxx();//printf("%d ",pj);
if(pj==0)printf("配件信息为空!\n\n");
xs=xsxx();//printf("%d ",xs);
if(xs==0)printf("销售信息为空!\n\n");
while(1)
{
printf("\n\t--------------------------------------------------------------------------------------------\n");
printf("\t * *\n");
printf("\t * 计算机配件销售管理系统 *\n");
printf("\t * 1、登录 *\n");
printf("\t * 0、退出系统 *\n");
printf("\t * *\n");
printf("\t * *\n\n");
printf("\n\t--------------------------------------------------------------------------------------------\n");
printf("\t\t 请选择服务:");
scanf("%d",&xuanze);getchar();
system("cls");
switch(xuanze)
{
case 1:guanli(&pj,&xs); break;//q=zhuce(k);
//case 1:denglu();break;
case 0: printf("\n\t\t\t 欢迎下次使用!再见\n");exit(1);
default: printf("\n\t\t\t按键错误,请重新选择!\n");
}
}
}
//首次配件信息查询函数
int pjxx(void)
{
FILE *fp;
int pn=0;//配件数
fp=fopen("pjxx.txt","r+");
if(fp==NULL)
{
printf("文件不存在!\n");return(pn);
}
fread(&sl[pn],PJLEN,1,fp);
while(!feof(fp))
{pn++;
fread(&sl[pn],PJLEN,1,fp);
}
fclose(fp);return(pn);
}
//销售信息函数
int xsxx(void)
{
FILE *fp;
int xs=0;//配件数
fp=fopen("xsxx.txt","r+");
if(fp==NULL)
{
printf("文件不存在!\n");return(xs);
}
fread(&mc[xs],XSQKLEN,1,fp);
while(!feof(fp))
{xs++;
fread(&mc[xs],XSQKLEN,1,fp);
}
fclose(fp);return(xs);
}
//配件信息管理
void guanli(int *ppj,int *psn)
{
int a,b;
printf("\n 欢迎使用\n");
while(1)
{
printf("\t (温馨提示:若初次使用,请先进行配件信息和配件销售信息初始化。)\n\n");
printf("\t--------------------------------------------------------------------------------------------------\n");
printf(" 0、返回主菜单 1、配件信息初始化\n");
printf(" 2、修改配件信息 3、增加配件信息\n");
printf(" 4、删除配件信息 5、输出配件信息\n");
printf(" 6、配件信息和销售查询 7、配件销售初始化及情况统计\n");
printf("\t--------------------------------------------------------------------------------------------------\n");
printf("\n请选择您需要的服务(0-9):");
scanf("%d",&a);
getchar();
system("cls");
switch(a)
{case 0:return;
case 1:*ppj=originalpj();break;
case 2:modifypj(*ppj);break;
case 3:*ppj=addpj(*ppj);break;
case 4:*ppj=delp(*ppj);break;
case 5:printf("输出详细信息请按‘1’,简要信息请按‘2’:");
scanf("%d",&b);getchar();
if(b==1)outallpj(*ppj);
if(b==2)outputbrief(*ppj);
break;
case 6:searchmenu(*ppj,*psn);break;
case 7:pjxstj(psn,*ppj);break;
default :printf("输入错误,请重新选择服务:\n");
}
}
}
//配件信息初始化函数
int originalpj(void)
{
int i;
char c='y';
for(i=0;c=='y'||c=='Y';i++)
{
printf("请输入配件%d的信息:\n",i+1);
intonepj(i);
printf("还要继续添加配件信息吗?\n继续请按'y/Y',取消请按'n/N':");
c=getchar();getchar();
}
saveallpj(i);
system("cls");
return(i);
}
//输入一个配件信息函数
void intonepj(int i)
{
printf("编号(ID):");gets(sl[i].bianhao);
printf("配件名称:");gets(sl[i].peijianm);
printf("型号:");gets(sl[i].xinghao);
printf("品牌(厂商):");gets(sl[i].pinpai);
printf("进价(单位:元):");scanf("%f",&sl[i].jinjia);getchar();
printf("数量(单位:个):");scanf("%d",&sl[i].shul);getchar();
}
//增加配件销售信息函数
int addpjxs(int xs)
{
char c='y';
FILE *fb;
fb=fopen("xsxx.txt","a");
if(fb==NULL)
{printf("文件为空!\n");exit(1);}
while(c=='y'||c=='Y')
{
printf("请输入新的配件销售信息:\n");
intonepjxs(xs);
fwrite(&mc[xs],XSQKLEN,1,fb);
xs++;
printf("\n还要继续添加配件销售信息吗?(y/n)\n");
c=getchar();getchar();
}
printf("\n按任意键返回主菜单!");
getch();
fclose(fb);
return(xs);
}
//保存所有配件信息函数
void saveallpj(int i)
{
FILE *fp;
fp=fopen("pjxx.txt","w");
if(fp==NULL)
{
printf("文件不存在!\n");exit(1);
}
fwrite(sl,PJLEN,i,fp);
fclose(fp);
}
//配件信息修改
void modifypj(int pj)
{
int xuanze,k=-1,i;
char bh[20],c1='y',c2;
if(pj==0)
{printf(" 配件信息为空!,无法进行修改操作!\n\n");return;}
while(c1=='y'||c1=='Y')
{c2='y';
printf("请输入配件编号:");gets(bh);
for(i=0;i<pj;i++)
if(strcmp(sl[i].bianhao,bh)==0)
{k=i;break;}
if(k<0)
printf("\n输入编号错误,请重新输入。");
else
{
printf("配件信息如下:\n");outputonepj(k);
while(c2=='y'||c2=='Y')
{
printf("\n\t-----------------------------------------------------------------------------------------\n");
printf("\t 1、编号 2、配件名称\n");
printf("\t 3、型号 4、品牌(厂商)\n");
printf("\t 5、进价 6、数量 \n");
printf("\n\t-----------------------------------------------------------------------------------------\n");
printf("请选择要修改的数据项(1-6):");scanf("%d",&xuanze);getchar();
switch(xuanze)
{
case 1:printf("编号(ID):");gets(sl[k].bianhao);break;
case 2:printf("配件名称:");gets(sl[k].peijianm);break;
case 3:printf("型号:");gets(sl[k].xinghao);break;
case 4:printf("品牌(厂商):");gets(sl[k].pinpai);break;
case 5:printf("进价(单位:元):");scanf("%f",&sl[k].jinjia);getchar();break;
case 6:printf("数量(单位:个):");scanf("%d",&sl[k].shul);getchar();break;
default:printf("输入错误,请重新输入!\n");
}
printf("是否还要继续修改该配件的信息吗?(y/n)");
c2=getchar();getchar();
}
}
saveonepj(k);
printf("是否还要继续修改其他配件的信息吗?(y/n)");
c1=getchar();getchar();
}
printf("\n按任意键返回主菜单!\n");
getch();
system("cls");
}
//保存一个配件信息到文件
void saveonepj(int k)
{
FILE *fb;
fb=fopen("pjxx.txt","w");
if(fb==NULL)
{printf("文件为空!\n");exit(1);}
fseek(fb,PJLEN*k,0);
fwrite(&sl[k],PJLEN,1,fb);
fclose(fb);
}
//增加配件函数
int addpj(int pj)
{
char c='y';
FILE *fp;
fp=fopen("pjxx.txt","a");
if(fp==NULL)
{printf("文件为空!\n");exit(1);}
while(c=='y'||c=='Y')
{
printf("请输入新的配件信息:\n");
intonepj(pj);
fwrite(&sl[pj],PJLEN,1,fp);
pj++;
printf("\n还要继续添加配件信息吗?(y/n)\n");
c=getchar();getchar();
}
printf("\n按任意键返回主菜单!");
getch();
fclose(fp);
return(pj);
}
//删除配件信息函数
int delp(int pj)
{
int a,i,k=-1;
char bh[20],c1='y',c2;
if(pj==0)
{printf(" 配件信息为空,无法删除!\n\n");return(pj);}
while(c1=='y'||c1=='Y')
{
c2='n';
printf("\n请输入要删除配件的编号:");
gets(bh);
for(i=0;i<pj;i++)
{if(strcmp(sl[i].bianhao,bh)==0)
{k=i;break;}
}
if(k<0)
{printf("\n输入编号错误,按1重新输入 按2退出!\n");
scanf("%d",&a);getchar();
switch(a)
{case 1:continue;break;
case 2:return(pj);
default :printf("输入错误!\n\n");
}
}
else
{printf("该配件的信息如下:\n");
outputonepj(k);
printf("\n确定要删除此配件信息吗?(y/n):");
c2=getchar();getchar();
if(c2=='y')
{
for(i=k;i<pj;i++)
{
sl[i]=sl[i+1];
pj--;
printf("\n已删除!\n");
}
}
else printf("\n已取消!\n");
printf("\n还要删除其他配件吗?(y/n):");
c1=getchar();getchar();
}
}//while end
saveallpj(pj);
printf("\n按任意键返回主菜单~~\n");
getch();
system("cls");
return(pj);
}
//输出一个配件的全部信息
void outputonepj(int k)
{
printf("\n编号:");puts(sl[k].bianhao);
printf("配件名称:");puts(sl[k].peijianm);
printf("型号:");puts(sl[k].xinghao);
printf("品牌(厂商):");puts(sl[k].pinpai);
printf("进价(单位:元):");printf("%f\n",sl[k].jinjia);
printf("数量(单位:个):");printf("%d\n",sl[k].shul);
}
//输出所有配件信息
void outallpj(int pj)
{
int i;
if(pj==0)
{printf("配件信息为空!\n\n");return;}
printf("\n全部配件信息:\n");
for(i=0;i<pj;i++)
{
outputonepj(i);
}
printf("\n已输出全部配件信息\n\n请按任意键返回\n");
getch();
}
//简要输出配件信息
void outputbrief(int pj)
{
int i;
printf("\n全部配件的简要信息:\n");
printf("编 号 配 件 名 称 数 量\n");
for(i=0;i<pj;i++)
printf("%5s %-5s %5d\n",sl[i].bianhao,sl[i].peijianm,sl[i].shul);
printf("\n按任意键继续\n");getch();
}
//信息查询
void searchmenu(int pj,int xs)
{int xuanze;
while(1)
{
printf("\n 查询模块\n");
printf("\t-----------------------------------------------------------------------------------------------\n");
printf(" 1、按配件名称查询 2、按型号查询\n");
printf(" 3、按客户名称查询销售信息 0、退出查询模块\n");
printf("\t-----------------------------------------------------------------------------------------------\n");
printf("\n请选择服务:");
scanf("%d",&xuanze);getchar();
system("cls");
switch(xuanze)
{
case 0:return;
case 1:searchpjm(pj);break;
case 2:searchxh(pj);break;
case 3:searchkhm(xs);break;
default:printf("\n输入错误,请重新输入!\n");
}
}
}
void searchpjm(int pj)
{
int i,j,k;
char pjm[20],c='y';
while(c=='y'||c=='Y')
{
k=-1;
printf("\n请输入配件名称:");
gets(pjm);
for(i=0,j=1;i<pj;i++)
if(strcmp(sl[i].peijianm,pjm)==0)
{
k=i;
printf("\n配件%d信息如下:\n",j++);
outputonepj(k);
//printf("\n按任意键继续\n");getch();
}
if(k==-1)
{
printf("\n模糊查询结果如下:\n");
for(i=0;i<pj;i++)
if(strstr(sl[i].peijianm,pjm)!=NULL)
{k=i;
printf("\n配件信息如下:\n");
outputonepj(k);
printf("\n按任意键继续\n");getch();
}
if(j==1)printf("没有该配件信息!\n");
}
printf("\n还要继续查询吗?(y/n):");c=getchar();getchar();
}
printf("\n按任意键继续\n");getch();
}
void searchxh(int pj)
{
int i,j,k=-1;
char xh[20],c='y';
while(c=='y'||c=='Y')
{
printf("请输入配件型号:");
gets(xh);
for(i=0;i<pj;i++)
if(strcmp(sl[i].xinghao,xh)==0)
{k=i;
printf("\n配件%d信息如下:\n",j++);
outputonepj(k);
printf("\n按任意键继续\n");getch();
}
if(k==-1)
{
printf("\n模糊查询结果如下:\n");
for(i=0,j=1;i<pj;i++)
if(strstr(sl[i].xinghao,xh)!=NULL)
{k=i;
printf("\n配件%d信息如下:\n",j++);
outputonepj(k);
printf("\n按任意键继续\n");getch();
}
if(j==1)printf("没有该配件信息!\n");
}
printf("\n还要继续查询吗?(y/n):");
c=getchar();getchar();
}
printf("\n按任意键继续\n");getch();
}
void searchkhm(int xs)
{
int i,j,k;
char xh[20];
char khm[20],c='y';
while(c=='y'||c=='Y')
{k=-1;
printf("\n请输入客户名:");
gets(xh);
for(i=0;i<xs;i++)
{if(strcmp(mc[i].kehuming,xh)==0)
{k=i;
printf("\n该客户销售信息如下:\n",j++);
outputonepjxs(k);
}
else if(k=-1)printf("\n没有该客户的销售信息\n");
}
printf("还要查找其他客户信息吗?(y/n)");c=getchar();getchar();
}
printf("\n按任意键继续\n");getch();
}
int originalpjxs(void)
{
int i=0;
char d='y';
while(d=='y'||d=='Y')
{
printf("请输入配件%d的销售信息:\n",i+1);
intonepjxs(i);
i++;
printf("还要继续添加配件信息吗?\n继续请按'y/Y',取消请按'n/N':");
d=getchar();getchar();
printf("\n\n");
}
saveallpjxs(i);return(i);
}
//输入一个配件销售信息函数
void intonepjxs(int i)
{
printf("编号(ID):");gets(mc[i].bianhao);
printf("配件名称:");gets(mc[i].peijianm);
printf("型号:");gets(mc[i].xinghao);
printf("品牌(厂商):");gets(mc[i].pinpai);
printf("客户名:");gets(mc[i].kehuming);
printf("客户联系电话:");gets(mc[i].khlxdh);
printf("售价(单位:元):");scanf("%f",&mc[i].jinjia);getchar();
printf("数量(单位:个):");scanf("%d",&mc[i].shul);getchar();
printf("销售日期(年-月-日(数字间用空格隔开)):");
scanf("%d %d %d",&mc[i].rq.year,&mc[i].rq.month,&mc[i].rq.day);getchar();
mc[i].xsjeph=mc[i].shul*mc[i].jinjia;
}
//保存所有配件销售信息函数
void saveallpjxs(int i)
{
FILE *fp;
fp=fopen("xsxx.txt","w");
if(fp==NULL)
{
printf("文件不存在!\n");exit(1);
}
fwrite(mc,XSQKLEN,i,fp);
fclose(fp);
}
//输出所有销售信息函数
void outallpjxs(int xs)
{
int i;
printf("\n全部配件销售信息:\n");
for(i=0;i<xs;i++)
{
outputonepjxs(i);
printf("\n按任意键继续\n");getch();
}
printf("\n已输出全部配件销售信息\n\n请按任意键返回\n");
getch();
}
//输出一个销售信息函数
void outputonepjxs(int k)
{
printf("编 号: %s 配 件 名 称: %s 型 号: %s 品 牌(厂商): %s 售 价(单 位:元): %.2f \t数 量(单位:个): %d\n\n\t",
mc[k].bianhao,mc[k].peijianm,mc[k].xinghao,mc[k].pinpai,mc[k].jinjia,mc[k].shul);
printf(" 销 售 日 期(年-月-日): %4d-%2d-%2d 客 户 名: %s 客 户 联 系 电 话: %s 销售 金 额: %.2f\n"
,mc[k].rq.year,mc[k].rq.month,mc[k].rq.day,mc[k].kehuming,mc[k].khlxdh,mc[k].xsjeph);
}
//增加配件销售信息函数
int addpjxsxx(int xs)
{
char c='y';
FILE *fp;
fp=fopen("xsxx.txt","a");
if(fp==NULL)
{printf("文件为空!\n");exit(1);}
while(c=='y'||c=='Y')
{
printf("请输入新的配件销售信息:\n");
intonepjxs(xs);
fwrite(&mc[xs],XSQKLEN,1,fp);
xs++;
printf("\n还要继续添加配件销售信息吗?(y/n)\n");
c=getchar();getchar();
}
printf("\n按任意键返回主菜单!");
getch();
fclose(fp);
return(xs);
}
//配件销售统计函数
void pjxstj(int *xs,int pj)
{int a;
while(1)
{
printf("\n 温馨提示:若初次使用,请先进行销售信息初始化\n\n");
printf("\t---------------------------------------------------------------------------------------------\n");
printf(" \t * 0、返回查询主菜单 1、销售信息初始化*\n");
printf(" \t * 2、添加销售信息 3、销售信息统计 *\n");
printf(" \t * 4、配件缺货情况 *\n");
printf("\t---------------------------------------------------------------------------------------------\n");
printf("\n请选择功能:");
scanf("%d%*c",&a);
system("cls");
switch(a)
{
case 0:return;
case 1: *xs=originalpjxs();break;
case 2: *xs=addpjxs(*xs);break;
case 3: searchtime(*xs);break;
case 4: searchqh(pj);break;
default :printf("按键错误,请重新输入!\n");
}
}
}
//销售信息统计函数
void searchtime(int xs)
{int i;
int a,j,k,t,m,n,jsq;//计算器?
int year,month,day;
int zsl1,zsl2;
float y;
XSQK q,gy[100];
char c='y';
float xsjem,xsjed;
while(c=='y'||c=='Y')
{xsjem=xsjed=zsl1=zsl2=0;
printf("-----------------------------------温馨提示----------------------------------------------------\n");
printf("\n1、输入日期(年.月.日),可统计该天配件销售情况及销售金额。\n");
printf("2、输入日期(年.月),可统计该月配件销售情况及销售金额,并获取该月配件销售排行榜!\n");
printf("请选择你想查询的功能:");
scanf("%d",&a);getchar();
k=-1;
month=day=0;//该月销售情况
if(a==2)
{
printf("\n请输入年.月:");
scanf("%d%d%*c",&year,&month);
printf("\n该月配件销售情况如下:\n");
for(i=0,j=0;i<xs;i++)
{
if(mc[i].rq.year==year)
{
k=i;
if(month!=0&&mc[i].rq.month==month)
{ gy[j]=mc[i];
j++;
outputonepjxs(i);
xsjem+=mc[i].xsjeph;
zsl1+=mc[i].shul;
printf("\n\n");
}
}
}
printf("该月销售总金额为:%.2f 总数量为:%d\n\n\n",xsjem,zsl1);
for(m=0;m<j;m++)
for(n=0;n<j-1-m;n++)
if(gy[n].xsjeph<gy[n+1].xsjeph)
{
q=gy[n];
gy[n]=gy[n+1];
gy[n+1]=q;
}
/*if(j<=10)j=j;
else if(j>10)j=10;
jsq=1;*/
printf("\n该月的销售排行榜如下:\n\n");
for(i=0;i<j;i++)
{
//if(jsq<=10)
//{
if(gy[i].rq.year==year)
k=i;
if(month!=0)
if(gy[i].rq.month==month)
{
//jsq++;//计数器 到10时这个循环停止
printf("排 名: %d 编 号: %s 配 件 名 称: %s 型 号: %s 品 牌(厂商): %s 售 价(单 位:元): %.2f \t数 量(单位:个)%d\n\n\t",
i+1,gy[k].bianhao,gy[k].peijianm,gy[k].xinghao,gy[k].pinpai,gy[k].jinjia,gy[k].shul);
printf(" 销 售 日 期(年-月-日): %4d-%2d-%2d 客 户 名: %s 客 户 联 系 电 话: %s 销 售 金 额:%.2f\n\n\n"
,gy[k].rq.year,gy[k].rq.month,gy[k].rq.day,gy[k].kehuming,gy[k].khlxdh,gy[k].xsjeph);
}
//}
//else if(jsq>10)break;
if(j>10)break;
}//for end
if(k==-1)printf("\n该月竟然没有销售记录!\n");
}//if a==2 end
//该日销售情况
if(a==1)
{
printf("\n请输入年.月.日:");
scanf("%d%d%d",&year,&month,&day);getchar();
printf("\n该日配件销售情况如下:\n\n");
for(i=0;i<xs;i++)//i<j
if(mc[i].rq.year==year)
{
k=i;
if(month!=0)
if(mc[i].rq.month==month)
if(day!=0)
if(mc[i].rq.day==day)
{
outputonepjxs(i);
xsjed+=mc[i].xsjeph;
zsl2+=mc[i].shul;
}
}
printf("该月销售总金额为:%.2f 总数量为:%d\n\n",xsjed,zsl2);
if(k==-1)printf("\n该日竟然没有销售记录!\n");
}//if a==1 end
printf("\n还要继续查询销售记录吗?(y/n)\n");
c=getchar();getchar();
}//while end
printf("\n按任意键继续\n");getch();
system("cls");
}//FILE *fp;
//配件缺货情况函数
void searchqh(int pj)
{
int a,i,f;
char c='y';
while(c=='y'||c=='Y')
{f=0;
printf("\n请输入缺货阈值:");
scanf("%d",&a);getchar();
printf("\n缺货配件如下:\n");
for(i=0;i<pj;i++)
{if(sl[i].shul<=a)
{f++;
outputonepj(i);
}
}
if(f==0)printf("\n货源充足!\n");
else printf("\n缺货配件已输出完毕!\n");
printf("\n是否查看其他阈值的缺货情况?(y/n)\n");
c=getchar();getchar();
}//while end
printf("\n请按任意键继续\n");getch();
system("cls");
}