Ⅰ 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