第一篇:c語言銷售管理系統
課程設計說明書
學 院、系: 專
業: 學 生 姓 名: 設 計 題 目:
起 迄 日 期: 指 導 教 師:
學 號: 銷售管理系統
日期: 2017年5月12日
設計目的
1.了解管理信息系統的開發流程,熟悉C語言的文件和結構數組的各種基本操作。2.握高級程序設計語言的知識。
3.踐中逐步掌握程序設計的思想和方法,培養問題求解和語言的應用能力。
4.程序中涉及結構體、數組、文件等方面的知識。通過本程序的訓練,能對C語言 的文件操作有一個更深刻的了解。
5.提高與程序設計和軟件開發有關的各種綜合能力。
6.通過本課程設計,培養上機動手能力,鞏固《C語言程序設計》課程學習的內容,掌握工程軟件設計的基本方法,強化上機動手能力,闖過編程關; 7.為后續各門計算機課程的學習打下堅實基礎;8.學會用c語言程序設計來設計銷售管理系統設計。任務概述
某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5)。每個銷售員都將當天出售的每種產品各寫一張便條交上來。每張便條包含內容:1)銷售員的代號,2)產品的代號,3)這種產品的當天的銷售額。每位銷售員每天上繳1張便條。
試設計一個便條管理系統,使之能提供以下功能:
1、系統以菜單方式工作
2、便條信息錄入功能(便條信息用文件保存)--輸入
3、收集到了上個月的所有便條后,讀取銷售情況 1)計算每個人每種產品的銷售額。
2)按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)
3)統計每種產品的總銷售額,對這些產品按從高到底的順序,輸出排序結果
4)輸出統計報表 模塊劃分
主菜單及頭文件設計
編輯系統菜單運行
輸入信息
保存信息,參數為結構體數組和記錄數
讀入取函數,參數為結構體數組
清單輸出
主要功能的實現 主要函數說明及其N-S圖
主菜單及頭文件設計: 我們按照老師所給的示例我們首先編譯了一個頭文件,在頭文件里,編譯了主函數需要用到的一些函數,如#include “stdio.h”等,因為需要錄入便條的所有信息,所有用一個數據結構來實現信息的儲存方式,用數組方式,把每條信息都編譯成一個數組,如銷售員代號用name[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 n);/*聲明函數*/ int load(RECODE t[]);/*聲明函數*/
這些的都是主函數需要用到的數據,因此放入頭文件當中,在主程序開始之前直接引用#include “pro.h”。
2.編輯系統菜單運行:
題目要求我們系統以菜單方式工作,所以我們現要定義一個系統的結構體數組RECODE rec[600],用for(;;)循環讓菜單實現無限循環,讓switch(menu_select())調用主菜單函數,返回值整數作開關語句的條件,之后分別定義菜單的信息,如:
case 1: length=enter(rec);就是輸入信息的定義編輯,當然最后需要用到break來實現返回。菜單定義完成之后,開始編譯菜單的輸出,這部分,用了printf就把需要顯示的菜單顯示出來,然后由用戶選擇菜單的選項,因為菜單只有0~7的選項,為了防止用戶輸入選項超值,所以用do while語句來控制,(c<0||c>7)
限定了用戶輸入的數據只有0~7才有效,超值則返回開始菜單,重新選擇(return)。
3.輸入信息:
輸入信息一般都是使用scanf來實現,但在用戶輸入之前需要解決一個問題,程序必須限制用戶的輸入序數(記錄條數),所以在輸入數據之前,必須先限定序數,方法則是用一個for循環來實現,有用戶輸入一個數字,成為循環的上限,而用戶輸入的便條信息則在此限定下,不能超出,當超出時則返回到開始菜單。用戶輸入的便條信息分別存入對應的數組當中,如便條條數則存入t[i].num當中。
4.保存信息,參數為結構體數組和記錄數:
用戶輸入的信息需要保存時,用save選項進行保存。保存的時候,實現應該建立一個指向文件的指針,從而固定保存文件時的位置,之后用if語句來判斷打開文件是否正常,if((fp=fopen(“record.txt”,“wb”))==NULL),如果沒打開(打開不正常),則程序執行退出;當判斷文件打開正常時,系統顯示“保存文件”(用printf(“n保存文件n”)來完成),保存信息是用到的fprintf函數,將制定記錄數輸入文件fprintf(fp,“%d”,n),因為源文件中采用了換行,保存文件是系統默認不會進行保存,所有必須加如換行符號保存,防止文件丟失,保證文件以用戶輸入的信息一致,保存換行符號依然采用fprintf函數來實現,具體源文件為fprintf(fp,“rn”);當確立了保存的可以性之后,系統開始錄入需要保存的信息,用for循環語句,不斷把用戶輸入的信息保存,因為之前在編寫輸入,輸出程序時,都用到了一定的格式,保證信息的一一對應,所以在保存文件時,也需要確定和輸入是相同的格式,這里依然使用fprintf函數來進行保存,如fprintf(fp,“%-10d%-7d%-7d%-7d%-7d-7d”,t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5)就是把銷售員代號,產品代號,銷售額按照間隔7個字符格式進行保存,在保存格式確立后,需要把換行符號再次寫入文件,程序結束后fclose結束保存,并用printf輸出“文件保存成功”,讓用戶知道已經保存文件。
5.讀入取函數,參數為結構體數組:
前面已經做了文件的保存,當保存文件成功后,系統會以record.txt文件保存在與程序同級的文件夾下,而讀入函數,就是為了讓用戶再次打開運行程序時,可以直接讀取之前已經輸入并保存過的信息,和儲存信息一樣,讀入函數也采用了參數為結構體數組,同樣應該確定文件指向指針FILE *fp,讀入函數之前,應該確定是否有已經保存的文件,用保存文件一樣,用if語句來進行判斷
if((fp=fopen(“record.txt”,“rb”))==NULL),如果判斷失敗,系統不能讀入文件,則會顯示“不能打開文件”,用printf(“不能打開文件n”)來實現,同時系統要結束讀入文件的執行,用exit(1)實現;如果判斷成功,則系統會自動讀入用戶已經保存的數據(fscanf(fp,“%d”,&n)讀入記錄數),用for循環把已經保存的數據一一對應的讀入到正在執行的程序中,這里需要注意的是,讀取的數據格式應該同保
存
時的一
致,如
儲
存
時的格
式
是fprintf(fp,“%-10d%-7d%-7d%-7d%-7d-7d”,t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5),則讀
入的時的格
式
就
為fscanf(fp,“%d%d%d%d%d%d”,&(t[i].name),&(t[i].a1),&(t[i].a2),&(t[i].a3),&(t[i].a4),&(t[i].a5)),讀取成功后關閉文件fclose(fp),并顯示“成功地從文件讀入數據!!”(用printf實現)。
6.清單輸出:
讀取銷售情況有3個,分別是每個人每種產品的銷售額,按銷售額對銷售員進行排序和每種產品的總銷售額三個函數: 1).每個人每種產品的銷售額:
首先,要定義每個人,每種產品,銷售額數組如 int i,j,sum0=0,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;int c[4],b1[4]={0},b2[4]={0},b3[4]={0},b4[4]={0},b5[4]={0},用for循環來求每個人的總銷售額:for(i=0;i<4;i++);用for循環來求每個人每種產品的總銷售額:for(i=0;i 此部分要分兩部分其一是,每位銷售員銷售額;其二是,按銷售額對銷售員排序。在求每個銷售員銷售額時也是要先定義銷售員代號,產品代號,銷售額。接著是則是用輸入要查詢的銷售員的代號,用scanf(“%d”,&s)來記錄輸入銷售員代號的信息,然后輸出頭標(如銷售員代號,產品代號,銷售額等,用printf實現),之后開始查詢,查詢信息首先需要一個for語句來,實現對已存入數據的所有查詢for(i=0;i 也一樣首先要定義數組,接著用c[i]=sum(t,n,i+1)求每個人的總銷售額,再用for循環,再用 sum0+=c[i]對所有產品的銷售額求總,用for循環對每個人每種產品的銷售額求總銷售額,再用for循環實現每種產品的總銷售額,然后輸出 頭標(如銷售員代號,產品代號,總銷售額等,用printf實現)即可。程序運行數據及其結果 1.進入主菜單: 2.選擇“1”,輸入便條: 3.輸入條數,如:輸入2天的便條,8條: 4.選擇“2”,保存到文件: 5.選擇“3”,讀取文件: 6.選擇“4”,顯示清單: 7.選擇“5”,每位銷售員的銷售額: 8.輸入查詢員工代號,如:查詢的員工號為3: 8.選擇“6”,每種產品的銷售額: 9.選擇“7”,按銷售額對銷售員排序: 10.選擇“0”,退出管理: 11.保存的文件: 保存的文件為TXT格式,其保存的文件為: 課程設計心得 經過上機實踐學習,使我對c語言有了更進一步的認識和了解,C語言是計算機程序設計的重要理論基礎,在我們以后的學習和工作中都有著十分重要的地位。要學好這種語言,僅僅學習課本上的知識是不夠的,還要經常自己動手,有較強的實踐能力。只有多動手,經常編寫程序,才能發現我們學習上的漏洞和自己的不足,并在實踐中解決這些問題,不斷提高自己轉化知識的能力。通過實踐,我也發現 我的好多不足之處,首先是自己在指法上還不行,經常按錯字母,通過學習也有所改進;再有對c語言的一些標準庫函數不太了解,還有對函數調用的正確使用不夠熟悉,還有對c語言中經常出現的錯誤也不了解,通過實踐,使我在這幾個方面的認識有所提高。通過實踐的學習,我認到學好計算機要重視實踐操作,不僅僅是學習c語言,還是其它的語言,以及其它的計算機方面的知識都要重在實踐,所以后在學習過程中,我會更加注視實踐操作,使自己便好地學好計算機。 附錄: #include “stdio.h”/*輸入輸出函數*/ #include “stdlib.h”/*通用應用程序函數*/ #include “string.h”/*字符串函數*/ #include “ctype.h”/*字符操作函數*/ typedef struct /*定義結構體變量*/ { int name;/*銷售員代號*/ int a1;/*產品一代號*/ int a2;/*產品二代號*/ int a3;/*產品三代號*/ int a4;/*產品四代號*/ int a5;/*產品五代號*/ }RECODE; /******以下是函數原型*******/ 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 n);/*聲明函數*/ int load(RECODE t[]);/*聲明函數*/ /*主函數開始*/ int main()/*主函數*/ { } RECODE rec[600];int length; system(“cls”);/*清屏*/ for(;;)/*無限循環*/ {switch(menu_select())/*根據用戶的選擇判斷該調用哪個功能函數*/ { break;case 2:save(rec,length); } } break;break;break;break;break;break;case 3:length=load(rec);case 4:list1(rec,length);case 5:salor(rec,length);case 6:list2(rec,length);case 7:list3(rec,length);case 0:exit(0); case 1:length=enter(rec);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”);printf(“ 7 按銷售額對銷售員排序n”);printf(“ 0 退出管理n”); printf(“*********************END****************nn”);printf(“ 請選擇你的操作(0-7): n”);scanf(“%d”,&n);if(0 /*清單輸入*/ int enter(RECODE t[]){ int i,num;system(“cls”);/*清屏*/ printf(“請輸入要寫的便條條數:n”); scanf(“%d”,&num);/*輸入所要寫入的清單的條數*/ printf(“name product1 product2 product3 product4 product5”);for(i=0;i } printf(“n----nnn”);return i;} /*保存文件*/ void save(RECODE t[],int n){ printf(“nn-----n”); scanf(“%d%d%d%d%d%d”,&t[i].name,&t[i].a1,&t[i].a2,&t[i].a3,&t[i].a4,&t[i].a5); int i; FILE *fp;/*調用fopen函數*/ if((fp=fopen(“record.txt”,“wb”))==NULL)/*如果函數帶回一個空指針值*/ { printf(“不能打開文件n”);/*不能打開文件*/ exit(1);} fprintf(fp,“%d”,n);fprintf(fp,“rn”);for(i=0;i fprintf(fp,“%-10d%-7d%-7d%-7d%-7d%-7d”,t[i].name,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5);/*將便條的信息輸出到fp指向的文件上*/ fprintf(fp,“rn”);} fclose(fp);/*關閉文件*/ printf(“****保存成功***nn”);/*顯示保存成功*/ printf(“press any key to continue......n”);getchar();} /*讀取文件*/ int load(RECODE 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 fscanf(fp,“%d%d%d%d%d%d”,&(t[i].name),&(t[i].a1),&(t[i].a2), &(t[i].a3),&(t[i].a4),&(t[i].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”);/*不能打開文件*/ exit(1);} fscanf(fp,“%d”,&n);for(i=0;i fscanf(fp,“%d%d%d%d%d%d”,&(t[i].name),&(t[i].a1),&(t[i].a2),&(t[i].a3),&(t[i].a4),&(t[i].a5));/*從fp指向的文件上讀入便條信息*/ fclose(fp); printf(“***************************the recode**************************nnn”); printf(“name product1 product2 product3 product4 product5”);for(i=0;i printf(“ %d %d %d %d %d %d”,t[i].name,lise of saling t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5); } printf(“nn--n”);printf(“n press any key to continue.......n”);getchar();} /*每位銷售員銷售額*/ void salor(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 if(t[i].name==s){b1+=t[i].a1; b2+=t[i].a2; b3+=t[i].a3; b4+=t[i].a4; b5+=t[i].a5;} printf(“name product1 product2 product3 product4 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==t[i].name) {sum+=t[i].a1;sum+=t[i].a2;sum+=t[i].a3;sum+=t[i].a4;sum+=t[i].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 c[4],b1[4]={0},b2[4]={0},b3[4]={0},b4[4]={0},b5[4]={0};system(“cls”);;for(i=0;i<4;i++) c[i]=sum(t,n,i+1);/*求每個人的總銷售額*/ for(i=0;i<4;i++) sum0+=c[i];/*所有產品的銷售額*/ for(i=0;i for(i=0;i<4;i++)/*每種產品的總銷售額*/ {sum1+=b1[i];sum2+=b2[i]; sum3+=b3[i];sum4+=b4[i];sum5+=b5[i];} printf(“ products numn”); printf(“ code sumnn”);for(i=0;i<4;i++) printf(“ %-10d%-7d%-7d%-7d%-7d%-7d%-7dn”,i+1,b1[i],b2[i],b3[i],b4[i],b5[i],c[i]);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 c[4],m[4];/*定義兩個數組*/ system(“cls”);/*清屏*/ for(i=0;i<4;i++)m[i]=i+1;for(i=0;i<4;i++)c[i]=sum(t,n,m[i]); for(i=0;i<4;i++)/*按銷售員的銷售額進行排序*/ for(j=i+1;j<4;j++)if(c[i] } printf(“the sequce of salor'saling number from many to fewn”);for(i=0;i<4;i++)/*輸出銷售員代號*/ printf(“%dn”,m[i]); printf(“ninput any key to continue.......n”);getchar();} 銷售 銷售管理系統主要業務主要包括:客戶管理、價格管理、信用管理、合同管理、出貨管理以及貸款管理等 客戶管理: 內容主要包括客戶基礎資料、客戶特征、業務狀況、交易現狀 價格管理:使用歷次售價、最新成本加成和按價格政策定價等三種價格依據。同 時,按價格政策定價時,支持商品促銷價,可以按客戶定價,也可以按存貨定價。按存貨定價時還支持按不同自由項定價。主要包括存貨價格、客戶價格、折扣政策、價格組。 信用管理: 信用管理的目標包括降低企業賒賬的風險,減少壞賬損失;降低銷售 變現天數,加快流動資金周轉。其內容包括客戶資信調查、制定信用政策、管理客戶資信、應收賬款的管理。 合同管理: 合同管理主要是訂單管理。訂單管理,主要是根據客戶需求和企業的 生產能力,制定企業的供貨計劃,接受客戶訂單,同時協調客戶與內部各部門尤其是生產和儲運部門的工作,確保銷售訂單按時完成,并做好后續服務等相關工作。其內容包括庫存信息管理、存貨和客戶價格管理、信用審查、付款條件與期限管理。 出貨管理: 分為發貨管理、退貨管理以及客戶檔案管理三部分。發貨管理內容包 括發貨單、出庫單生成,發貨方式管理,發貨檢驗跟蹤。客戶檔案管理又包括客戶信息管理,發貨地址管理,發、退貨記錄等內容。貸款管理: 以票據的方式管理客戶的往來款,包括票據錄入、客戶貸款提現、轉 賬等。依據銷售發貨單開具銷售發票,發票審核后即可確認收入,形成應收賬款,在應收款管理系統可以查詢和制單,并據此收款。開出銷售發票向客戶催收銷售貨款,并將發票轉給財務部門記賬。 各功能模塊分析 銷售管理子系統包含5個功能模塊,分別為銷售基礎資料模塊,收發貨管理模塊,銷售計劃管理模塊,銷售服務管理模塊,銷售訂單管理模塊,具體說明如下: 銷售基礎數據:基礎數據是指與銷售相關的基本資料包括費用定義、銷售傭金、銷售員資料、客戶資料、訂單取消原因、退貨原因、交貨方式、訂貨方式、價格種類、客戶組別、銷售類型等; 收發貨管理:其主要功能包括銷售過賬,發票維護,差價維護,退、換貨通知,發貨通知等;銷售計劃管理:包括銷售計劃的合并與維護兩部分; 銷售服務管理:主要是與銷售服務相關過程的維護,包括銷售服務記錄,服務過 程記錄,銷售政策發布,銷售網點維護與服務跟蹤; 銷售訂單管理:主要是對合同相關及客戶信用相關的功能。包括銷售計劃,產品 系列維護,信用管理,銷售價格維護,訂單、合同終止結清,訂單、合同維護等。 報告正文 1、題目與要求: 1.1 某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5)。每個銷售員都將當日出售的每種產品各寫一張便條交上來。每張便條內容有 ? 銷售員的代號 ? 產品的代號 ? 這種產品當天的銷售額 1.2 每位銷售員每天可能上繳0-5張便條。假設手機到了上個月的所有便條,編寫一個處理系統,讀取上月的銷售情況(自己設定),進行如下處理: ? 計算上個月沒人每種產品的銷售額 ? 按銷售額對銷售員進行排序,輸出排序結果(銷售員代號) ? 統計每種產品的總銷售額,對這些產品從高到低的順序輸出結果(須輸出產品的代號和銷售額)? 輸出統計報表 2、需求分析 本程序將用到文件系統,list.txt文件內容作為數據源,其中單行內容代表一張紙條。程序運行后首先將文件系統的原始數據讀取并保存到程序的結構體數組當中,所以應提供文件輸入的操作;由于紙條數據零散,所以要對原始數據進行分類操作并提供一個數組用于保存分類信息;在程序中要進行統計工作,所以要提供顯示、排序等操作;另外應提供鍵盤式選擇菜單實現功能選擇。 3、功能實現設計 3.1總體設計 根據上面的分析,可以將這個系統分為如下五大模塊:查看每人每種產品的銷售額、按銷售額對銷售員排序、對每種產品總銷售額從高到低排序、輸出統計報表和退出。其中主要模塊是前四個模塊。 3.2流程圖 3.3詳細設計: 3.3.1【頭文件和預定義】 #include #include 原始數據有銷售員代號、產品代號和銷售額,所以定義一個全局結構體數組scrip用于保存原始數據。然后定義全局變量n保存紙條數目,定義數組s用于保存分類后的信息。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}};//用于保存員工和產品信息 3.3.4【主函數】 顯示程序設計者相關信息和調用文件讀取函數、數據初始化函數和主菜單函數 void main()//入口函數,即主函數 { readdata();//讀取文件數據 foreach();//根據文件初始數據初始化便于操作的數組 menu();//顯示主菜單 } 3.3.4-1【文件讀取函數】readdata()讀出便條中的內容,并保存到文件結構體中 void readdata()//從文件讀取數據 { FILE *fp;if((fp=fopen(“list.txt”,“r”))==NULL){ printf(“Can't open the file!n”); exit(0);} else for(n=0;!feof(fp);n++) { fscanf(fp,“%d %d %dn”,&ss[n].sid,&ss[n].pid,&ss[n].sn); } //保存文件數據到結構體 fclose(fp);} 3.3.4-2【文件讀取函數】foreach()將保存到結構體中的信息按產品分類,再根據銷售員進行分類,將信息存到數組當中。 void foreach()//從紙條讀取數據并分類整理 { int i;for(i=0;i { switch(ss[i].pid) //按產品分大類,根據大類分銷售員小類,累加個人各產品銷售數量 { case 1: switch(ss[i].sid) { case 1:s[0][0]+=ss[i].sn;break; case 2:s[1][0]+=ss[i].sn;break; case 3:s[2][0]+=ss[i].sn;break; 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;} } } 3.3.4-3【主菜單函數】menu()顯示系統功能菜單以供用戶選擇相關功能使用,根據用戶選擇分別可調用 detail():計算上個月每個人每種產品的銷售額 seller():按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)product():統計每種產品的總銷售額,對這些產品按從高到低的順序輸出排序結果(需輸出產品代號和銷售額)exit(0):退出系統 void menu(){ int w,c;do{ puts(“tt*********菜單*********************nn”);puts(“tt 1.查看每人每種產品的銷售額n”);puts(“tt 2.按銷售額對銷售員排序(銷售員代號)n”);puts(“tt 3.對每種產品總銷售額從高到低排序(產品代號和銷售額)n”);puts(“tt 4.輸出統計報表n”);puts(“tt 5.退出n”);puts(“nntt*********************************************n”);printf(“請選擇(1-5):[ ]bb”);scanf(“%d”,&c);if(c<1||c>5)//錯誤輸入則重新獲取輸入 { w=1;getchar();} else w=0;} while(w==1); switch(c)//根據輸入實現相應函數調用 { case 1: detail();break;//每個銷售員每種產品的銷售額統計 case 2: seller();break;case 3: product();break;case 4: total();break;case 5: exit(0);} } 3.3.5【功能函數】 5-1【每人每種產品銷售額統計函數】detail()計算上個月每個人每種產品的銷售額 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();} 3.3.5-1【銷售員銷售業績排序函數】seller()按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)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] printf(“tt第%d名是%d號銷售員!n”,i+1,k+1);sp[k]=-1; //輸出最大數和排名,將最大數標記為負 } choice();} 3.3.5-2【總銷售額統計函數】void product()統計每種產品的總銷售額,對這些產品按從高到低的順序輸出排序 void product()//與seller()原理一樣,用于對產品進行統計 { int i,j,k;int p[5]={0,0,0,0,0};for(j=0;j<5;j++) for(i=0;i<4;i++) p[j]+=s[i][j]; for(j=0;j<5;j++) { k=0; for(i=0;i<5;i++) if(p[k] printf(“tt第%d名是%d號產品!t銷量為%d!n”,j+1,k+1,p[k]);p[k]=-1; } choice();} 3.3.5-3【統計報表輸出函數】total()統計每種產品的總銷售額,對這些產品按從高到低的順序輸出排序結果(需輸出產品代號和銷售額) 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();} 3.3.6【公共函數】 【選擇函數】choice()選擇退出系統或則返回主菜單 void choice()//用于輸出信息功能選擇 { int c;printf(“請選擇接下來想做什么t1>返回菜單t2>退出系統scanf(”%d“,&c);if(c==1)menu();else exit(0);puts('n');} 4、運行結果(附帶抓圖) List.txt(便條)文件中數據如下: 2 3 4 1 [ ]bb”);3 運行結果 顯示主菜單: 查看每人每種產品的銷售額運行結果: 按銷售額對銷售員排序運行結果: 對每種產品銷售額從高到低排序運行結果: 統計報表運行結果: 5、總結 通過這次C程序設計,我掌握了模塊化設計方法,能夠深入的理解結構化程序設計思想,熟練運用結構化程序設計方法,提高了運用C語言進行程序設計的能力。此外我還熟悉了,對于文件讀寫的操作。更重要的是對程序的調試有了顯著的提高。我發現我對程序的設計越來越感興趣了,我決定今后在這一方面下一番功夫,取得一些成績。 6、源程序 #include 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 main()//入口函數,即主函數 { p readdata();//讀取文件數據 foreach(); //根據文件初始數據初始化便于操作的數組 menu(); //顯示主菜單 } void readdata() //從文件讀取數據 { FILE *fp;if((fp=fopen(“list.txt”,“r”))!=NULL){ printf(“Can't open the file!n”); exit(0);} else 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 //遍歷所有紙條 { switch(ss[i].pid) //按產品分大類,根據大類分銷售員小類,累加個人各產品銷售數量 { case 1: switch(ss[i].sid) { case 1:s[0][0]+=ss[i].sn;break; case 2:s[1][0]+=ss[i].sn;break; case 3:s[2][0]+=ss[i].sn;break; 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 w,c;do{ puts(“tt********************菜單*********************nn”); puts(“tt 1.查看每人每種產品的銷售額n”); puts(“tt 2.按銷售額對銷售員排序(銷售員代號)n”); puts(“tt 3.對每種產品總銷售額從高到低排序(產品代號和銷售額)n”); puts(“tt 4.輸出統計報表n”); puts(“tt 5.退出n”); puts(“nntt*********************************************n”); printf(“請選擇(1-5):[ ]bb”); scanf(“%d”,&c); if(c<1||c>5) //錯誤輸入則重新獲取輸入 { w=1; getchar(); } else w=0;} while(w==1); switch(c) //根據輸入實現相應函數調用 { case 1: detail();break;//每個銷售員每種產品的銷售額統計 case 2: seller();break;case 3: product();break;case 4: total();break;case 5: 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] //獲取最大數標號 printf(“tt第%d名是%d號銷售員!n”,i+1,k+1);sp[k]=-1; //輸出最大數和排名,將最大數標記為負 } choice();} void product() //與seller()原理一樣,用于對產品進行統計 { int i,j,k;int p[5]={0,0,0,0,0};for(j=0;j<5;j++) for(i=0;i<4;i++) p[j]+=s[i][j]; for(j=0;j<5;j++) {k=0; for(i=0;i<5;i++) if(p[k] printf(“tt第%d名是%d號產品!t銷量為%d!n”,j+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(“請選擇接下來想做什么t1>返回菜單t2>退出系統 [ ]bb”);scanf(“%d”,&c);if(c==1)menu();else exit(0);puts('n');} 金蝶ERP操作手冊 銷售管理系統 操 作 手 冊 慈溪市聯創軟件有限公司 2014年10月 金蝶ERP操作手冊 進入銷售管理 1、銷售訂單 1.1 新增 操作:供應鏈——》銷售管理——》銷售訂單——》銷售訂單-新增 1)雙擊“銷售訂單—新增”打開“銷售訂單” 2)光標依次定位在“購貨單位”、“銷售方式”處,按F7或點擊工具條上的“查看”按鈕,彈出“條件過濾”窗口,根據具體情況選擇銷售方式式和客戶,單擊確定即可; 3)在產品代碼項上,按F7或點擊工具條上的“查看”按鈕,彈出“核算項目—物料”窗口 金蝶ERP操作手冊 4)選擇你要銷售商品的名稱,雙擊該名稱,返回銷售訂單窗口,在該訂單的物料處填入數量、單價等信息。 填入交貨日期,最后在部門、業務員項上按F7或點擊工具條上的“查看”按鈕選擇正確的選項,最后單擊保存按鈕保存。 1.2 維護 操作:供應鏈——》銷售管理——》銷售訂單——》銷售訂單-維護 1)雙擊“銷售訂單-維護”打開“條件過濾”窗口,過濾選項根據視具體的情況選擇,點擊確定,進入銷售訂單序時簿。 金蝶ERP操作手冊 2)銷售訂單序時簿中會列出你所有過濾條件下的訂單,在這里查看銷售訂單詳細情況,并確認產品的數量、單價等相關信息無誤后,點擊工具條的“審核”按鈕,彈出審核是否成功提示信息,當提示審核成功后會在銷售訂單序時簿該銷售訂單的審核標志字段處打上Y的已審核標志;同時,對銷售可以進變更、修改、刪除等操作。 2、發貨通知單。 2.1 新增 操作:供應鏈——》銷售管理——發貨通知》發貨通知單-新增 1)雙擊“發貨通知單—新增”打開“發貨通知單” 2)光標定位在“源單類型”處,選擇銷售訂單,然后在選單號處,按F7或點擊工具條上的“查看”按鈕,彈出“條件過濾”窗口,根據具體情況選擇過濾條件等選項,單擊確定,彈出“銷售訂單序時簿” 金蝶ERP操作手冊 3)窗口中出現的是已經審核并且未關閉的銷售訂單,選擇要關聯的銷售訂單,雙擊該銷售訂單,系統就會把該銷售訂單的信息帶回到“發貨通知單 ”窗口上來 2.2 維護 操作:供應鏈——》銷售管理——發貨通知》發貨通知單-維護 金蝶ERP操作手冊 1)雙擊“發貨通知單維護”打開“條件過濾”窗口,在審核標志處選擇未審核,其他選項根據具體的情況選擇,點擊確定,進入發貨通知單序時簿 2)發貨通知單序時簿中會列出你所有過濾條件下的發貨通知單,在這里查看到根據銷售訂單要發貨的詳細情況,并確認發貨產品的數量、規格等相關信息無誤后,點擊工具條的“審核”按鈕,彈出審核是否成功提示信息,當提示審核成功后會在發貨通知單序時簿的審核標志字段處打上Y的已審核標志;同時,對發貨通知單可以進變更、修改、刪除等操作。 3、銷售出庫單。3.1 新增 操作:供應鏈——》銷售管理——銷售出庫單》銷售出庫單-新增 1)雙擊“銷售出庫單—新增”打開“銷售出庫單”錄入界面 2)光標定位在“源單類型”處,選擇發貨通知單,然后在選單號處,按金蝶ERP操作手冊 F7或點擊工具條上的“查看”按鈕,彈出“條件過濾”窗口,根據具體情況選擇過濾條件等選項,單擊確定,彈出“發貨通知單序時簿” 3)窗口中出現的是已經審核并且未關閉的發貨通知單,選擇要關聯的發貨通知單,雙擊該發貨通知單,系統就會把該發貨通知單的信息帶回到“銷售出庫單 ”窗口上來 3.2 維護 操作:供應鏈——》銷售管理——銷售出庫》銷售單-維護 1)雙擊“銷售出庫單維護”打開“條件過濾”窗口,在審核標志處選擇未審核,其他選項根據具體的情況選擇,點擊確定,進入銷售出庫單序時簿 金蝶ERP操作手冊 2)銷售出庫單序時簿中會列出你所有過濾條件下的銷售出庫單,在這里查看到根據發貨通知單產生的銷售出庫單,并確認出庫產品的數量、規格等相關信息無誤后,點擊工具條的“審核”按鈕,彈出審核是否成功提示信息,當提示審核成功后會在銷售出庫單序時簿的審核標志字段處打上Y的已審核標志;同時,對銷售出庫單可以進修改、刪除等操作。 4、銷售開票 4.1新增: 1)供應鏈——》銷售管理——》銷售發票——》新增,雙擊。 2)在“源單類型”里選擇銷售出庫,“選單號”里按F7,彈出“條件過濾”窗口,根據需要的條件選擇對應的銷售出庫單。金蝶ERP操作手冊 3)選擇需要生成發票的銷售出庫單,點擊返回后彈回銷售發票界面,確認無誤后保存。 4.2維護 1)雙擊“銷售發票維護”打開“條件過濾”窗口,在審核標志處選擇未審核,其他選項根據具體的情況選擇,點擊確定,進入銷售發票序時簿 在過濾出的銷售發票里選擇需要審核的銷售發票,點擊審核。在彈出審核成金蝶ERP操作手冊 功后,審核人和審核標記列里會顯示審核人的名字和Y字樣,說明審核成功; 對未審核的單據,可以進行修改、刪除等操作。 5、收款單 5.1新增: 1)財務會計——》應收款管理——》收款--收款單》新增,雙擊。 2)在“源單類型”里選擇銷售發票,“選單號”里按F7,彈出“條件過濾”窗口,根據需要的條件選擇對應的銷售發票 3)選擇需要生成發票的銷售發票,點擊返回后彈回收款單界面,確認無誤后保存。 5.2維護 金蝶ERP操作手冊 1)雙擊“收款單維護”打開“條件過濾”窗口,在審核標志處選擇未審核,其他選項根據具體的情況選擇,點擊確定,進入收款單序時簿 在過濾出的收款單序時簿里選擇需要審核的付款單,點擊審核。在彈出審核成功后,審核人和審核標記列里會顯示審核人的名字和Y字樣,說明審核成功; 對未審核的單據,可以進行修改、刪除等操作 至此,由銷售訂單-》發貨通知單-》銷售出庫單-》銷售發票-》收款單(應收系統)整體操作流程及步驟完畢,如果不完善之處,敬請指教! 報告正文 1、題目與要求: 1.1 某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5)。每個銷售員都將當日出售的每種產品各寫一張便條交上來。每張便條內容有 ? 銷售員的代號 ? 產品的代號 ? 這種產品當天的銷售額 1.2 每位銷售員每天可能上繳0-5張便條。假設手機到了上個月的所有便條,編寫一個處理系統,讀取上月的銷售情況(自己設定),進行如下處理: ? 計算上個月沒人每種產品的銷售額 ? 按銷售額對銷售員進行排序,輸出排序結果(銷售員代號) ? 統計每種產品的總銷售額,對這些產品從高到低的順序輸出結果(須輸出產品的代號和銷售額)? 輸出統計報表 2、需求分析 本程序將用到文件系統,list.txt文件內容作為數據源,其中單行內容代表一張紙條。程序運行后首先將文件系統的原始數據讀取并保存到程序的結構體數組當中,所以應提供文件輸入的操作;由于紙條數據零散,所以要對原始數據進行分類操作并提供一個數組用于保存分類信息;在程序中要進行統計工作,所以要提供顯示、排序等操作;另外應提供鍵盤式選擇菜單實現功能選擇。 3、功能實現設計 3.1總體設計 根據上面的分析,可以將這個系統分為如下五大模塊:查看每人每種產品的銷售額、按銷售額對銷售員排序、對每種產品總銷售額從高到低排序、輸出統計報表和退出。其中主要模塊是前四個模塊。 3.2流程圖 3.3詳細設計: 3.3.1【頭文件和預定義】 #include #include 原始數據有銷售員代號、產品代號和銷售額,所以定義一個全局結構體數組scrip用于保存原始數據。然后定義全局變量n保存紙條數目,定義數組s用于保存分類后的信息。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}};//用于保存員工和產品信息 3.3.4【主函數】 顯示程序設計者相關信息和調用文件讀取函數、數據初始化函數和主菜單函數 void main()//入口函數,即主函數 { readdata();//讀取文件數據 foreach();//根據文件初始數據初始化便于操作的數組 menu();//顯示主菜單 } 3.3.4-1【文件讀取函數】readdata()讀出便條中的內容,并保存到文件結構體中 void readdata()//從文件讀取數據 { FILE *fp;if((fp=fopen(“list.txt”,“r”))==NULL){ printf(“Can't open the file!n”); exit(0);} else for(n=0;!feof(fp);n++) { fscanf(fp,“%d %d %dn”,&ss[n].sid,&ss[n].pid,&ss[n].sn); } //保存文件數據到結構體 fclose(fp);} 3.3.4-2【文件讀取函數】foreach()將保存到結構體中的信息按產品分類,再根據銷售員進行分類,將信息存到數組當中。 void foreach()//從紙條讀取數據并分類整理 { int i;for(i=0;i { switch(ss[i].pid) //按產品分大類,根據大類分銷售員小類,累加個人各產品銷售數量 { case 1: switch(ss[i].sid) { case 1:s[0][0]+=ss[i].sn;break; case 2:s[1][0]+=ss[i].sn;break; case 3:s[2][0]+=ss[i].sn;break; 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;} } } 3.3.4-3【主菜單函數】menu()顯示系統功能菜單以供用戶選擇相關功能使用,根據用戶選擇分別可調用 detail():計算上個月每個人每種產品的銷售額 seller():按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)product():統計每種產品的總銷售額,對這些產品按從高到低的順序輸出排序結果(需輸出產品代號和銷售額)exit(0):退出系統 void menu(){ int w,c;do{ puts(“tt*********菜單*********************nn”);puts(“tt 1.查看每人每種產品的銷售額n”);puts(“tt 2.按銷售額對銷售員排序(銷售員代號)n”);puts(“tt 3.對每種產品總銷售額從高到低排序(產品代號和銷售額)n”);puts(“tt 4.輸出統計報表n”);puts(“tt 5.退出n”);puts(“nntt*********************************************n”);printf(“請選擇(1-5):[ ]bb”);scanf(“%d”,&c);if(c<1||c>5)//錯誤輸入則重新獲取輸入 { w=1;getchar();} else w=0;} while(w==1); switch(c)//根據輸入實現相應函數調用 { case 1: detail();break;//每個銷售員每種產品的銷售額統計 case 2: seller();break;case 3: product();break;case 4: total();break;case 5: exit(0);} } 3.3.5【功能函數】 5-1【每人每種產品銷售額統計函數】detail()計算上個月每個人每種產品的銷售額 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();} 3.3.5-1【銷售員銷售業績排序函數】seller()按銷售額對銷售員進行排序,輸出排序結果(銷售員代號)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] printf(“tt第%d名是%d號銷售員!n”,i+1,k+1);sp[k]=-1; //輸出最大數和排名,將最大數標記為負 } choice();} 3.3.5-2【總銷售額統計函數】void product()統計每種產品的總銷售額,對這些產品按從高到低的順序輸出排序 void product()//與seller()原理一樣,用于對產品進行統計 { int i,j,k;int p[5]={0,0,0,0,0};for(j=0;j<5;j++) for(i=0;i<4;i++) p[j]+=s[i][j]; for(j=0;j<5;j++) { k=0; for(i=0;i<5;i++) if(p[k] printf(“tt第%d名是%d號產品!t銷量為%d!n”,j+1,k+1,p[k]);p[k]=-1; } choice();} 3.3.5-3【統計報表輸出函數】total()統計每種產品的總銷售額,對這些產品按從高到低的順序輸出排序結果(需輸出產品代號和銷售額) 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();} 3.3.6【公共函數】 【選擇函數】choice()選擇退出系統或則返回主菜單 void choice()//用于輸出信息功能選擇 { int c;printf(“請選擇接下來想做什么t1>返回菜單t2>退出系統scanf(”%d“,&c);if(c==1)menu();else exit(0);puts('n');} 4、運行結果(附帶抓圖) List.txt(便條)文件中數據如下: 2 3 4 1 [ ]bb”);3 運行結果 顯示主菜單: 查看每人每種產品的銷售額運行結果: 按銷售額對銷售員排序運行結果: 對每種產品銷售額從高到低排序運行結果: 統計報表運行結果: 5、總結 通過這次課程設計,我掌握了模塊化設計方法,能夠深入的理解結構化程序設計思想,熟練運用結構化程序設計方法,提高了運用C語言進行程序設計的能力。此外我還熟悉了,對于文件讀寫的操作。更重要的是對程序的調試有了顯著的提高。我發現我對程序的設計越來越感興趣了,我決定今后在這一方面下一番功夫,取得一些成績。第二篇:銷售管理系統
第三篇:C語言課程設計銷售管理系統報告
第四篇:銷售管理系統操作手冊
第五篇:銷售管理系統報告