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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

0回答

871閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/05/13 05:17

編集2021/05/13 05:36
#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 週間分の出席状況が管理できるようにせよ.

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/05/13 05:20

学校の課題とかだったら自分でどうぞ。 ここは課題等の作業代行をしてくれるサイトではありませんので。
episteme

2021/05/13 05:26

しつもんはなんですか?
退会済みユーザー

退会済みユーザー

2021/05/13 05:28

出席情報の入力の右方向に追加していく方法がわかりません
episteme

2021/05/13 05:30

"右方向"てなんですか? (できそこないでいいから)コードみせて。
退会済みユーザー

退会済みユーザー

2021/05/13 05:31

#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); }
episteme

2021/05/13 05:33

質問は編集できます。上記コードを質問に追加してください。 # それにこのコード、C++じゃないよね。Cだよね。
退会済みユーザー

退会済みユーザー

2021/05/13 05:37

そうなんですね。 変更いたしましたありがとうございます。
episteme

2021/05/13 05:41

で、"右方向"てなんですか?
退会済みユーザー

退会済みユーザー

2021/05/13 05:42

日付を追加していく方法です
episteme

2021/05/13 05:48 編集

日本語でお願いします。 "右方向に追加していく方法"の"右方向"とはなんですか?
episteme

2021/05/13 05:55 編集

出席簿管理のキモである(と思われる) - いつ - だれが - 遅刻/早退/欠席 したか を表現するデータがコードのどこにも見当たりません。 できそこないにも程がある、これでは"丸投げ"と判断されます。
退会済みユーザー

退会済みユーザー

2021/05/13 05:56

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

2021/05/13 06:01 編集

出力に関する質問ですか? printf("%s ", 日付); を繰り返せば右方向に日付がプリントされますけど。 ...なにがわからないかを説明できていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問