<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現銷售管理系統設計的具體程式碼,供大家參考,具體內容如下
某公司有四個銷售員(編號: 1-4), 負責銷售五種產品(編號: 1-5)。 每個銷售員都將當天出售的每種產品各寫一 張便條交上來。每張便條包含內容:銷售員的代號、產品的代號、這種產品的當天的銷售額。每位銷售員每天上繳1張便條。
試設計一個便條管理系統,使之能提供以下功能:
1、系統以選單方式工作
2、便條資訊錄入功能——輸入(支援便條資訊檔案匯入)
3、便條資訊修改功能
4、便條資訊刪除功能
5、收集到了上個月的所有便條後,讀取銷售情況
1)計算每個人每種產品的銷售額。
2)按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)
3)統計每種產品的總銷售額,對這些產品按從高到底的順序,輸出排序結果(需輸出產品的代號和銷售額)
詳情請參考程式碼,註釋寫的很詳細,希望能給你幫助.
最後的最後有截圖展示效果.
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #define M 155 ///這些函數下面會詳細的介紹的滴! void detail(); void foreach(); void menu(); void product(); void readdata(); void seller(); void total(); void choice(); void add(); void deleteing(); void update(); void clearing(); struct ss{ int sid;///銷售程式碼 int pid;///產品代號 int sn;///銷售額 }ss[M]; int n;///便條數目 int s[4][5]={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};///使用者儲存員工和產品資訊 ///從檔案讀取資料 void readdata() { FILE *fp;///定義檔案指標 ///呼叫fopen函數,以唯讀模式開啟d:list.txt檔案,並驗證返回值是否為空 if((fp=fopen("d:\list.txt","r"))==NULL) { printf("檔案開啟失敗!n"); exit(0);///表示正常的退出 } else /**feof是輸入輸出函數,檢查檔案是否結束,如結束,則返回非零值, 否則返回0 .函數原型為:int feof(FILE *fp)**/ for(n=0;!feof(fp);n++) { fscanf(fp,"%d %d %dn",&ss[n].sid,&ss[n].pid,&ss[n].sn); } ///儲存檔案資料到結構體 fclose(fp);///關閉檔案 } ///從便條讀到的資料分類整理統計 void foreach() { int i; for(i=0;i<n;i++)///遍歷所有紙條 { switch(ss[i].pid)///按產品分類,再按銷售員分類,累加各人各產品銷售額 { case 1:///當ss[i].pid為1的時候,也就是當產品代號為1的時候 switch(ss[i].sid)///檢視銷售程式碼 { ///當銷售程式碼為1的時候,累加1號銷售員編號為1的產品的銷售額 case 1:s[0][0]+=ss[i].sn;break; ///當銷售程式碼為2的時候,累加2號銷售員編號為1的產品的銷售額 case 2:s[1][0]+=ss[i].sn;break; ///當銷售程式碼為3的時候,累加3號銷售員編號為1的產品的銷售額 case 3:s[2][0]+=ss[i].sn;break; ///當銷售程式碼為4的時候,累加4號銷售員編號為1的產品的銷售額 case 4:s[3][0]+=ss[i].sn;break; } break; ///以下程式碼同理可得 case 2: switch(ss[i].sid) { case 1:s[0][1]+=ss[i].sn;break; case 2:s[1][1]+=ss[i].sn;break; case 3:s[2][1]+=ss[i].sn;break; case 4:s[3][1]+=ss[i].sn;break; } break; case 3: switch(ss[i].sid) { case 1:s[0][2]+=ss[i].sn;break; case 2:s[1][2]+=ss[i].sn;break; case 3:s[2][2]+=ss[i].sn;break; case 4:s[3][2]+=ss[i].sn;break; } break; case 4: switch(ss[i].sid) { case 1:s[0][3]+=ss[i].sn;break; case 2:s[1][3]+=ss[i].sn;break; case 3:s[2][3]+=ss[i].sn;break; case 4:s[3][3]+=ss[i].sn;break; } break; case 5: switch(ss[i].sid) { case 1:s[0][4]+=ss[i].sn;break; case 2:s[1][4]+=ss[i].sn;break; case 3:s[2][4]+=ss[i].sn;break; case 4:s[3][4]+=ss[i].sn;break; }; break; } } } ///選單選項 void menu() { int c; puts("tt*********選單*********************nn"); puts("tt 1.檢視每人每種產品的銷售額n"); puts("tt 2.按銷售額對銷售員排序(銷售員代號)n"); puts("tt 3.對每種產品總銷售額從高到低排序(產品代號和銷售額)n"); puts("tt 4.輸出統計報表n"); puts("tt 5.錄入一條便條資訊n"); puts("tt 6.修改一條便條資訊n"); puts("tt 7.刪除一條便條資訊n"); puts("tt 8.退出n"); puts("nntt*********************************************n"); printf("請選擇(1-8):[ ]bb"); scanf("%d",&c); if(c<1||c>8)///錯誤輸入,重新獲取輸入 { printf("您輸入的選項不在我們服務範圍之內請確定好您要選擇的服務,重新輸入!!!n"); menu(); } else///正確輸入 switch(c)///根據輸入實現相應函數呼叫 { case 1:detail(); break; case 2:seller(); break; case 3:product(); break; case 4:total(); break; case 5:add(); break; case 6:update(); break; case 7:deleteing(); break; case 8:exit(0); } } ///計算上個月每個人每種產品的銷售額 void detail() { int i,j; for(i=0;i<4;i++) { printf("ntt%d 號銷售員銷售情況:n",i+1); for(j=0;j<5;j++) printf("tt%d 號產品銷售額:%dn",j+1,s[i][j]); } choice(); } ///按銷售額對銷售員進行排序,輸出排序結果(銷售員代號) void seller() { int i,j,k; int sp[4]={0,0,0,0};///存銷售員的銷售額 for(i=0;i<4;i++)///統計銷售員的銷售額 for(j=0;j<5;j++) sp[i]+=s[i][j]; for(i=0;i<4;i++)///排序 { k=0; for(j=0;j<4;j++) { if(sp[k]<sp[j]) k=j; } printf("tt第%d名是%d號銷售員!n",i+1,k+1); sp[k]=-1; } choice(); } ///對每種產品總銷售額從高到低排序(產品代號和銷售額) void product() { int i,j,k; int p[5]={0,0,0,0,0};///存每種產品的銷售額 for(i=0;i<5;i++)///統計每種產品的銷售額 for(j=0;j<4;j++) p[i]+=s[j][i]; for(i=0;i<5;i++)///將產品的銷售額進行排序 { k=0; for(j=0;j<5;j++) { if(p[k]<p[j]) k=j; } printf("tt第%d名是%d號產品!銷售額為%d!n",i+1,k+1,p[k]); p[k]=-1; } choice(); } ///輸出統計報表(輸出銷售代號,產品代號和銷售額) void total() { int i,j; printf("nt銷售員t產品t銷售額n"); for(i=0;i<4;i++) for(j=0;j<5;j++) printf("t%dt%dt%dn",i+1,j+1,s[i][j]); choice(); } ///選擇退出系統或返回主選單 void choice() { int c; printf("請選擇接下來想做什麼:n1.返回選單n2.退出系統n"); scanf("%d",&c); if(c==1) menu(); else exit(0); } ///錄入一條便條資訊 void add() { printf("請填寫您要錄入的便條的資訊:銷售程式碼,產品程式碼,銷售額n"); /**接著readdata()統計的文字中便條的資訊到結構體陣列裡, 將新增的資訊首先儲存在那些資訊的後面**/ scanf("%d %d %d",&ss[n].sid,&ss[n].pid,&ss[n].sn); FILE *fp;///定義檔案指標 char *str="d:\list.txt"; printf("該條記錄正在寫入檔案 list.txt~~~~n"); fp=fopen(str,"a");///引數"a"意思是說將新新增的資料接著文字裡的資料寫,不會覆蓋文字裡的內容 fprintf(fp,"n%dt%dt%d",ss[n].sid,ss[n].pid,ss[n].sn);///將結構體裡的資訊寫入文字 fclose(fp);///關閉檔案 printf("n該條記錄已經寫入檔案 list.txt,請前往檢視!n"); switch(ss[n].pid)///借用foreach()函數裡的程式碼,詳情請參考foreach()函數 { case 1:///當ss[i].pid為1的時候,也就是當產品代號為1的時候 switch(ss[n].sid)///檢視銷售程式碼 { ///當銷售程式碼為1的時候,累加1號銷售員編號為1的產品的銷售額 case 1:s[0][0]+=ss[n].sn;break; ///當銷售程式碼為2的時候,累加2號銷售員編號為1的產品的銷售額 case 2:s[1][0]+=ss[n].sn;break; ///當銷售程式碼為3的時候,累加3號銷售員編號為1的產品的銷售額 case 3:s[2][0]+=ss[n].sn;break; ///當銷售程式碼為4的時候,累加4號銷售員編號為1的產品的銷售額 case 4:s[3][0]+=ss[n].sn;break; } break; ///以下程式碼同理可得 case 2: switch(ss[n].sid) { case 1:s[0][1]+=ss[n].sn;break; case 2:s[1][1]+=ss[n].sn;break; case 3:s[2][1]+=ss[n].sn;break; case 4:s[3][1]+=ss[n].sn;break; } break; case 3: switch(ss[n].sid) { case 1:s[0][2]+=ss[n].sn;break; case 2:s[1][2]+=ss[n].sn;break; case 3:s[2][2]+=ss[n].sn;break; case 4:s[3][2]+=ss[n].sn;break; } break; case 4: switch(ss[n].sid) { case 1:s[0][3]+=ss[n].sn;break; case 2:s[1][3]+=ss[n].sn;break; case 3:s[2][3]+=ss[n].sn;break; case 4:s[3][3]+=ss[n].sn;break; } break; case 5: switch(ss[n].sid) { case 1:s[0][4]+=ss[n].sn;break; case 2:s[1][4]+=ss[n].sn;break; case 3:s[2][4]+=ss[n].sn;break; case 4:s[3][4]+=ss[n].sn;break; }; break; } n++; choice(); } /**刪除便條資訊流程:新建一個臨時檔案,將不被刪除的便條資訊存到臨時檔案裡, 然後刪除原檔案,再將臨時檔案改名為原檔案的檔名**/ void deleteing() { printf("請輸入您要刪除的便條的資訊:銷售程式碼,產品程式碼,銷售額n"); int a,b,c;///存使用者需要刪除的便條的資訊 scanf("%d %d %d",&a,&b,&c); printf("請稍等,您選擇的便條正在刪除~~~n"); FILE *fin,*ftp; int x,y,z; fin=fopen("d:\list.txt","r");///讀開啟原檔案list.txt ftp=fopen("d:\tmp.txt","w");///寫開啟臨時檔案tmp.txt if(fin==NULL || ftp==NULL){ printf("檔案開啟失敗!n"); exit(0); } int m=0;///該變數是控制寫入文字是首行不自動換行 for(int i=0;!feof(fin);i++) { fscanf(fin,"%d %d %dn",&x,&y,&z);///從原檔案讀取到的一行資料放到x,y,z三個變數中 if(x==a&&y==b&&z==c)///所有的資料相等,說明是要刪除的便條,則不寫入臨時檔案 continue; else///將不是要刪除的其他便條資訊寫入臨時檔案 { if(m==0) { fprintf(ftp,"%dt%dt%d",x,y,z);///不是則將這一行寫入臨時檔案tmp.txt m++; } else fprintf(ftp,"n%dt%dt%d",x,y,z);///不是則將這一行寫入臨時檔案tmp.txt } } fclose(fin); fclose(ftp); system("DEL/f d:\list.txt");///刪除原檔案,如果刪除錯誤,會報原因 ///unlink("d:\list.txt");///刪除原檔案 rename("d:\tmp.txt","d:\list.txt");///將臨時檔名改為原檔名 printf("您選擇的便條已經刪除,請開啟檔案檢視!n"); clearing(); readdata(); foreach(); choice(); } ///清空之前所統計的原檔案裡的銷售員和銷售產品所對應的銷售額 void clearing() { for(int i=0;i<4;i++) { for(int j=0;j<5;j++) s[i][j]=0; } } /**更新便條資訊流程:新建一個臨時檔案,將原檔案裡的東西複製到臨時檔案中,在複製的過程中, 需要修改的東西修改之後再放入臨時檔案,然後刪除原檔案,將臨時檔案改名為原檔案的名字**/ void update() { printf("請輸入您要修改的便條的資訊:銷售程式碼,產品程式碼,銷售額n"); int a,b,c,d,e,x,y,z; scanf("%d %d %d",&a,&b,&c); printf("請問您要修改該便條中那一項資訊:n(1)銷售程式碼n(2)產品程式碼n(3)銷售額n"); scanf("%d",&d); printf("請問您要將該項資訊修改成什麼(請輸入數位):n"); scanf("%d",&e); printf("您選擇的便條正在修改中~~~~~n"); FILE *fin=fopen("d:\list.txt","r"); FILE *ftp=fopen("d:\tmp.txt","w"); ///是充當臨時檔案作用 if(!fin) { printf("不能開啟list.txt檔案n"); exit(1); } if(!ftp) { printf("不能開啟tmp.txt檔案n"); exit(1); } int m=0;///該變數是控制寫入文字時首行不自動換行 ///開始複製 switch(d)///根據選項修改(1)銷售程式碼 (2)產品程式碼 (3)銷售額 { case 1:///(1)銷售程式碼 { for(int i=0;!feof(fin);i++) { fscanf(fin,"%d %d %dn",&x,&y,&z); if(x==a&&y==b&&z==c)///檢驗是要修改的行嗎 { x=e; if(m==0) { fprintf(ftp,"%dt%dt%d",x,y,z);///將修改過的資料寫入臨時檔案 m++; } else fprintf(ftp,"n%dt%dt%d",x,y,z);///將修改過的資料寫入臨時檔案 } else { if(m==0) { fprintf(ftp,"%dt%dt%d",x,y,z);///將原本的資料寫入臨時檔案 m++; } else fprintf(ftp,"n%dt%dt%d",x,y,z);///將原本過的資料寫入臨時檔案 } } } break; ///以下程式碼同理可得 case 2: { for(int i=0;!feof(fin);i++) { fscanf(fin,"%d %d %dn",&x,&y,&z); if(x==a&&y==b&&z==c)///檢驗是要修改的行嗎 { y=e; if(m==0) { fprintf(ftp,"%dt%dt%d",x,y,z);///將修改過的資料寫入臨時檔案 m++; } else fprintf(ftp,"n%dt%dt%d",x,y,z);///將修改過的資料寫入臨時檔案 } else { if(m==0) { fprintf(ftp,"%dt%dt%d",x,y,z);///將原本的資料寫入臨時檔案 m++; } else fprintf(ftp,"n%dt%dt%d",x,y,z);///將原本過的資料寫入臨時檔案 } } } break; case 3: { for(int i=0;!feof(fin);i++) { fscanf(fin,"%d %d %dn",&x,&y,&z); if(x==a&&y==b&&z==c)///檢驗是要修改的行嗎 { z=e; if(m==0) { fprintf(ftp,"%dt%dt%d",x,y,z);///將修改過的資料寫入臨時檔案 m++; } else fprintf(ftp,"n%dt%dt%d",x,y,z);///將修改過的資料寫入臨時檔案 } else { if(m==0) { fprintf(ftp,"%dt%dt%d",x,y,z);///將原本的資料寫入臨時檔案 m++; } else fprintf(ftp,"n%dt%dt%d",x,y,z);///將原本過的資料寫入臨時檔案 } } } break; } fclose(fin); fclose(ftp); printf("您選擇的便條已經修改完畢,請開啟檔案檢視!n"); system("DEL/f d:\list.txt");///刪除原檔案,刪除錯誤的時候會報提示資訊 ///unlink("d:\list.txt");///刪除原檔案 rename("d:\tmp.txt","d:\list.txt");///改名 clearing(); readdata(); foreach(); choice(); } int main() { readdata();///讀取檔案資料 foreach();///初始化陣列 menu();///顯示主選單 }
首先在D槽下新建一個文字檔案 ,名為 list.txt,在文字檔案裡存入的資料如下(資料僅供參考):
然後我們開始執行該程式:
對於上圖第五項新增便條資訊的操作,我們 來看一看文字裡的內容(最後一行就是新添的資料)
在我們執行第六個選項的時候,首先需要在D槽下新建一個文字檔案 tmp.txt,至於為啥,詳情請參考程式碼,程式碼裡面有詳細的解釋
我們再去檢視D槽裡的檔案,這時tmp.txt不見了,只剩下 list.txt,裡面的內容如下(為什麼會醬紫呢?快去檢視程式碼吧):
在我們執行第七個選項的時候,需要在D槽下重新新建一個文字檔案 tmp.txt,至於為啥,詳情請參考程式碼,程式碼裡面有詳細的解釋
我們再去檢視D槽裡的檔案,這時tmp.txt不見了,只剩下 list.txt,裡面的內容如下(為什麼會醬紫呢?快去檢視程式碼吧):
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45