當前位置:首頁 » 編程語言 » c語言課設被強制要求
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言課設被強制要求

發布時間: 2023-08-17 11:13:26

c語言課程設計

已調通,大致功能相當
#include <stdio.h>
#include <stdlib.h> /*其它說明*/
#include <string.h> /*字元串函數*/
#include <time.h>

#define LEN sizeof(STUDENT)
typedef struct stu /*定義結構體數組用於緩存數據*/
{
char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;

/*初始化函數*/
STUDENT *Init()
{
return NULL; /*返回空指針*/
}

/*菜單選擇函數*/
int Menu_Select()
{
int n;
struct tm *pt; /*定義時間結構體*/
time_t t;

t=time(NULL);
pt=localtime(&t); /*讀取系統日期並把它放到結構體中*/
printf("\n按任一鍵進入主菜單...... \n"); /*按任一鍵進入主菜單*/
//getch(); /*從鍵盤讀取一個字元,但不顯示於屏幕*/
system("pause");
system("cls"); /*清屏*/
printf("********************************************************************************\n");
printf("\t\t 歡迎 Welcome to\n");
printf("\n\t\t\t 使用學生管理系統1.0\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. 輸入學生成績記錄 Enter the record\n"); /*輸入學生成績記錄*/
printf("\t\t\t2. 顯示 Print the record\n"); /*顯示*/
printf("\t\t\t3. 尋找 Search record on name\n"); /*尋找*/
printf("\t\t\t4. 刪除 Delete a record\n"); /*刪除*/
printf("\t\t\t5. 排序 Sort to make New a file\n"); /*排序*/
printf("\t\t\t6. 插入 Insert record to list\n"); /*插入*/
printf("\t\t\t7. 保存 Save the file\n"); /*保存*/
printf("\t\t\t8. 讀取 Load the file\n"); /*讀取*/
printf("\t\t\t9. 退出 Quit\n"); /*退出*/
printf("\n********************************************************************************\n");
printf("\t\t\t\t當前系統日期:%d-%d-%d\n",pt->tm_year+1900,pt->tm_mon+1,pt->tm_mday); /*顯示當前系統日期*/
do
{
printf("\n\t\t\t輸入你的選擇Enter your choice(1~9):");
fflush(stdin);
scanf("%d",&n);
}while(n<1||n>9); /*如果選擇項不在1~9之間則重輸*/
return(n); /*返回選擇項,主函數根據該數調用相應的函數*/
}

/*輸入函數*/
STUDENT *Create()
{
int i,s;
STUDENT *head=NULL,*p; /* 定義函數.此函數帶回一個指向鏈表頭的指針*/
system("cls");
for(;;)
{
p=(STUDENT *)malloc(LEN); /*開辟一個新的單元*/
if(!p) /*如果指針p為空*/
{
printf("\n輸出內存溢出. Out of memory."); /*輸出內存溢出*/
return (head); /*返回頭指針,下同*/
}
printf("輸入學號Enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*如果學號首字元為0則結束輸入*/
printf("輸入名字Enter the name:");
scanf("%s",p->name);
printf("請輸入3門成績Please enter the %d scores\n",3); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<3;i++) /*3門課程循環3次*/
{
do
{
printf("成績score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 || p->score[i]>100) /*確保成績在0~100之間*/
printf("數據錯誤,請重新輸入 Data error,please enter again.\n");
}while(p->score[i]<0 || p->score[i]>100);
s=s+p->score[i]; /*累加各門成績*/
}
p->sum=s; /*將總分保存*/
p->average=(float)s/3; /*先用強制類型轉換將s轉換成float型,再求平均值*/
p->order=0; /*未排序前此值為0*/
p->next=head; /*將頭結點做為新輸入結點的後繼結點*/
head=p; /*新輸入結點為新的頭結點*/
}
return(head);
}

/* 顯示全部記錄函數*/
void Print(STUDENT *head)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
system("cls");
p=head; /*初值為頭指針*/
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i++;
printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}

/*查找記錄函數*/
void Search(STUDENT *head)
{
STUDENT *p; /* 移動指針*/
char s[5]; /*存放姓名用的字元數組*/
system("cls");
printf("請輸入個姓名來查找. Please enter name for searching.\n");
scanf("%s",s);
p=head; /*將頭指針賦給p*/
while(strcmp(p->name,s) && p != NULL) /*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next; /*移動指針,指向下一結點*/
if(p!=NULL) /*如果指針不為空*/
{
printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\n沒有該學生 There is no num %s student on the list.\n",s); /*顯示沒有該學生*/
}

/*刪除記錄函數*/
STUDENT *Delete(STUDENT *head)
{
//int n;
STUDENT *p1,*p2; /*p1為查找到要刪除的結點指針,p2為其前驅指針*/
char c,s[6]; /*s[6]用來存放學號,c用來輸入字母*/
system("cls");
printf("請輸入要刪除的學號 Please enter the Deleted num: ");
scanf("%s",s);
p1=p2=head; /*給p1和p2賦初值頭指針*/
while(strcmp(p1->num,s) && p1 != NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
p2=p1; /*將p1指針值賦給p2作為p1的前驅指針*/
p1=p1->next; /*將p1指針指向下一條記錄*/
}
if(strcmp(p1->num,s)==0) /*學號找到了*/
{
printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("\n是否要刪除,輸入Y刪除,N則退出\nAre you sure to Delete the student Y/N ?"); /*提示是否要刪除,輸入Y刪除,N則退出*/
for(;;)
{
scanf("%c",&c);
if(c=='n'||c=='N') break; /*如果不刪除,則跳出本循環*/
if(c=='y'||c=='Y')
{
if(p1==head) /*若p1==head,說明被刪結點是首結點*/
head=p1->next; /*把第二個結點地址賦予head*/
else
p2->next=p1->next; /*否則將一下結點地址賦給前一結點地址*/
//n=n-1;
printf("\n學號為(Num): %s 學生以被刪除(student have been Deleted.)\n",s);
printf("別忘了保存. Don't forget to Save.\n");break; /*刪除後就跳出循環*/
}
}
}
else
printf("\n沒有這個學生在表上\nThere is no num %s student on the list.\n",s); /*找不到該結點*/
return(head);
}

/*排序函數*/
STUDENT *Sort(STUDENT *head)
{
int i=0; /*保存名次*/
STUDENT *p1,*p2,*t,*temp; /*定義臨時指針*/
temp=head->next; /*將原表的頭指針所指的下一個結點作頭指針*/
head->next=NULL; /*第一個結點為新表的頭結點*/
while(temp!=NULL) /*當原表不為空時,進行排序*/
{
t=temp; /*取原表的頭結點*/
temp=temp->next; /*原表頭結點指針後移*/
p1=head; /*設定移動指針p1,從頭指針開始*/
p2=head; /*設定移動指針p2做為p1的前驅,初值為頭指針*/
while(t->average<p1->average&&p1!=NULL) /*作成績平均分比較*/
{
p2=p1; /*待排序點值小,則新表指針後移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2,說明待排序點值大,應排在首位*/
{
t->next=p1; /*待排序點的後繼為p*/
head=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置p2和p1之間,如p為空則是尾部*/
{
t->next=p1; /*t的後繼是p1*/
p2->next=t; /*p2的後繼是t*/
}
}
p1=head; /*已排好序的頭指針賦給p1,准備填寫名次*/
while(p1!=NULL) /*當p1不為空時,進行下列操作*/
{
i++; /*結點序號*/
p1->order=i; /*將結點序號賦值給名次*/
p1=p1->next; /*指針後移*/
}
printf("排序成功 Sorting is sucessful.\n"); /*排序成功*/
return (head);
}

/*插入記錄函數*/
STUDENT *Insert(STUDENT *head,STUDENT *New)
{
STUDENT *p0,*p1,*p2;
//int n;
int sum1,i;
p1=head; /*使p1指向第一個結點*/
p0=New; /*p0指向要插入的結點*/
printf("\nPlease enter a New record.\n"); /*提示輸入記錄信息*/
printf("輸入學號Enter the num:");
scanf("%s",New->num);
printf("輸入名字Enter the name:");
scanf("%s",New->name);
printf("Please enter the %d scores.\n",3);
sum1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<3;i++)
{
do
{
printf("成績score%d:",i+1);
scanf("%d",&New->score[i]);
if(New->score[i]>100||New->score[i]<0)
printf("數據錯誤Data error,please enter again.\n");
}while(New->score[i]>100||New->score[i]<0);
sum1=sum1+New->score[i]; /*累加各門成績*/
}
New->sum=sum1; /*將總分存入新記錄中*/
New->average=(float)sum1/3;
New->order=0;
if(head==NULL) /*原來的鏈表是空表*/
{
head=p0;
p0->next=NULL;
} /*使p0指向的結點作為頭結點*/
else
{
while((p0->average<p1->average)&&(p1->next!=NULL))
{
p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*p1後移一個結點*/
}
if(p0->average>=p1->average)
{
if(head==p1)head=p0; /*插到原來第一個結點之前*/
else p2->next=p0; /*插到p2指向的結點之後*/
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
} /*插到最後的結點之後*/
}
//n=n+1; /*結點數加1*/
head=Sort(head); /*調用排序的函數,將學生成績重新排序*/
printf("\n學生Student %s 已被更新have been inserted.\n",New->name);
printf("不要忘了保存Don't forget to Save the New file.\n");
return(head);
}

/*保存數據到文件函數*/
void Save(STUDENT *head)
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10];
printf("輸出文件例如:c:\\score Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*為輸出打開一個二進制文件,為只寫方式*/
{
printf("打不開文件Cannot open the file\n");
return; /*若打不開則返回菜單*/
}
printf("\n保存中...Saving the file......\n");
p=head; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,LEN,1,fp); /*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("保存成功....Save the file successfully!\n");
}

/* 從文件讀數據函數*/
STUDENT *Load()
{
STUDENT *p1,*p2,*head=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10];
printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*打開一個二進制文件,為只讀方式*/
{
printf("打不開文件Can not open the file.\n");
return(head);
}
printf("\n尋找文件...Loading the file!\n");
p1=(STUDENT *)malloc(LEN); /*開辟一個新單元*/
if(!p1)
{
printf("內存溢出!Out of memory!\n");
return(head);
}
head=p1; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*如果沒讀到數據,跳出循環*/
p1->next=(STUDENT *)malloc(LEN); /*為下一個結點開辟空間*/
if(!p1->next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1; /*使p2指向剛才p1指向的結點*/
p1=p1->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
p2->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp);
printf("\n你成功的從文件中讀取了數據!\nYou have success to read data from the file!\n");
return (head);
}

/*主函數界面*/
int main()
{
STUDENT *head,New;
head=Init(); //鏈表初始化,使head的值為NULL
for(;;) //循環無限次
{
switch(Menu_Select())
{
case 1:head=Create();break;
case 2:Print(head);break;
case 3:Search(head);break;
case 4:head=Delete(head);break;
case 5:head=Sort(head);break;
case 6:head=Insert(head,&New);break; //&New表示返回地址
case 7:Save(head);break;
case 8:head=Load(); break;
case 9:exit(0); //如菜單返回值為9則程序結束
}
}

return 0;
}

Ⅱ c語言的課程設計問題該怎麼做

這個程序設計其實很簡單的。
(1)這個要求最簡單,用prinf語句直接輸出相關信息即可。
(2)這個要求也容易,用for語句實現循環,循環體用sanf語句,加system("pause");語句,就可以實現鍵盤輸入回車確定。接受鍵盤數據的變數要用數組,這個關繫到後面的統計排序。用if(a【i】==0) break; 即輸入0回車就退出循環。
(3)通過for語句對數組a進行遍歷,統計之前輸入序號的個數(其實在(2)中就可以統計)保存另一個數組b中。然後對這個數組b的數據進行降序排列。
(4)這個要求只是考查C語言創建、讀取和寫入文件操作的要求而已,熟悉一下相關代碼使用方法即可,分別寫入數組a、數組b就行了。

Ⅲ C語言課程設計

//我以前的作業

游戲說明
1.開始游戲
1)系統隨機產生一位不重復的N位數字。N的大小與等級有關。
初級:N=3 中級:N=4 高級:N=5
2)游戲者輸入所猜的不重復數字,並按回車提交。提交的數據
數應與N的大小一致,當數據位數大於N時,只取前N位。
3)系統將提交的數與它自動產生的數進行比較,輸出結果「*A*B」形式。其中A代表數字正確相應位置也正確,B代表數字正確但位置不正確。如:1A3B表示游戲者有1個數字的位置正確且數值也正確,除此以外,游戲者還猜對了3個數字,但位置不對,即游戲者已經猜出4位數據,但有3個數據位置不對!
4)游戲者有限定次數的猜測機會,在規定次數內完成,則游戲成功,否則,游戲失敗。其中,猜測次數與等級有關:
初級:10次 中級:9次 高級:8次。
5)按完成游戲所用的時間和次數計算游戲者所得分數,游戲等級越高,猜測所用的次數越少,得分越高!若游戲者得分比系統已經保存的分數的高,將提示要求輸入游戲者信息,並且保存在最佳排行之中。
2.等級設置
6)游戲者可以自行設置游戲等級:初級,中級和高級。
3.最佳排行
在最佳排行中,游戲者可以查看當前游戲的最佳排行。
4.游戲說明
在游戲說明中,游戲者可以查看游戲規則。

