第3个回答 2009-12-23
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define M 10
struct product
{
int num;
char name[20];
char typenum[20];
char norm[20];
char measure[20];
char amount[20];
char price[20];
char comedate[20];
char lastdate[20];
};
typedef struct product Product;
int Init(Product t[]);
void List(Product t[],int n);
void SearchOnName(Product t[],int n);
void SearchOnNum(Product t[],int n);
int DeleteRecord(Product t[],int n);
int AlterRecord(Product t[],int n);
void SortOnName(Product t[],int n);
void SortOnPrice(Product t[],int n);
void Out_time(Product t[],int n);
void SaveRecord(Product t[],int n);
int LoadRecord(Product t[]);
int Menu_select();
void main()
{
Product adr[M];
int length;
system("cls");
while(1)
{
switch(Menu_select())
{
case 1: length=Init(adr);
SaveRecord(adr,length);
break;
case 2:length=LoadRecord(adr);
List(adr,length);
break;
case 3:length=LoadRecord(adr);
SearchOnName(adr,length);
break;
case 4:length=LoadRecord(adr);
length=DeleteRecord(adr,length);
SaveRecord(adr,length);
break;
case 5:length=LoadRecord(adr);
length=AlterRecord(adr,length);
SaveRecord(adr,length);
break;
case 6:length=LoadRecord(adr);
SortOnPrice(adr,length);
SaveRecord(adr,length);
List(adr,length);
break;
case 7:length=LoadRecord(adr);
Out_time(adr,length);
break;
case 0:exit(0); /*如返回值为0则程序结束*/
}
}
}
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
int Menu_select()
{
int c;
printf("press any key enter menu......\n");
getch(); /*读入任意字符*/
system("cls");
printf("********************************MENU*********************************\n\n");
printf(" 1. 录入初始记录\n");
printf(" 2. 显示全部记录\n");
printf(" 3. 按名称查找记录\n");
printf(" 4. 删除记录 \n");
printf(" 5. 修改记录\n");
printf(" 6. 按价格排序\n");
printf(" 7. 显示过期产品记录\n");
printf(" 0. 退出\n");
printf("*********************************************************************\n");
do{
printf("\n Enter your choice(0-7):");
if(scanf("%d",&c)!=1)
{ while(getchar()!='\n')
continue;
continue;
}
}while(c<0||c>8);
return c;
}
int Init(Product t[])
{
int i,n;
system("cls");
printf("\n请输入要输入的记录数:\n");
scanf("%d",&n);
printf("开始输入记录:\n");
for(i=0;i<n;i++)
{ system("cls");
printf("\n第%d条记录的编号:",i+1);
scanf("%d",&t[i].num);
printf("第%d条记录的名称:",i+1);
scanf("%s",t[i].name);
printf("第%d条记录的类型编号:",i+1);
scanf("%s",t[i].typenum);
printf("第%d条记录的规格:",i+1);
scanf("%s",t[i].norm);
printf("第%d条记录的计量单位:",i+1);
scanf("%s",t[i].measure);
printf("第%d条记录的数量:",i+1);
scanf("%s",t[i].amount);
printf("第%d条记录的价格:",i+1);
scanf("%s",t[i].price);
printf("第%d条记录的进贷日期:",i+1);
scanf("%s",t[i].comedate);
printf("第%d条记录的有效期:",i+1);
scanf("%s",t[i].lastdate);
}
return (n);
}
void List(Product t[],int n)
{
int i;
system("cls");
printf("\n\n*********************************PRODUCT****************************************\n");
printf("编号 名称 类型编号 规格 计量单位 数量 价格 进货日期 有效期\n");
printf("--------------------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{ printf("%-6d%-10s%-10s%-10s%-10s%-6s%-8s%-10s%-10s",t[i].num,t[i].name,t[i].typenum,t[i].norm,t[i].measure,t[i].amount,t[i].price,t[i].comedate,t[i].lastdate);
if((i+1)%10==0)
{
printf("Press any key continue...\n");
getch();
}
}
printf("**********************************end*******************************************\n");
}
/*查找记录*/
void SearchOnName(Product t[],int n)
{
char s[20];
int i,flag=0;
system("cls");
printf("请输入要查找的名称:\n");
scanf("%s",s);
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].name)==0)
{ flag=1;
system("cls");
printf("\n\n此产品的信息如下:\n");
printf("编号 名称 类型编号 规格 计量单位 数量 价格 进货日期 有效期\n");
printf("--------------------------------------------------------------------------------\n");
printf("%-6d%-10s%-10s%-10s%-10s%-6s%-8s%-10s%-10s",t[i].num,t[i].name,t[i].typenum,t[i].norm,t[i].measure,t[i].amount,t[i].price,t[i].comedate,t[i].lastdate);
}
}
if(flag==0)
printf("查无此产品!!\n");
}
/*删除记录*/
int DeleteRecord(Product t[],int n)
{
char s[20];
char ch='N';
int i,j,flag=0;
system("cls");
printf("请输入要删除的名字\n");
scanf("%s",s);
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].name)==0)
{ flag=1;
system("cls");
printf("\n\n*********************************PRODUCT***************************************\n");
printf("编号 名称 类型编号 规格 计量单位 数量 价格 进货日期 有效期\n");
printf("-----------------------------------------------------------------------------------\n");
printf("%-6d%-10s%-10s%-10s%-10s%-6s%-8s%-10s%-10s",t[i].num,t[i].name,t[i].typenum,t[i].norm,t[i].measure,t[i].amount,t[i].price,t[i].comedate,t[i].lastdate);
printf("Are you sure delete it(Y/N)\n");
ch=getch();
if(ch=='y'||ch=='Y')
{
for(j=i;j<n-1;j++)
t[j]=t[j+1];
n--;
i--;
}
}
}
if(flag==0)
printf("查无此产品!!\n");
return n;
}
/*修改记录*/
int AlterRecord(Product t[],int n)
{
char s[20];
int i,m,flag=0;
system("cls");
printf("\n请输入在修改的记录名称:\n");
scanf("%s",s);
printf("开始修改记录\n");
for(i=0;i<n;i++)
{ if(strcmp(s,t[i].name)==0)
{ flag=1;
system("cls");
printf("\n第%d条记录的编号:",i+1);
scanf("%d",&t[i].num);
printf("第%d条记录的名称:",i+1);
scanf("%s",t[i].name);
printf("第%d条记录的类型编号:",i+1);
scanf("%s",t[i].typenum);
printf("第%d条记录的规格:",i+1);
scanf("%s",t[i].norm);
printf("第%d条记录的计量单位:",i+1);
scanf("%s",t[i].measure);
printf("第%d条记录的数量:",i+1);
scanf("%s",t[i].amount);
printf("第%d条记录的价格:",i+1);
scanf("%s",t[i].price);
printf("第%d条记录的进货日期:",i+1);
scanf("%s",t[i].comedate);
printf("第%d条记录的有效期:",i+1);
scanf("%s",t[i].lastdate);
}
}
if(flag==0)
printf("查无此产品!!\n");
return n;
}
/*按价格排序*/
void SortOnPrice(Product t[],int n)
{ int i,j;
Product temp;
printf("\n按价格排序:\n");
for(j=1;j<n;j++)
for(i=0;i<n-j;i++)
if((strcmp(t[i].price,t[i+1].price))>0) /*比较大小*/
{
temp=t[i];
t[i]=t[i+1];
t[i+1]=temp;
}
printf("排序成功!!!\n");
}
/*过期产品信息*/
void Out_time(Product t[],int n)
{
int i,lastdate,comedate;
system("cls");
printf("过期产品信息如下:\n");
printf("\n\n*********************************PRODUCT****************************************\n");
printf("编号 名称 类型编号 规格 计量单位 数量 价格 进货日期 有效期\n");
printf("--------------------------------------------------------------------------------\n");
if(lastdate<=comedate)
{
for(i=0;i<n;i++)
{ printf("%-6d%-10s%-10s%-10s%-10s%-6s%-8s%-10s%-10s",t[i].num,t[i].name,t[i].typenum,t[i].norm,t[i].measure,t[i].amount,t[i].price,t[i].comedate,t[i].lastdate);
if((i+1)%10==0)
{
printf("Press any key continue...\n");
getch();
}
}
printf("***********************************end******************************************\n");
}
else printf("没有过期产品\n");
}
/*保存函数,参数为结构体数组和记录数*/
void SaveRecord(Product t[],int n)
{
int i;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","w"))==NULL)
{
printf("can not open file\n");
exit(1);
}
fprintf(fp,"%d\n",n);
for(i=0;i<n;i++)
{
fprintf(fp,"%-6d%-20s%-20s",t[i].num,t[i].name,t[i].typenum);
fprintf(fp,"%-10s%-10s%-6s%-8s%-10s%-10s",t[i].norm,t[i].measure,t[i].amount,t[i].price,t[i].comedate,t[i].lastdate);
fprintf(fp,"\r\n");
}
fclose(fp);/*关闭文件*/
}
/*读入函数,参数为结构体数组*/
int LoadRecord(Product t[])
{
int i,n;
FILE *fp;
if((fp=fopen("record.txt","r"))==NULL)
{
printf("can not open file\n");
exit(1);
}
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
fscanf(fp,"%6d%10s%10s%10s%10s%6s%8s%15s%10s",&t[i].num,t[i].name,t[i].typenum,t[i].norm,t[i].measure,t[i].amount,t[i].price,t[i].comedate,t[i].lastdate);
fclose(fp);
printf("从文件中成功读出记录!!!\n");
return n;
}