资源描述
C语言课程设计
商品销售信息管理系统
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
struct product //定义商品数据结构
{
int num; //商品编号
char productname[20]; //商品名称
float price; //商品售价
char place[30]; //商品产地
int storage; //商品库存
struct product *next;
}*head,*p1,*p2; //定义主结构体数组和备用结构体数组及指针
struct time //定义时间结构体
{
int year;
int month;
int day;
};
struct sell //定义销售数据结构
{
int ID; //用户代码
char customername[20]; //用户姓名
int num; //商品编号
int count; //销售数量
char date[10]; //日期
struct sell * next1;
}*head1; //定义头指针head,缓冲指针p1,和尾指针p2
/*************************函数申明****************************/
void Enter_productmessage(); //导入商品信息
void Creat(); //输入销售统计
void Search_num(); //按编号查询销售历史
void Search_customername(); //按用户姓名查询购置历史
void Printf_customername(); //显示用户信息
void Search_date(); //计算时间段内销售总额
void Save_product(); //保留销售信息
void Save_customername(); //保留用户信息
void Exit(); //退出程序
/***************************主菜单******************************/
int select()
{
int c;
printf("\t\t************欢迎使用商品销售管理程序**************\n");
printf("\t\t T1123-5班 胡 军 一分耕耘 一分收获 \n");
printf("\n--------------------------------------------------------------------------------\n");
printf("\n");
printf("\t\t********************************************\n");
printf("\t\t**********欢迎使用商品销售管理系统**********\n");
printf("\t\t** **\n");
printf("\t\t** 1:导入商品信息 **\n");
printf("\t\t** 2:输入销售统计 **\n");
printf("\t\t** 3:按编号查询销售历史 **\n");
printf("\t\t** 4: 按用户姓名查询购置历史 **\n");
printf("\t\t** 5:计算时段内各销售总额 **\n");
printf("\t\t** 6:显示用户信息 **\n");
printf("\t\t** 7:保留销售信息 **\n");
printf("\t\t** 8:保留用户信息 **\n");
printf("\t\t** 0:退出 **\n");
printf("\t\t********************************************\n");
printf("\n--------------------------------------------------------------------------------\n");
printf("\t\t请输入您选择(0~8整数): ");
scanf("%d",&c);
return c;
}
/********************************主函数***************************/
int main()
{
for(;;)
{
switch(select())
{
case 1:system("cls");Enter_productmessage();break;
case 2:system("cls");Creat();break;
case 3:system("cls");Search_num();break;
case 4:system("cls");Search_customername();break;
case 5:system("cls");Search_date();break;
case 6:system("cls");Printf_customername();break;
case 7:system("cls");Save_product();break;
case 8:system("cls");Save_customername();break;
case 0:system("cls");Exit();break;
default :
{ system("cls");
printf("\n\n\n\n\n\n");
printf("\t\t*******************************************************\n");
printf("\t\t** 输入错误!!!请重新输入您选择(0~8整数) **\n");
printf("\t\t** 请按Enter键返回!!! **\n");
printf("\t\t*******************************************************\n");
getchar();
getchar();
system("cls");
}
}
}
return 0;
}
/****************************************************************/
int judgech(char *a) //判定是否为汉字
{
int i,flag;
for(i=0;a[i]!='\0';i++)
if(a[i]>=0)
{
flag=0;
break;
}
else
flag=1;
return flag;
}
int judgedate(char date[10]) //判定日期是否正当
{
int i,year,month,day,s1=0; //日期格式输入正确则s1=1,不然s1=0
for(i=0;i<10;i++)
if(date[i]=='\0')
{
s1=0;
break;
}
if(date[4]=='-'&&date[7]=='-')
{
if(strlen(date)==10)
{
year=1000*(date[0]-48)+100*(date[1]-48)+10*(date[2]-48)+(date[3]-48);//年月日
month=10*(date[5]-48)+(date[6]-48);
day=10*(date[8]-48)+(date[9]-48);
}
}
if(i==10)
{
if(year%4==0&&month==2&&day>0&&day<=29) s1=1;
else if(year%4!=0&&month==2&&day>0&&day<=28) s1=1;
else if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>0&&day<=31) s1=1;
else if((month==4||month==6||month==9||month==11)&&day>0&&day<=30) s1=1;
}
return s1;
}
void file() //读入文件操作
{
int i=0,m=0,k=1,j=1,c=1,o=1,v=1;
FILE *fp;
char filename[30];
printf("请输入读入文件路径:");
rewind(stdin);
gets(filename);
rewind(stdin);
p1=p2=head=(struct product*)malloc(sizeof(struct product));
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\t\t********************************************\n");
printf("\t\t** 导入信息文件错误!请检验文件路径!!! **\n");
printf("\t\t********************************************\n");
getchar();
system("cls");
Enter_productmessage();
}
printf("********************************商品信息***********************************\n");
printf("编号(1-10整数) 名称(汉字) 价格(数字) 产地(汉字) 库存数量\n");
printf("***************************************************************************\n");
while(!feof(fp))
{
p1=(struct product*)malloc(sizeof(struct product));
p2->next=p1;
p1->next=NULL;
p2=p1;
fscanf(fp,"%d%s%f%s%d",&p2->num,p2->productname,&p2->price,p2->place,&p2->storage);
while(k==1)
{
if(p2->num>10||p2->num<=0)
{
printf("\t*******************************************************\n");
printf("\t\t第%d个商品编码!请重新输入(1-10):",i+1);
rewind(stdin);
scanf("%d",&p2->num);
k=1;
}
else k=0;
}
while(j==1){
if(judgech(p2->productname)==0)
{
printf("\t\t第%d个商品名称错误!请重新输入(汉字):",i+1);
rewind(stdin);
scanf("%s",p2->productname);
j=1;
}
else j=0;
}
while(o==1){
if(p2->price<=0)
{
printf("\t\t第%d个商品价格错误!请重新输入价格(>0):",i+1);
rewind(stdin);
scanf("%f",&p2->price);
o=1;
}
else o=0;
}
while(c==1){
if(judgech(p2->place)==0)
{
printf("\t\t第%d个商品产地格式错误!请重新输入(汉字):",i+1);
rewind(stdin);
scanf("%s",p2->place);
c=0;
}
else c=0;
}
while(v==1){
if(p2->storage!=1000)
{
printf("\t*******************************************************\n");
printf("\t\t第%d个商品数量错误!请输入1000:",i+1);
rewind(stdin);
scanf("%d",&p2->storage);
v=1;
}
else v=0;
}
printf("\t%-12d%-15s %-15.2f%-15s%-12d\n",p2->num,p2->productname,p2->price,p2->place,p2->storage);
}
fclose(fp);
}
void comp()
{
FILE *fp;
int i=0,n,k=1,m=1,c=1,l=1,d=1;
char filename[20],a;
printf("\t请输入商品信息保留路径:");
rewind(stdin);
gets(filename);
p1=p2=head=(struct product*)malloc(sizeof(struct product));
if((fp=fopen(filename,"a+"))==NULL)
{
printf("\t\t********************************************\n");
printf("\t\t** 不能打开文件!请检验文件路径!!! **\n");
printf("\t\t********************************************\n");
getchar();
system("cls");
Enter_productmessage();
}
printf("\n\n\n");
printf("\t\t********************************************\n");
printf("\t\t** 若输入路径和从文件导入商品信息路径相同!**\n");
printf("\t\t** 并已导入十个商品信息,请不要再导入!!! **\n");
printf("\t\t** 注意商品编号不要和已导入编码反复!!! **\n");
printf("\t\t********************************************\n");
printf("\n\n\n");
getchar();
system("cls");
printf("\t已从文件导入个数和要输入个数和不超出十!!!\n\n");
printf("\t请输入要导入销售统计个数:");
scanf("%d",&n);
if(n>0)
{
do{
p1=(struct product*)malloc(sizeof(struct product));
p2->next=p1;
p1->next=NULL;
p2=p1;
printf("***********************************商品信息*****************************\n");
printf(" 编号(整数) 名称(汉字) 价格(数字) 产地(汉字) 库存数量\n");
scanf("%d%s%f%s%d",&p2->num,p2->productname,&p2->price,p2->place,&p2->storage);
while(k==1)
{
if(p2->num>10||p2->num<=0)
{
printf("\t*******************************************************\n");
printf("\t\t 商品编码!请重新输入(1-10):");
rewind(stdin);
scanf("%d",&p2->num);
k=1;
}
else k=0;
}
while(m==1){
if(judgech(p2->productname)==0)
{
printf("\t\t商品名称错误!请重新输入(汉字):");
rewind(stdin);
scanf("%s",p2->productname);
m=1;
}
else m=0;
}
while(l==1){
if(p2->price<=0)
{
printf("\t\t商品价格错误!请重新输入价格(>0):");
rewind(stdin);
scanf("%f",&p2->price);
l=1;
}
else l=0;
}
while(c==1){
if(judgech(p2->place)==0)
{
printf("\t\t商品产地格式错误!请重新输入(汉字):");
rewind(stdin);
scanf("%s",p2->place);
c=1;
}
else c=0;
}
while(d==1){
if(p2->storage!=1000)
{
printf("\t*******************************************************\n");
printf("\t\t 商品数量错误!请输入1000:");
rewind(stdin);
scanf("%d",&p2->storage);
d=1;
}
else d=0;
}
p2=head->next;
fprintf(fp,"\n%-6d%-6s%-6.2f%-6s%-6d\n",p2->num,p2->productname,p2->price,p2->place,p2->storage);
printf("\n%-6d%-6s%-6.2f%-6s%-6d\n",p2->num,p2->productname,p2->price,p2->place,p2->storage);
printf("\t\t是否继续输入信息(Y/N)?\n");
getchar();
a=getchar();
}while(a=='Y'||a=='y');
}
fclose(fp); //关闭文件夹
if(n==0)
{
printf("\t\t不从键盘输入入信息!!!");
getchar();
getchar();
system("cls");
}
fclose(fp); //关闭文件夹
}
void Enter_productmessage() //导入销售信息
{
int a;
printf("\t************************************************************\n");
printf("\t** 请输入10种产品信息--编号、名称、价格、产地、数量: **\n");
printf("\t** 1:经过文件导入(推荐)! **\n");
printf("\t** 2: 经过键盘输入! **\n");
printf("\t************************************************************\n");
printf("\t 请输入您选择(1或2): ");
scanf("%d",&a);
getchar();
system("cls");
if(a!=1&&a!=2)
{
printf("\t\t输入错误!!!请重新输入您选择(1或2):");
scanf("%d",&a);
}
switch(a)
{
case 1:system("cls"); file();break;
case 2:system("cls"); comp();break;
}
printf("*************************************************************************\n");
printf("\t*******************************************************\n");
printf("\t** 数据类信息操作成功!请按Enter键继续!!! **\n");
printf("\t*******************************************************\n");
getchar();
getchar();
system("cls");
}
void Creat() //输入销售信息函数
{
int i=0,k=1,code;
char a;
struct sell *p3,*p4;
srand(0);
code=1+rand()%90;
p3=p4=head1=(struct sell *)malloc(sizeof(struct sell));
p3=head1;
printf("\t\t请输入销售统计:\n"); //提醒输入统计
printf("--------------------------------------------------------------------------------\n");
do{
p3=(struct sell *)malloc(sizeof(struct sell));
p4->next1=p3;
p3->next1=NULL;
p4=p3;
printf(" 用户姓名(汉字) 商品编号(1-10整数) 销售数量(数字) 销售日期(YYYY-MM-DD)\n");
printf("--------------------------------------------------------------------------------\n");
scanf("%s%d%d%s",p4->customername,&p4->num,&p4->count,p4->date); //输入统计
do{
if(judgech(p4->customername)==0)
{
printf("\t*******************************************************\n");
printf("\t\t用户名字输入错!请重新输入用户名字(汉字):");
scanf("%s",p4->customername);
rewind(stdin);
k=1;
}
else
k=0;
}while(k==1);
do{
if(p4->num>10||p4->num<=0)
{
printf("\t*******************************************************\n");
printf("\t\t 商品编码!请重新输入(1-10):");
scanf("%d",&p4->num);
rewind(stdin);
k=1;
}
else k=0;
}while(k==1);
do{
if(p4->count>1000||p4->count<0)
{
printf("\t*******************************************************\n");
printf("\t 销售商品数量错误!请输入(0-1000):");
scanf("%d",&p4->count);
rewind(stdin);
k=1;
}
else k=0;
}while(k==1);
do{
if(judgedate(p4->date)!=1)
{
printf("\t*******************************************************\n");
printf("\t 输入日期不正当!请重新输入(YYYY-MM-DD):");
scanf("%s",p4->date);
rewind(stdin);
k=1;
}
else k=0;
}while(k==1);
p4->ID=code+i;
i++;
printf("\n\n");
printf("是否继续输入销售统计(Y/N)?\n");
getchar();
a=getchar();
}while(a=='Y'||a=='y');
system("cls");
printf("\n\n\n\n");
printf("\t*******************************************************\n");
printf("\t** 销售信息输入成功!按Enter键继续!!! **\n");
printf("\t*******************************************************\n");
getchar();
getchar();
system("cls");
return;
}
void Search_num() //依据产品编号查询产品销售历史
{
int num,flag=1,i=0;
struct sell *p3;
struct product *p;
printf("\t\t请输入商品编号(1-10整数):");
scanf("%d",&num);
getchar();
system("cls");
printf(" 用户姓名 商品编号 销售数量 销售总额 销售日期\n");
printf(" ------------------------------------------------------------------------------\n");
p3=head1;
p=head;
while(p3!=NULL)
{
if(p3->num==num)
{
p=head;
while(p!=NULL)
{
if(p->num==num)
break;
else
p=p->next;
}
printf(" %-15s%-13d%-13d%-13.2f%-10s\n",p3->customername,p3->num,p3->count,p->price*p3->count,p3->date);
flag=0;
}
p3=p3->next1;
}
if(flag==1)
{
printf("\t\t*******************************************************\n");
printf("\t\t** 无此编码商品销售统计!请查实后再输入!!! **\n");
printf("\t\t** 请按Enter键返回!!! **\n");
printf("\t\t*******************************************************\n");
getchar();
system("cls");
return;
}
printf("-------------------------------------------------------------------------------\n");
printf("\t\t********************************************\n");
printf("\t\t** 销售统计查询完成!请按Enter键返回!!! **\n");
printf("\t\t********************************************\n");
getchar();
getchar();
system("cls");
return;
}
void Search_customername() //依据用户姓名查询购置历史
{
int k=1,m=0;
float a=0;
char name[20],b;
struct product *p;
struct sell *p3;
p3=head1;
p=head;
prin
展开阅读全文