【C语言】使用多文件实现简易学生登录系统

目录

一、使用多文件写c语言程序

1.1、main.c文件的基础编写

1.2、head.h文件的基础编写

1.3、login.c文件的基础编写

二、实现简易学生登录系统

2.1、系统简单页面的编写

2.2、功能函数的定义和调用

2.2.1、函数声明

login.h:

2.2.2、函数定义

login.c:

2.2.3、函数调用

main.c:

三、效果展示


一、使用多文件写c语言程序

我使用了三个文件,分别是main.c、login.c、login.h,三个文件都放在sys目录下。

1.1、main.c文件的基础编写

首先,将c语言程序的基本格式写入main.c文件中,代码如下:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    return 0;
}

又因为main.c文件需要调用login.h文件,修改代码如下:

#include "login.h"

int main(int argc, char const *argv[])
{
    return 0;
}

1.2、head.h文件的基础编写

为了防止重复编译,在.h文件中有一套固定代码写法,如下:

#ifndef __LOGIN_H__ // 判断是否遇到了 #define __HEAD_H__
#define __LOGIN_H__

#endif

login.h的其他内容都写在 #define __HEAD_H__ 与 #endif 之间,其他内容包括预处理语句、函数声明等,示例代码如下:

#ifndef __LOGIN_H__ // 判断是否遇到了 #define __HEAD_H__
#define __LOGIN_H__

#include <stdio.h> // 预处理语句
#include <string.h>

int login(); // 函数声明

#endif

预处理语句:调用系统库。

函数声明:编写函数必须得先进行声明,然后才能进行定义。

1.3、login.c文件的基础编写

首先,因为login.c文件是.c文件,其会被用来编写c语言程序,所以想让它正常编译运行,得需要一些系统库,又因为login.h文件中使用预处理语句调用了系统库,所以在login.c文件中调用login.h即可,示例代码如下:

#include "login.h"

在login.c文件后面写的是相关函数的定义,目的是为了实现程序的功能。示例代码如下:

int sum()
{
    int num1 = 0;
    int num2 = 0;
    int result = 0;
    printf("请输入num1的值:");
    scanf("%d", &num1);
    getchar();
    printf("请输入num2的值:");
    scanf("%d", &num2);
    getchar();
    result = num1 + num2;
    
    return result;
}

二、实现简易学生登录系统

2.1、系统简单页面的编写

代码如下:

#include "login.h"

int main(int argc, char const *argv[])
{
    int flg = 0;

    printf("欢迎来到 学生登录系统!!!\n");

    printf("请输入你想要的功能:\n");
    printf(" 1 -> 加法计算器\n 2 -> 99乘法表\n 3 -> 期待着(还在开发中)\n");
    scanf("%d", &flg);
    getchar();

    switch(flg)
    {
        case 1:
            printf("result = %d\n", sum());
            break;
        case 2:
            mul_99();
            break;
        default:
            printf("说了期待着,别催了\n");
    }
    return 0;
}

效果如下:

2.2、功能函数的定义和调用

首先,我明确了此程序需要一些什么功能,然后根据这些功能去分别定义函数来实现这些功能。

既然是学生登录系统,登录函数是不必可少的,然后系统能实现的小功能,包括加法计算器,打印99乘法表,都得为其设计一个函数。

2.2.1、函数声明

要进行函数定义,首先得在login.h文件中进行login函数声明,在函数声明过程中,我也确定好了每个函数的返回值类型,函数名,形式参数等。

login.h代码:
// 防止重复编译
#ifndef __LOGIN_H__ // 判断是否遇到了 #define __HEAD_H__
#define __LOGIN_H__

// 标准头文件
#include <stdio.h>
#include <string.h>

// login登录函数声明
int login();

// sum加法计算器函数声明
int sum();

// 打印99乘法表函数声明
void mul_99();

#endif
2.2.2、函数定义

首先,得知道函数定义会写在login.c文件中。然后根据每个函数的功能去编写相应c语言代码。

login.c代码:
#include "login.h"

//数据的定义
char name[10][25] = {
    "韩信" ,
    "李广" , 
    "张飞" ,
    "刘备" , 
    "关羽" ,
    "赵云" , 
    "诸葛亮" , 
    "猪猪侠" , 
    "蜘蛛侠" , 
    "鲁迅" ,
};
int id[10] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10 };

