C語言課設銷售管理系統設計
一. C程式設計課程設計題目簡介
該設計要求學生以某公司銷售管理業務為背景,設計、開發一套“銷售管理系統”軟體。
通過該題目的設計過程,可以培養學生結構化程式設計的思想,加深對高階語言基本語言要素和控制結構的理解,針對c語言中的重點和難點內容進行訓練,獨立完成有一定工作量的程式設計任務,同時強調好的程式設計風格。得到軟體工程的綜合訓練,提高解決實際問題的能力。
二. C程式設計課程設計的任務
1、查閱文獻資料,一般在5篇以上;
2、以某公司銷售管理業務為背景,通過調研、分析現有的管理模式和已有的管理軟體,建立系統模型;
3、完成軟體結構設計和演算法設計;
4、完成系統的軟體開發和測試工作;
5、撰寫設計說明書;
6、做好答辯工作。
三. C程式設計課程設計的主要內容、功能及技術指標
1、問題分析及解決方案框架確定:充分地分析和理解問題本身,弄清要求做什麼。在確定解決方案框架過程中,綜合考慮系統功能,考慮怎樣使系統結構清晰、合理、簡單和易於除錯。最後確定每個過程和函式的簡單功能,以及過程(或函式)之間的呼叫關係,並畫出函式之間的呼叫關係圖。
2、詳細設計和編碼:定義相應的儲存結構,確定各個函式的演算法,並畫出流程圖,在此基礎上進行程式碼設計,每個明確的功能模組程式一般不超過60行,否則要進一步劃分。
3、上機前程式靜態檢查:上機前程式靜態檢查可有效提高除錯效率,減少上機除錯程式時的無謂錯誤。靜態檢查主要有兩種途徑:用一組測試資料手工執行程式;通過閱讀或給別人講解自己的程式而深入全面地理解程式邏輯。把程式中的明顯錯誤事先排除。
4、程式除錯與測試:採用自底向上,分模組進行,即先除錯低層函式。能夠熟練掌握除錯工具的各種功能,設計測試資料確定疑點,通過修改程式來證實它或繞過它。除錯正確後,認真整理源程式及其註釋,形成格式和風格良好的源程式清單和結果。
5、完成課程設計報告
① 需求和規格說明:設計題目和問題描述:題目要解決的問題是什麼;
② 設計思路:主要演算法思想,程式功能圖,函式之間的呼叫關係圖;
設計表示:每個函式或過程的功能,列出每個過程或函式所呼叫的過程或函式,並畫出各函式的流程圖;
詳細設計:主要演算法的虛擬碼;
③ 除錯報告:除錯過程中遇到的主要問題,是如何解決的;對設計和編碼的回顧討論和分析;改進設想;經驗和體會等;
④ 程式實現註釋;
⑤ 附錄:源程式清單和結果。如果題目規定了測試資料,則結果要求包含這些測試資料和執行輸出,當然還可以含其他測試資料和執行輸出。
6、某公司有四個銷售員(編號:1-4),負責銷售五種產品(編號:1-5)。每個銷售員都將當天出售的每種產品各寫一張便條交上來。每張便條包含內容: 銷售員的代號 、產品的代號、這種產品的當天的銷售額 。每位銷售員每天可能上繳0-5張便條。假設,收集到了上個月的所有便條,編寫一個處理系統,讀取上個月的銷售情況,進行如下處理:
系統以選單方式工作,錄入資訊用檔案儲存;計算上個月每個人每種產品的銷售額; 按銷售額對銷售員進行排序,輸出排序結果(銷售員代號);統計每種產品的總銷售額,對這些產品按從高到底的順序,輸出排序結果(需輸出產品的代號和銷售額);輸出統計報表。下面是原始碼:
#include "stdio.h" /*輸入輸出函式*/
#include "stdlib.h"/*通用應用程式函式*/
typedef struct/*定義結構體變數*/
{
int gonghao; /*銷售員代號*/
int a1; /*產品一代號*/
int a2; /*產品二代號*/
int a3; /*產品三代號*/
int a4; /*產品四代號*/
int a5; /*產品五代號*/
}DATA;
int menu_select(); /*宣告函式*/
int enter(); /*宣告函式*/
void salor(int n); /*宣告函式*/
int sum(DATA t[100],int n, int e); /*宣告函式*/
void list1(int n);/*宣告函式*/
void list2();/*宣告函式*/
main()/*主函式*/
{ int length;
system("color 3b");
for( ; ; )/*無限迴圈*/
{switch(menu_select()) /*根據使用者的選擇判斷該呼叫哪個功能函式*/
{
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() /*選單函式*/
{
int n;
printf(" 選單 \n\n");
printf(" 設計人:吳繼康、付鵬陽 班級:計算機一班\n");
printf(" 1 輸入便條上的內容\n");
printf(" 2 統計上個月每種產品每人銷售的數量\n");
printf(" 3 按銷售額將銷售員排序\n");
printf(" 4 銷售報表\n");
printf(" 0 退出\n");
printf("---------------------------------end---------------------------\n\n");
printf(" 請輸入(0-4) ");
scanf("%d",&n);
return n;
}
int enter() /*清單輸入*/
{
int i,num;
FILE *fp;
DATA t[100];
printf("請輸入要寫的便條條數:\n");
scanf("%d",&num);
printf("工號 電腦 電視 冰箱 風扇 手機");
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("請輸入要查詢售貨員的代號(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("工號 電腦 電視 冰箱 風扇 手機\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++) /*將所輸入的條數存入結構體陣列中*/
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("按銷售額從高到低將銷售員代號排序\n");
for(i=0;i<4;i++)
printf("%d\n",m[i]);
}
void list2() /*每種產品的銷售額*/
{
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);/*求每個人的總銷售額*/
for(i=0;i<4;i++)
sum0+=c[i]; /*所有產品的銷售額*/
for(i=0;i<k;i++) /*求每個人每種產品的總銷售額*/
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++)/*每種產品的總銷售額*/
{sum1+=b1[i];
sum2+=b2[i];
sum3+=b3[i];
sum4+=b4[i];
sum5+=b5[i];
}
printf("-------------------------銷售報表----------------------\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;
}