C语言编程销售管理系统

#include
#include
#include
#include
#define NULL 0
#define LEN sizeof(struct records)

struct sellers_list /*销售员信息结构体*/
{
int snum;
char sname[20];
char sex[10];
}sellers[4];

struct products_list /*产品信息结构体*/
{
int pnum;
char pname[20];
float price;
}products[5];

struct records /*销售记录结构体*/
{
int snum;
int pnum;
int amount;
char time[10];
struct recoreds *next;
};
struct records *head=NULL;

struct date /*日期结构体*/
{
int year;
int month;
int day;
}d[100];
int tab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int n=0,choice;
char c[100];


void menu_select();
void create_sellers();
void create_products();
void create_records(int n);
void display();
void insert(int m);
void del();
void find();
void report(struct records *head);


int main()
{
printf("\n\n\n\n\n\n\t\t\t欢迎您使用该销售管理平台!\n");
printf("\n\n\n\t\t\t\t按任意键进入销售管理菜单、、、\n");
getch();
system("cls");
menu_select();
}
void menu_select() /*主菜单*/
{
int x;
printf("****************销售管理菜单********************\n");
printf("* 1.输入销售员信息 *\n");
printf("* 2.输入产品的信息 *\n");
printf("* 3.输入销售的记录 *\n");
printf("* 4.浏览所有的信息 *\n");
printf("* 5.插入销售的记录 *\n");
printf("* 6.删除销售的记录 *\n");
printf("* 7.查询销售的记录 *\n");
printf("* 8.导出销售的报表 *\n");
printf("* 9.退出 *\n");
printf("************************************************\n");
printf("请输入1-9选择相应操作:");
do{
scanf("%s",&c);
choice=atoi(c);
if(choice<1||choice>9)
printf("输入错误!请输入1-9选择相应操作:");
}while(choice<1||choice>9);
do{
switch(choice)
{
case 1:
create_sellers();
getch();
system("cls");
menu_select();
break;
case 2:
create_products();
getch();
system("cls");
menu_select();
break;
case 3:
if(head!=NULL)
{
printf("\n你已经创建了链表,按任意键返回主菜单!\n");
getch();
system("cls");
menu_select();
break;
}
else
{
system("cls");
printf("请输入要建立的销售记录条数:");
scanf("%d",&n);
if(n>0)
create_records(n);
else
printf("\n输入的数据有问题,请重新输入!\n");
}
getch();
system("cls");
menu_select();
break;

case 4:
display();
getch();
system("cls");
menu_select();
break;
case 5:
system("cls");
if(head==NULL)
printf("现在是空链表,请先去创建链表!\n");
else
{
do
{
printf("请正确输入要插入销售记录的位置(范围是 1--%d):",n);
scanf("%d",&x);
} while(x<1 || x>n);
insert(x);
}
getch();
system("cls");
menu_select();
break;
case 6:
system("cls");
del();
getch();
system("cls");
menu_select();
break;
case 7:
system("cls");
find();
getch();
system("cls");
menu_select();
break;
case 8:
system("cls");
report(head);
system("cls");
menu_select();
break;
}


}while(choice!=9);
system("cls");
printf("\n\n\n\n\n\n\n 谢谢使用!欢迎下次使用、、、、、、\n");
getch();
}


void create_sellers() /*输入销售员信息*/
{
int i,ch;
system("cls");
printf("*******************选择界面*********************\n");
printf("* 1.从键盘输入销售员信息 *\n");
printf("* 2.从文件中读取销售员信息 *\n");
printf("************************************************");
printf("\n请输入1或2选择需要的操作:");
do{
scanf("%s",&c);
ch=atoi(c);
if(ch<1||ch>2)
printf("输入错误!请输入1或2选择需要的操作:\n");
}while(ch<1||ch>2);
if(ch == 2)
{
FILE *fp;
if((fp=fopen("sellers.txt","r"))==NULL)
{
printf("\nCannot open file strike any key exit!\n\n");
exit(1);
}
ch=getchar();
printf("销售员的编号 姓名 性别 \n");
for(i=0;i<4;i++){
fscanf(fp,"%d %s %s",&sellers[i].snum,sellers[i].sname,sellers[i].sex);
printf(" %d %s %s\n",sellers[i].snum,sellers[i].sname,sellers[i].sex);
}
fclose(fp);
printf("销售员信息读取成功,按任意键返回主菜单!\n");

}
else
{
printf("\n 销售员的编号 姓名 性别 (空格隔开)\n");
for(i=0;i<4;i++)
{
scanf("%d%s%s",&sellers[i].snum,sellers[i].sname,sellers[i].sex);
}

}

}