/*
头文件:head.h
函数原型:int login();
函数参数:无
函数功能:登录函数,判断用户的姓名和id是否正确
函数返回值:密码验证正确返回1,密码验证错误返回0,账号验证错误返回0
*/
int login()
{
    char in_name[25] = {};
    int in_id = 0;
    int num1 = 5;
    int num2 = 5;
    int result = 0;

    do
    {
        printf("请输入学生姓名:");
        scanf("%s" , in_name);
        getchar();  //清空缓冲区

        for(int i = 0; i < 10; i++)
        {
            if(!strcmp(in_name , name[i]))
            {
                printf("姓名正确,有这个学生\n");

                while(num1)
                {
                    printf("请输入学生id:");
                    scanf("%d" , &in_id);
                    getchar();  //清空缓冲区

                    if(in_id == id[i])
                    {
                        result = 1;
                        printf("学生id正确\n");
                        break;   //跳出循环
                    }
                    else
                    {
                        num1--;
                        printf("学生id错误,请重新输入,你还有%d次机会\n", num1);
                        if(num1 == 0)
                        {
                            result = 2;
                        }
                    } 
                }
                break;
            }
        }

        if(result == 1)
        {
            printf("登录成功\n");
            return 1;   //跳出循环
        }
        else if(result == 0)
        {
            num2--;
            printf("学生姓名错误,请重新输入,你还有%d次机会\n", num2); 
            if(num2 == 0)
            {
                printf("学生姓名错误五次,登录失败\n");
                return 0;
            }
        }
        else
        {
            printf("学生id错误五次,登录失败\n");
            return 0;
        }
            
    } while(num1 && num2);
}

/*
头文件:head.h
函数原型:int sum();
函数参数:无
函数功能:让用户输入 num1 和 num2 的值,进行相加
函数返回值:num1 和 num2 的和
*/
int sum()
{
    int num1 = 0;
    int num2 = 0;
    int result = 0;
    printf("请输入num1的值:");
    scanf("%d", &num1);
    getchar();
    printf("请输入num2的值:");
    scanf("%d", &num2);
    getchar();
    result = num1 + num2;
    
    return result;
}

/*
头文件:head.h
函数原型:void mul_99();
函数参数:无
函数功能:打印99乘法表
函数返回值:无
*/
void mul_99()
{
    // 9 * 9 表
    for (int i = 1; i < 10; i++) // 行
    {
        for (int j = 1; j <= i; j++) // 列
        {
            printf("%d * %d = %d\t" , j , i , i * j);
        }
        printf("\n");
    }
}
2.2.3、函数调用

函数的定义已经完成,我们需要在main.c文件中主函数里面调用这些功能函数,才能正常使用它们的功能。

main.c代码:
#include "login.h"

int main(int argc, char const *argv[])
{
    int flg = 0;

    // login登陆函数的调用
    if(login() == 0)
    {
        printf("登陆失败");
        return 0;
    }

    printf("欢迎来到 学生登录系统!!!\n");
    printf("请输入你想要的功能:\n");
    printf(" 1 -> 加法计算器\n 2 -> 99乘法表\n 3 -> 期待着(还在开发中)\n");
    scanf("%d", &flg);
    getchar();

    switch(flg)
    {
        case 1:
            printf("result = %d\n", sum()); // sum加法计算器函数的调用
            break;
        case 2:
            mul_99(); // 打印99乘法函数的调用
            break;
        default:
            printf("说了期待着,别催了\n");
    }
    return 0;
}

三、效果展示

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的贪吃蛇游戏的页面菜单的实现。 1. 显示菜单 在程序启动时,首先需要显示菜单,让用户选择游戏难度或退出游戏。可以使用一个循环来持续显示菜单,直到用户选择退出游戏为止。 ``` int main() { int choice = 0; while (choice != 3) { printf("Welcome to Snake Game!\n"); printf("1. Easy\n"); printf("2. Medium\n"); printf("3. Exit\n"); printf("Please enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: startGame(EASY); break; case 2: startGame(MEDIUM); break; case 3: printf("Goodbye!\n"); break; default: printf("Invalid choice, please try again.\n"); break; } } return 0; } ``` 2. 游戏难度 在菜单中,用户可以选择不同的游戏难度,比如简单、中等和困难。可以使用枚举类型来表示不同的游戏难度。 ``` typedef enum { EASY, MEDIUM, HARD } Difficulty; ``` 3. 开始游戏 在菜单中,当用户选择了游戏难度后,需要进入游戏界面。可以编写一个 startGame 函数来启动游戏。 ``` void startGame(Difficulty difficulty) { // 初始化游戏数据 int score = 0; int speed; switch (difficulty) { case EASY: speed = 100; break; case MEDIUM: speed = 50; break; case HARD: speed = 25; break; } // 开始游戏循环 while (1) { // 更新游戏状态 // 绘制游戏界面 // 处理用户输入 // 判断游戏是否结束 // 延时一段时间 Sleep(speed); } } ``` 4. 总结 以上是一个简单的贪吃蛇游戏页面菜单的实现,希望可以帮助到您。如果您需要更详细的实现方式,可以参考一些开源的贪吃蛇游戏代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值