1. 程式人生 > >C語言課設銷售管理系統設計

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;
}