程序代码:
[color=#008000]//下面是我上周写的一个销售管理系统,感觉不太好,有点烂,求大虾指教。。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #define MAX 1000 #define PERSON 4+1 typedef struct Time{ int year; int month; int day; }DATA; struct Product{ int number; //商品代号 char name[20]; //商品名称 char Tran[MAX]; //交易类型 S为售出,J为进货 int weight; //商品重量 int total; //商品库存量 int sales; //一种商品的销售量 int saler[PERSON]; //销售员售出一种产品总和 DATA time[MAX]; //交易时间 int single[MAX]; //单笔交易的数量 int Trader[MAX]; //交易人员代号 }product[MAX]; struct Product temp[100]; //排序时的中间变量 int N=6; int total_sale[PERSON][PERSON]={{0},{0,1,2,3,4}}; //每位销售员售出全部商品的总和 int pro_number,sal_number,sale; //依次为产品代号,销售员代号,销售量 int COUNT=0; //统计总共交易次数 FILE *fp; void Inputsales(); //输入信息 void Input_Purchase(); void calu_data(); //销售员销量统计 void output_data(); //输出统计报表 void search_data(); //查询信息 void sort_data(int n); //产品排序 void menu(); //显示菜单 void Init(); //初始化结构体数组 void save_data(); //保存文件 void read_data(); //读取文件信息 void display(); //输出所有交易信息 void modify(); //修改信息 void search_stock(); //查询库存信息 void main() //主函数 { Init(); read_data(); menu(); save_data(); printf("谢谢使用!\n"); system("pause"); } void Inputsales() { char ch; sale=0; system("CLS"); //清屏 do { while(1) { printf("输入销售员代号(1-4):"); scanf("%d",&sal_number);getchar(); if(sal_number>0&&sal_number<5) break; printf("\a输入有误,请重新输入\n"); } do { while(1) { printf("产品代号:"); scanf("%d",&pro_number); getchar(); if(pro_number>0&&pro_number<N) break; printf("\a输入有误,请重新输入\n"); } product[pro_number].Tran[COUNT]='S'; //赋值为售出 product[pro_number].Trader[COUNT]=sal_number; printf("销售数量:"); while(scanf("%d",&sale)!=1||sale<0) { printf("\a输入有误,请重新输入\n"); printf("销售数量:"); } product[pro_number].single[COUNT]=sale; printf("销售年份:"); scanf("%d",&product[pro_number].time[COUNT].year); while(1) { printf("销售月份:"); scanf("%d",&product[pro_number].time[COUNT].month); if((product[pro_number].time[COUNT].month>0)&&product[pro_number].time[COUNT].month<13) break; printf("\a输入有误\n"); } while(1) { printf("销售日:"); scanf("%d",&product[pro_number].time[COUNT].day); if(product[pro_number].time[COUNT].day>0&&product[pro_number].time[COUNT].day<32) break; printf("\a输入有误\n"); } product[pro_number].total=product[pro_number].total-sale; //库存量减去销售的数量 COUNT++; getchar(); total_sale[0][sal_number]+=sale; //计算销售员售出产品总和 product[pro_number].saler[sal_number]=total_sale[0][sal_number]; product[pro_number].sales+=total_sale[0][sal_number]; //计算售出单种产品数量 printf("是否继续输入该销量员销量(Y/N):"); scanf("%c",&ch); getchar(); }while(ch!='n'&&ch!='N'); system("CLS"); printf("是否继续输入其他销售员销量(Y/N):"); scanf("%c",&ch); getchar(); }while(ch!='N'&&ch!='n'); } void calu_data() //在第一次输入时能排序,关闭后再读取不能排序 { int i,j,index,temp,k; for(i=1;i<PERSON;i++) { index=i; for(j=i+1;j<PERSON;j++) { if(total_sale[0][index]<total_sale[0][j]) index=j; for(k=0;k<2;k++) { temp=total_sale[k][index]; total_sale[k][index]=total_sale[k][i]; total_sale[k][i]=temp; } } } printf("每位销售员售出量从高到低为:"); for(i=1;i<PERSON;i++) printf("%4d",total_sale[1][i]); putchar('\n'); } void output_data() { int sum[5]={0},i,j; printf("\t销售统计报表\n"); printf("\t\t\t产品代号\t\t\t销售之和\n"); printf("销售员代号"); for(i=1;i<N;i++) printf("\t%d",i); putchar('\n'); for(i=1;i<PERSON;i++) { printf("%5d ",i); for(j=1;j<N;j++) { printf(" %5d",product[j].saler[i]); sum[i]+=product[j].saler[i]; } printf("\t%3d\n",sum[i]); sum[0]+=sum[i]; } printf("每种产品之和 "); for(i=1;i<N;i++) printf("%4d ",product[i].sales); printf("\t总和%4d\n",sum[0]); } void sort_data(int n) { int i,j,index; //由于结构体temp在函数内不能定义太大,故在前面定义全局变量, for(i=1;i<n;i++) { temp[i].sales=product[i].sales; } for(i=1;i<n;i++) temp[i].number=i; for(i=1;i<n;i++) //使用选择法排序 { index=i; for(j=i+1;j<N;j++) if(temp[index].sales<temp[j].sales) index=j; temp[0].sales=temp[index].sales; temp[index].sales=temp[i].sales; temp[i].sales=temp[0].sales; temp[0].number=temp[index].number; temp[index].number=temp[i].number; temp[i].number=temp[0].number; } printf("产品从高到低为:\n"); printf("产品代号:"); for(i=1;i<n;i++) printf("%5d",temp[i].number); printf("\n产品销量:"); for(i=1;i<n;i++) printf("%5d",temp[i].sales); } void menu() //显示菜单 { int choice; while(1) { printf("===========================================================\n"); printf("\t\t1.输入销售信息\n"); printf("\t\t2.统计销售信息\n"); printf("\t\t3.产品销量排序\n"); printf("\t\t4.输入进货信息\n"); printf("\t\t5.按日期查询信息\n"); printf("\t\t6.修改信息\n"); printf("\t\t7.查询商品库存信息\n"); printf("\t\t8.输出所有交易信息\n"); printf("\t\t9.输出统计报表\n"); printf("\t\t0.退出系统\n"); printf("============================================================\n"); printf("\n\t\t请选择:"); while(scanf("%d",&choice)!=1||choice<0||choice>9) { getchar(); printf("输入有误,请重新输入\n"); printf("请选择(0-9):"); } switch(choice) { case 1:Inputsales();break; case 2:calu_data();break; case 3:sort_data(N);break; case 9:output_data();break; case 5:search_data();break; case 4:Input_Purchase();break; case 8:display();break; case 6:modify();break; case 7:search_stock();break; } if(choice==0) { break; } system("pause"); //系统调用,暂停 system("CLS"); } } void Init() //对结构体变量初始化 { int i,j; for(i=1;i<N;i++) { memset(product[i].single,0,MAX); memset(product[i].Trader,0,MAX); product[i].sales=0; product[i].number=i; product[i].total=0; for(j=0;j<MAX;j++) { product[i].time[j].year=2000; product[i].time[j].month=1; product[i].time[j].day=1; } } } void search_data() { int y,m,d,i,j; scanf("请输入要查找的日期"); printf("销售年份:"); scanf("%d",&y); while(1) //控制输入月份的有效性,下同 { printf("销售月份:"); scanf("%d",&m); if(m>0&&m<13) break; printf("\a输入有误\n"); } while(1) { printf("销售日:"); scanf("%d",&d); if(d>0&&d<32) break; printf("\a输入有误\n"); } printf("\t交易日期--------交易类型--------交易数量--------交易人员\n"); for(i=1;i<N;i++) for(j=0;j<COUNT;j++) if(y==product[i].time[j].year&&m==product[i].time[j].month&&d==product[i].time[j].day) { printf("\t%d-%d-%d",y,m,d); if(product[i].Tran[j]=='S') printf("\t售出"); else printf("\t进货"); printf("\t\t%d\t\t%3d\n",product[i].single[j],product[i].Trader[j]); } } void Input_Purchase() { int n,amount,Trader1; //n为购买产品的代号,amount为购买的数量 int y,m,d; //购买的日期 char c,ch1; //ch1确定信息是为Y 否为N, c为是否继续输入 while(1) { printf("输入操作人代号:"); scanf("%d",&Trader1); getchar(); printf("输入购入产品的代号:"); scanf("%d",&n); printf("购入的数量:"); scanf("%d",&amount); printf("购入的年月日(如2008-1-1):"); scanf("%d%*c%d%%*c%d",&y,&m,&d); getchar(); getchar(); printf("是否录入(Y/N):"); scanf("%c",&ch1); getchar(); if(ch1=='y'||ch1=='Y') { product[pro_number].Tran[COUNT]='J'; product[n].total+=amount; product[n].Trader[COUNT]=Trader1; product[n].time[COUNT].day=d; product[n].time[COUNT].month=m; product[n].time[COUNT].year=y; COUNT++; } getchar(); printf("是否继续输入:(Y/N)"); scanf("%c",&c); getchar(); if(c=='N'||c=='n') break; } } void save_data() { int i; if((fp=fopen("sale_data","wb"))==NULL) { printf("打开文件失败\n"); return; } for(i=0;i<N;i++) { if(fwrite(&product[i],sizeof(struct Product),1,fp)==1) continue; else break; } if(i>0) { printf("保存成功\n"); return; } system("CLS"); fclose(fp); } void read_data() { int i=0; if((fp=fopen("sale_data","ab+"))==NULL) { printf("初始化文件!\n"); return; } else { while(!feof(fp)) { if(fread(&product[i],sizeof(struct Product),1,fp)==1) i++; } } fclose(fp); } void display() { int i,j; printf("\t=========================所有交易=======================\n"); printf("\t交易日期--------交易类型--------交易数量--------交易人员\n"); for(i=1;i<N;i++) for(j=0;j<COUNT;j++) { if(product[i].single[j]!=0) { printf("\t%d-%d-%d",product[i].time[j].year,product[i].time[j].month,product[i].time[j].day); if(product[i].Tran[j]=='S') printf("\t售出"); else printf("\t进货"); printf("\t\t%d\t\t%3d\n",product[i].single[j],product[i].Trader[j]); } } } void modify() //修改信息 { int i,tp; //tp为中间变量 char ch,ch1; //ch为确认信息 while(1) { printf("输入要修改商品的代号:"); scanf("%d",&i); if(i>N) printf("该商品不存在!\n"); else { printf("产品总量为:%d\n",product[i].total); printf("输入要修改的数量:"); scanf("%d",&tp); printf("是否修改(Y/N):\n"); getchar(); scanf("%c",&ch); getchar(); if(ch=='Y'||ch=='y') { product[i].total=tp; printf("修改成功\n"); } } printf("是否继续修改(Y/N):"); scanf("%c",&ch1); getchar(); if(ch=='N'||ch=='n') break; } } void search_stock() { int number; //要查询产品的代号 printf("输入要查询库存产品的代号:"); scanf("%d",&number); getchar(); if(number>N) printf("无此商品!"); else printf("剩余库存:%d\n",product[number].total); }
[/color]