void create_products() /*输入产品信息*/
{
int j,ch;
system("cls");
printf("*******************选择界面*********************\n");
printf("* 1.从键盘输入销售产品信息 *\n");
printf("* 2.从文件中读取销售产品信息 *\n");
printf("************************************************");
printf("\n请输入1或2选择需要的操作:");
do{
scanf("%s",&c);
ch=atoi(c);
if(ch<1||ch>2)
printf("输入错误!请输入1或2选择需要的操作:\n");
}while(ch<1||ch>2);
if(ch == 2)
{
FILE *fp;
if((fp=fopen("products.txt","r"))==NULL)
{
printf("\nCannot open fil

e strike any key exit!\n\n");
exit(1);
}
ch=getchar();
printf("产品的编号 名称 价格\n");
for(j=0;j<5;j++){
fscanf(fp,"%d %s %f",&products[j].pnum,products[j].pname,&products[j].price);
printf(" %d %s %f\n",products[j].pnum,products[j].pname,products[j].price);
}
fclose(fp);
printf("销售产品信息读取成功,按任意键返回主菜单!\n");

}
else
{
printf("\n产品的编号 名称 价格 (逗号隔开)\n");
for(j=0;j<5;j++)
{
scanf("%d,%s,%f",&products[j].pnum,products[j].pname,&products[j].price);
}

}
}


void create_records(int n) /*创建销售记录链表*/
{
struct records *p;
int i,j,flag,leap,ch;
char a[3],b[2],c[2];
printf("*******************选择界面*********************\n");
printf("* 1.从键盘输入销售的记录 *\n");
printf("* 2.从文件中读取销售的记录 *\n");
printf("************************************************");
printf("\n请输入1或2选择需要的操作:");
do{
scanf("%s",&c);
ch=atoi(c);
if(ch<1||ch>2)
printf("输入错误!请输入1或2选择需要的操作:\n");
}while(ch<1||ch>2);
if(ch==1){
printf("*********************请输入销售记录*************************\n\n");

printf("销售员编号 产品代号 销售数量 日期(YYYY-MM-DD)(空格隔开)\n");
for(i=0; i{
p=(struct records *)malloc(LEN);
do{
flag=1;
scanf("%d%d%d%s",&p->snum,&p->pnum,&p->amount,p->time);
for(j=0;j<4;j++){
a[j]=p->time[j];
}
a[4]=' ';
b[0]=p->time[5];
b[1]=p->time[6];
c[0]=p->time[8];
c[1]=p->time[9];
d[i].year=atoi(a);
d[i].month=atoi(b);
d[i].day=atoi(c);
for(j=0;j<4;j++)
{
if(p->snum==sellers[j].snum)
break;
}
if(j==4){
printf("销售员不存在!请重新输入!\n");
flag=0;
continue;
}
for(j=0;j<5;j++)
{
if(p->pnum==products[j].pnum)
break;
}
if(j==5){
printf("该产品不存在!请重新输入!\n");
flag=0;
continue;
}
if(p->time[4]!='-'||p->time[7]!='-'||strlen(p->time)!=10){
printf("日期格式错误!请重新输入!\n");
flag=0;
continue;
}
if(d[i].year%4==0||d[i].year%100==0||d[i].year%400==0)
leap=0;
else
leap=1;
if(leap=1)
{
if(d[i].day>tab[1][d[i].month]||d[i].day<0)
{
printf("天数错误!请重新输入!\n");
flag=0;
continue;
}
}
else
{
if(d[i].day>tab[0][d[i].month]||d[i].day<0)
{ printf("天数错误!请重新输入!\n");
flag=0;
continue;
}
}
}while(flag==0);
p->next=head;
head=p;
}
printf("\n成功输入%d条销售记

录,按任意键返回主菜单!\n",n);
}
else{
FILE *fp;
if((fp=fopen("records.txt","r"))==NULL)
{
printf("\nCannot open file strike any key exit!\n\n");
exit(1);
}
ch=getchar();
printf("销售员编号 产品代号 销售数量 日期(YYYY-MM-DD)\n");
for(i=0;ip=(struct records *)malloc(LEN);
fscanf(fp,"%d %d %d %s",&p->snum,&p->pnum,&p->amount,p->time);
printf(" %d %d %d %s\n",p->snum,p->pnum,p->amount,p->time);
p->next=head;
head=p;
}
fclose(fp);
printf("销售记录读取成功,按任意键返回主菜单!\n");
}
}
void display() /*浏览所有信息*/
{
int i;
struct records *p;
system("cls");
printf("*********************销售员信息*********************\n");
printf("编号 姓名 性别 \n");
for(i=0;i<4;i++)
printf("%d %s %s\n",sellers[i].snum,sellers[i].sname,sellers[i].sex);
printf("*********************销售产品信息*******************\n");
printf("编号 名称 价格\n");
for(i=0;i<5;i++)
printf("%d %s %f\n",products[i].pnum,products[i].pname,products[i].price);
printf("**********************销售记录**********************\n");
printf("销售员编号 产品代号 销售数量 日期\n");
p=head;
while(p!=NULL)
{
printf("%d %d %d %s\n",p->snum,p->pnum,p->amount,p->time);
p=p->next;
}
printf("\n所有信息显示完毕,按任意键返回主菜单!\n");

}

void insert(int m) /*插入销售记录*/
{
struct records *p1,*p2;
int i=1,j,flag,leap;
char a[3],b[2],c[2];
p1=head;
while(i{
p1=p1->next; i++;
}
printf("*********************请插入销售记录*************************\n");
printf("销售员编号 产品代号 销售数量 日期(YYYY-MM-DD) (空格隔开)\n");
p2=(struct records *)malloc(LEN);
do{
flag=1;
scanf("%d%d%d%s",&p2->snum,&p2->pnum,&p2->amount,p2->time);
for(j=0;j<4;j++){
a[j]=p2->time[j];
}
a[4]=' ';
b[0]=p2->time[5];
b[1]=p2->time[6];
c[0]=p2->time[8];
c[1]=p2->time[9];
d[i].year=atoi(a);
d[i].month=atoi(b);
d[i].day=atoi(c);
for(j=0;j<4;j++)
{
if(p2->snum==sellers[j].snum)
break;
}
if(j==4){
printf("销售员不存在!请重新输入!\n");
flag=0;
continue;
}
for(j=0;j<5;j++)
{
if(p2->pnum==products[j].pnum)
break;
}
if(j==5){
printf("该产品不存在!请重新输入!\n");
flag=0;
continue;
}
if(p2->time[4]!='-'||p2->time[7]!='-'||strlen(p2->time)!=10){
printf("日期格式错误!请重新输入!\n");
flag=0;
continue;
}
if(d[i].year%4==

0||d[i].year%100==0||d[i].year%400==0)
leap=0;
else
leap=1;
if(leap=1)
{
if(d[i].day>tab[1][d[i].month]||d[i].day<0)
{
printf("天数错误!请重新输入!\n");
flag=0;
continue;
}
}
else
{
if(d[i].day>tab[0][d[i].month]||d[i].day<0)
{ printf("天数错误!请重新输入!\n");
flag=0;
continue;
}
}
}while(flag==0);
p2->next=p1->next;
p1->next=p2;
n++;
printf("成功插入销售记录,按任意键返回主菜单!\n");

}

void del() /*删除指定销售记录*/
{
struct records *p1,*p2;
int ch,m;
char t[10];
p1=p2=head;
printf("*******************选择界面*********************\n");
printf("* 1.删除指定销售员的销售记录 *\n");
printf("* 2.删除指定产品的销售记录 *\n");
printf("* 3.删除指定日期的销售记录 *\n");
printf("************************************************");
printf("\n请输入1-3选择需要的操作:");
do{
scanf("%s",&c);
ch=atoi(c);
if(ch<1||ch>3)
printf("输入错误!请输入1-3选择需要的操作:\n");
}while(ch<1||ch>3);
if(ch==1){
printf("请输入指定销售员的编号:");
scanf("%d",&m);
while(p1!=NULL && p1->snum!=m)
{
p2=p1; p1=p1->next;
}
if(p1==NULL)
printf("没有找到您要删除的销售记录,按任意键返回主菜单!\n");
else
{
printf("成功删除编号为 %d的销售员的销售记录,按任意键返回主菜单!\n",m);
if(p1==p2)
head=p1->next;
else
p2->next=p1->next;
free(p1);
n--;
}
if(n==0)
head=NULL;
}
else if(ch==2){
printf("请输入指定产品的代号:\n");
scanf("%d",&m);
while(p1!=NULL && p1->pnum!=m)
{
p2=p1; p1=p1->next;
}
if(p1==NULL)
printf("没有找到您要删除的销售记录,按任意键返回主菜单!\n");
else
{
printf("成功删除代号为 %d的产品的销售记录,按任意键返回主菜单!\n",m);
if(p1==p2)
head=p1->next;
else
p2->next=p1->next;
free(p1);
n--;
}
if(n==0)
head=NULL;
}
else
{
printf("请输入指定的日期(YYYY-MM-DD):");
scanf("%s",&t);
while(p1!=NULL && strcmp(p1->time,t)!=0)
{
p2=p1; p1=p1->next;
}
if(p1==NULL)
printf("没有找到您要删除的销售记录,按任意键返回主菜单!\n");
else
{
printf("成功删除日期为 %s的销售记录,按任意键返回主菜单!\n",t);
if(p1==p2)
head=p1->next;
else
p2->next=p1->next;
free(p1);
n--;
}
if(n==0)
head=NULL;

}

}

void find() /*查询指定销售员的销售记录*/
{
struct records *p;
int flag=0,m;
printf("请输入要查询的销售员编号:");
scanf("%d",&m);
p=head;
while(p!=NULL)
{
if(p->snum==m)
{
flag=1;
printf("销售员编号 产品代号 销售数量 日期(YYYY-MM-DD)\n");
printf(" %d %d %d %s\n",p->snum,p->pnum,p->amount,p->time);
}
p=p->next;
}
if(flag==1)
printf("查询信息显示完毕,按任意键返回主菜单!\n");
if(flag==0)
printf("没有找到您要查找的销售记录,按任意键返回主菜单!\n");

}

void report(struct records *head) /*显示销售报表*/
{
int i,j,flag,leap;
char s1[10],s2[10],a[4],b[2],c[2];
int report[5][6]={0};
struct records *ptr=head;
struct sellers_list *p=sellers;
struct products_list *q=products;
system("cls");
printf("请输入您要查询的起止时间与截止时间(格式为YYYY-XX-DD)(回车间隔)\n");
getchar();
do{
flag=1;
gets(s1);
for(j=0;j<4;j++){
a[j]=s1[j];
}
a[4]=' ';
b[0]=s1[5];
b[1]=s1[6];
c[0]=s1[8];
c[1]=s1[9];
d[0].year=atoi(a);
d[0].month=atoi(b);
d[0].day=atoi(c);
if(s1[4]!='-'||s1[7]!='-'||strlen(s1)!=10){
printf("日期格式错误!请重新输入!\n");
flag=0;
continue;
}
if(d[0].year%4==0||d[0].year%100==0||d[0].year%400==0)
leap=0;
else
leap=1;
if(leap=1)
{
if(d[0].day>tab[1][d[0].month]||d[0].day<0)
{
printf("天数错误!请重新输入!\n");
flag=0;
continue;
}
}
else
{
if(d[0].day>tab[0][d[0].month]||d[0].day<0)
{ printf("天数错误!请重新输入!\n");
flag=0;
continue;
}
}
}while(flag==0);
do{
flag=1;
gets(s2);
for(j=0;j<4;j++){
a[j]=s2[j];
}
a[4]=' ';
b[0]=s2[5];
b[1]=s2[6];
c[0]=s2[8];
c[1]=s2[9];
d[1].year=atoi(a);
d[1].month=atoi(b);
d[1].day=atoi(c);
if(s2[4]!='-'||s2[7]!='-'||strlen(s2)!=10){
printf("日期格式错误!请重新输入!\n");
flag=0;
continue;
}
if(d[1].year%4==0||d[1].year%100==0||d[1].year%400==0)
leap=0;
else
leap=1;
if(leap=1)
{
if(d[1].day>tab[1][d[1].month]||d[1].day<0)
{
printf("天数错误!请重新输入!\n");
flag=0;
continue;
}
}
else
{
if(d[1].day>tab[0][d[1].month]||d[1].day<0)
{ printf("天数错误!请重新输入!\n");
flag=0;
continue;
}
}
}while(flag==0);
while(ptr!=NULL)
{
/*将对应日期内销售数量累加到报表相应位置*/


s2[0]=a[0];
if((strcmp(ptr->time,s1)>=0)&&(strcmp(ptr->time,s2)<=0))
{
for(i=0;i<4;i++)
{
if(ptr->snum == sellers[i].snum)
break;
}
for(j=0;j<5;j++)
{
if(ptr->pnum ==products[j].pnum)
break;
}
report[i][j] += ptr->amount;
}
ptr=ptr->next;
}
/*横竖向汇总*/
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
report[4][i]+=report[j][i];
}

for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
report[i][5] +=report[i][j];
}
printf("****************************销售统计报表****************************************\n");
printf(" 产品代号 销售之和 \n");
printf("销售员代号 ");
for(i=0;i<5;i++)
printf("%10d",products[i].pnum);
printf("\n");
for(i=0;i<5;i++)
{
if(i<4)
printf("%10d ",sellers[i].snum);
else
printf("每种产品之和 ");
for(j=0;j<6;j++)
{
printf("%10d",report[i][j]);
}
if(i<4)
printf("\n");
else
printf(" 总和\n");
}
printf("\n按任意键返回主菜单!\n");
getchar();
}

相关文档
最新文档