joho2_time

情報システムを作ってみよう

改造のヒント:書き込み時刻を追加する

サーバ側のadd_chat2, read_chat2,クライアント側 Main2を改造して,書き込まれた時刻をデータとして記録し,チャットシステムで表示するようにしてみましょう.

データファイルの仕様

時刻を格納するファイルをuser/chat3.txtとします.それぞれの行に「名前」と「内容」と「書き込まれた時刻」をタブで区切って格納します.

yamada	hello	2024/02/12 10:10:49
田中次郎	てすとです	2024/02/12 11:13:48
abcde	おなかすいた	2024/02/12 16:25:30

それぞれのプログラムの役割

  • サーバ側
    • 書き込みを追加するadd_chat3
    • 書き込みを表示するread_chat3
  • クライアント側
    • サーバのプログラムを読み出して書き込み,読込を行うMain3

これまでのプログラムから大きく変更があるのは,add_chat3です.プログラムが呼び出されたときに,現在時刻をuser/chat3.txtに記録するようにします.なお,受け取るデータは「名前」と「書き込み」だけです.クライアント側のMain3で送信するデータ,書き込みのためのユーザインタフェースは変更ありません.

Pythonで時刻を取得する方法

時刻はサーバ側で記録するため,Pythonで時刻を取得する方法が必要です.適当な名前のファイルを作って,次のプログラムを「サーバで実行」して,動作を確認してみましょう.

import datetime
t_delta = datetime.timedelta(hours=9)
JST = datetime.timezone(t_delta, 'JST')
now = datetime.datetime.now(JST)
t=now.strftime("%Y/%m/%d %H:%M:%S") 
print(t)

改造後のプログラムを以下に示しますが,ここまでの段階で,生徒に自分でプログラムを考えてもらうことも可能です.

server/add_chat3(Python)

import datetime
t_delta = datetime.timedelta(hours=9)
JST = datetime.timezone(t_delta, 'JST')
now = datetime.datetime.now(JST)
#現在時刻を取得
t=now.strftime("%Y/%m/%d %H:%M:%S") 
name=input()
content=input()
f=open("user/chat3.txt","a")
#書き込むときに,現在時刻も行に含める.
f.write(name+"\t"+content+"\t"+t+"\n")
f.close()
print("Write end")

server/read_chat3(Python)

f=open("user/chat3.txt","r")
for i in f:
    print(i,end="")
f.close()

client/Main3(JavaScript)

serverTop="https://run.eplang.jp/bitarrow/fs/pub/5d9fc1ce/";
readUrl=serverTop+"read_chat3.html"; 
addUrl=serverTop+"add_chat3.html";
onClick("write",write);
read();
function write() {
    setText("result","Running at Server...");
    result=callServer(addUrl,getText("name")+"\n"+getText("content"));
    setText("result",result);
    read();
}
function read() {
    var r=callServer(readUrl);
    var lines=r.split("\n");
    setText("hist","");
    for (var line of lines) {
        var data=line.split("\t");
        if (data.length<2) continue;
        var name=data[0];
        var content=data[1];
        var time=data[2];//時刻の取り出し
        addText("hist","名前: "+name+"<br/>");  
        addText("hist","内容: "+content+"<br/>");  
        //時刻の表示
        addText("hist","時刻: "+time+"<br/>");  
        addText("hist","<hr/>\n");
    }
}

情報システムを作ってみよう

powered by Quick Homepage Maker 5.1
based on PukiWiki 1.4.7 License is GPL. QHM

RSS  Valid XHTML 1.0 Transitional