这是一份商品管理系统,希望达人们可以帮我这个初学者注解一下
#include "stdio.h"#include "string.h"
#define NAME_MAX_LEN 20
#define Prod_MAX_NUM 50
typedef struct
{
int num;
char name[NAME_MAX_LEN];
double unitprice;
int amount;
double totalprice;
}prodNode;
typedef struct sequence
{
prodNode data[Prod_MAX_NUM];
int len;
}seq;
seq product;
void inputGoods()
{
int i,n;
printf("请输入商品个数:\n");
scanf("%d",&n);
if (n<0)
return;
for (i=0;i<n;i++)
{
printf("请输入第%d个商品记录。\n",i+1);
printf("输入商品的编号:\n");
scanf("%d",&product.data[i].num);
printf("输入商品的名字:\n");
scanf("%s",product.data[i].name);
printf("输入商品的单价:\n");
scanf("%lf",&product.data[i].unitprice);
printf("输入商品的数量:\n");
scanf("%d",&product.data[i].amount);
product.data[i].totalprice=product.data[i].unitprice*product.data[i].amount;
}
product.len=n;
}
void outputGoods()
{
int i;
if (product.len==0)
{
printf("\n无数据!\n");
return;
}
printf("\n商品的记录为:\n");
printf("编号\t名字\t单价\t数量\t总价\n");
for (i=0;i<product.len;i++)
{
printf("%d\t%s\t%lf\t%d\t%.2lf",product.data[i].num,product.data[i].name,product.data[i].unitprice,product.data[i].amount,product.data[i].totalprice);
printf("\n");
}
}
void saveGoods()
{
int i;
FILE *fp;
if (product.len==0)
{
printf("\n无数据!\n");
return;
}
fp=fopen("d:\\cwz\\goods.txt","a");
if (fp==NULL)
{
printf("文件打开失败!\n");
return;
}
for (i=0;i<product.len;i++)
{ fprintf(fp,"\n");
fprintf(fp,"%d\t",product.data[i].num);
fprintf(fp,"%s\t",product.data[i].name);
fprintf(fp,"%lf\t",product.data[i].unitprice);
fprintf(fp,"%d\t",product.data[i].amount);
fprintf(fp,"%.2lf",product.data[i].totalprice);
}
fclose(fp);
printf("已成功存盘!\n");
}
void readGoods()
{
int i;
FILE *fp;
fp=fopen("d:\\cwz\\goods.txt","r");
if (fp==NULL)
{
printf("文件打开失败!\n");
return;
}
i=0;
while (!feof(fp))
{
fscanf(fp,"%d",&product.data[i].num);
fscanf(fp,"%s",product.data[i].name);
fscanf(fp,"%lf",&product.data[i].unitprice);
fscanf(fp,"%d",&product.data[i].amount);
fscanf(fp,"%lf",&product.data[i].totalprice);
i++;
}
product.len=i;
fclose(fp);
printf("已从文件成功读取%d条成绩记录!\n",product.len);
}
void insertOneGoods()
{
prodNode G;
int i,pos;
if (product.len==Prod_MAX_NUM)
{
printf("表已满!\n");
return;
}
printf("请输入插入位置:");
scanf("%d",&pos);
if (pos<0||pos>product.len)
{ printf("插入位置出错!\n");
return;
}
printf("请输入要插入的商品记录:\n");
printf("请输入编号:");
do {
scanf("%d",&G.num);
if (G.num<=0)
printf("输入的编号不合理,请重新输入。\n");
}while (G.num<=0);
printf("输入商品的名字:\n");
scanf("%s",G.name);
printf("输入商品的单价:\n");
scanf("%lf",&G.unitprice);
printf("输入商品的数量:\n");
scanf("%d",&G.amount);
G.totalprice=G.unitprice*G.amount;
for (i=product.len-1;i>=pos;i--)
product.data[i+1]=product.data[i];
product.data[pos]=G;
product.len=product.len+1;
printf("插入成功!");
}
void deleteOneGoods()
{
int i,pos;
if (product.len==0)
{
printf("表空!\n");
return;
}
printf("请输入要删除的商品记录的位置:");
scanf("%d",&pos);
if (pos<0||pos>product.len-1)
{
printf("删除的位置出错!\n");
return;
}
for (i=pos+1;i<=product.len-1;i++)
product.data[i-1]=product.data[i];
product.len=product.len-1;
printf("删除成功!\n");
}
void bubbleSortByNum()
{
int i,j,n;
prodNode temp;
int tag;
n=product.len;
for (tag=1,i=0;i<n-1 && tag==1;i++)
{
tag=0;
for (j=n-1;j>i;j--)
if (product.data[j].num<product.data[j-1].num)
{
temp=product.data[j];
product.data[j]=product.data[j-1];
product.data[j-1]=temp;
tag=1;
}
}
}
void bubbleSortByTotal()
{
int i,j,n;
prodNode temp;
int tag;
n=product.len;
for (tag=1,i=0;i<n-1 && tag==1;i++)
{
tag=0;
for (j=n-1;j>i;j--)
if (product.data[j].totalprice<product.data[j-1].totalprice)
{
temp=product.data[j];
product.data[j]=product.data[j-1];
product.data[j-1]=temp;
tag=1;
}
}
}
void sortGoods()
{
int subMenuItem=1;
while (subMenuItem!=0)
{
printf("\n\n");
printf("******************排序子菜单***********************\n");
printf("* 1.按照商品编号进行递增排序 *\n");
printf("* 2.按照商品总价进行递增排序 *\n");
printf("* 0.退出子菜单 *\n");
printf("***************************************************\n");
printf("请输入所选子菜单项序号:");
scanf("%d",&subMenuItem);
switch (subMenuItem)
{
case 1:
bubbleSortByNum();
printf("已按照商品的编号进行递增排序。排序后的结果为:\n");
outputGoods();
break;
case 2:
bubbleSortByTotal();
printf("已按照商品的总价进行递增排序。排序后的结果为:\n");
outputGoods();
break;
case 0:break;
default:printf("输入超出范围!\n"); break;
}
}
}
void outputHead()
{
printf("编号\t名字\t单价 \t数量\t总价\n");
}
void outputOneGoods(prodNode s)
{
printf("%d\t%s\t%lf \t%d\t%.2lf",s.num,s.name,s.unitprice,s.amount,s.totalprice);
printf("\n");
}
int isNumberExist (int number)
{
int n,i=0;
n=product.len;
while (i<n &&product.data[i].num!=number)
i++;
if (i<n)
return i;
else
return -1;
}
void seqSearchByNumber (int number)
{
int pos;
pos=isNumberExist(number);
if (pos !=-1)
{
printf("查找成功!查找结果如下:\n");
outputHead();
outputOneGoods(product.data[pos]);
}
else
printf("查找失败!编号为%d的商品不存在。\n",number);
}
void seqSearchByName(char name[])
{
int flag=0;
int n,i;
n=product.len;
i=0;
while (i<n)
{
if (strcmp(product.data[i].name,name)==0)
{
if (flag==0)
{
flag=1;
printf("查找成功!查找结果如下:\n");
outputHead();
}
outputOneGoods(product.data[i]);
}
i++;
}
if (flag==0)
printf("查找失败!名字为%s的商品不存在。\n",name);
}
void searchGoods()
{
int number;
char name[NAME_MAX_LEN];
int subMenuItem=1;
while (subMenuItem!=0)
{
printf("\n\n");
printf("*********************查找子菜单********************\n");
printf("* 1.根据商品编号进行查找 *\n");
printf("* 2.根据商品名字进行查找 *\n");
printf("* 0.退出系统 *\n");
printf("***************************************************\n");
printf("请输入所选子菜单项序号:");
scanf("%d",&subMenuItem);
switch (subMenuItem)
{
case 1:
printf("请输入要查找的商品编号:");
scanf("%d",&number);
seqSearchByNumber(number);
break;
case 2:
printf("请输入要查找的商品名字:");
scanf("%s",name);
seqSearchByName(name);
break;
case 0:break;
default:printf("输入超出范围!\n"); break;
}
}
}
void main()
{
int menuItemCode=1;
product.len=0;
while (menuItemCode!=0)
{
printf("\n\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("* 0.退出系统 *\n");
printf("********************************\n");
printf("请输入所选项菜单项序号:");
scanf("%d",&menuItemCode);
switch (menuItemCode)
{
case 1:inputGoods(); break;
case 2:outputGoods(); break;
case 3:saveGoods(); break;
case 4:readGoods(); break;
case 5:insertOneGoods(); break;
case 6:deleteOneGoods(); break;
case 7:sortGoods(); break;
case 8:searchGoods(); break;
case 0:break;
default:printf("输入超出范围!\n"); break;
}
}
}