/***********************************************************
我的信息: *
姓名: 汪建林 生日:1985年2月26日 *
毕业学校: 2007年于成都理工大学 *
家乡地址: 四川渠县望溪乡包山村5组 *
联系QQ: 287307421 联系电话: 13558690869 *
联系Email: wangjianlin1985@126.com 287307421 *
双鱼林程序淘宝店: http://shop34864101.taobao.com *
双鱼林程序拍拍店: http://287307421.paipai.com *
网站: http://www.shuangyulin.com *
*
需要更多程序可以联系我,保证运行! *
***********************************************************/
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"
#define N 50
#define FILENAME "chanpin.txt"
struct date
{
int month;
int day;
int year;
};
struct chanpin
{
int number1; /*产品编号*/
char name1[10]; /*产品姓名*/
int number2; /*产品类型编号*/
char name2[10]; /*产品规格*/
char name3[10]; /*计量单位*/
int d2; /*产品数量*/
int d3; /*参考价格*/
struct date jhrq; /*进货日期*/
struct date yxrq; /*有效日期*/
};
/*******************************************************
功能:显示菜单
参数:无
返回值:无
*******************************************************/
void displayMenu()
{
printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("+ 产品信息管理系统2.0 +\n");
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("+ 10.程序结束 +\n");
printf("+ +\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
/*******************************************************
功能:登陆函数,验证口令
参数:
参数1:n
类型:char []
说明:用户输入口令
返回值:1或0
类型:int
说明:1表示通过验证;0表示没有通过
*******************************************************/
int login(char password[])
{
static char key[10]="123";
if(strcmp(password,key)==0)
return 1;
else
return 0;
}
/*******************************************************
功能:从文件读信息到结构体数组中
参数:
参数1:chanpin[]
类型:CHANPIN []
说明:用来存储从文件读到的产品信息
返回值:i
类型:int
说明:表示实际读取到的个数
*******************************************************/
int readFromFile(struct chanpin stu[])
{
FILE *fp;
int i=0;
if((fp=fopen(FILENAME,"rb"))==NULL) /*打开文件*/
{
printf("cannot open file\n");
exit(0);
}
while(fread(&stu[i],sizeof(struct chanpin),1,fp)==1)
{
i++;
}
fclose(fp);
return i;
}
int unique(struct chanpin stu[],int length,int stuNumber,int cur)
{
int flag=1,i;
for(i=0;i<length;i++)
{
if(stu[i].number1==stuNumber&&i!=cur)
{
flag=0;
break;
}
}
return flag;
}
int scan(struct chanpin stu[],int n)
{
int i=n;
int endFlag=0;
printf("编号(0退出)\n:");
while(i<N)
{
while(1)
{
int flag;
printf("编号\n:");
scanf("%d",&stu[i].number1);
if(stu[i].number1==0)
{
endFlag=1;
break;
}
flag=unique(stu,i,stu[i].number1,i);
if(flag) break;
printf("该编号已经存在,请重新输入!\n");
}
if(endFlag==1)
break;
printf("名称\n:");
scanf("%s",stu[i].name1);
printf("类型编号\n:");
scanf("%d",&stu[i].number2);
printf("产品规格\n:");
scanf("%s",stu[i].name2);
printf("计量单位\n:");
scanf("%s",stu[i].name3);
printf("产品数量\n:");
scanf("%d",&stu[i].d2);
printf("参考价格\n:");
scanf("%d",&stu[i].d3);
printf("进货日期\n:");
scanf("%d-%d-%d",&stu[i].jhrq.year,&stu[i].jhrq.month,&stu[i].jhrq.day);
printf("有效日期\n:");
scanf("%d-%d-%d",&stu[i].yxrq.year,&stu[i].yxrq.month,&stu[i].yxrq.day);
i++;
}
return i;
}
/*******************************************************
功能:将结构体数组中的产品信息显示到屏幕
参数:
参数1:chanpin[]
类型:chanpin stu[]
明:用来存储产品信息的数组
参数2:N
类型:int
说明:表示实际数组的长度
返回值:无
*******************************************************/
void print(struct chanpin stu[],int n)
{
int i=0;
if (n>0)
printf("%-4s %-10s %-4s %-4s %-4s %-4s %-4s %-4s %-4s","产品编号","名称","类型编号","产品规格","计量单位",
"产品数量","参考价格","进货日期","有效期\n\n");
for(i=0;i<n;i++)
{
printf("%-4d %6s %10d %9s %9s %8d %8d %9d-%d-%d %6d-%d-%d",stu[i].number1,stu[i].name1,stu[i].number2,
stu[i].name2,stu[i].name3,stu[i].d2,stu[i].d3,stu[i].jhrq.year,stu[i].jhrq.month,stu[i].jhrq.day,
stu[i].yxrq.year,stu[i].yxrq.month,stu[i].yxrq.day);
printf("\n");
}
printf("\n\n");
}
/*******************************************************
功能:根据名称从数组中查找产品
参数:
参数1:chanpin[]
类型:chanpin stu[]
说明:用来存储产品信息的数组
参数2:N
类型:int
说明:表示实际数组的长度
参数3:stuName
类型:char
说明:表示要查找的产品的名称
返回值:无
*******************************************************/
void chazhao(struct chanpin stu[],int length,char stuName[])
{
int i=0;
int found=0;
for(i=0;i<length;i++)
{
if(strcmp(stuName,stu[i].name1)==0)
{ found++;
if(found==1)
{
printf("找到啦\n");
printf("%-4s %-10s %-4s %-4s %-4s %-4s %-4s %-4s %-4s","产品编号","名称","类型编号","产品规格","计量单位",
"产品数量","参考价格","进货日期","有效期\n\n");
}
printf("%-4d %6s %10d %9s %9s %8d %8d %9d-%d-%d %6d-%d-%d",stu[i].number1,stu[i].name1,stu[i].number2,
stu[i].name2,stu[i].name3,stu[i].d2,stu[i].d3,stu[i].jhrq.year,stu[i].jhrq.month,stu[i].jhrq.day,
stu[i].yxrq.year,stu[i].yxrq.month,stu[i].yxrq.day);
}
}
if(found==0)
printf("\n指定的名称不存在!\n");
}
void writeToFile(struct chanpin stu[],int n)
{
FILE *fp=NULL;
int i=0;
fp=fopen(FILENAME,"wb");
if(fp==NULL)
{
printf("打开文件出错!\n");
exit(0);
}
for(i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct chanpin),1,fp);
fclose(fp);
}
/*******************************************************
功能:根据编号修改数组中编号
参数:
参数1:chanpin
类型:stu []
说明:用来存储产品信息的数组出
参数2:length
类型:int
说明:表示实际数组的长度
参数3:stuNumber
类型:int
说明:表示要修改的产品的编号
返回值:无
**********