C語言實(shí)現(xiàn)銷售管理系統(tǒng)課程設(shè)計(jì)
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)銷售管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一.C程序設(shè)計(jì)課程設(shè)計(jì)題目簡介
該設(shè)計(jì)要求學(xué)生以某公司銷售管理業(yè)務(wù)為背景,設(shè)計(jì)、開發(fā)一套“銷售管理系統(tǒng)”軟件。
通過該題目的設(shè)計(jì)過程,可以培養(yǎng)學(xué)生結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對(duì)高級(jí)語言基本語言要素和控制結(jié)構(gòu)的理解,針對(duì)c語言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。得到軟件工程的綜合訓(xùn)練,提高解決實(shí)際問題的能力。
二.C程序設(shè)計(jì)課程設(shè)計(jì)的任務(wù)
1、查閱文獻(xiàn)資料,一般在5篇以上;
2、以某公司銷售管理業(yè)務(wù)為背景,通過調(diào)研、分析現(xiàn)有的管理模式和已有的管理軟件,建立系統(tǒng)模型;
3、完成軟件結(jié)構(gòu)設(shè)計(jì)和算法設(shè)計(jì);
4、完成系統(tǒng)的軟件開發(fā)和測試工作;
5、撰寫設(shè)計(jì)說明書;
6、做好答辯工作。
三.C程序設(shè)計(jì)課程設(shè)計(jì)的主要內(nèi)容、功能及技術(shù)指標(biāo)
1、問題分析及解決方案框架確定:充分地分析和理解問題本身,弄清要求做什么。在確定解決方案框架過程中,綜合考慮系統(tǒng)功能,考慮怎樣使系統(tǒng)結(jié)構(gòu)清晰、合理、簡單和易于調(diào)試。最后確定每個(gè)過程和函數(shù)的簡單功能,以及過程(或函數(shù))之間的調(diào)用關(guān)系,并畫出函數(shù)之間的調(diào)用關(guān)系圖。
2、詳細(xì)設(shè)計(jì)和編碼:定義相應(yīng)的存儲(chǔ)結(jié)構(gòu),確定各個(gè)函數(shù)的算法,并畫出流程圖,在此基礎(chǔ)上進(jìn)行代碼設(shè)計(jì),每個(gè)明確的功能模塊程序一般不超過60行,否則要進(jìn)一步劃分。
3、上機(jī)前程序靜態(tài)檢查:上機(jī)前程序靜態(tài)檢查可有效提高調(diào)試效率,減少上機(jī)調(diào)試程序時(shí)的無謂錯(cuò)誤。靜態(tài)檢查主要有兩種途徑:用一組測試數(shù)據(jù)手工執(zhí)行程序;通過閱讀或給別人講解自己的程序而深入全面地理解程序邏輯。把程序中的明顯錯(cuò)誤事先排除。
4、程序調(diào)試與測試:采用自底向上,分模塊進(jìn)行,即先調(diào)試低層函數(shù)。能夠熟練掌握調(diào)試工具的各種功能,設(shè)計(jì)測試數(shù)據(jù)確定疑點(diǎn),通過修改程序來證實(shí)它或繞過它。調(diào)試正確后,認(rèn)真整理源程序及其注釋,形成格式和風(fēng)格良好的源程序清單和結(jié)果。
5、完成課程設(shè)計(jì)報(bào)告
① 需求和規(guī)格說明:設(shè)計(jì)題目和問題描述:題目要解決的問題是什么;
② 設(shè)計(jì)思路:主要算法思想,程序功能圖,函數(shù)之間的調(diào)用關(guān)系圖;
設(shè)計(jì)表示:每個(gè)函數(shù)或過程的功能,列出每個(gè)過程或函數(shù)所調(diào)用的過程或函數(shù),并畫出各函數(shù)的流程圖;
詳細(xì)設(shè)計(jì):主要算法的偽代碼;
③ 調(diào)試報(bào)告:調(diào)試過程中遇到的主要問題,是如何解決的;對(duì)設(shè)計(jì)和編碼的回顧討論和分析;改進(jìn)設(shè)想;經(jīng)驗(yàn)和體會(huì)等;
④ 程序?qū)崿F(xiàn)注釋;
⑤ 附錄:源程序清單和結(jié)果。如果題目規(guī)定了測試數(shù)據(jù),則結(jié)果要求包含這些測試數(shù)據(jù)和運(yùn)行輸出,當(dāng)然還可以含其他測試數(shù)據(jù)和運(yùn)行輸出。
6、某公司有四個(gè)銷售員(編號(hào):1-4),負(fù)責(zé)銷售五種產(chǎn)品(編號(hào):1-5)。每個(gè)銷售員都將當(dāng)天出售的每種產(chǎn)品各寫一張便條交上來。每張便條包含內(nèi)容: 銷售員的代號(hào) 、產(chǎn)品的代號(hào)、這種產(chǎn)品的當(dāng)天的銷售額 。每位銷售員每天可能上繳0-5張便條。假設(shè),收集到了上個(gè)月的所有便條,編寫一個(gè)處理系統(tǒng),讀取上個(gè)月的銷售情況,進(jìn)行如下處理:
系統(tǒng)以菜單方式工作,錄入信息用文件保存;計(jì)算上個(gè)月每個(gè)人每種產(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)表。
下面是源代碼:
#include "stdio.h" /*輸入輸出函數(shù)*/?
#include "stdlib.h"/*通用應(yīng)用程序函數(shù)*/
typedef struct/*定義結(jié)構(gòu)體變量*/?
{
?? ?int gonghao; /*銷售員代號(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)*/
}DATA;
int menu_select(); /*聲明函數(shù)*/?
int enter(); /*聲明函數(shù)*/?
void salor(int n); /*聲明函數(shù)*/?
int sum(DATA t[100],int n, int e); /*聲明函數(shù)*/?
void list1(int n);/*聲明函數(shù)*/?
void list2();/*聲明函數(shù)*/?
main()/*主函數(shù)*/?
{ ? ? ?int length;
?? ?system("color 3b");
?? ?
?? ?for( ; ; )/*無限循環(huán)*/?
?? ?{switch(menu_select()) /*根據(jù)用戶的選擇判斷該調(diào)用哪個(gè)功能函數(shù)*/?
?? ?{
? ? case 1:length=enter();break;?
?? ?case 2:salor(length);break;?
?? ?case 3:list1(length);break; ?
?? ?case 4:list2();break;?
?? ?case 0:exit(0);
?? ?}
?? ?}?
}?
int menu_select() /*菜單函數(shù)*/?
{ ?
?? ?int n;
?? ?printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?菜單 ? ? ? ? ? ? ? ? ? ? ? ? ?\n\n");?
?? ?printf(" ? ?設(shè)計(jì)人:吳繼康、付鵬陽 ? ? ? 班級(jí):計(jì)算機(jī)一班\n");
?? ?printf(" ? ? ?1 輸入便條上的內(nèi)容\n");?
?? ?printf(" ? ? ?2 統(tǒng)計(jì)上個(gè)月每種產(chǎn)品每人銷售的數(shù)量\n");?
?? ?printf(" ? ? ?3 按銷售額將銷售員排序\n");?
?? ?printf(" ? ? ?4 銷售報(bào)表\n");
?? ?printf(" ? ? ?0 退出\n");?
?? ?printf("---------------------------------end---------------------------\n\n");?
?? ?printf(" 請(qǐng)輸入(0-4) ");?
?? ?scanf("%d",&n);?
?? ?return n;
}?
?
?
int enter() /*清單輸入*/
{
?? ?int i,num;
?? ?FILE *fp;
?? ?DATA t[100];
?? ?printf("請(qǐng)輸入要寫的便條條數(shù):\n");?
?? ?scanf("%d",&num);
?? ?printf("工號(hào) ? ?電腦 ? ? ?電視 ? ? ?冰箱 ? ? ?風(fēng)扇 ? ? ?手機(jī)");?
?? ?for(i=0;i<num;i++)?
?? ?{
?? ??? ?printf("\n\n------------------------------------\n");
?? ??? ?scanf("%d\t ?%d\t ?%d\t ?%d\t ?%d\t ?%d",&t[i].gonghao,&t[i].a1,&t[i].a2,&t[i].a3,&t[i].a4,&t[i].a5);
?? ?}
?? ?if((fp=fopen("wujikang.dat","ab+"))==NULL)
?? ?{?
?? ??? ?printf("不能打開文件\n");
?? ??? ?exit(1);?
?? ?}?
?? ?for(i=0;i<num;i++)?
?? ?{?
?? ??? ?fprintf(fp,"%d\t%d\t%d\t%d\t%d\t%d\t",t[i].gonghao,t[i].a1,t[i].a2,t[i].a3,t[i].a4,t[i].a5);?
?? ??? ?fprintf(fp,"\r\n");?
?? ?}?
?? ?
?? ?fclose(fp);?
?? ?printf("\n-----------------------------------\n\n\n");?
?? ?return i;?
}
void salor(int n) /*每位銷售員銷售額*/
{?
?? ?int i=0,s;?
?? ?int b1=0,b2=0,b3=0,b4=0,b5=0;
?? ?int k=0;
?? ?DATA t[100];
?? ?FILE *fp;
?? ?if((fp=fopen("wujikang.dat","rb+"))==NULL)
?? ?{?
?? ??? ?printf("不能打開文件\n");
?? ??? ?exit(1);?
?? ?}?
?? ?rewind(fp);
?? ?while(fscanf(fp,"%d\t%d\t%d\t%d\t%d\t%d",&(t[k].gonghao),&(t[k].a1),&(t[k].a2), &(t[k].a3),&(t[k].a4),&(t[k].a5))>0)?
?? ?k++;
?? ?fclose(fp);
? ? printf("請(qǐng)輸入要查詢售貨員的代號(hào)(1-4):");?
? ? scanf("%d",&s); ? ? ? ? ? ? ? ? ? ?
? ? for(i=0;i<k;i++)
?? ??? ?if(t[i].gonghao==s)?
?? ??? ?{b1+=t[i].a1;?
?? ??? ?b2+=t[i].a2;?
?? ??? ?b3+=t[i].a3;?
?? ??? ?b4+=t[i].a4;?
?? ??? ?b5+=t[i].a5;};?
?? ??? ?printf("工號(hào) 電腦 電視 冰箱 風(fēng)扇 手機(jī)\n");?
?? ??? ?printf("%d\t ?%d\t ? %d\t ? %d\t ? ? ? %d\t ? %d\t",s,b1,b2,b3,b4,b5);?
?
?
}?
void list1 (int n) /*顯示清單*/
{
?? ?int i,j,s;?
?? ?int m[10],c[10];
?? ?int k=0;
?? ?DATA t[100];
?? ?FILE *fp;
?? ?if((fp=fopen("wujikang.dat","rb+"))==NULL)
?? ?{?
?? ??? ?printf("不能打開文件\n");
?? ??? ?exit(1);?
?? ?}?
?? ?rewind(fp);
?? ?while(fscanf(fp,"%d\t%d\t%d\t%d\t%d\t%d",&(t[k].gonghao),&(t[k].a1),&(t[k].a2), &(t[k].a3),&(t[k].a4),&(t[k].a5))>0) /*從fp指向的文件上讀入便條信息*/?
?? ?k++;
?? ?fclose(fp);
?? ?for(i=0;i<4;i++) /*將所輸入的條數(shù)存入結(jié)構(gòu)體數(shù)組中*/?
?? ??? ?m[i]=i+1;?
?? ?for(i=0;i<4;i++)?
?? ??? ?c[i]=sum(t,k,m[i]);?
?? ?for(i=0;i<4;i++)
?? ??? ?for(j=i+1;j<4;j++)?
?? ??? ??? ?if(c[i]<c[j])?
?? ??? ??? ?{
?? ??? ??? ??? ?s=m[i];?
?? ??? ??? ??? ?m[i]=m[j];?
?? ??? ??? ??? ?m[j]=s;?
?? ??? ??? ??? ?s=c[i];?
?? ??? ??? ??? ?c[i]=c[j];?
?? ??? ??? ??? ?c[j]=s;
?? ??? ??? ?}?
?? ??? ??? ?printf("按銷售額從高到低將銷售員代號(hào)排序\n");?
?? ??? ??? ?for(i=0;i<4;i++)
?? ??? ??? ??? ?printf("%d\n",m[i]);
}?
void list2() /*每種產(chǎn)品的銷售額*/
{
?? ?int i=0,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};
?? ?int k=0;
?? ?DATA t[100];
?? ?FILE *fp;
?? ?if((fp=fopen("wujikang.dat","rb+"))==NULL)
?? ?{?
?? ??? ?printf("不能打開文件\n");
?? ??? ?exit(1);?
?? ?}?
?? ?
?? ?rewind(fp);//qingchucuowu,zhiyutoubu
?? ?while(fscanf(fp,"%d\t%d\t%d\t%d\t%d\t%d",&(t[k].gonghao),&(t[k].a1),&(t[k].a2), &(t[k].a3),&(t[k].a4),&(t[k].a5))>0)?
?? ?k++;
?? ?for(i=0;i<4;i++)?
?? ??? ?c[i]=sum(t,k,i+1);/*求每個(gè)人的總銷售額*/?
?? ?for(i=0;i<4;i++)?
?? ??? ?sum0+=c[i]; /*所有產(chǎn)品的銷售額*/?
?? ?for(i=0;i<k;i++) /*求每個(gè)人每種產(chǎn)品的總銷售額*/?
?? ??? ?for(j=0;j<4;j++)?
?? ??? ?{?
?? ??? ??? ?if(j+1==t[i].gonghao)?
?? ??? ??? ?{b1[j]+=t[i].a1;?
?? ??? ??? ?b2[j]+=t[i].a2;?
?? ??? ??? ?b3[j]+=t[i].a3;?
?? ??? ??? ?b4[j]+=t[i].a4;?
?? ??? ??? ?b5[j]+=t[i].a5;?
?? ??? ??? ?}
?? ??? ?}?
?? ??? ?for(i=0;i<4;i++)/*每種產(chǎn)品的總銷售額*/?
?? ??? ?{sum1+=b1[i];?
?? ??? ?sum2+=b2[i];?
?? ??? ?sum3+=b3[i];?
?? ??? ?sum4+=b4[i];?
?? ??? ?sum5+=b5[i];?
?? ??? ?}?
?? ??? ?printf("-------------------------銷售報(bào)表----------------------\n\n\n");?
?? ??? ?printf(" products num\n");?
?? ??? ?printf(" 銷售員\t1\t2\t3\t4\t5\t總和\n\n");?
?? ??? ?for(i=0;i<4;i++)?
?? ??? ??? ?printf(" %d\t%d\t%d\t%d\t%d\t%d\t%d\t\n",i+1,b1[i],b2[i],b3[i],b4[i],b5[i],c[i]);?
?? ??? ?printf("psum ?%d\t%d\t%d\t%d\t%d\t%d\t",sum1,sum2,sum3,sum4,sum5,sum0);?
}?
?int sum(DATA t[100],int n, int e)?
{
?? ?
?? ?int i=0,sum=0;?
?? ?for(i=0;i<=n;i++)
?? ??? ?if(e==t[i].gonghao)?
?? ??? ?{sum+=t[i].a1;?
?? ??? ?sum+=t[i].a2;?
?? ??? ?sum+=t[i].a3;?
?? ??? ?sum+=t[i].a4;?
?? ??? ?sum+=t[i].a5;?
?? ??? ?}?
?? ??? ?return sum;
} ?以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用C++11原子量如何實(shí)現(xiàn)自旋鎖詳解
當(dāng)自旋鎖嘗試獲取鎖時(shí)以忙等待(busy waiting)的形式不斷地循環(huán)檢查鎖是否可用,下面這篇文章主要給大家介紹了關(guān)于利用C++11原子量如何實(shí)現(xiàn)自旋鎖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-06-06
C++使用OpenCV進(jìn)行物體識(shí)別與檢測的三種方法
物體識(shí)別與檢測是計(jì)算機(jī)視覺中的核心任務(wù)之一,它被廣泛應(yīng)用于自動(dòng)駕駛、安防監(jiān)控、圖像分析等領(lǐng)域,通過物體檢測技術(shù),計(jì)算機(jī)能夠從圖像中識(shí)別出特定的物體或目標(biāo),本文將介紹如何使用 C++ 和 OpenCV 庫進(jìn)行物體識(shí)別與檢測,需要的朋友可以參考下2025-04-04
Qt為exe添加ico圖片的簡單實(shí)現(xiàn)步驟
這篇文章主要給大家介紹了關(guān)于Qt為exe添加ico圖片的簡單實(shí)現(xiàn)步驟,通過文中介紹的方法可以幫助大家實(shí)現(xiàn)這個(gè)自定義exe圖標(biāo)的效果,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
C語言中實(shí)現(xiàn)itoa函數(shù)的實(shí)例
這篇文章主要介紹了C語言中實(shí)現(xiàn)itoa函數(shù)的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
使用C++構(gòu)建一個(gè)優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn)
優(yōu)先級(jí)隊(duì)列是一種特殊的隊(duì)列數(shù)據(jù)結(jié)構(gòu),本文主要介紹了使用C++構(gòu)建一個(gè)優(yōu)先級(jí)隊(duì)列的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02

