实操 | 基于Linux下的C语言项目实战--本地账号管理系统

在此之前,华妹给大家讲了《你还在嵌入式C语言学习中迷茫吗?不妨来看一下这篇编程技巧》这篇文章,大家应该已经有了一定了解。俗话讲,光说不练假把式。所以,今天华妹就给大家带来了基于Linux下的C语言项目实战--本地账号管理系统。

 

C语言是一种面向过程、抽象化的通用程序设计语言,它的先天特性决定了它并不适合写出美观的GUI界面,而选择使用C语言来实现用户登录的设计,只是为了让大家感受C语言项目实战开发的过程。所以,以下内容并不会像在公司当中实际项目开发描述的那样的官方、精确。

实操 | 基于Linux下的C语言项目实战--本地账号管理系统_第1张图片

 

一.项目需求

1. 用户控制台;

2. 功能需求,能够进行用户账号密码的注册存储、比对;

 

二.项目设计

根据需求我们可以知道:

 

1.界面布局

(1) 应当有账号密码的输入,这意味着我们在代码当中需要用户、密码标识,这个可以使用标准C库提供的printf函数在终端打印;

(2) 同时需要用户、密码的输入的接口,我们可以使用标准C库提供的scanf或者gets函数去实现;

(3) 同理,登录、注册、退出选项也可以直接使用上述函数实现,具体布局情况,可由个人而定。

 

2.功能需求

(1) 针对用户数据的比对最好采用现有的、成熟的数据库去实现。对于C语言的实际应用,可以采用C语言已有的数据类型去实现这个功能。

(2) 当然这也会限制我们这个程序的性能。可以发现,用户和密码,应该是一一对应的,我们可以采用结构体的形式,实现用户和其对应密码的“捆绑”。

(3) 而用户不仅仅只有一个,所以可以采用结构体数组的形式,实现用户数据的存储。(这样的设计会有一个无法避免的问题:当程序结束,内存被释放,结构体数组内部所有数据消失,这里可以通过学习文件IO来解决。)

 

3. 用户登录

(1) 数据的比对是可以通过遍历来比对的,进而可以实现登录功能。

(2) 未来当问题规模庞大之后,还是应当使用数据库去管理相关数据,来实现最优。

 

三.项目编码

这里可以采用比较专业的做法:将文件进行分割成多个源文件的形式。这个比较基础并且方便后续展示。而下面我们采用最“LOW”的方式,简单粗暴的把所有东西放在一个文件中。具体代码实现过程:

 

#include

#include

#include

#include

typedef struct data{

    char name[20];    

 //存储用户名

    char pass[20];       

//存储密码

}user_data;

user_data user[20] = {0};   

//能够保存20个用户的结构体数组

int last = 0;    

 //标志位,标记已经注册账户的数目

 

bool reg_string(void)

{

    int i = 0, n;

    if(last >= 20){

        return false;

    }

    char name[20] = {0}, pass[20] = {0};

printf("please input your usrname:\n");

 

    xxx:    

    scanf("%s", name);

    getchar();       //读取脏字符

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

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

        if(0 == n){

            printf("该用户已注册\n");

            goto xxx;     

//若用户名相同,则跳转重新输入

        }

}

 

printf("please input your usrpassword:\n");

    scanf("%s", pass);

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

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

    last++;

    printf("注册成功\n");

    return true;

}

 

bool log_string(void)

{

    if(0 == last){

        return false;

    }

    int i, n, m;

    char name[20] = {0}, pass[20] = {0};

printf("please input your usrname:\n");

    scanf("%s", name);

    getchar();

printf("please input your usrpassword:\n");

    scanf("%s", pass);

    getchar();

 

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

//strcmp 函数返回值为"0"则表示两字符串相同 

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

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

 

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

//未来可以提供其它接口,实现各种自定义功能

            printf("登录成功!\n");  

            return true;

        }

}

 

//当程序执行到这一步,意味着结构体数组遍历完毕,未找到匹配的用户和  //密码

    printf("用户或密码错误\n");   

    return false;

}

 

int main()

{

    int n;

while(1){

//实现界面布局

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

 

printf("*****1.注册*****2.登录*****3.退出*****\n");

 

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

xxx:   

        scanf("%d", &n);

        getchar();

        switch(n){

            case 1:

//应该在调用时做好返回值的判断,看对应函数是否正确调用

                reg_string();        

                break;    

            case 2:

                log_string();    //登录

                break;

            case 3:

                return 0;

            default:

                goto xxx;

        }

    }

}

 

我们都知道如今的智能产品的运行都离不开底层操作系统的支撑,而不管是Windows、Mac OS、Linux这些桌面操作系统,还是Android、IOS等移动操作系统的底层都是由C语言搭建起来的。C作为编程基础的入门语言,蕴含了常见且实用的编程精髓。本文也正是基于Linux下的C语言,给大家介绍了这样一个项目实战的开发流程,希望能够对大家有所帮助。

 

C语言是编程的必备语言。学好了它,我们才有能力向外延展我们的编程视野,才能够为我们进一步向嵌入式、物联网等热门技术发展以及职业的多维选择提供坚实基础!否则,我们只能望着别人进入大厂、月薪过万了。所以,赶紧请扫描下方二维码,添加华妹免费领取课程资料,包含C语言、Linux、数据结构、Linux I/O|文件目录、Linux网络开发控制等71个课程视频+课程配套源代码+20个四大案例拆解视频,满满的都是干货福利!

 

添加华妹(hqhuamei),学习嵌入式

免费领取嵌入式开发系列资料

你可能感兴趣的:(嵌入式,C语言,Linux)