# include & ltconio.h & gt
# include & ltstring.h & gt
#定義尺寸300
typedef結構
{
char name[30];
int num
char尚[10];
浮動價格;
}記錄;
void DataInput(record *com,int * nptr);
int DataRead(record *com,int * nptr);
void DataStorage(record *com,int n);/*將信息保存到文件*/
void data find();
void data display();
void data add();
void DataDel();
void DataStatistic();
int main()
{
記錄尚品[大小];
int number = 20/*設置商品的數量*/
char fn
Printf ("\ t ~ ~ ~ ~商品管理系統~ ~ ~ ~ ");
while(1)
{
Printf("\n\t\t1。商品信息錄入\ n ");/*顯示主菜單*/
Printf("\t\t2。商品信息展示\ n ");
Printf("\t\t3。商品信息搜索\ n ");
Printf("\t\t4。添加商品信息\ n ");
Printf("\t\t5。商品信息已刪除\ n ");
Printf("\t\t6。商品信息統計\ n ");
Printf("\t\t0。退出系統”);
printf(" \ n \ t ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\ n ");
printf(" \ t請輸入壹個選項(數字0-6):");
fflush(stdin);
scanf("%c ",& ampfn);
puts(" \ n ");
開關(fn) /*切換到不同的功能*/
{
案例“1”:
數據輸入(尚品& amp號);
打破;/*輸入信息*/
案例“2”:data display();
打破;/*信息顯示*/
案例“3”:
data find();
打破;/*信息搜索*/
案例“4”:
DataAdd();
打破;/*添加*/
案例“5”:
DataDel();
打破;/*刪除*/
案例“6”:
DataStatistic();
打破;/*信息統計*/
案例“0”:
返回0;
默認值:puts(" \ t \ t沒有這樣的項目!回到主菜單!”);
打破;
}
Printf ("\ n \ t \ tOver!按任意鍵繼續”);
getch();
puts(" \ n ");
}
}
作廢數據輸入(record * com,int * nptr)/*商品信息輸入*/
{
int I = 0;
int n;/*條目總數*/
char YesOrNo/*判斷是否保存*/
夏爾·尚明[30];/*企業名稱*/
馬浩境內;/*商品編號*/
char尚佳[10];/*單價*/
浮動賈丹;
printf(" \ t \ t請輸入貨物數量:");
scanf("%d ",& ampn);
* nptr = n;/*nptr返回商品數量*/
printf(" \ t \ t立即輸入這%d個產品信息:\n\n ",n);
while(我& ltn)
{
Printf("請輸入產品名稱:",I+1);
scanf("%s ",& amp尚明);
Printf("請輸入商品的商品編號:",I+1);
scanf("%d ",& amp馬浩);
Printf("請輸入商品生產廠家:",I+1);
scanf("%s ",& amp尚佳);
Printf("請輸入商品單價:",I+1);
scanf("%f ",& amp賈丹);
如果(賈丹& gt= 0 & amp& amp賈丹<=1000) /*只能輸入有效的單價*/
{
strcpy(com[i].姓名,尚明);
com[i]。num =馬浩;
strcpy(com[i].尚、尚佳);
com[i]。價格=賈丹;
I = I+1;
}
其他
Printf("輸入的單價是無效值!!!\ n \ n ");
}/*結束while*/
Printf("您想保存您剛剛輸入的數據嗎(Y/N)?");/*選擇保存*/
fflush(stdin);
scanf("%c ",& ampYesOrNo);
if(YesOrNo=='y'||YesOrNo=='Y ')
DataStorage(com,n);
else if(YesOrNo = = ' N ' | | YesOrNo = = ' N ')
返回;
其他
Printf("輸入的選項不正確\ n ");
返回;
}/*結束函數*/
Void DataFind() /* Find */
{
void OnNumber(record *com,int n);/*按商品編號排序*/
int鍵;/*key是要查找的鍵值*/
int low = 0;/*下限*/
int高;/*上限*/
int mid/*中間值*/
char ans/*選項*/
record com[SIZE];
int n;
if(DataRead(com & amp;N)==1) /*從文件中讀取信息*/
{
OnNumber(com,n);/*首先按商品編號排序*/
高= n;
做
{
printf(" \ n \ n \ t \ t請輸入您要查找的產品編號:");
scanf("%d ",& amp關鍵);
低= 0;高= n;
while(low & lt;=高)
{
mid =(高+低)/2;/*半搜索法*/
if (key == com[mid])。數字)
{
printf(" \ n \ t \ t您正在尋找%d產品\ n ",mid+1);
printf(" \ t \ t結果如下:\ n \ n ");
Printf("序列號\t \t \商品名稱\ t商品編號\ t制造商\ t單價\ n ");
printf(" % 3d % 17s % 12d % 12s % 8.1f \ n ",mid+1,com[mid]。name,com[mid]。num,com[mid]。尚,
com[mid]。價格);
打破;/*如果找到,則退出循環*/
}
if(key & gt;com[mid]。num)low = mid+1;
else high = mid-1;
}
if(低& gt高)
Printf("\t\t,沒有找到這個價格!\ n ");
printf(" \ N \ t \ t是否要繼續查詢(Y/N)?");
ans = getch();
}
while(ans = = ' Y ' | | ans = = ' Y ');/*結束do...while */
}
}
Void數據存儲(record * com,int n)/*輸入並保存文件*/
{
int I;
FILE * comPtr
字符文件名[20];
Printf("請輸入要保存的文件名:");
scanf("%s ",文件名);
Printf("正在將商品信息保存到文件中,請稍候...\ n ");
if((comPtr=fopen(FileName," w"))==NULL)
Printf("文件\n "不存在);
其他
for(I = 0;我& ltn;i++)
fprintf(comPtr," \ n % 17s % 12d % 12s % 8.1f ",com[i]。name,com[i]。num,com[i]。尚,com[i]。價格);
fclose(comPtr);
}
Intdataread (record * com,int * nptr)/* Read file */
{
int I = 0;
char數據文件[20];
FILE * comPtr
* nptr = 0;
Printf("請輸入文件名:");
scanf("%s ",數據文件);
If ((comptr = fopen (datafile," r")) = = null)/*打開文件*/
{
Printf("此文件不可用,請重新輸入!\ n ");
返回0;
}
其他
{
Printf("正在讀取商品單價,請稍候...\ n ");
而(!feof(comPtr)
{
fscanf(comPtr," %s%d%s%f ",& ampcom[i]。姓名& ampcom[i]。數字& ampcom[i]。尚& ampcom[i]。價格);
i++;
}
* nptr = I;
printf(" \ n ");
fclose(comPtr);
返回1;
}
}
void數據顯示()
{
void OnPrice(record *com,int n);/*根據單價*/
void OnNumber(record *com,int n);/*按商品編號*/
int N;
int I;
記錄com[300];
char YesNo/*是否按順序顯示*/
char tp
if(DataRead(com & amp;N)==1) /*從文件中讀取數據*/
{
Printf("序列號\t \t \商品名稱\ t商品編號\ t制造商\ t單價\ n ");
for(I = 0;我& ltn;i++)
printf(" % 3d % 17s % 12d % 12s % 8.1f \ n ",i+1,com[i]。name,com[i]。num,com[i]。尚,com[i]。價格);
Printf("要按順序顯示嗎?(是/否)?”);
fflush(stdin);
scanf("%c ",& ampyes no);
if(YesNo=='y'||YesNo=='Y ')
{
printf(" \ t請輸入排序方法:\ n ");
Printf("\t(1。按價格從低到高排序;2.按商品編號從低到高排序。) ");
fflush(stdin);
scanf("%c ",& ampTP);
if(tp=='1 ')
OnPrice(com,N);
else if(tp =='2 ')
OnNumber(com,N);
其他
printf(" \ t輸入不正確!\ n ");
}
}
}/*結束結果顯示*/
Void OnPrice(record *com,int n) /*按單價排序*/
{ int i,j;
記錄溫度;
printf(" \ t \ t按單價排序-\ n \ n ");
Printf("商品總數為%d:\n ",n);
for(j = 0;j & ltn-1;J++) /*冒泡排序*/
for(I = 0;我& ltn-j-1;i++)
if(com[i].價格& gtcom[i+1]。價格)
{
temp = com[I];
com[I]= com[I+1];
com[I+1]= temp;
}
printf(" \ n \ t \ t按成績排序的結果如下(從低到高):\ n \ n ");
Printf("序列號\t \t \商品名稱\ t商品編號\ t制造商\ t單價\ n ");
for(I = 0;我& ltn;i++)
printf(" % 3d % 17s % 12d % 12s % 8.1f \ n ",i+1,com[i]。name,com[i]。num,com[i]。尚,
com[i]。價格);
}
Void on number (record * com,int n)/*按數字順序排列*/
{
int i,j;
記錄溫度;
printf(" \ t \ t按商品編號排序-\ n \ n ");
Printf("商品總數為%d:\n ",n);
for(j = 0;j & ltn-1;j++)
for(I = 0;我& ltn-j-1;i++)
if(com[i].num & gtcom[i+1]。數字)
{
temp = com[I];
com[I]= com[I+1];
com[I+1]= temp;
}
printf(" \ n \ t按商品編號排序的結果如下(從小到大):\ n \ n ");
Printf("序列號\t \t \商品名稱\ t商品編號\ t制造商\ t單價\ n ");
for(I = 0;我& ltn;i++)
printf(" % 3d % 17s % 12d % 12s % 8.1f \ n ",i+1,com[i]。name,com[i]。num,com[i]。尚,
com[i]。價格);
}
Void DataAdd() /* Add */
{
int i=0,n,m;/*商品名稱*/
夏爾·尚明[30];
馬浩境內;/*制造商*/
char尚佳[10];
浮動賈丹;
char YesOrNo
record com[SIZE];
Printf ("\ t \ tRead原始數據信息-\ n ");
if(DataRead(com,& ampn)==1)
{
printf(" \ t \ t已完成讀取信息!\ n \ n ");
printf(" \ t \ t請輸入要添加的商品總數:");
scanf("%d ",& ampm);
printf(" \ t \ t立即輸入這%d個產品信息:\n\n ",m);
while(我& ltm)
{
Printf("商品%d的商品名稱:",I+1);
scanf("%s ",& amp尚明);
Printf("第%d個商品的商品編號:",I+1);
scanf("%d ",& amp馬浩);
Printf("商品%d的制造商:",I+1);
scanf("%s ",& amp尚佳);
Printf("項目%d的單價:",I+1);
scanf("%f ",& amp賈丹);
如果(賈丹& gt= 0 & amp& amp賈丹<=1000) /*只能輸入有效的單價*/
{
strcpy(com[i+n].姓名,尚明);
com[i+n]。num =馬浩;
strcpy(com[i+n].尚、尚佳);
com[i+n]。價格=賈丹;
I = I+1;
}
其他
Printf("輸入的單價是無效值,請重新輸入!\ n \ n ");
}
Printf("您想保存您剛剛輸入的數據嗎(Y/N)?");
fflush(stdin);
scanf("%c ",& ampYesOrNo);
if(YesOrNo=='y'||YesOrNo=='Y ')
DataStorage(com,n+m);
else if(YesOrNo = = ' N ' | | YesOrNo = = ' N ')
返回;
其他
Printf("輸入不正確,返回上壹級\ n ");
返回;
}
}
voiddateddel()//刪除
{
void OnNumber(record *com,int n);
record com[SIZE];
int I;/*記錄總數*/
int n;/*要刪除的記錄號*/
int m;
Printf ("\ t \ tRead原始數據信息-\ n ");
if(DataRead(com & amp;n)==1)
{
printf(" \ t \ t原始數據如下:\ n \ n ");
OnNumber(com,n);
Printf("請輸入您要刪除的記錄的序列號");
scanf("%d ",& ampm);
如果(m & gt=1。& ampm & lt=n)
{
for(I = m-1;我& ltn-1;i++)
com[I]= com[I+1];
DataStorage(com,n-1);
}
}
}
Void數據統計()/*統計*/
{
int高=0,低=200,ave = 0;
int n,I,sum = 0;
int g,l;
record com[SIZE];
Printf("讀取數據信息-\ n ");
if(DataRead(com,& ampn)==1)
{
Printf("商品總數為%d\n\n ",n);
for(I = 0;我& ltn;i++)
{
if(com[i].價格& gt高)
{
high = com[i]。價格;
g = I;
}
if(com[i].價格& lt低)
{
low = com[i]。價格;
l = I;
}
sum += com[i]。價格;
}
ave = sum/n;
printf(" \ t \ tHighest \ tlo west \ t average \ n ");/*計算值*/
Printf("商品單價統計:\t%d\t%d\t%d\n\n ",高,低,平均);
Printf("序列號\t \t \商品名稱\ t商品編號\ t制造商\ t單價\ n ");
for(I = 0;我& ltn;i++)
printf(" % 3d % 17s % 12d % 12s % 8.1f \ n ",i+1,com[i]。name,com[i]。num,com[i]。尚,
com[i]。價格);
printf(" \t \ t序列號\ t \ t商品名稱\ t商品編號\ t制造商單價\ n ");
Printf("單價最高的產品有:% 3d % 17s % 12d % 12s % 8.1f \ n \ n ",g+1,com [g]。Name,com [g]。
Printf("單價最低的產品有:% 3d % 17s % 12d % 12s % 8.1f \ n ",l+1,com [l]。name,com [l]。編號,。
}/*結束統計*/
}