Erlang gen_server和ets简单应用

%%Author:Lee
%%Desc:学生管理的小例子 
%%gen_server

-module(stuManager).

%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).

%% External exports
-export([start/0,add_User/1,remove_User/1,find_User/1,show/0]).

%%学生数据信息
-record(userInfo,{id=1,name,sex,age}).

%%接口函数
%%添加学生 add_User
%%移除学生 remove_User
%%查询学生 find_User
%%显示所有学生 show

%%=======================================================

start()->
	gen_server:start_link({local,?MODULE},?MODULE,[],[]).
	
%% --------------------------------------------------------------------
%% Function: init/1
%% Description: Initiates the server
%% Returns: {ok, State}          |
%%          {ok, State, Timeout} |
%%          ignore               |
%%          {stop, Reason}
%% --------------------------------------------------------------------

init([])->
	{ok,ets:new(?MODULE,[set,named_table,{keypos,3}])}.
	
%% --------------------------------------------------------------------
%% Function: handle_call/3
%% Description: Handling call messages
%% Returns: {reply, Reply, State}          |
%%          {reply, Reply, State, Timeout} |
%%          {noreply, State}               |
%%          {noreply, State, Timeout}      |
%%          {stop, Reason, Reply, State}   | (terminate/2 is called)
%%          {stop, Reason, State}            (terminate/2 is called)
%% --------------------------------------------------------------------

handle_call({add,User},_From,_State)->
	{A,B,C} = User,
	New_Record=#userInfo{name=A,sex=B,age=C},
	Reply = ets:insert(?MODULE,New_Record),
	{reply,Reply,_State};
handle_call({remove,User},_From,_State)->
	Reply = ets:delete(?MODULE,User),
	{reply,Reply,_State};
handle_call({find,User},_From,_State)->
	Reply = ets:lookup(?MODULE,User),
	{reply,Reply,_State}.
	
%% --------------------------------------------------------------------
%% Function: handle_cast/2
%% Description: Handling cast messages
%% Returns: {noreply, State}          |
%%          {noreply, State, Timeout} |
%%          {stop, Reason, State}            (terminate/2 is called)
%% --------------------------------------------------------------------

handle_cast(_Msg, State) ->
    {noreply, State}.
	
%% --------------------------------------------------------------------
%% Function: handle_info/2
%% Description: Handling all non call/cast messages
%% Returns: {noreply, State}          |
%%          {noreply, State, Timeout} |
%%          {stop, Reason, State}            (terminate/2 is called)
%% --------------------------------------------------------------------

handle_info(_Info,State)->
	{noreply,State}.
	
%% --------------------------------------------------------------------
%% Function: terminate/2
%% Description: Shutdown the server
%% Returns: any (ignored by gen_server)
%% --------------------------------------------------------------------
terminate(_Reason, _State) ->
    ok.

%% --------------------------------------------------------------------
%% Func: code_change/3
%% Purpose: Convert process state when code is changed
%% Returns: {ok, NewState}
%% --------------------------------------------------------------------
code_change(_OldVsn, State, _Extra) ->
    {ok, State}.
	
%% --------------------------------------------------------------------
%%% Internal functions
%% --------------------------------------------------------------------

add_User(User)->
	gen_server:call(?MODULE,{add,User}).
	

remove_User(User)->
	gen_server:call(?MODULE,{remove,User}).
	

find_User(User)->
	gen_server:call(?MODULE,{find,User}).

show()->
	List = ets:tab2list(?MODULE),
	io:format("~13w => ~p~n",[set,List]).




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值