从《c语言项目案例分析》抄下来的,不能使用,跪求原因orz

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct commdity)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf-12.1lf\n"
#define DATA comm[i].num,comm[i].name,comm[i].price,comm[i].count,comm[i].total
struct commdity
{
int num;
char name[15];
double price;
double count;
double total;
};
struct commdity comm[50];
void in();
void del();
void modify();
void menu();
void insert();
void total();
void search();


void main()
{
int n;
menu();
scanf("%d", &n);
while (n);
{
switch(n)
{
case 1:
in();
break;
case 2:
search();
break;
case 3:
del();
break;
case 4:
modify();
break;
case 5:
insert();
break;
case 7:
total();
break;
default:break;
}
getch();
menu();
scanf("%d", &n);
}
}
void menu()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t|-------------------商品管理系统-------------------|\n");
printf("\t\t|\t 0. 退出                                               |\n");
printf("\t\t|\t 1. 录入记录                                           |\n");
printf("\t\t|\t 2. 查找记录                                           |\n");
printf("\t\t|\t 3. 删除记录                                           |\n");
printf("\t\t|\t 4. 修改记录                                           |\n");
printf("\t\t|\t 5. 插入记录                                           |\n");
printf("\t\t|\t 6. 排序记录                                           |\n");
printf("\t\t|\t 7. 统计记录                                           |\n");
printf("\t\t|--------------------------------------------------|\n");
printf("\t\t\t 选择(0-7):");
}
void in() //录入
{
int i, m=0;
char ch[2];
FILE *fp;
if ((fp=fopen("data","ab+")) == NULL)
{
printf("不能打开文件!\n");
return;
}
while (!feof(fp))
{

if(fread(&comm[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if (m==0)
printf("没有找到!\n");
else
{
system("cls");
total();
}
if ((fp=fopen("data","wb"))==NULL)
{
printf("不能打开文件!\n");
return ;
}
for (i = 0;i<m;i++)
fwrite(&comm[i],LEN,1,fp);
printf("是否输入?(y/n):");
scanf("%s0", ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("编号:");
scanf("%d", &comm[m].num);
for (i = 0;i<m;i++)
{
if (comm[i].num == comm[m].num)
{
printf("该记录已经存在, 按任意键继续!");
getch();
fclose(fp);
return;
}
}
printf("商品名:");
scanf("%s",comm[m].name);
printf("单价:");
scanf("%lf", &comm[m].price);
printf("数量:");
scanf("%lf", &comm[m].count);
comm[m].total=comm[m].price*comm[m].count;
if (fwrite(&comm[m],LEN,1,fp)!=1)
{
printf("不能保存!");
getch();
}
else
{
printf("%s 已经保存!\n",comm[m].name);
m++;
}
printf("是否继续?(y/n):");
scanf("%s", ch);
}
fclose(fp);
printf("OK!\n");
}
void search()
{
FILE *fp;
int snum,i,m=0;
char ch[2];
if((fp=fopen("data","ab+"))==NULL)
{
printf("不能打开文件\n");
return;
}
while(!feof(fp))
if(fread(&comm[m],LEN,1,fp)==1)
m++;
fclose(fp);
if (m==0)
{
printf("没有记录!\n");
return;
}
printf("请输入编号:");
scanf("%d", &snum);
for (i=0;i<m;i++)
{
if (snum==comm[i].num)
{
printf("已经找到该记录, 是否显示?(y/n)");
scanf("%s", ch);
if (strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("编号 商品名称 单价 数量 总金额\t\n");
printf(FORMAT,DATA); /*将查找出的结果按指定格式输出*/
break;
}
else
{
return;
}
}
if (i==m)
printf("没有找到相应的记录!\n");
}
}
void del()
{
FILE *fp;
int snum, i,j,m=0;
char ch[2];
if((fp=fopen("data","ab+"))==NULL)
{
printf("不能打开文件\n");
return;
}
while(!feof(fp))
if(fread(&comm[m],LEN,1,fp)==1)
m++;
fclose(fp);
if (m==0)
{
printf("没有记录!\n");
return;
}
printf("请输入编号:");
scanf("%d", &snum);
for (i=0;i<m;i++)
{
if (snum==comm[i].num)
break;
}
if (i==m)
{
printf("没有找到!");
getchar();
return;
}
printf("已经找到该记录, 是否删除?(y/n)");
scanf("%s", ch);
if (strcmp(ch,"Y")==0||strcmp(ch,"y")==0);
{
for(j=i;j<m;j++)
comm[j] = comm[j+1];/*将后一个记录移到前一个记录的位置*/
m--;
printf("成功删除!\n");
}
if ((fp=fopen("data","wb"))==NULL)
{
printf("不能打开!\n");
return;
}
for (j=0;j<m;j++)
if (fwrite(&comm[j],LEN,1,fp)!=1)
{
printf("不能保存!\n");
getch();
}
fclose(fp);
}
void modify()                   /*自定义修改函数*/
{
FILE *fp;
int i,j,m=0,snum;
if ((fp=fopen("data","ab+"))==NULL)
{
printf("不能打开文件!\n");
return;
}
while(!feof(fp))
if (fread(&comm[m],LEN,1,fp)==1)
m++;
if (m==0)
{
printf("没有记录!\n");
fclose(fp);
return;
}
printf("请输入要修改的记录信息的编号!\n");
scanf("%d", &snum);
for (i=0;i<m;i++)
if (snum==comm[i].num)
break;
if (i<m)
{
printf("已经找到该记录, 是否修改?\n");
printf("商品名:\n");
scanf("%s", comm[i].name);
printf("\n 单价:");
scanf("%lf", &comm[i].price);
printf("\n 数量:");
scanf("%lf", &comm[i].count);
comm[i].total = comm[i].price * comm[i].count;
}
else
{
printf("没有找到!");
getchar();
return;
}
if((fp= fopen("data","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
for(j=0;j<m;j++)
if(fwrite(&comm[j],LEN,1,fp)!=1)
{
printf("不能保存!");
getch();
}
fclose(fp);
}
void insert()
{
FILE *fp;
int i, j, k, m=0,snum;
if((fp=fopen("data","ab+"))==NULL)
{
printf("不能打开文件!\n");
return;
}
while(!feof(fp))
if(fread(&comm[m],LEN,1,fp)==1)
m++;
if(m==0)
{
printf("没有记录!\n");
fclose(fp);
return;
}
printf("请输入要插入记录的未知!\n");
scanf("%d",&snum);
for (i=0;i<m;i++)
if (snum==comm[i].num)
break;
for (j=m-1;j>i;j--)
comm[j+1]=comm[j];
printf("now please input the new information.\n");
printf("编号");
scanf("%d", &comm[i+1].num);
for (k=0;k<m;k++)
if(comm[k].num == comm[i+1].num && k!=i+1)
{
printf("该编号已经存在, 按任意键继续!");
getch();
fclose(fp);
return;
}
printf("商品名:\n");
scanf("%s", comm[i+1].name);
printf("\n 单价:");
scanf("%lf", &comm[i+1].price);
printf("\n 数量:");
scanf("%lf", &comm[i+1].count);
comm[i+1].total = comm[i+1].price *comm[i+1].count;
if((fp= fopen("data","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
for (k = 0;k<=m;k++)
if (fwrite(&comm[k],LEN,1,fp)!=1)
{
printf("不能保存!");
getch();
}
fclose(fp);
}
void total()
{
FILE *fp;
int m=0;
if((fp= fopen("data","ab+"))==NULL)
{
printf("不能打开记录!\n");
return;
}
while(!feof(fp))
if(fread(&comm[m],LEN,1,fp)==1)
m++;
if(m==0)
{
printf("没有记录!\n");
fclose(fp);
return;
}
printf("一共有 %d 条记录!\n",m);
fclose(fp);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值