/*主管权限数据格式化*/
#define HEADER1_zg "-----------------------------货物管理系统(主管)--------------------------------\n"
#define HEADER2_zg "| 编号 | 名称 | 进价 | 售价 | 产地 | 生产日期 |保质期| 库存 | 销量 | 收入 |\n"
#define HEADER3_zg "|------|--------|------|------|------|----------|------|------|------|--------|\n"
#define FORMAT_zg "|%-6s|%-8s|%.2f |%.2f |%6s|%-4d%3d%3d| %4d | %4d | %4d |%.2f |\n"
#define DATA_zg p->data.numbs,p->data.name,p->data.purchase,p->data.sales,p->data.place,p->data.Date.year,p->data.Date.mouth,p->data.Date.day,p->data.days,p->data.stock,p->data.salesnumb,p->data.income
#define END_zg "-------------------------------------------------------------------------------\n"
/*普通权限数据格式化*/
#define HEADER1_pt "----------------货物管理系统(普通)--------------------\n"
#define HEADER2_pt "| 编号 | 名称 | 售价 | 产地 | 生产日期 |保质期| 销量 |\n"
#define HEADER3_pt "|------|--------|------|------|----------|------|------|\n"
#define FORMAT_pt "|%-6s|%-8s| %.2f|%6s|%-4d%3d%3d| %4d | %4d |\n"
#define DATA_pt p->data.numbs,p->data.name,p->data.sales,p->data.place,p->data.Date.year,p->data.Date.mouth,p->data.Date.day,p->data.days,p->data.salesnumb
#define END_pt "--------------------------------------------------------\n"
int yhflag=0; /*是否优惠*/
int incomflag=0; /*是否计算收入*/
int dateflag=0; /*是否输入日期*/
int saveflag=0; /*是否需要保存*/
char zg[]="zg";
char pt[]="pt";
struct date
{
int year;
int mouth;
int day;
};
/*货物基本信息*/
struct goods
{
char numbs[6]; /*编号*/
char name[10]; /*名称*/
float purchase; /*进价*/
float sales; /*售价*/
char place[10]; /*产地*/
struct date Date; /*生产日期*/
int days; /*保质期*/
int datecha; /*保质期截止日期差*/
int stock; /*库存量*/
int salesnumb; /*销量*/
float income; /*收入*/
};
typedef struct node
{
struct goods data;
struct node *next;
}Node,*Link;
/*格式化输出主管表头*/
void printheader_zg()
{
printf(HEADER1_zg);
printf(HEADER2_zg);
printf(HEADER3_zg);
}
/*格式化输出普通表头*/
void printheader_pt()
{
printf(HEADER1_pt);
printf(HEADER2_pt);
printf(HEADER3_pt);
}
/*格式化输出主管表中数据*/
void printdata_zg(Node *pp)
{
Node *p;
p=pp;
printf(FORMAT_zg,DATA_zg);
}
/*格式化输出普通表中数据*/
void printdata_pt(Node *pp)
{
Node *p;
p=pp;
printf(FORMAT_pt,DATA_pt);
}
/*输出案件错误信息*/
void wrong()
{
printf("\n\n\n\n*******错误:输入错误,按任意键继续*******\n");
getchar();
}
/*输出为查找到货物的信息*/
void Nofind()
{
printf("\n*****无此货物信息!*****\n");
getchar();
}
/*主管显示菜单*/
void Disp(Link L,char s[])
{
Node *p;
p=L->next;
if (!p) /*空,则*/
{
printf("\n没有录入货物信息\n");
getchar();
return ;
}
printf("\n\n");
if (strcmp(zg,s)==0)
{
printheader_zg();
while (p)
{
printdata_zg(p);
p=p->next;
printf(HEADER3_zg);
}
}
else
{
printheader_pt();
while (p)
{
printdata_pt(p);
p=p->next;
printf(HEADER3_pt);
}
}
getchar();
}
/*返回链表中符合要求的节点的指针,s[]保存用户查找内容,NaorNum[]保存按什么查找”name,num“*/
Node *Locate(Link L,char s[],char NaorNum[] )
{
Node *p;
if (strcmp(NaorNum,"num")==0)
{
p=L->next;
while (p)
{
if (strcmp(p->data.numbs,s)==0)
return p;
p=p->next;
}
}
else if (strcmp(NaorNum,"name")==0)
{
p=L->next;
while (p)
{
if (strcmp(p->data.name,s)==0)
return p;
p=p->next;
}
}
return 0; /*未找到,返回空指针*/
}
/*平润年判断*/
int Year_pd(int year)
{
int flag;
if ((year%4==0&&year%100!=0)||year%400==0)
{/*闰年*/
flag=0;
}
else
{/*平年*/
flag=1;
}
return flag;
}
/*月份对应的天数*/
int Day_pd(int mouth,int flag)
{
int day;
switch(mouth)
{
case 1:
case 3: