#include
#include
#include
#include
#include
using namespace std;
//结构体
struct commodity
{
int num;//商品号
char kind[10];//产品的种类
char name[10];//产品的名称
int count;//产品的总量
char date[15];//进货日期
int sale;//销出数量
char saledate[15];//销售时间
} cod[50],codtemp[50],dod[50];//产品名称cod,产品种类dod
//定义函数
void inputnum();
void inputkind();
void inputname();
void sort();
int count(int n);
void binarysearch();
int choice;
int main(int argc, char *argv[])
{
cout<<"\t\t\t欢迎进入产品进销存管理系统"<
cout<<"\t1.产品入库"<
cin>>choice;
switch(choice) {
case 1:cout<<"\t1.产品类的添加"<
switch(choice){
case 1:inputkind();break;
case 2:inputname();break;
case 3:inputnum();break;
default:cout<<"错误!";break;
}break;
case 2:binarysearch();break;
case 3:exit(0); break;
default:cout<<"错误!"<
}
} while(1);
system("PAUSE");
return 0;
}
//计算文件中结构体个数
int count(int n)
{
FILE *fp;
int i;
if((fp=fopen("产品","r"))==NULL)
{
cout<<"打不开文件!"<
}
for(i=0;fread(&cod[i],sizeof(struct commodity),1,fp);i++) //读文件
{
}
return i;
}
//产品种类的添加
void inputkind()
{
FILE *fp1,*fp2;
int i,size,size1,j;
if((fp1=fopen("产品种类","a"))==NULL)
{ //追加
cout<<"打不开文件!"<
}
cout<<"请输入新入库产品种类的个数:";
cin>>size;
for(i=0;i
cout<<"请输入第"<
cout<<"产品的种类:";
cin>>dod[i].kind;
cout<<"请输入该产品种类中产品的个数:";
cin>>size1;
if((fp2=fopen("产品","a"))==NULL)
{ //追加
cout<<"打不开文件!"<
}
for(j=0;j
cout<<"请再次输入种类:";
cin>>cod[j].kind;
cout<<"请输入产品号:";
cin>>cod[j].num;
cout<<"产品的名称:";
cin>>cod[j].name;
cout<<"产品的数量:";
cin>>cod[j].count;
cout<<"产品的进货日期:";
cin>>cod[j].date;
cout<<"销出数量:";
cin>>cod[j].sale;
cout<<"销售时间:";
cin>>cod[j].saledate;
}
fwrite(&cod[i],sizeof(struct commodity),1,fp2);
}
fwrite(&dod[i],10,1,fp1); //把数据写入文件
fclose(fp1);
fclose(fp2);//关闭
}
//产品的添加
void inputname()
{
FILE *fp;
int i,size;
if((fp=fopen("产品","a"))==NULL)
{ //追加
cout<<"打不开文件!"<
}
cout<<"请输入新入库产品的个数:";
cin>>size;
for(i=0;i
cout<<"请输入第"<
cout<<"所属产品的种类:";
cin>>cod[i].kind; //
cout<<"请输入产品号:";
cin>>cod[i].num;
cout<<"产品的名称:";
cin>>cod[i].name;
cout<<"产品的数量:";
cin>>cod[i].count;
cout<<"产品的进货日期:";
cin>>cod[i].date;
cout<<"销出数量:";
cin>>cod[i].sale;
cout<<"销售时间:";
cin>>cod[i].saledate;
}
fwrite(&cod[i],sizeof(struct commodity),1,fp); //把数据写入文件
}
fclose(fp); //关闭
}
//数量的添加
void inputnum()
{
FILE *fp;
int i,size,j;
int k=count(1);
char str[10];//记录增加数量的产品名称
sort();
if((fp=fopen("产品","rb"))==NULL)
{ //追加
cout<<"打不开文件!"<
}
cout<<"请输入增加数量的产品名称:";
cin>>str;
cout<<"请输入数量:";
cin>>size;
for(i=0;fread(&cod[i],sizeof(struct commodity),1,fp);i++)
{
if(strcmp(str,cod[i].name)==0)
{
cod[i].count=cod[i].count+size;
{ //重写
fp=fopen("产品","wb");
for(j=0;j
fclose(fp);
}
break;
}
}
fclose(fp); //关闭
cout<<"添加成功!"<
//商品排序
void sort() //排序函数
{
int i,j,n,last,w;
int templist[30];
struct commodity temp;
FILE *fp;
if((fp=fopen("产品","rb"))==NULL)
{
cout<<"打不开文件!"<
}
int k=count(1);
for(i=0;i
fread(&cod[i],sizeof(struct commodity),1,fp);
templist[i]=cod[i].num;
}
i--;
while(i>0) //冒泡排序
{
last=0;
for(n=0;n {
if(templist[n+1]
w=templist[n];templist[n]=templist[n+1];templist[n+1]=w;
last=n;
}
}
i=last;
}
for(i=0;i
fseek(fp,j*sizeof(struct commodity),0);
fread(&cod[j],sizeof(struct commodity),1,fp);
if(templist[i]==cod[j].num) //比较数组中i的值是否与结构体中商品号相等
codtemp[i]=cod[j]; //将文件中存储的结构体数据暂存在临时结构体中
}
fclose(fp);
{ //重写
FILE *fp;
fp=fopen("产品","wb");
for(i=0;i
fclose(fp);
}
}
// 查找商品
void binarysearch()
{
int low=0,high,k,mid=0,m,seek;
char str[10];
k=count(1);
high=k-1;
sort(); //调用
cout<<"请选择查找方式:"<
switch(seek)
{ case 1:
{
cout<<"请输入产品号:";
cin>>m;
while(low<=high) //折半查找
{
mid=(low+high)/2;
if(m==cod[mid].num)
{
FILE *fp;
if((fp=fopen("commodity","r"))==NULL)
{
cout<<"打不开文件."<
}
fseek(fp,mid*sizeof(struct commodity),0);
fread(&cod[mid],sizeof(struct commodity),1,fp);
fclose(fp);
//
cout<<"所属产品类:";
cout<
cout<
cout<
break;
}
else if(m
else low=mid+1;
}
if(low!=high)
cout<<"不存在该商品!"<
break;
}
case 2:
{ FILE *fp;
fp=fopen("产品","r");
cout<<"请输入产品名:"<
for(int i=0;fread(&cod[i],sizeof(struct commodity),1,fp);i++)
{
if(strcmp(str,cod[i].name)==0) //是否匹配
{
cout<<"所属产品类:";
cout<
cout<
cout<
}
}
fclose(fp);
break;
}
default :
cout<<"系统关闭!"<
}
}