#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUMBER 1000;//可錄入商品總數
void fun1(){
printf("\n");
int o;
int choice;
int i=0;
typedef struct good//單一商品結構
{
int number;//商品編號
char name[4]={'\0','\0','\0','\0'};//商品名
char inprice[4]={'\0','\0','\0','\0'};//商品進貨價格
char outprice[4]={'\0','\0','\0','\0'};//商品銷售價格
int numbers;//商品庫存量
}GOOD;
GOOD goods;
FILE *fp ;
fp=fopen("商品庫存表.txt" , "a+");//打開檔案
if ( fp == NULL )
{
printf("檔案打開失敗!\n") ;
}
do//商品資訊錄入
{
goods.number=0;
goods.number+=1;
printf("請輸入入庫商品的名稱\n");//商品名
scanf("%s",&goods.name);
getchar();
printf("請輸入商品進貨價格\n");//商品進貨價格
scanf("%s",&goods.inprice);
getchar();
printf("請輸入商品銷售價格\n");//商品銷售價格
scanf("%s",&goods.outprice);
getchar();
printf("請輸入入庫商品的數量\n");//商品庫存數量
scanf("%d",&goods.numbers);
o=fwrite( &goods , sizeof(GOOD), 1, fp ); //將資訊寫入檔案
printf("%d\n",o);
printf("是否繼續錄入?(按數字1繼續,數字0退出)");//判斷是否繼續錄入?
scanf("%d",&choice);//讀取用戶選擇
getchar();//吃回車
}
while(choice==1);
fclose(fp);//關閉檔案夾
}
void fun3(){
char names[10];//用戶購買商品名
int i=0;
int b,j,xuanze=0;
int count;
int m=0;
int c=0;
typedef struct good//單一商品結構
{
int number;//商品編號
char name[10] ;//商品名
char inprice ;//商品進貨價格
char outprice;//商品銷售價格
int numbers;//商品庫存量
}GOOD;
//GOOD *p;
GOOD goods[1000];
FILE *fp ;
fp=fopen("商品庫存表.txt" , "a+");//打開檔案
if ( fp == NULL )
{
printf("檔案打開失敗!\n");
}
rewind(fp);//指標位置重置
do
{
count=fread(&goods,sizeof(GOOD),1,fp); //從檔案中讀所有商品的資料
if(count==1)
m++;
}while (!feof (fp));//判斷是否讀到檔案尾
fclose(fp);
printf("系統準備完畢!\n");
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("ok");
}
else
printf("%d",goods[i].number);
}
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熱心網友回復:
讀寫結構體,要采用二進制讀寫!打開方式用ab+uj5u.com熱心網友回復:
開始用的二進制,然后讀出來資訊對應不上,轉換成txt,里面用一些燙燙字uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define NUMBER 1000;//可錄入商品總數 #為啥要加分號
#define NUMBER 1000 //可錄入商品總數
typedef struct good//單一商品結構
{
int number;//商品編號
char name[32];//={'\0','\0','\0','\0'};//商品名
char inprice[4];//={'\0','\0','\0','\0'};//商品進貨價格
char outprice[4];//={'\0','\0','\0','\0'};//商品銷售價格
int numbers;//商品庫存量
}GOOD;
void fun1(){
printf("\n");
int o;
int choice;
int i=0;
/*
typedef struct good//單一商品結構
{
int number;//商品編號
char name[4];//={'\0','\0','\0','\0'};//商品名
char inprice[4];//={'\0','\0','\0','\0'};//商品進貨價格
char outprice[4];//={'\0','\0','\0','\0'};//商品銷售價格
int numbers;//商品庫存量
}GOOD;
*/
GOOD goods;
FILE *fp ;
fp=fopen("商品庫存表.txt" , "a+");//打開檔案
if ( fp == NULL )
{
printf("檔案打開失敗!\n") ;
}
do//商品資訊錄入
{
goods.number=0;
goods.number+=1;
printf("請輸入入庫商品的名稱\n");//商品名
//scanf("%s",&goods.name);
scanf("%s", goods.name);
//getchar();
printf("請輸入商品進貨價格\n");//商品進貨價格
//scanf("%s",&goods.inprice);
scanf("%s", goods.inprice);
//getchar();
printf("請輸入商品銷售價格\n");//商品銷售價格
//scanf("%s",&goods.outprice);
scanf("%s", goods.outprice);
//getchar();
printf("請輸入入庫商品的數量\n");//商品庫存數量
scanf("%d", &goods.numbers);
o=fwrite( &goods , sizeof(GOOD), 1, fp ); //將資訊寫入檔案
printf("%d\n",o);
printf("是否繼續錄入?(按數字1繼續,數字0退出)");//判斷是否繼續錄入?
scanf("%d", &choice);//讀取用戶選擇
//getchar();//吃回車
}
while(choice==1);
fclose(fp);//關閉檔案夾
}
void fun3(){
char names[10];//用戶購買商品名
int i=0;
int b,j,xuanze=0;
int count;
int m=0;
int c=0;
/*
typedef struct good//單一商品結構
{
int number;//商品編號
char name[10] ;//商品名
char inprice ;//商品進貨價格
char outprice;//商品銷售價格
int numbers;//商品庫存量
}GOOD;
*/
//GOOD *p;
GOOD goods[1000];
FILE *fp ;
fp=fopen("商品庫存表.txt" , "a+");//打開檔案
if ( fp == NULL )
{
printf("檔案打開失敗!\n");
}
rewind(fp);//指標位置重置
do
{
//count=fread(&goods,sizeof(GOOD),1,fp); //從檔案中讀所有商品的資料
count=fread(&goods[m],sizeof(GOOD),1,fp); //從檔案中讀所有商品的資料
if(count==1)
m++;
}while (!feof (fp));//判斷是否讀到檔案尾
fclose(fp);
printf("系統準備完畢!\n");
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("ok");
}
else
printf("%d",goods[i].number);
}
//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;
}
}
}
供參考~
為什么宣告兩個結構體呢?
還在每個函式里宣告同名但不一樣的結構體。
還要兩個結構體在一個函式里運用?
fread/fwrite的是以二進制形式讀取和寫入的,因此打開檔案內容會出現亂碼。如果fscanf/fprintf不會,因為這對函式是格式話文本形式讀寫檔案的。
uj5u.com熱心網友回復:
為什么寫入后讀出的資訊還是不一致,里面有些資訊還是讀入的燙字,那個int型別寫入在文本里面無法正常顯示嗎?uj5u.com熱心網友回復:
讀之前對buf memset一下
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/55064.html
標籤:C語言
上一篇:課設
下一篇:服務端高并發分布式架構演進之路