三.總體設計
本課程設計對模塊設計的要求如下:
(1)要求使用多文件方式實現設計;
(2)要求在各個文件內實現結構化設計;
(3)每個模塊作為一個單獨的C文件,每個文件內的函數如表所示,表中給出了各個函數的功能說明。
(4)宏和數據結構等放在頭文件中,並使用條件編譯。
(1)文件及函數組成
源文件 函數名或其他成分 功能
record.h
ASK 宏定義
結構聲明 結構聲明
庫函數及函數原型聲明
game_ control.c Game_rank 設置游戲等級
Game_explain 輸出遊戲說明
game_ register.c Tiptop_record 記錄最高分
Tiptop_output 輸出最佳排行
game.c Game_main 開始游戲中心
Build_number 獲取系統隨機數字
Game_in_out 獲取游戲者數據和輸出結果
Time_command 時間控制
Game_result 游戲結果處理輸出
record.c main 主函數
Menu_select 選擇菜單
manage_menu 處理菜單

(2)函數設計
1.頭部文件
文件名稱:record.h
功 能:聲明函數原型,包含文件及自定義宏和數據結構。
要 求:報告是否能正常打開文件執行操作。
2. 設置游戲等級函數
函數原型:void Game_rank(void)
功 能:可由游戲者自行設置游戲等級
參 數:void
返 回 值:void
要 求:如果游戲者沒有進行等級設定,則默認初級進行游戲。
3. 輸出遊戲說明函數
函數原型:void Game_ explain()
功 能:輸出遊戲規則說明
參 數:void
返 回 值:void
要 求:說明游戲相應的按鍵,保證游戲者按照說明。
4. 記錄最高分函數:
函數原型:void Tiptop_register(int)
功 能:把從Get_player函數得到的游戲者信息和游戲的積分信息一同保存到指定路徑的Tiptop_register.dat文件中
參 數:int S;S為游戲積分
返 回 值:void
要 求:要求把Tiptop1.txt(初級最高分) Tiptop2.txt(中級最高分) Tiptop3.txt(高
級最高分)原來有的信息替換為現在的信息,並且只有積分大於原有信息的第
十名,才會被以替換的方式記錄;並且是降序的方式排列的。
5. 輸出最佳排行函數:
函數原型:void Tiptop_out()
功 能:輸出最佳排行信息
參 數:void
返 回 值:void
要 求:沒有信息的時候輸出提示,有信息時按降序排列輸出全部信息。
6. 開始游戲中心函數
函數原型:void Game_main()
功 能:調用Time_ control 、Build_number等函數,進行游戲的整體控制
參 數:void
返 回 值:void
要 求:注意函數的完整性,保證游戲順利進行,注意沒有設置等級時候,默認C=1!
7. 獲取系統隨機數字函數
函數原型:int *Build_number()
功 能:系統調用<time.h>文件,利用srand((unsigned) time(&)產生1個N位隨機數字,供游戲者猜測
參 數:void
返 回 值:int 8=*i:指向產生的隨機數字構成的數組的指針
要 求:產生的數字是隨機的,並且是不重復的,總共產生N(依據游戲等級而定)位數字,組成數組[初級為3個數字]。
8. 獲取游戲者游戲數據和輸出遊戲進程結果函數
函數原型:void Course_in_out()
功 能:把游戲者猜的數據讀入內存,並且分析得出結果,並輸出結果
參 數:void
返 回 值:void
要 求:用A或B的代碼表示本次的結果,其中A表示數值對位置也對,B表示數值對,但位置錯了!每次得到游戲者的猜測數據都要分析得出結果並輸出結果,以便游戲者的下一次猜測。
9. 時間控制函數
函數原型:int Time_ control()
功 能:利用<dos.h>和<time.h>文件,得到玩游戲的總時間,計算游戲積分。
參 數:void
返 回 值:int Time:游戲前後的時間差異
要 求:得到的時間是以秒為單位,數據是整型數據。
10. 游戲結果處理輸出函數
函數原型:void Game_result(int m )
功 能:計算,得出最後游戲積分
參 數:int m:整個游戲的時間
返 回 值:void
要 求:按照游戲等級,設置不同的游戲積分方式。
11. 主函數:
函數原型:void main()
功 能:調用各個子函數,實現整體程序的運行
參 數:void
返 回 值: void
要 求:控制整個游戲的順利進行。
12. 選擇菜單函數:
函數原型:void Menu_select()
功 能:得到Handle_menu的返回值,由一個switch語句選擇開始,等級,最佳排行,游戲說明,結束等菜單操作。
參 數:void
返 回 值:void
要 求:由Handle_menu得到數據可循環得到,直到得到數字5時,選擇退出菜單,方可退出遊戲,否則一直循環程序!
13. 處理菜單函數:
函數原型:int Handle_menu()
功 能:輸出菜單選擇提示,並由cin語句實現游戲者的輸入,輸入選擇相應菜單對應的菜單序號,並把相應的值傳給Menu_select函數
參 數:void
返 回 值:int n:選擇相應菜單的菜單序號
要 求:輸入的值不是相應的菜單的序號時返回0值,否則返回遊戲者的輸入值,以選擇相應菜單。

四.程序代碼
1. record.h
#include"time.h"
#include<dos.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//結構體
#define MAXSIZE 20
typedef long int ElemType; //定義結構體tiptop,存放游戲者的最高分等信息
typedef struct tiptop
{
ElemType data;
char name[MAXSIZE];
char grade[MAXSIZE];
int year;
int month;
int day;
char week[MAXSIZE];
int hour;
int minute;
int second;
}tiptop;
//全局變數
int C; //C為等級設置變數
//函數聲明
void Menu_select(); //選擇菜單函數
int manage_menu(); //處理菜單函數
void Tiptop_record(int); //記錄最高分函數
void Tiptop_output(); //輸出最佳排行函數
void Game_rank(); //設置游戲等級函數
void Game_explain(); //輸出遊戲說明函數
void Game_main(); //開始游戲中心函數
int *Build_number(); //獲取系統隨機數字函數
void Game_in_out(); //獲取游戲數據和輸出遊戲進程結果函數
int Time_command(); //時間控制函數
void Game_result(int); //游戲結果處理輸出函數

2. game_ control.c
#include"record.h"
//**********************
// 設置游戲等級函數
//**********************
void Game_rank()
{
FILE *fp;
printf("\t******************************\n");
printf("\t************1:初級************\n");
printf("\t************2:中級************\n");
printf("\t************3:高級************\n");
printf("\t******************************\n");
printf("\t請選擇游戲等級:\t");
loop:
scanf("%d",&C);
if(C<1||C>3)
{
printf("\t輸入有誤!請重新輸入:\t");
goto loop;
}
if((fp=fopen("C.txt","w"))==NULL)
{
printf("打開C.txt文件失敗!");
exit(1);
}
fwrite(&C,sizeof(int),1,fp);
fclose(fp);
if(C==1)
printf("\t等級設置為初級!\n");
if(C==2)
printf("\t等級設置為中級!\n");
if(C==3)
printf("\t等級設置為高級!\n");
printf("\n");

}
//****************
//輸出遊戲說明函數
//****************
void Game_explain()
{
printf("游戲說明:\n");
printf("\t**********************************************************\n");
printf("\t**********************************************************\n");
printf("\t①:游戲開始,系統隨機產生一位不重復的N位數字。N的大小與等級\n");
printf("\t有關:\n");
printf("\t初級:N=3\t中級:N=4\t高級:N=5\t\n");
printf("\t②:游戲者輸入所猜的不重復數字,並按回車提交。\n");
printf("\t提交的數據位數應與N的大小一致,當數據位數大於N時,只取前N位;\n");
printf("\t③:系統將提交的數與它自動產生的數進行比較,輸出結果\n");
printf("\t「*A*B」形式。其中A代表數字正確相應位置也正確,B代\n");
printf("\t表數字正確但位置不正確。如:1A3B表示游戲者有1個數字的位置\n");
printf("\t正確且數值也正確,除此以外,游戲者還猜對了3個數字,但位置不\n");
printf("\t對,即游戲者已經猜出4位數據,但有3個數據位置不對!\n");
printf("\t④:游戲者有限定次數的猜測機會,在規定次數內完成,\n");
printf("\t則游戲成功。否則,游戲失敗。其中,猜測次\n");
printf("\t數與等級有關:\n");
printf("\t初級:10次\t中級:9次\t高級:8次。\t\n");
printf("\t⑤:按完成游戲所用的時間和次數計算游戲者所得分數,\n");
printf("\t游戲等級越高,猜測所用的次數越少,得分越高!\n");
printf("\t若游戲者得分比系統已經保存的分數的高,將提示要求\n");
printf("\t輸入游戲者信息,並且保存在最佳排行之中。\n");
printf("\t⑥:游戲者可以自行設置等級!\n");
printf("\t**********************************************************\n");
printf("\t**********************************************************\n");
printf("\n");
}
3. game_ register.c
#include"record.h"
//**************
//記錄最高分函數
//**************
void Tiptop_record(int S)
{
FILE *fp;
tiptop n;
char *week[]={"星期天","星期一","星期二","星期三","星期四","星期五",
"星期六"};
time_t timep;
struct tm *t;
printf("\t恭喜您!\n");
printf("\t您獲得本游戲的最高分!\n");
//獲取名字
printf("\t請輸入您的姓名:");
printf("\t");
scanf("%s",n.name);
//獲取時間
time(&timep);
t=gmtime(&timep);
t->tm_year=1900+t->tm_year;
t->tm_mon=1+t->tm_mon;
t->tm_hour=8+t->tm_hour;
n.year=t->tm_year;
n.month=t->tm_mon;
n.day=t->tm_mday;
strcpy(n.week,week[t->tm_wday]);
n.hour=t->tm_hour;
n.minute=t->tm_min;
n.second=t->tm_sec;
//獲取等級
if(C==1)
strcpy(n.grade,"初級");
if(C==2)
strcpy(n.grade,"中級");
if(C==3)
strcpy(n.grade,"高級");
//獲取分數
n.data=S;
if(C==1)
{
if((fp=fopen("tiptop1.txt","w"))==NULL)
{
printf("\t打開tiptop1.txt文件失敗!");
exit(1);
}
fwrite(&n,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(C==2)
{
if((fp=fopen("tiptop2.txt","w"))==NULL)
{
printf("\t打開tiptop2.txt文件失敗!");
exit(1);
}
fwrite(&n,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(C==3)
{
if((fp=fopen("tiptop3.txt","w"))==NULL)
{
printf("\t打開tiptop3.txt文件失敗!");
exit(1);
}
fwrite(&n,sizeof(struct tiptop),1,fp);
fclose(fp);
}
}
//****************
//輸出最佳排行函數
//****************
void Tiptop_output()
{
int i;
FILE *fp;
tiptop p,q,r;
if((fp=fopen("tiptop1.txt","r"))==NULL)
{
printf("還沒有最佳排行!");
exit(1);
}
fread(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop2.txt","r"))==NULL)
{
printf("還沒有最佳排行!");
exit(1);
}
fread(&q,sizeof(struct tiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop3.txt","r"))==NULL)
{
printf("還沒有最佳排行!");
exit(1);
}
fread(&r,sizeof(struct tiptop),1,fp);
fclose(fp);
if(p.data==0&&q.data==0&&r.data==0)
{
printf("\t暫無最高分信息!");
printf("\n");
printf("\t是否直接進入游戲?刷新最佳排行信息?\n");
printf("\t1:是\t2:否\n");
printf("\t");
i=0;
scanf("%d",&i);
if(i==1)
{
printf("\t請設置游戲等級: \n");
Game_rank();
Game_main();
}
else
Menu_select();
}
else
{
printf("\t最佳排行:\n");
printf("\t等級\t姓名\t分數\t游戲時間\n");
if(p.data!=0)
{
printf("\t%s\t%s\t%d\t",p.grade,p.name,p.data);
printf("%d—%d—%d\t",p.year,p.month,p.day);
printf("%s\t%d:%d:%d\n",p.week,p.hour,p.minute,p.second);
}
if(q.data!=0)
{
printf("\t%s\t%s\t%d\t",q.grade,q.name,q.data);
printf("%d—%d—%d\t",q.year,q.month,q.day);
printf("%s\t%d:%d:%d\n",q.week,q.hour,q.minute,q.second);
}
if(r.data!=0)
{
printf("\t%s\t%s\t%d\t",r.grade,r.name,r.data);
printf("%d—%d—%d\t",r.year,r.month,r.day);
printf("%s\t%d:%d:%d\n",r.week,r.hour,r.minute,r.second);
}
if(p.data==0)
printf("\t初級暫無最高分信息!\n");
if(q.data==0)
printf("\t中級暫無最高分信息!\n");
if(r.data==0)
printf("\t高級暫無最高分信息!\n");

//重置最佳排行榜
if(p.data!=0&&q.data!=0&&r.data!=0)
{
printf("\t是否重置最佳排行?\n");
printf("\t1:是\t2:否\t");
i=0;
scanf("%d",&i);
if(i==1)
{
p.data=0;
q.data=0;
r.data=0;
if((fp=fopen("tiptop1.txt","w"))==NULL)
{
printf("打開tiptop1.txt文件失敗!");
exit(1);
}
fwrite(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop2.txt","w"))==NULL)
{
printf("打開tiptop2.txt文件失敗!");
exit(1);
}
fwrite(&q,sizeof(struct tiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop3.txt","w"))==NULL)
{
printf("打開tiptop3.txt文件失敗!");
exit(1);
}
fwrite(&r,sizeof(struct tiptop),1,fp);
fclose(fp);
}
}
}
}

4.game.c
#include"record.h"

//全局變數
int *c1; //產生的數保存在指針c中
int A,B; // AB均為游戲重要參數
int N; //NUM為需要猜測的數據個數
int TIME; //TIME為猜數字共有的次數
long int S; //S為游戲積分
//****************
//開始游戲中心函數
//****************
void Game_main()
{
FILE *fp;
int time;
if((fp=fopen("C.txt","r"))==NULL)
{
printf("打開C.txt文件失敗!");
printf("\n");
exit(1);
}
fread(&C,sizeof(int),1,fp);
N=C+2;
TIME=11-C;
if(C==1)
{
printf("\t游戲等級為:初級!\n");
}
if(C==2)
{
printf("\t游戲等級為:中級!\n");
}
if(C==3)
{
printf("\t游戲等級為:高級!\n");
}
printf("\t需要猜測的數字位數數為:%d,共有%d次猜測機會!",N,TIME);
printf("\n");
time=Time_command();
Game_result(time);
}
//********************
//獲取系統隨機數字函數
//********************
int *Build_number()
{
int i,j,m;
time_t t;
c1=(int *)malloc(N*sizeof(int));
if(c1==NULL)
{
printf("分配內存錯誤!\n");
printf("\n");
exit(1);
}
srand((unsigned) time(&t));
for(i=0;i<N;i++)
{
m=rand()%10; //產生一個數字
if(i==0)
*c1=m;
else
{
for(j=0;j<i;j++)
{
if(m==*(c1+j)//若原有數據之中已經有了與m相同的數字,則重新產生數字
{
i--;
break;
}
*(c1+i)=m;
}
}
}
printf("\t系統產生的數據為:");
for(i=0;i<N;i++)
printf("*");
printf("\n");
printf("\t您可以開始游戲! 計時開始...\n");
printf("\t不能有重復的數字!\n");
printf("\t數字中間用空格隔開\n");
return c1;
}
//****************************************
//獲取游戲者游戲數據和輸出遊戲進程結果函數
//****************************************
void Game_in_out()
{
int i,j,m;
int n; //游戲者猜測的數字
int a[5]; //游戲者猜測的數據構成的數組
int c[5];
int *p;
p=Build_number();
for(i=0;i<N;i++)
{
c[i]=*(p+i);
}
for(m=0;m<TIME;m++)
{
if(m==(TIME-1))
{
printf("\t**請注意:**\n");
printf("\t**僅剩下一次機會了!**\n");
printf("\t**努力!加油!**\n");
}
printf("\t請輸入第%d次猜測的數字:\t",m+1);
for(j=0;j<N;j++)
{
scanf("%d",&n);
a[j]=n;
}
A=0;
B=0;
for(i=0;i<N;i++)
{
if(a[i]==c[i])
A++;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(a[i]==c[j]&&i!=j)
B++;
}
}
printf("\t您本次猜測的結果為:\t");
printf("%d A %d B",A,B);
printf("\n");
//游戲成功控制退出猜測程序
if(A==N)
{
m=TIME;
}
}

//TIME改變,記錄游戲總次數的數據
TIME=i;
free(c1);
}
//************
//時間控制函數
//************
int Time_command()
{
int a; //游戲時間
time_t first, second;
first=time(NULL); //獲取系統時間
Game_in_out();
second=time(NULL); //再次獲取系統時間
a=(int)difftime(second,first);
return a;
}
//********************
//游戲結果處理輸出函數
//********************
void Game_result(int m)
{
FILE *fp;
tiptop p;
time_t t;
int S;
int n;
int i=0;
int minute,second;
if(A!=N)
{
S=0;
printf("\tGame over!\n");
printf("\t您本次游戲的積分為:\t%d",S);
printf("\t繼續努力!\n");
printf("\t是否繼續游戲?\n");
printf("\t1:是\t\t\t2:否");
printf("\n");
scanf("%d",&i);
if(i==1)
Game_main();
else
Menu_select();
}
else
{
printf("\t恭喜您游戲成功!");
printf("\n");
minute=m/60;
second=m%60;
printf("\t您本次游戲所用時間為:");
printf("%d分鍾%d秒\n",minute,second);
printf("\n");

//積分
if(C==1)
{
n=11-TIME;
S=n*n*n*10-m;
}
if(C==2)
{
n=10-TIME;
S=n*n*n*n*10-m;
}
if(C==3)
{
n=9-TIME;
S=n*n*n*n*n*10-m;
}
if(S<10)
{
srand((unsigned) time(&t));
S=rand()%100;
}
printf("\t您本次游戲的積分為:\t%d",S);
printf("\n");
}
//判斷是否符合最高分條件
if(C==1)
{
if((fp=fopen("tiptop1.txt","r"))==NULL)
{
printf("打開tiptop1.txt文件失敗!");
printf("\n");
exit(1);
}
fread(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(C==2)
{
if((fp=fopen("tiptop2.txt","r"))==NULL)
{
printf("打開tiptop2.txt文件失敗!");
printf("\n");
exit(1);
}
fread(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(C==3)
{
if((fp=fopen("tiptop3.txt","r"))==NULL)
{
printf("打開tiptop3.txt文件失敗!");
printf("\n");
exit(1);
}
fread(&p,sizeof(struct tiptop),1,fp);
fclose(fp);
}
if(S>=(p.data))
Tiptop_record(S);
//提示跳轉
if(C==1)
{
printf("\t您本次游戲等級是初級,是否要進入中級?\n");
printf("\t1:是\t\t\t2:否");
printf("\n\t");
i=0;
scanf("%d",&i);
if(i==1)
{
C=2;
if((fp=fopen("C.txt","w"))==NULL)
{
printf("打開C.txt文件失敗!");
exit(1);
}
fwrite(&C,sizeof(int),1,fp);
fclose(fp);
Game_main();
}
else
Menu_select();
}
if(C==2)
{
printf("\t您本次是中級游戲,是否要進入高級游戲呢?\n");
printf("\t1:是\t\t\t2:否");
printf("\n\t");
i=0;
scanf("%d",&i);
if(i==1)
{
C=3;
if((fp=fopen("C.txt","w"))==NULL)
{
printf("打開C.txt文件失敗!");
exit(1);
}
fwrite(&C,sizeof(int),1,fp);
fclose(fp);
Game_main();
}
else
Menu_select();
}
}

5.record.c
#include"record.h"
//******
//主函數
//******
void main()
{
printf("\n");
printf("********************************************\n");
printf("********************************************\n");
printf(" 歡迎進入猜數字游戲 \n");
printf("\n");
printf("\t設計者: \n");
printf("********************************************\n");
printf("********************************************\n");
printf("\n");
Menu_select();
}
//************
//選擇菜單函數
//************
void Menu_select()
{
while(1)
{
switch(manage_menu())
{
case 0:
printf("輸入有誤,請重新輸入!\n");
break;
case 1:
Game_main();
break;
case 2:
Game_rank();
break;
case 3:
Tiptop_output();
break;
case 4:
Game_explain();
break;
case 5:
printf("\n");
printf("\n");
printf("*************** ** ** **** ** ** ** ** *** \n");
printf("*************** ** ** ** ** **** ** ** ** ***** \n");
printf(" ** ** ** ** ** ** ** ** ** ** ******* \n");
printf(" ** ** ** ** ** ** ** ** ** ** ******* \n");
printf(" ** *********** ************* ** ** ** **** ***** \n");
printf(" ** *********** ************* ** ** ** **** ***** \n");
printf(" ** ** ** ** ** ** ** ** ** ** ***** \n");
printf(" ** ** ** ** ** ** ** ** ** ** *** \n");
printf(" ** ** ** ** ** ** **** ** ** *** \n");
printf(" ** ** ** ** ** ** ** ** ** *** \n");
printf("\n");
printf("Goodbye!\n");
exit(1);
}
}
}
//************
//處理菜單函數
//************
int manage_menu()
{
int n;
printf("\t**************************\n");
printf("\t**\t1:開始游戲\t**\n");
printf("\t**\t2:等級設置\t**\n");
printf("\t**\t3:最佳排行\t**\n");
printf("\t**\t4:游戲說明\t**\n");
printf("\t**\t5:退出遊戲\t**\n");
printf("\t**************************\n");
printf("\t請輸入相應序號選擇相應菜單:");
printf("\t");
scanf("%d",&n);
printf("\n");
if(n<1||n>5)
n=0;
return n;
}

Ⅳ 關於C語言課設,急!

配送是物流中一種特殊的、綜合的活動形式,是商流與物流緊密結合,包含了商流活動和物流潔動,也包含了物流中若干功能要素的一種形式。

從物流來講,配送幾乎包括了所有的物流功能要素,是物流的一個縮影或在某小范圍中物流全部活動的體現。一般的配送集裝卸、包裝、保管、運輸於一身,通過這一系列活動完成將貨物送達的目的。特殊的配送則還要以加工活動為支撐,所以包括的方面更廣。但是,配送的主體活動與一般物流卻有不同,一般物流是運輸及保管,而配送則是運輸及分揀配貨,分揀配貨是配送的獨特要求,也是配送中有特點的活動,以送貨為目的的運輸則是最後實現配送的主要手段,從這一主要手段出發,常常將配送簡化地看成運輸中之一種。

從商流來講,配送和物流不同之處在於,物流是商物分離的產物而配送則是商物合一的產物,配送本身就是一種商業形式。雖然配送具體實施時,也有以商物分離形式實現的,但從配送的發展趨勢看,商流與物流越來越緊密的結合,是配送成功的重要保障。可以從兩個方面認識配送的概念:

第一種,從經濟學資源配置的角度,對配送在社會再生產過程'中的位置和配送的本質行為予以表述:

配送是以現代送貨形式實現資源的最終配置的經濟活動。這個概念的內涵,概括了四點:

1.配送是資源配置的一部分,根據經濟學家的理論認識,因而是經濟體制的一種形式。

2.配送的資源配置作用,是"最終配置",因而是接近顧客的配置。接近顧客是經營戰略至關重要的內容。美國蘭德公司對《幸福》雜志所列的500家大公司一項調查表明"經營戰略和接近顧客至關重要",證明了這種配置方式的重要性。

3.配送的主要經濟活動是送貨,這裡面強調現代送貨,表述了和我國舊式送貨的區別,其區別以"現代"兩字概括,即現代生產力、勞動手段支撐的,依靠科技進步的,實?quot;配"和"送"有機結合的一種方式。

4.配送在社會再生產過程中的位置,是處於接近用戶的那一段流通領域,因而有其局限性,配送是一種重要的方式,有其戰略價值,但是它並不能解決流通領域的所有問題。

第二種。從配送的實施形態角度,表述如下:

按用戶定貨要求,在配送中心或其它物流結點進行貨物配備,並以最合理方式送交用戶。

這個概念的內容概括了五點:

1.整個概念描述了接近用戶資源配置的全過程。

2.配送實質是送貨。配送是一種送貨,但和一般送貨有區別:

一般送貨可以是一種偶然的行為,而配送卻是一種固定的形態,甚至是一種有確定組織、確定渠道,有一套裝備和管理力量、技術力量,有一套制度的體制形式。所以,配送是高水平送貨形式。

3.配送是一種"中轉"形式。配送是從物流結點至用戶的一種特殊送貨形式。從送貨功能看,其特殊性表現為:從事送貨的是專職流通企業,而不是生產企業;配送是"中轉"型送貨,而一般送貨尤其從工廠至用戶的送貨往往是直達型;一般送貨是生產什麼,有什麼送什麼,配送則是企業需要什麼送什麼。所以,要做到需要什麼送什麼,就必需在一定中轉環節籌集這種需要,從而使配送必然以中轉形式出現。當然,廣義上,許多人也將非中轉型送貨納入配送范圍,將配送外延從中轉擴大到非中轉,僅?quot;送''為標志來劃分配送外延,也是有一定道理的。

4.配送是"配"和"送"有機結合的形式。配送與一般送貨的重要區別在於,配送利用有效的分揀、配貨等理貨工作,使送貨達到一定的規模,以利用規模優勢取得較低的送貨成本。如果不進行分揀、配貨,有一件運一件,需要一點送一點,這就會大大增加動力的消耗,使送貨並不優於取貨。所以,追求整個配送的優勢,分揀、配貨等項工作是必不可少的。

5.配送以用戶要求為出發點。在定義中強調"按用戶的定貨要求"明確了用戶的主導地位。配送是從用戶利益出發、按用戶要求進行的一種活動,因此,在觀念上必須明確"用戶第一"、"質量第一",配送企業的地位是服務地位而不是主導地位,因此不能從本企業利益出發而應從用戶利益出發,在滿足用戶利益基礎上取得本企業的利益。更重要的是,不能利用配送損傷或控制用戶,不能利用配送做為部門分割、行業分割、割據市場的手段。

6.概念中"以最合理方式"的提法是基於這樣一種考慮:過分強調"按用戶要求"是不妥的,用戶要求受用戶本身的局限,有時實際會損失自我或雙方的利益。對於配送者講,必須以"要求"為據,但是不能盲目,應該追求合理性,進而指導用戶,實現共同受益的商業原則。這個問題近些年國外的研究著作也常提到。

發達國家的配送

1.發達國家對配送的認識。

發達國家對配送的認識並非完全一致,在表述上有其區別。但是,一個非常重要的共同認識,配送就是送貨。美國配送的英語原詞是Delivery,是送貨的意思,強調的是將貨送達。日本對配送的權威解釋,應該是日本工業標准JIS解釋。"將貨物從物流結點送交收貨人",送貨含義明確無誤,配送主體是送貨。

當然,現代經濟中的送貨也必定比歷史上送貨有所發展,這種發展是競爭的產物,受利潤和佔領市場驅使,想方設法使送貨行為優化,於是實踐上出現了送貨時車輛合理調配、路線規劃選擇、送貨前配貨、配裝等。

在發達國家對配送解釋中,並不強調配,而僅強調送達,原因是在買方市場的國家中"配"是完善"送"的經濟行為,是進行競爭和提高自身經濟效益的必然延伸,是在競爭中優化形式,既然是一種必然行為,就沒有再強調的必要了。

對於配送稍詳盡一些的解釋,反映了發達國家對配送范圍、性質、作用等認識。1991年版日本的《物流手冊》這樣描述它的范圍:"與城市之間和物流據點之間的運輸相對而言,將面向城市內和區域范圍內需要者的運輸,稱之為'配送"。很明顯,日本人對配送的一個重要認識,是配送局限在一個區域(城市)范圍內,而且從性質來看,配送是一種運輸形式,關於這一點書中又有進一步描述:"生產廠到配送中心之間的物品空間移動叫'運輸'從配送中心到顧客之間的物品空間移動叫'配送"。

2.發達國家的配送發展及現狀。

一般的送貨形態在西方國家已有相當長的歷史,可以說是隨市場而誕生的一種必然市場行為。尤其是伴隨資本主義經濟的生產過剩,在買方市場情況下,必然採取各種各樣推銷手段,送貨最初便是做為一種不得已的推銷手段出現的。僅將其做為推銷手段而不認識到做為企業發展的戰略手段,在有些國家持續了很長時間,甚至出現經濟發展的高峰期仍然如此,很多企業直到七十年代仍然將送貨看?quot;無法迴避、令人討厭、費力低效活動,甚至有礙企業的發展",正是反映了這種現實。

從歷史上曾採用的一般送貨.發展到以高技術方式支持的,做為企業發展戰賂手段的配送,也是近一二十年的事情。許多國家甚至到八十年代才真正認識到達一點。國外一篇文章提到,"在過去十年裡,這種態度和認識有了極大轉變。企業界普遍認識到配送是企業經營活動主要組成部分,它能給企業創造出更多盈利,是企業增強自身競爭能力的手?quot;。這種認識的轉變有著深厚的社會根源:

第一,科學技術的進步和生產力發展,可以為經濟界提供省力且高效的管理方式與技術裝備方式,將"無法迴避、令人討厭,且費力低效的活動轉變為刻意追求、容易接受,且省力高效的活動。

第二,生產領域勞動生產率的提高,越發使人看出流通和物流過程中的潛力,不少實踐證明,包括配送在內的物流領域開發,可以取得很高的經濟效益,因此就不再"有礙於企業的發展"。

第三,生產力發展大大促進了社會分工,服務性生產大大發展,服務性社會出現,使人們增強了配送的主動服務性質,成為企業"增強自身競爭能力的手?quot;。

在觀念發生變化的同時,配送方式和手段也有很大發展,尤其突出反映在以下幾方面:

(1)配送共同化的進展。初期送貨,是單獨企業為主體,為滿足用戶配送要求,出現了配送企業車輛利用率低,不同配送企業之間交錯運輸,交通緊張,事故頻繁等許多方面不合理。例如:日本於60年代開始的"共同配送",是在各個公司效率低而且難以解決的情況下才被採用,如果在本公司就能建立合理化配送系統,也就沒有必要考慮共同配送了。但近來的發展,已上升到從大范圍考慮合理化,致力於推行整個城市,所有企業的共同配送。

(2)配送計劃化的進展。初期配送,強調即時較多,即完全按顧客要求辦事,而並不是按顧客的合理要求辦事。制定合理計劃而不是完全按顧客要求那樣進行配送,是高水平的計劃配送的一大進展。計劃有效地促進了配送合理化,由於可採用大量發貨減少收費,也受到用戶的歡迎。

(3)配送區域的擴大。近些年,配送已突破了一個城市范圍,在更大范圍中找到了優勢。美國已開展了洲際配送,日本不少配送是在全國范圍或很大區域范圍進行的,如日本東京的三味株式會社的全國性配送系統,日本Asica配送系統,日本資生堂配送系統等都是全國性的配送系統。

(4)直達配送的進展。不經過物流基地中轉,在有足夠批量且不增加用戶庫存情況下,配送在"直達"領域中也找到了優勢,因而突破了配送的原來概念,有了新的發展,對於生產資料而言,直達配送有更廣泛的應用。

(5)計算機管理配送的進展。隨配送規模的擴大和計算機的微型化,計算機管理配送取得很大進展,這個進展突出表現在以下三個方面:

一是信息傳遞與處理,甚至建立了EDI系統;

二是計算機輔助決策,如輔助進貨決策,輔助配貨決策,輔助選址決策等,美國IBM公司率先建立了配送車輛計劃和配送路線的計算機軟體。

三是計算機與其他自動化裝置的操作控制,如無人搬運車、配送中心的自動分揀系統等。

有一篇名為《日本製造業行業配送系統變革》的文章中認為配送領域"技術條件的核心,就是信息系統和建立在該系統上的分揀系統"反映了這一進展已形成廠配送技術條件的核心。

(6)配送勞動手段的進展。配送勞動手段做為支撐配送的生產力要素,是進展很大的領域。到80年代。發達國家配送已普遍採用了計算機系統、自動搬運系統、大規模分揀、光電識別、條型碼。

配送中心概念

一、配送中心的一般概念

配送中心是以組織配送性銷售或供應,執行實物配送為主要職能的流通型結點。在配送中心中為了能更好地做送貨的編組准備,因此必然需要採取零星集貨、批量進貨等種種資源搜集工作和對貨物的分整、配備等工作,因此,也具有集貨中心、分貨中心的職能。為了更有效地、更高水平的配送,配送中心往往還有比較強的流通加工能力。此外,配送中心還必須執行貨物配備後的送達到戶的使命,這是和分貨中心只管分貨不管運達的重要不同之處。由此可見,如果說集貨中心、分貨中心、加工中心的職能還是較為單一的話,那麼,配送中心功能則較全面、完整,也可以說,配送中心實際上是集貨中心:分貨中心、加工中心功能之綜合,並有了配與送的更高水平。

配送中心做為物流中心中的一種主要形式,有時便和物流中心等同起來了。

配送中心的形成及發展是有其歷史原因的,日本經濟新聞社的《輸送的知識》一書,將此說成是物流系統化和大規模化的必然結果,《變革中的配送中心》一文中是這樣講:"由於用戶在貨物處理的內容上、在時間上和服務水平上都提出了更高的要求,為了順利地滿足用戶的這些要求,就必須引進先進的分揀設施和配送設備,否則就建立不了正確、迅速、安全、廉價的作業體制。因此,在運輸業界,大部分企業都建造了正式的配送中心。"

可見,配送中心的建設是基於物流合理化和發展市場兩個需要,這是應當引起我們重視的。

配送中心是物流領域中社會分工、專業分工進一步細化之後產生的。在新型配送中心沒有建立起來之前,配送中心現在承擔的有些職能是在轉運型結點中完成的,以後一部分這類中心向純粹的轉運站發展以銜接不同的運輸方式和不同規模的運輸,一部分則增強了"送"的職能,而後又向更高級的"配"的方向發展。

二、配送中心的定義

日本《市場用語詞典》對配送中心的解釋是:"是一種物流結點,它不以貯藏倉庫的這種單一的形式出現,而是發揮配送職能的流通倉庫。也稱做基地、據點或流通中心。配送中心的目的是降低運輸成本、減少銷售機會的損失,為此建立設施、設備並開展經營、管理工?quot;。

《物流手冊》對配送中心的定義是:"配送中心是從供應者手中接受多種大量的貨物,進行倒裝、分類、保管、流通加工和情報處理等作業,然後按照眾多需要者的訂貨要求備齊貨物,以令人滿意的服務水平進行配送的設施。"

王之泰在《物流學》定義如下:"配送中心是從事貨物配備(集貨、加工、分貨、揀選、配貨)和組織對用戶的送貨,以高水平實現銷售或供應的現代流通設施。

這個定義的要點有:

1.配送中心的"貨物配備"工作是其主要的、獨特的工作,是全部由配送中心完成的·。

2.配送中心有的是完全承擔送貨,有的是利用社會運輸企業完成送貨,從我國國情來看,在開展配送的初期,用戶自提的可能性是不小的,所以,對於送貨而言,配送中心主要是組織者而不是承擔者。 "

3.定義中強調了配送活動和銷售或供應等經營活動的結合,是經營的一種手段,以此排除了這是單純的物流活動的看法。

4.定義中強調了配送中心的"現代流通設施"著意於和以前的諸如商場、貿易中心、倉庫等流通設施的區別。在這個流通設施中以現代裝備和工藝為基礎,不但處理商流而且處理物流,是兼有商流、物流全功能的流通設施。

配送中心的類別

對配送中心的適當劃分,是深化及細化認識配送中心的必然,從理論上和配送中心的作用上,可以有許多理想的分類,這里僅就已在實際運轉中的配送中心類別概述如下:

1.專業配送中心。專業配送中心大體上有兩個含義,一是配送對象、配送技術是屬於某一專業范疇,在某一專業范疇有一定的綜合性,綜合這一專業的多種物資進行配送,例如多數製造業的銷售配送中心,我國目前在石家莊、上海等地建的配送中心大多採用這一形式。專業配送中心第二個含義是,以配送為專業化職能。基本不從事經營的服務型配送中心,如《國外物資管理》雜志介紹的"蒙克斯帕配送中心"。

2.柔性配送中心。在某種程度上和第二種專業配送中心對立的配送中心,這種配送中心不向固定化、專業化方向發展,而向能隨時變化,對用戶要求有很強適應性,不固定供需關系,不斷向發展配送用戶和改變配送用戶的方向發展。

3.供應配送中心。專門為某個或某些用戶(例如聯營商店、聯合公司)組織供應的配送中心。例如,為大型連鎖超級市場組織供應的配送中心;代替零件加工廠送貨的零件配送中心,使零件加工廠對裝配廠的供應合理化;我國上海地區六家造船廠的配送鋼板中心,也屬於供應型配送中心。

4.銷售配送中心。以銷售經營為目的,以配送為手段的配送中心。銷售配送中心大體有三種類型:

一種是生產企業為本身產品直接銷售給消費者的配送中心,在國外,這種類型的配送中心很多;

另一種是流通企業做為本身經營的一種方式,建立配送中心以擴大銷售,我國目前擬建的配送中心大多屬於這種類型,國外的例證也很多;

第三種,是流通企業和生產企業聯合的協作性配送中心。

比較起來看,國外和我國的發展趨向,都向以銷售配送中心為主的方向發展。

5.城市配送中心。以城市范圍為配送范圍的配送中心,由於城市范圍一般處於汽車運輸的經濟里程,這種配送中心可直接配送到最終用戶,且採用汽車進行配送。所以,這種配送中心往往和零售經營相結合,由於運距短,反應能力強。因而從事多品種、少批量、多用戶的配送較有優勢。《物流手冊》中介紹?quot;仙台批發商共同配送中心"便是屬於這種類型。我國已建的"北京食品配送中心"也屬於這種類型。

6.區域配送中心。以較強的幅射能力和庫存准備,向省(州)際、全國乃至國際范圍的用戶配送的配送中心。這種配送中心配送規模較大,一般而言,用戶也較大,配送批量也較大,而且,往往是配送給下一級的城市配送中心,也配送給營業所、商店、批發商和企業用戶,雖然也從事零星的配送,但不是主體形式。這種類型的配送中心在國外十分普遍,《國外物資管理》雜志曾介紹的過?quot;阪神配送中心:美國馬特公司的配送中心,"蒙克斯帕配送中心"等就屬於這種類型。

7.儲存型配送中心。有很強儲存功能的配送中心,一般來講,在買方市場下,企業成品銷售需要有較大庫存支持,其配送中心可能有較強儲存功能;在賣方市場下,企業原材料,零部件供應需要有較大庫存支持,這種供應配送中心也有較強的儲存功能。大范圍配送的配送中心,需要有較大庫存,也可能是儲存型配送中心。

我國目前擬建的配送中心,都採用集中庫存形式,庫存量較大,多為儲存型。

瑞士GIBA-GEIGY公司的配送中心擁有世界上規模居於前列的儲存庫,可儲存4萬個托盤;美國赫馬克配送中心擁有一個有163,000個貨位的儲存區,可見存儲能力之大。

8.流通型配送中心。基本上沒有長期儲存功能,僅以暫存或隨進隨出方式進行配貨、送貨的配送中心。這種配送中心的典型方式是,大量貨物整進並按一定批量零出,採用大型分貨機,進貨時直接進入分貨機傳送帶,分送到各用戶貨位或直接分送到配送汽車上,貨物在配送中心裡僅做少許停滯。前面介紹的阪神配送中心,中心內只有暫存,大量儲存則依靠一個大型補給倉庫。

9.加工配送中心。許多材料都指出配送中心的加工職能,但是加工配送中心的實例,目前見到不多。我國上海市和其他城市已開展的配煤配送,配送點中進行了配煤加工,上海六家船廠聯建的船板處理配送中心,原物資部北京剪板廠都屬於這一類型的中心。

配送的一般流程及要素

1.配送功能要素

(1)備貨。是配送的准備工作或基礎工作,備貨工作包括籌集貨源、訂貨或購貨、集貨、進貨及有關的質量檢查、結算、交接等。配送的優勢之一,就是可以集中用戶的需求進行一定規模的備貨。備貨是決定配送成敗的初期工作,如果備貨成本太高,會大大降低配送的效益。

(2)儲存。配送中的儲存有儲備及暫存兩種形態。

配送儲備是按一定時期的配送經營要求,形成的對配送的資源保證。這種類型的儲備數量較大,儲備結構也較完善,視貨源及到貨情況,可以有計劃地確定周轉儲備及保險儲備結構及數量。配送的儲備保證有時在配送中心附近單獨設庫解決。

另一種儲存形態是暫存,是具體執行日配送時,按分揀配貨要求,在理貨場地所做的少量儲存准備。由於總體儲存效益取決於儲存總量,所以,這部分暫存數量只會對工作方便與否造成影響,而不會影響儲存的總效益,因而在數量上控制並不嚴格。

還有另一種形式的暫存,即是分揀、配貨之後,形成的發送貨載的暫存,這個暫存主要是調節配貨與送貨的節奏,暫存時間不長。

(3)分揀及配貨。是配送不同於其它物流形式的有特點的功能要素,也是配送成敗的一項重要文持性工作。分揀及配貨是完善送貨、支持送貨准備性工作,是不同配送企業在送貨時進行競爭和提高自身經濟效益的必然延伸,所以,也可以說是送貨向高級形式發展的必然要求。有了分揀及配貨就會大大提高送貨服務水平,所以,分揀及配貨是決定整個配送系統水平的關鍵要素。

(4)配裝。在單個用戶配送數量不能達到車輛的有效載運負荷時,就存在如何集中不同用戶的配送貨物,進行搭配裝載以充分利用運能、運力的問題,這就需要配裝;

和一般送貨不同之處在於,通過配裝送貨可以大大提高送貨水平及降低送貨成本,所以,配裝也是配送系統中有現代特點的功能要素,也是現代配送不同於已往送貨的重要區別之處。

(5)配送運輸。配送運輸屬於運輸中的末端運輸、支線運輸,和一般運輸形態主要區別在於:配送運輸是較短距離、較小規模、額度較高的運輸形式,一般使用汽車做運輸工具。

與干線運輸的另一個區別是,配送運輸的路線選擇問題是一般干線運輸所沒有的,干線運輸的干線是唯一的運輸線,而配送運輸由於配送用戶多,一般城市交通路線又較復雜i如何組合成最佳路線,如何使配裝和路線有效搭配等,是配送運輸的特點,也是難度較大的工作。 (6)送達服務。配好的貨運輸到用戶還不算配送工作的完結,這是因為送達貨和用戶接貨往往還會出現不協調,使配送前功盡棄。因此,要圓滿地實現運到之貨的移交,並有效地、方便地處理相關手續並完成結算,還應講究卸貨地點、卸貨方式等。送達服務也是配送獨具的特殊性。

(7)配送加工。在配送中,配送加工這一功能要素不具有普遍性,但是往往是有重要作用的功能要素。主要原因是通過配送加工,可以大大提高用戶的滿意程度。

配送加工是流通加工的一種,但配送加工有它不同於一般流通加工的特點,即配送加工一般只取決於用戶要求,其加工的目的較為單一。

2.配送的一般流程。

配送的一般流程比較規范,但並不是所有的配送者按下述流程進行。

不同產品的配送可能有獨特之處,如燃料油配送就不存在配貨、分放、配裝工序,水泥及木材配送又多出了一些流通加工的過程,而流通加工又可能在不同環節出現。

太多了,你自己看吧,在網址里

參考資料:http://www.easipass.com/ytsce/wl/ytsce_wljs_07.htm