質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.60%

出席簿管理システムの作成

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 289
退会済みユーザー

退会済みユーザー

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>



/*データ*/

typedef struct {

int num; //学籍番号下三桁

char name[16]; //氏名

}data_t;



/*ノード*/

typedef struct node {

data_t data; //データ

struct node* nextnode; //後ろのノードへのポインタ

}node_t;



/*関数プロトタイプ宣言*/

node_t* make_node(data_t, node_t*);

node_t* add_data(node_t*);

node_t* remove_data(node_t*);

void search_data(node_t*);

void show_data(node_t*);

void release(node_t*);



int main(void)

{

int menu;

node_t* node = NULL;



do {

puts("");

puts("***メニューの選択***");

puts(" 1.データの表示");

puts(" 2.データの追加");

puts(" 3.データの検索");

puts(" 4.データの削除");

puts(" 5.終了");



printf("メニューの選択:");

scanf("%d", &menu);

puts("");



switch (menu)

{

case 1:show_data(node); break;

case 2: node = add_data(node); break;

case 3: search_data(node); break;

case 4:node = remove_data(node); break;

case 5: puts("プログラムを終了"); break;

default:puts("番号を再入力"); break;

}

} while (menu != 5);



release(node);

// system("pause"); コメント

return 0;

}



/*新規ノードの作成*/

node_t* make_node(data_t data, node_t* nextnode)

{

node_t* p;



p = malloc(sizeof(node_t));

if (p == NULL) {

puts("領域確保に失敗");

return NULL;

}

else {

p->data = data;

p->nextnode = nextnode;

}

return p;

}



/*データの追加*/

node_t* add_data(node_t* node)

{

data_t data;

node_t* p = node;



puts("***追加するデータの入力***");

printf("学籍番号の下二桁の番号:");
scanf("%d", &data.num);

printf("氏名:");

scanf("%s", data.name);



while (node != NULL && p->nextnode != NULL) {

p = p->nextnode;

}

if (node == NULL) {

node = make_node(data, NULL);

}
else {

p->nextnode = make_node(data, NULL);

}

return node;

}



/*データの表示*/

void show_data(node_t* node)

{

node_t* p = node;



if (p == NULL) {

puts("データがありません。データを追加してください。");

return;

}

while (p != NULL) {

printf("番号%*s氏名\n", 6, "");

printf("%2d %10s\n", (p->data).num, (p->data).name);

p = p->nextnode;

}

}



/*データの削除*/

node_t* remove_data(node_t* node)

{

int num;

node_t* head = node;

node_t* pre = NULL;

if (node == NULL) {

puts("データは見つかりませんでした。");

return NULL;

}

puts("***データの削除***");

printf("番号の入力:");

scanf("%d", &num);



while (node->nextnode != NULL) {

if ((node->data).num == num) {

if (pre == NULL) {

return node->nextnode;

}
else {

pre->nextnode = node->nextnode;

free(node);

return head;

}

}

pre = node;

node = node->nextnode;

}

puts("データは見つかりませんでした。");

return head;

}



/*データの検索*/

void search_data(node_t* node)

{

int num;

node_t* p = node;



puts("***データの検索***");

printf("番号の入力:");

scanf("%d", &num);



if (node == NULL) {

puts("データは見つかりませんでした");

return;

}

while (p->nextnode != NULL) {

if ((p->data).num == num) {

puts("---データを発見---");

printf("氏名:%s\n", (p->data).name);

return;

}

p = p->nextnode;

}

puts("データは見つかりませんでした");

}



/*データの後処理*/

void release(node_t* node)

{

node_t* p;

if (node == NULL) return;

p = node;

release(p->nextnode);

free(p);

}

出席簿 

  1. 出席管理のファイル(csv ファイルなど)があればそれを読み込み,なければ新規作成する. 

2.メニューを表示し,  a. 出席状況の表示  b. 出席状況の入力  c. 出席状況の集計  d. 出席状況の保存  e. 終了 

のいずれかを選択させる. 

a. 出席状況の表示では,  全学生の一週間の出席状況の一覧(出席簿)を表示する. 

例   
0401 0402 0403 
01 青島 昭         欠席  
02 神田 洋二  遅刻      遅刻 

b.出席状況の入力では,  出席番号と日付(例:0613 などの文字列)を入力させたのち, 遅刻か早退か欠席かを入力させ,該当する学生および日付の出席状況を変更する. 

c. 出席状況の集計では, 出席番号を入力させ,該当する学生の遅刻,早退,欠席の合計日数をそれぞれ表示する. 

d. 出席状況の保存では, 全生徒の出席状況を出席管理のファイルに出力する. 

e. プログラムを終了する. 

※ 少なくとも,1 週間分の出席状況が管理できるようにせよ.

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • 退会済みユーザー

    退会済みユーザー

    2021/05/13 14:56

    0401 0402 0403 ...⇒
    01 欠席 早退
    02 欠席
    と右の方向に日付を追加していく方法です。

    キャンセル

  • episteme

    2021/05/13 15:00 編集

    出力に関する質問ですか?
    printf("%s ", 日付); を繰り返せば右方向に日付がプリントされますけど。

    ...なにがわからないかを説明できていません。

    キャンセル

  • 退会済みユーザー

    2021/05/14 09:51

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る