·C语言项目案例分析中第23章商品管理系统为什么能运行,但是结果不对!录入的信息都不能保存到文件的?为什么?
发表在C语言图书答疑 2014-10-11
是否精华
版块置顶:
#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.11f%-12.11f%-12.11f\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;
}comm[100000],t;

void in();
void show();
void order();
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 0:break;
case 1:in();break;
case 2:search();break;
case 3:del();break;
case 4:modify();break;
case 5:insert();break;
case 6:order();break;
case 7:total();break;
default:printf("error! 操作错误.....\n");break;
}
getch();
menu();
scanf("%d",&n);
}
}

void menu()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t--------欢迎将进入商品管理系统----------------\n");
printf("\t\t|\t0.退出 |\n");
printf("\t\t|\t1.录入记录 |\n");
printf("\t\t|\t2.查找记录 |\n");
printf("\t\t|\t3.删除记录 |\n");
printf("\t\t|\t4.修改记录 |\n");
printf("\t\t|\t5.插入记录 |\n");
printf("\t\t|\t6.排序记录 |\n");
printf("\t\t|\t7.统计记录 |\n");
printf("\t\t|--------------------------------------------|\n");
printf("\t\t\t请输入您的操作类型【0-7】: \n"); 
}

void in() //录入模块
{
int i,m=0;
char ch[2];
FILE *fp;
if((fp=fopen("data.txt","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");
show();
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
for(i=0;i<m;i++)
fwrite(&comm[i],LEN,1,fp);
printf("是否输入?(y/n):\n");
scanf("%s",ch);
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("编号:\n");
scanf("%d",&comm[m].num);
for(i=0;i<m;i++)
if(comm[m].num==comm[i].num)
{
printf("该记录已经存在,按任意键返回......\n");
getch();
fclose(fp);
return;
}
printf("商品名:\n");
scanf("%s",comm[m].name);
printf("单价:\n");
scanf("%lf",&comm[m].price);
printf("数量:\n");
scanf("%lf",&comm[m].num);
comm[m].total=comm[m].count*comm[m].price;
if(fwrite(&comm[m],LEN,1,fp)!=1)
{
printf("不能保存!\n");
getch();
return;
}
else
{
printf("%s 已经保存!\n",comm[m].name);
m++;
}
printf("是否继续?(y/n):\n");
scanf("%s",ch);
}
fclose(fp);
printf("OK!\n");
return;
}
void show()
{
int i,m=0;
FILE *fp;
if((fp=fopen("data.txt","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
{
printf("编号 商品名称 单价 数量 总金额\t\n");
for(i=0;i<m;i++)
{
printf(FORMAT,DATA);
}
}
}



void search()
{
FILE *fp;
int snum,i,m=0;
char ch[2];
if((fp=fopen("data.txt","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("编号:\n");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==comm[i].num)
{
printf("已经找到记录,是否显示?(y/n):\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()
{
int i,m=0,j,snum;
char ch[2];
FILE *fp;
if((fp=fopen("data.txt","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("请输入编号:\n");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==comm[i].num)
break;
if(i==m)
{
printf("没有找到.....\n");
getch();
return;
}
printf("已经找到记录,是否删除?(y/n):\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.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
for(i=0;i<m;i++)
if(fwrite(&comm[j],LEN,1,fp)!=1)
{
printf("不能保存!\n");
getch();
}
fclose(fp);
}


void modify()
{
int i,m=0,snum;
char ch[2];
FILE *fp;
if((fp=fopen("data.txt","ab+"))==NULL)
{
printf("不能打开文件!\n");
return;
}
while(!feof(fp))
{
if(fread(&comm[m],LEN,1,fp)==1)
m++;
}
fclose(fp);
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("已经找到该记录,是否修改?(y/n):\n");
scanf("%s",ch);
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("商品名:\n");
scanf("%s",comm[i].name);
printf("单价:\n");
scanf("%lf",&comm[i].price);
printf("数量:\n");
scanf("%lf",&comm[i].num);
comm[i].total=comm[i].count*comm[i].price;
}
else
return;
}
else
{
printf("没有找到......\n");
getchar();
return;
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
for(i=0;i<m;i++)
if(fwrite(&comm[i],LEN,1,fp)!=1)
{
printf("不能保存!\n");
getch();
}
fclose(fp);
}

void insert()
{
int i,m=0,j,k,snum;
FILE *fp;
if((fp=fopen("data.txt","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("请输入您要插入的信息:\n");
printf("编号:\n");
scanf("%d",&comm[i+1].num);
for(k=0;k<m;k++)
if(comm[k].num==comm[i+1].num&&k!=i+1)
{
printf("该编号已经存在,按任意键继续......\n");
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].num);
comm[i+1].total=comm[i+1].count*comm[i+1].price;
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
for(k=0;k<m+1;k++)
if(fwrite(&comm[k],LEN,1,fp)!=1)
{
printf("不能保存!\n");
getch();
}
fclose(fp);
}







void total()
{
int i,m=0;
FILE *fp;
if((fp=fopen("data.txt","ab+"))==NULL)
{
printf("不能打开记录!\n");
return;
}
while(!feof(fp))
{
if(fread(&comm[m],LEN,1,fp)==1)
m++;
}
if(m==0)
{
printf("无商品记录........\n");
fclose(fp);
}
else
{
printf("编号 商品名称 单价 数量\t\n");
for(i=0;i<m;i++)
{
printf("%-8d%-15s%-12.11f%-12.11f\n",comm[i].num,comm[i].name,comm[i].price,comm[i].count);
}
printf("一共有%d条记录!\n",m);
fclose(fp);
}
}



void order()
{
int i,j,m=0;
FILE *fp;
if((fp=fopen("data.txt","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
{
for(i=0;i<m;i++)
for(j=i+1;j<m;j++)
{
if(comm[i].total<comm[j].total)
{
t=comm[i];
comm[i]=comm[j];
comm[j]=t;
}
}
printf("编号 商品名称 单价 数量 总金额\t\n");
for(i=0;i<m;i++)
{
printf(FORMAT,DATA);
}
}
}
分享到:
精彩评论 1
学分: LV1
TA的每日心情
开心
2020-06-16 09:16:38
2014-10-13
沙发
按1,录入产品信息,然后会发现在源文件的文件夹中出现了一个data的文件,这个文件就是录入信息的文件
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照