LinuxベースのC言語プロジェクトの実戦 - ローカルアカウント管理システム

C言語開発プロジェクトの戦闘:

C 言語は汎用コンピュータ プログラミング言語であり、低レベルの開発で広く使用されています。C 言語の設計目標は、簡単な方法でコンパイルでき、低レベルのメモリを処理でき、少量のマシン コードを生成でき、オペレーティング環境のサポートなしで実行できるプログラミング言語を提供することです。C 言語は、多くの低レベルの処理関数を提供しますが、優れたクロスプラットフォーム機能を維持しており、標準仕様で記述された C 言語プログラムは、多くのプラットフォームでコンパイルして正常に実行できます。

C 言語はプロセス指向の言語です。その固有の特性により、美しい GUI インターフェイスを書くのには適していません。ここで、作者は、誰もが C 言語を感じられるようにするためだけに、ユーザー ログインのデザインを実現するために C 言語を使用することにしました。言語プロジェクト、実際の開発プロセス。したがって、フォローアップの説明は、社内の実際のプロジェクト開発文書の説明ほど公式かつ正確ではありません。

1つ。プロジェクトの要件:

1. ユーザーコンソール。

2. ユーザーアカウントのパスワードを登録、保存、比較できる機能要件。 

二。プロジェクトデザイン:

要件に従って、次のことがわかります。

1. インターフェイス レイアウトにはアカウントとパスワードの入力が必要です。つまり、コード内でユーザーとパスワードの識別が必要です。標準 C ライブラリによって提供される printf 関数を使用して、端末上で印刷できます。同時に、インターフェイスユーザーとパスワードの入力が必要な場合は、標準 C ライブラリが提供する scanf 関数または gets 関数を使用してこれを実現できます。同様に、ログイン、登録、および終了オプションも上記の関数を使用して直接実現でき、特定のレイアウトは個人で決めることができます。

2. 機能要件によれば、ユーザーデータの比較を実現するには既存の成熟したデータベースを使用する方が良いですが、ここでは C 言語の実際の応用についてのみ説明します。そのため、C 言語の既存のデータ型の一部を使用して、このような機能を実現します。もちろん、これによりプログラムのパフォーマンスも制限されます。ユーザーとパスワードの関係は 1 対 1 でなければならないことがわかり、構造体の形式を使用してユーザーとそれに対応するパスワードの「バインド」を実現できます。また、ユーザーが 1 人だけであるべきではないため、構造体配列の形式を使用してユーザー データを保存できます。(このような設計では避けられない問題があります。プログラムが終了するとメモリが解放され、構造体配列内のデータはすべて消えてしまいます。ファイルIOも学習していれば、この問題はすでに解決できると思います。)

3. ユーザーがログインすると、データの比較が行われます。 現在のところ、ログイン機能は横断的に比較することで実現できます。将来的に問題の規模が大きくなった場合でも、関連データを管理し、最適化を達成するためにデータベースを使用する必要があります。

三つ。アイテムコード:

1. ファイルを複数のソース ファイルに分割するための、より専門的なアプローチを使用できます。これは比較的基本的で、その後の表示に便利です。作成者は、最も「低」な方法を採用することにしました。

2. 具体的なコードの実装:

#含む 

#含む 

#含む 

#含む 

typedef 構造体データ{

    char name[20]; //ユーザー名を格納

    char pass[20]; //パスワードを保存

}ユーザーデータ;

user_data user[20] = {0}; //20 人のユーザーを保存できる構造体配列

int last = 0; //登録されたアカウントの数を示すフラグビット

bool reg_string(void)

{

    int i = 0, n;

    if(最後 >= 20){

        false を返します。

    }

    文字名[20] = {0}、パス[20] = {0};

printf("ユーザー名を入力してください:\n");

    xxx:    

    scanf("%s", 名前);

getchar(); // ダーティ文字を読み取ります

    for(i = 0; i < last; i++){

        n = strcmp(名前, ユーザー[i].名前);

        if(0 == n){

            printf("ユーザーは登録しました\n");

            goto xxx; //ユーザー名が同じ場合はジャンプして再入力

        }

}

    printf("ユーザーパスワードを入力してください:\n");

    scanf("%s", pass);

    strcpy(ユーザー[姓].名前, 名前);

    strcpy(user[last].pass, pass);

    最後++;

    printf("登録に成功しました\n");

    true を返します。

}

bool log_string(void)

{

    if(0 == 最後){

        false を返します。

    }

    int i、n、m;

    文字名[20] = {0}、パス[20] = {0};

    printf("ユーザー名を入力してください:\n");

    scanf("%s", 名前);

    getchar();

    printf("ユーザーパスワードを入力してください:\n");

    scanf("%s", pass);

    getchar();

for(i = 0; i < last; i++){

//strcmp 関数の戻り値「0」は、2 つの文字列が同じであることを意味します

        n = strcmp(user[i].name, name);         

m = strcmp(user[i].pass, pass);

        if(n == 0 && m == 0){

//将来的には、さまざまなカスタム機能を実現するための他のインターフェースも提供可能

            printf("ログインに成功しました!\n"); 

            true を返します。

        }

}

//プログラムがこのステップまで実行されると、構造体配列が走査され、一致するユーザーとパスワードが // 見つからなかったことを意味します

    printf("ユーザーまたはパスワードのエラー\n"); 

    false を返します。

}

int main()

{

    int n;

while(1){

//インターフェースのレイアウトを実装する

        printf("***************************************\n");

printf("*****1. 登録*****2. ログイン*****3. 終了*****\n"); printf("********** ********************************\n");

xxx:   

        scanf("%d", &n);

        getchar();

        スイッチ(n){

            ケース1:

// 対応する関数が正しく呼び出されたかどうかを確認するために、呼び出し時の戻り値を適切に判断する必要があります。

                reg_string(); 

                壊す; 

            ケース 2:

                log_string(); //ログイン

                壊す;

            ケース 3:

                0を返します。

            デフォルト:

                xxxに移動します。

        }

    }

}

注記:

今回は主にC言語プロジェクトの実際の開発プロセスを紹介することを目的としているため、プロジェクトの選択は比較的簡単で、コードも最適化されているわけではありません。より深く専門的な理解が必要な場合は、お問い合わせください。

Embedded Internet of Things は多くのことを学ぶ必要があります。間違ったルートと内容を学習すると給与が上がります。

データ パッケージを全員で共有すると、約 150 G になります。その中の学習コンテンツ、対面聖典、プロジェクトは比較的新しく、完全なものです。(クリックすると、受け取る小さなアシスタントが見つかります)

おすすめ

転載: blog.csdn.net/m0_70911440/article/details/131633011