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