#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct good//單一商品結構
{
char name[4];
char *inprice;
char *outprice;
int numbers;//商品庫存量
}GOOD;
void fun1(){
printf("\n");
int choice;
int i=0;
GOOD goods;
FILE *fp ;
fp=fopen("商品庫存表.txt" , "a+");//打開檔案
if ( fp == NULL )
{
printf("檔案打開失敗!\n") ;
}
do//商品資訊錄入
{
printf("請輸入入庫商品的名稱\n");//商品名
scanf("%s", goods.name);
//getchar();
printf("請輸入商品進貨價格\n");//商品進貨價格
scanf("%s", &goods.inprice);
printf("請輸入商品銷售價格\n");//商品銷售價格
scanf("%s",&goods.outprice);
//getchar();
printf("請輸入入庫商品的數量\n");//商品庫存數量
scanf("%d", &goods.numbers);
fwrite( &goods , sizeof(GOOD), 1, fp ); //將資訊寫入檔案
printf("是否繼續錄入?(按數字1繼續,數字0退出)");//判斷是否繼續錄入?
scanf("%d", &choice);//讀取用戶選擇
//getchar();//吃回車
}
while(choice==1);
fclose(fp);//關閉檔案夾
}
void fun3(){
char names[10];//用戶購買商品名
int i=0;
double f;
int b,j,xuanze=0;
int count,chioce;
int m=0;
int c=0;
double sum=0;
GOOD goods[1000];
FILE *fp ;
fp=fopen("商品庫存表.txt" , "a+");//打開檔案
if ( fp == NULL )
{
printf("檔案打開失敗!\n");
}
rewind(fp);//指標位置重置
do
{
count=fread(&goods[m],sizeof(GOOD),1,fp); //從檔案中讀所有商品的資料
if(count==1)
{
printf("成功讀入第%d個\n",m+1);
m++;
}
}while (!feof (fp));//判斷是否讀到檔案尾
fclose(fp);
printf("系統準備完畢!\n");
do{
printf("請輸入要購買的商品名:\n");
scanf("%s",names);
getchar();
for(j=0;j<m;j++)//通過商品名查詢價格
{
if(strcmp(names,goods[c].name) != 0)
{
xuanze=1;
}
c++;
}
if(xuanze!=1)
exit(0);
printf("請輸入需要購買商品的數量\n");
scanf("%d",&b);
getchar();
if(b<=goods[i].numbers)//庫存足夠
{
printf("商品購買成功!");
}
f=atof(goods[i].outprice);
printf("%lf",f);
sum+=f*b;
printf("是否需要繼續購買?(1繼續購買,0結算)\n");
scanf("%d",&chioce);
getchar();
}while(chioce==1);
printf("正在結算,請稍等.....\n");
printf("您一共需要支付%.2f元!\n",sum);
printf("感謝您的光顧,祝您生活愉快!");
getchar();
}
//void main()
void main()
{
int choice;
while(1)
{
printf("\n\n\n");
printf("****歡*迎*使*用*商*品*銷*售*管*理*系*統****\n");
printf("* *\n");
printf("* 1.庫存表資料錄入 *\n");
printf("* 2.銷售表資料錄入 *\n");
printf("* 3.銷售商品 *\n");
printf("* 4.庫存表查詢 *\n");
printf("* 5.銷售表查詢 *\n");
printf("* 0.退出 *\n");
printf("* *\n");
printf("*******************************************\n");
printf("please choice(0-5):");
scanf("%d",&choice);
switch(choice)
{
case 0: exit(0); // 頭檔案定義 <stdlib.h>,結束程式
case 1: fun1() ;break;
case 2: // fun2() ;break;
case 3: fun3() ;break;
case 4: // fun4() ;break;
case 5: //fun5();
break;
}
}
}
uj5u.com熱心網友回復:
把inprice和outprice改成字符陣列uj5u.com熱心網友回復:
剛才改了,執行到輸出atof的回傳值時,還是不能繼續了uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct good//單一商品結構
{
char name[32];
//char *inprice;
//char *outprice;
char inprice[16];
char outprice[16];
int numbers;//商品庫存量
}GOOD;
void fun1(){
printf("\n");
int choice;
int i=0;
GOOD goods;
FILE *fp ;
fp=fopen("商品庫存表.txt" , "a+");//打開檔案
if ( fp == NULL )
{
printf("檔案打開失敗!\n") ;
}
do//商品資訊錄入
{
printf("請輸入入庫商品的名稱\n");//商品名
scanf("%s", goods.name);
//getchar();
printf("請輸入商品進貨價格\n");//商品進貨價格
//scanf("%s", &goods.inprice);
scanf("%s", goods.inprice);
printf("請輸入商品銷售價格\n");//商品銷售價格
//scanf("%s",&goods.outprice);
scanf("%s", goods.outprice);
//getchar();
printf("請輸入入庫商品的數量\n");//商品庫存數量
scanf("%d", &goods.numbers);
fwrite( &goods , sizeof(GOOD), 1, fp ); //將資訊寫入檔案
printf("是否繼續錄入?(按數字1繼續,數字0退出)");//判斷是否繼續錄入?
scanf("%d", &choice);//讀取用戶選擇
//getchar();//吃回車
}
while(choice==1);
fclose(fp);//關閉檔案夾
}
void fun3(){
char names[10];//用戶購買商品名
int i=0;
double f;
int b,j,xuanze=0;
int count,chioce;
int m=0;
int c=0;
double sum=0;
GOOD goods[1000];
FILE *fp ;
fp=fopen("商品庫存表.txt" , "a+");//打開檔案
if ( fp == NULL )
{
printf("檔案打開失敗!\n");
}
rewind(fp);//指標位置重置
do
{
count=fread(&goods[m],sizeof(GOOD),1,fp); //從檔案中讀所有商品的資料
if(count==1)
{
printf("成功讀入第%d個\n",m+1);
m++;
}
}while (!feof (fp));//判斷是否讀到檔案尾
fclose(fp);
printf("系統準備完畢!\n");
do{
printf("請輸入要購買的商品名:\n");
scanf("%s",names);
getchar();
for(j=0;j<m;j++)//通過商品名查詢價格
{
if(strcmp(names,goods[c].name) != 0)
{
xuanze=1;
}
c++;
}
if(xuanze!=1)
exit(0);
printf("請輸入需要購買商品的數量\n");
scanf("%d",&b);
//getchar(); //為啥要加呢
if(b<=goods[i].numbers)//庫存足夠
{
printf("商品購買成功!");
}
f=atof(goods[i].outprice);
printf("%lf", f);
sum+=f*b;
printf("是否需要繼續購買?(1繼續購買,0結算)\n");
scanf("%d",&chioce);
//getchar(); //為啥要加呢?
}while(chioce==1);
printf("正在結算,請稍等.....\n");
printf("您一共需要支付%.2f元!\n",sum);
printf("感謝您的光顧,祝您生活愉快!");
getchar();
}
//void main()
int main()
{
int choice;
while(1)
{
printf("\n\n\n");
printf("****歡*迎*使*用*商*品*銷*售*管*理*系*統****\n");
printf("* *\n");
printf("* 1.庫存表資料錄入 *\n");
printf("* 2.銷售表資料錄入 *\n");
printf("* 3.銷售商品 *\n");
printf("* 4.庫存表查詢 *\n");
printf("* 5.銷售表查詢 *\n");
printf("* 0.退出 *\n");
printf("* *\n");
printf("*******************************************\n");
printf("please choice(0-5):");
scanf("%d",&choice);
switch(choice)
{
case 0: exit(0); // 頭檔案定義 <stdlib.h>,結束程式
case 1: fun1() ;break;
case 2: // fun2() ;break;
case 3: fun3() ;break;
case 4: // fun4() ;break;
case 5: //fun5();
break;
}
}
}
供參考~
樓主不止一次問這個程式了吧。
之前給你改的,你沒有完全領會呀。結構體宣告里用的是指標,在scanf之前為什么不申請空間,不申請空間進出價變數都是野指標呢。
要么宣告時就用陣列,不用指標。
另外atof不對的原因可能是讀取到的就有問題,讀取有問題,那么寫入的就會有問題。建議先把商品的檔案刪掉,重新運行我改的程式。
uj5u.com熱心網友回復:
結構體要么給那兩個 char* 改為char [大小]; 要么改為 double,然后把printf和scanf的相關格式化改下 。 你把這個程式放到vs里面跑 ,按F5 很好調的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/53558.html
標籤:C語言
下一篇:輸出結果少好多資料怎么改正呀?
