




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上昆 明 學 院 語言課程設計報告設計題目: 銷售管理系統設計 設計人員: 張 仕 旺 指導教師: 何紅玲 范豐仙 王 瑋 所在院系: 自動控制與機械工程系 年級班級: 2009級電氣工程及其自動化一班 目 錄 C語言課程設計-銷售管理系統題目:銷售管理系統某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5)。每個銷售員都將當天出售的每種產品各寫一張便條交上來。每張便條包含內容: 1)銷售員的代號 2)產品的代號 3)這種產品的當天的銷售額 每位銷售員每天可能上繳0-5張便條。假設,收集到了上個
2、月的所有便條,編寫一個處理系統,讀取上個月的銷售情況(自己設定),進行如下處理。 1)計算上個月每個人每種產品的銷售額。 2)按銷售額對銷售員進行排序,輸出排序結果(銷售員代號) 3)統計每種產品的總銷售額,對這些產品按從高到底的順序,輸出排序結果(需輸出產品的代號和銷售額)(可選項) 4)輸出統計報表 銷售管理系統的設計目的1、通過本課程設計,培養上機動手能力,使學生鞏固C語言程序設計課程學習的內容,掌握工程軟件設計的基本方法,強化上機動手能力,闖過編程關;2、為后續各門計算機課程的學習打下堅實基礎;3、學會用c語言程序設計來設計銷售管理系統設計。總體設計數據結構圖如下:銷售管理系統菜單函數
3、清單輸入保存文件讀取文件顯示清單每位銷售員的銷售額銷售產品總和每種產品的銷售額按銷售額對銷售員排序如圖為程序設計流程圖; 輸入記錄讀取文件保存到文件每位銷售員的銷售額每種產品的銷售額按銷售額對銷售員排序顯示便條清單退出管理詳細設計一、課題的功能模塊的劃分。1.主菜單及頭文件設計:我們按照老師所給的示例我們首先編譯了一個頭文件,在頭文件里,編譯了主函數需要用到的一些函數,如#include "stdio.h"等,因為需要錄入便條的所有信息,所有用一個數據結構來實現信息的儲存方式,用數組方式,把每條信息都編譯成一個數組,如銷售員代號用name
4、4記錄。頭文件還包括了定義常數記錄數typedef struct,主函數原型int menu_select();/*聲明函數*/ int enter(RECODE t);/*聲明函數*/ void salor(RECODE t,int n);/*聲明函數*/ int sum(RECODE t,int n,int m);/*聲明函數*/ void list1(RECODE t,int n);/*聲明函數*/ void list2(RECODE t,int n);/*聲明函數*/ void list3(RECODE t,int n);/*聲明函數*/ void save(RECODE t,int
5、n);/*聲明函數*/ int load(RECODE t);/*聲明函數*/這些的都是主函數需要用到的數據,因此放入頭文件當中,在主程序開始之前直接引用#include "pro.h"。2.編輯系統菜單運行:題目要求我們系統以菜單方式工作,所以我們現要定義一個系統的結構體數組RECODE rec600,用for (;)循環讓菜單實現無限循環,讓switch(menu_select()調用主菜單函數,返回值整數作開關語句的條件,之后分別定義菜單的信息,如:case 1:length=enter(rec);就是輸入信息的定義編輯,當然最后需要用到break來實現返回。菜單定義
6、完成之后,開始編譯菜單的輸出,這部分,用了printf就把需要顯示的菜單顯示出來,然后由用戶選擇菜單的選項,因為菜單只有07的選項,為了防止用戶輸入選項超值,所以用do while語句來控制,(c<0|c>7)限定了用戶輸入的數據只有07才有效,超值則返回開始菜單,重新選擇(return)。3.輸入信息:輸入信息一般都是使用scanf來實現,但在用戶輸入之前需要解決一個問題,程序必須限制用戶的輸入序數(記錄條數),所以在輸入數據之前,必須先限定序數,方法則是用一個for循環來實現,有用戶輸入一個數字,成為循環的上限,而用戶輸入的便條信息則在此限定下,不能超出,當超出時則返回到開始菜
7、單。用戶輸入的便條信息分別存入對應的數組當中,如便條條數則存入ti.num當中。4.保存信息,參數為結構體數組和記錄數:用戶輸入的信息需要保存時,用save選項進行保存。保存的時候,實現應該建立一個指向文件的指針,從而固定保存文件時的位置,之后用if語句來判斷打開文件是否正常,if(fp=fopen("record.txt","wb")=NULL),如果沒打開(打開不正常),則程序執行退出;當判斷文件打開正常時,系統顯示“保存文件”(用printf("n保存文件n")來完成),保存信息是用到的fprintf函數,將制定記錄數輸入文件f
8、printf(fp,"%d",n),因為源文件中采用了換行,保存文件是系統默認不會進行保存,所有必須加如換行符號保存,防止文件丟失,保證文件以用戶輸入的信息一致,保存換行符號依然采用fprintf函數來實現,具體源文件為fprintf(fp,"rn");當確立了保存的可以性之后,系統開始錄入需要保存的信息,用for循環語句,不斷把用戶輸入的信息保存,因為之前在編寫輸入,輸出程序時,都用到了一定的格式,保證信息的一一對應,所以在保存文件時,也需要確定和輸入是相同的格式,這里依然使用fprintf函數來進行保存,如fprintf(fp,"%-10d
9、%-7d%-7d%-7d%-7d-7d",,ti.a1,ti.a2,ti.a3,ti.a4,ti.a5)就是把銷售員代號,產品代號,銷售額按照間隔7個字符格式進行保存,在保存格式確立后,需要把換行符號再次寫入文件,程序結束后fclose結束保存,并用printf輸出“文件保存成功”,讓用戶知道已經保存文件。5. 讀入取函數,參數為結構體數組:前面已經做了文件的保存,當保存文件成功后,系統會以record.txt文件保存在與程序同級的文件夾下,而讀入函數,就是為了讓用戶再次打開運行程序時,可以直接讀取之前已經輸入并保存過的信息,和儲存信息一樣,讀入函數也采用了參數為結構體
10、數組,同樣應該確定文件指向指針FILE *fp,讀入函數之前,應該確定是否有已經保存的文件,用保存文件一樣,用if語句來進行判斷if(fp=fopen("record.txt","rb")=NULL),如果判斷失敗,系統不能讀入文件,則會顯示“不能打開文件”,用printf("不能打開文件n")來實現,同時系統要結束讀入文件的執行,用exit(1)實現;如果判斷成功,則系統會自動讀入用戶已經保存的數據(fscanf(fp,"%d",&n)讀入記錄數),用for循環把已經保存的數據一一對應的讀入到正在執行的程
11、序中,這里需要注意的是,讀取的數據格式應該同保存時的一致,如儲存時的格式是fprintf(fp,"%-10d%-7d%-7d%-7d%-7d-7d",,ti.a1,ti.a2,ti.a3,ti.a4,ti.a5),則讀入的時的格式就為fscanf(fp,"%d%d%d%d%d%d",&(),&(ti.a1),&(ti.a2),&(ti.a3),&(ti.a4),&(ti.a5),讀取成功后關閉文件fclose(fp),并顯示“成功地從文件讀入數據!”(用printf實現)。6.清
12、單輸出: 讀取銷售情況有3個,分別是每個人每種產品的銷售額,按銷售額對銷售員進行排序和每種產品的總銷售額三個函數:1).每個人每種產品的銷售額(由周銳完成): 首先,要定義每個人,每種產品,銷售額數組如int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0; int c4,b14=0,b24=0,b34=0,b44=0,b54=0,用for循環來求每個人的總銷售額:for(i=0;i<4;i+);用for循環來求每個人每種產品的總銷售額:for(i=0;i<n;i+),for(j=0;j<4;j+);在用for循環每種產品的總銷售額
13、:for(i=0;i<4;i+),之后則在系統界面輸入銷售員代號,產品代號,產品代號用printf即可實現,用sum對每個銷售員的銷售額求和,用system("cls")來錄入信息,然后輸出頭標(如銷售員代號,產品代號,銷售額等,用printf實現),之后開始查詢,用 for語句來。2).按銷售額對銷售員進行排序(由趙弘完成): 此部分要分兩部分其一是,每位銷售員銷售額;其二是,按銷售額對銷售員排序。在求每個銷售員銷售額時也是要先定義銷售員代號,產品代號,銷售額。接著是則是用輸入要查詢的銷售員的代號,用scanf("%d",&s)來記錄輸入
14、銷售員代號的信息,然后輸出頭標(如銷售員代號,產品代號,銷售額等,用printf實現),之后開始查詢,查詢信息首先需要一個for語句來,實現對已存入數據的所有查詢for(i=0;i<n;i+),關鍵內容是查詢銷售員代號時用if(strcmp(name,)=0),找出與輸入的銷售員相同的儲存信息,查找完成后則把該銷售員的所有信息全部輸出。上面是求每個銷售員銷售額,接著是要在上面的基礎上排序。首先要定義兩個數組如:int c4,m4,接著用for循環(for(i=0;i<4;i+);for(j=i+1;j<4;j+) )對銷售員的銷售額進行排序,再用if語句來求,最
15、后是輸出用printf("%dn",mi)實現。3).每種產品的總銷售額(由李鴻完成): 也一樣首先要定義數組,接著用ci=sum(t,n,i+1) 求每個人的總銷售額,再用for循環,再用sum0+=ci對所有產品的銷售額求總,用for循環對每個人每種產品的銷售額求總銷售額,再用for循環實現每種產品的總銷售額,然后輸出頭標(如銷售員代號,產品代號,總銷售額等,用printf實現)即可。二、主要功能的實現頭文件:#include "stdio.h"/*輸入輸出函數*/ #include "stdlib.h"/*通用應用程序函數*/
16、#include "string.h"/*字符串函數*/ #include "ctype.h"/*字符操作函數*/ typedef struct /*定義結構體變量*/ int name4; /*銷售員代號*/int a1; /*產品一代號*/int a2; /*產品二代號*/int a3; /*產品三代號*/int a4; /*產品四代號*/int a5; /*產品五代號*/RECODE; int me/*以下是函數原型*/ nu_select();/*聲明函數*/ int enter(RECODE t);/*聲明函數*/ void salor(REC
17、ODE t,int n);/*聲明函數*/ int sum(RECODE t,int n,int m);/*聲明函數*/ void list1(RECODE t,int n);/*聲明函數*/ void list2(RECODE t,int n);/*聲明函數*/ void list3(RECODE t,int n);/*聲明函數*/ void save(RECODE t,int n);/*聲明函數*/ int load(RECODE t);/*聲明函數*/函數:#include "pro.h"/*主函數開始*/void main()/*主函數*/ RECODE rec60
18、0; int length; system("cls"); /*清屏*/ for( ; ; ) /*無限循環*/ switch(menu_select() /*根據用戶的選擇判斷該調用哪個功能函數*/ case 1:length=enter(rec); break; case 2:save(rec,length);break; case 3:length=load(rec);break; case 4:list1(rec,length);break; case 5:salor(rec,length);break; case 6:list2(rec,length);break
19、; case 7:list3(rec,length);break;case 0:exit(0); int menu_select() /*菜單函數*/ int n; printf(*MENU*nn"); printf(" 1 輸入便條n");printf(" 2 保存到文件n"); printf(" 3 讀取文件n");printf(" 4 顯示便條清單n"); printf(" 5 每位銷售員的銷售額n"); printf(" 6 每種產品的銷售額n"); pri
20、ntf(" 7 按銷售額對銷售員排序n"); printf(" 0 退出管理n"); printf("*END*nn"); printf(" 請選擇你的操作(0-7): n"); scanf("%d",&n); if(0<n && n<7) system("cls"); /*清屏*/ return n;/*清單輸入*/int enter(RECODE t) int i,num; system("cls"); /*清屏*/
21、 printf("請輸入要寫的便條條數:n"); scanf("%d",&num);/*輸入所要寫入的清單的條數*/ printf("name product1 product2 product3 product4 product5"); for(i=0;i<num;i+)/*將所輸入的條數存入結構體數組中*/ printf("nn-n"); scanf("%d%d%d%d%d%d",&,&ti.a1,&ti.a2,&ti.a3,&am
22、p;ti.a4,&ti.a5); printf("n-nnn"); return i; /*保存文件*/void save(RECODE t,int n) int i; FILE *fp;/*調用fopen函數*/ if(fp=fopen("record.txt","wb")=NULL)/*如果函數帶回一個空指針值*/ printf("不能打開文件n");/*不能打開文件*/ exit(1); fprintf(fp,"%d",n); fprintf(fp,"rn");
23、 for(i=0;i<n;i+) fprintf(fp,"%-10d%-7d%-7d%-7d%-7d-7d",,ti.a1,ti.a2,ti.a3,ti.a4,ti.a5);/*將便條的信息輸出到fp指向的文件上*/ fprintf(fp,"rn"); fclose(fp);/*關閉文件*/ printf("*保存成功*nn");/*顯示保存成功*/ printf("press any key to continue.n"); getchar(); /*讀取文件*/int load(RECODE
24、 t) int i,n; FILE *fp; if(fp=fopen("record.txt","r")=NULL)/*如果函數帶回一個空指針值*/ printf("不能打開文件n");/*不能打開文件*/ exit(1); fscanf(fp,"%d",&n); for(i=0;i<n;i+) fscanf(fp,"%d%d%d%d%d%d",&(),&(ti.a1),&(ti.a2), &(ti.a3),&(ti.a4),&
25、amp;(ti.a5);/*從fp指向的文件上讀入便條信息*/ fclose(fp); printf("n 成功讀取文件!n");/*成功讀入信息*/ printf("press any key to continue.nn"); getchar(); return n; /*顯示清單*/void list1(RECODE t,int n) int i;FILE *fp; if(fp=fopen("record.txt","r")=NULL)/*如果函數帶回一個空指針值*/ printf("不能打開文件n
26、");/*不能打開文件*/ exit(1); fscanf(fp,"%d",&n); for(i=0;i<n;i+) fscanf(fp,"%d%d%d%d%d%d",&(),&(ti.a1),&(ti.a2),&(ti.a3),&(ti.a4),&(ti.a5);/*從fp指向的文件上讀入便條信息*/ fclose(fp); printf("*the lise of saling recode*nnn"); printf("name pr
27、oduct1 product2 product3 product4 product5"); for(i=0;i<n;i+)/*將所輸入的條數存入結構體數組中*/ printf("nn-n"); printf(" %d %d %d %d %d %d",,ti.a1,ti.a2,ti.a3,ti.a4,ti.a5); printf("nn-n");printf("n press any key to continue.n"); getchar(); /*每位銷售員銷售額*/void sal
28、or(RECODE t,int n) int i,s; int b1=0,b2=0,b3=0,b4=0,b5=0; printf("請輸入要查詢的銷售員的代號(1-4): n"); scanf("%d",&s); /*輸入所要查看的售貨員的代號*/ for(i=0;i<n;i+) /*對每種產品的銷售額求和*/ if(=s) b1+=ti.a1; b2+=ti.a2; b3+=ti.a3; b4+=ti.a4; b5+=ti.a5; printf("name product1 product2 product3 pr
29、oduct4 product5n"); printf("-n"); printf("%-15d%-10d%-10d%-7d%-7d%-7d",s,b1,b2,b3,b4,b5); printf("npress enter to continue.n"); getchar(); /*銷售產品總和*/int sum(RECODE t,int n, int e) int i,sum=0; for(i=0;i<=n;i+)/*求銷售產品的總和*/ if(e=) sum+=ti.a1; sum+=ti.a2; su
30、m+=ti.a3; sum+=ti.a4; sum+=ti.a5; return sum; /*每種產品的銷售額*/void list2(RECODE t,int n) int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0; int c4,b14=0,b24=0,b34=0,b44=0,b54=0; system("cls"); ; for(i=0;i<4;i+) ci=sum(t,n,i+1);/*求每個人的總銷售額*/ for(i=0;i<4;i+) sum0+=ci;/*所有產品的銷售額*/ for(i=0;i
31、<n;i+)/*求每個人每種產品的總銷售額*/ for(j=0;j<4;j+) if(j+1=) b1j+=ti.a1; b2j+=ti.a2; b3j+=ti.a3; b4j+=ti.a4; b5j+=ti.a5; for(i=0;i<4;i+)/*每種產品的總銷售額*/ sum1+=b1i; sum2+=b2i; sum3+=b3i; sum4+=b4i; sum5+=b5i; printf(" products numn"); printf(" code 1 2 3 4 5 sumnn"); for(i=0;i<
32、;4;i+) printf(" %-10d%-7d%-7d%-7d%-7d%-7d%-7dn",i+1,b1i,b2i,b3i,b4i,b5i,ci); printf(" psum %-7d%-7d%-7d%-7d%-7d%-7d",sum1,sum2,sum3,sum4,sum5,sum0); printf("n press any key to continue.n"); getchar(); /*按銷售額對銷售員排序*/void list3(RECODE t,int n) int i,j,s; int c4,m4; /*定義兩個數組*/ system("cls"); /*清屏*/ for(i=0;i<4;i+) mi=i+1; for(i=0;i<4;i+) ci=sum(t,n,mi); for(i=0;i<4;i+)/*按銷售員的銷售額進行排序*/ for(j=i+1;j<4;j+) if(ci<cj) s=mi; mi=mj; mj=s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023-2024學年河北省石家莊市辛集市高二下學期7月期末教學質量監測數學試卷(解析版)
- 2025年秋三年級上冊語文同步教案 24 一定要爭氣
- 打井工程可行性研究報告
- 食堂進貨渠道管理制度
- 佛教寺院齋堂管理制度
- 縫制帽產品質量河南省監督抽查實施細則
- 供水公司規章管理制度
- 供熱企業風險管理制度
- 供電公司公車管理制度
- 供電公司治安管理制度
- 護理網格化管理制度
- 國家開放大學《管理學基礎》期末機考題庫
- 2025中考英語書面表達終極押題(附范文)
- 2024年北京大學強基計劃物理試題(附答案)
- 計算機網絡與信息安全(2024年版)課件全套 李全龍 第01-10章 計算機網絡與信息安全概述- 網絡安全協議與技術措施
- (正式版)JBT 14449-2024 起重機械焊接工藝評定
- 超聲波流量計、流量計算機氣相色譜儀說明書-17.encal3000色譜儀-elster
- 教育家辦學:中小學校長專業標準解讀課件
- 茶葉企業營銷課件
- 《高等數學》全冊教案教學設計
- DB14T1049.3-2021 山西省用水定額 第3部分:服務業用水定額
評論
0/150
提交評論