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

news2024/12/24 3:08:36

C语言开发项目实战:

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多平台正常编译运行。

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

一.项目需求:

1.用户控制台;

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

二.项目设计:

根据需求我们可以知道:

1.界面布局应当有账号密码的输入,这意味着我们在代码当中需要用户、密码标识,这个我们可以使用标准C库提供的printf函数在终端打印;同时需求用户、密码的输入的接口,这个我们可以使用标准C库提供的scanf或者gets函数去实现;同理,登录、注册、退出选项也可以直接使用上述函数实现,具体布局情况,可由个人而定。

2.根据功能需求,针对用户数据的比对我们最好采用现有的成熟的数据库去实现,但这个地方我们只讲C语言的实际应用,所以,我们可以采用C语言已有的一些数据类型去实现这样的功能。当然这也会限制我们这个程序的性能。我们可以发现:用户和密码,这两者之间的关系是应该是一一对应的,所以我们可以采用结构体的形式,实现用户和其对应密码的“捆绑”。而我们用户又不应该只有一个,所以可以采用结构体数组的形式,实现用户数据的存储。(这样的设计会有一个无法避免的问题,当程序结束,内存被释放,结构体数组内部所有数据消失。如果你还学了文件IO,我想你已经可以解决这样的问题了。)

3.用户登录时,数据的比对目前我们可以通过遍历比对,实现登录功能。而未来当问题规模庞大之后,还是应当使用数据库去管理相关数据,实现最优。

三.项目编码:

1.我们可以采用比较专业的做法,将文件进行分割成多个源文件的形式,这个比较基础,方便后续展示,笔者决定采用最“LOW”的方式,简单粗暴的把所有东西放在一个文件中;

2.具体代码实现:

#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;

        }

    }

}

注:

本次主要是为了介绍C语言项目实战的开发流程,所以选用项目较为简单,代码不是最优。如果想深入而又专业的了解,请联系我们。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!(点击找小助理领取)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot中间件—封装超时熔断器

需求背景 如果一个服务中有很多涉及需要服务间熔断的地方&#xff0c;就会出现N多下述代码&#xff1a; 1.N个fegnClient接口 FeignClient(name "hello-world-service", fallback HelloWorldFallback.class) public interface HelloWorldService {GetMapping(&q…

U盘写保护怎样去掉?分享3种简单方法!

不知道为什么我的u盘突然就显示被写保护了呢&#xff0c;大家有没有遇到过类似的情况呀&#xff1f;有什么比较好的解决方法可以推荐一下吗&#xff1f; 很多朋友可能对u盘写保护没有什么概念&#xff0c;实际上&#xff0c;u盘写保护可能会阻止我们对其中的文件进行修改或者添…

含生僻字中文校验方式优化

项目姓名校验原本一直是通过utf8正则进行校验&#xff0c;但近期出现的客户生僻字包含双码字&#xff0c;原有校验方式无法实现。需要修改扩大校验范围。 知识点回顾&#xff1a; Unicode是Unicode Standard&#xff08;Unicode标准&#xff09;的简写&#xff1b;Unicode为每…

HNU-操作系统OS-学习感悟

初次接触如此底层的计算机基础课程&#xff0c;我还是很不适应的。 教材用的这本书&#xff0c;实验用的清华大学的ucore实验 好在应试水平没有丢。最后总评94/100。 下面仅从应试角度谈一谈学习的理解 总领 HNU的OS课程平时分给的比较模糊&#xff0c;大致由 作业实验验…

先导式比例溢流阀放大器

EDBW10PL350XY/224、EDBW20PL210XY/724、EDBW30PL105XY/224、EDBW10PL055XY/224先导式比例溢流阀&#xff0c;板式安装&#xff0c;由主阀芯和先导级阀beuec比例放大器组成:先导级阀为比例溢流阀&#xff0c;主阀阅芯可独立调节压力作为安全限压压力&#xff0c;比例先导阀压力…

selenium怎么使用代理IP

什么是selenium Selenium 是一个自动化测试框架&#xff0c;用于测试 Web 应用程序的功能性。它支持多个编程语言&#xff08;如Java&#xff0c;Python&#xff0c;C#等&#xff09;并且可以在操作系统和不同浏览器上运行测试。Selenium 可以模拟用户在浏览器中的操作&#x…

PC端实现滚动分页懒加载

思路 监听列表元素的滚动事件&#xff0c;滚动到底部的时候&#xff0c;加载下一页的数据监听数据加载&#xff0c;判断是否已全部加载结束 实现 监听滚动事件 为列表元素 listBox 绑定 scroll 事件进行监听 <div class"listBox" scroll"watchScroll&qu…

Github点赞120k的Spring全家桶笔记,吃透Offer拿到手软!

Spring框架自诞生以来一直备受开发者青睐&#xff0c;有人亲切的称之为&#xff1a;Spring 全家桶。它包SpringMVC、SpringBoot、Spring Cloud、Spring Data等解决方案。 很多研发人员把spring看作心目中最好的java项目&#xff0c;没有之一。Spring系列包含非常多的项目&…

【LLM】DeepSpeed分布式训练框架

文章目录 一、DeepSpeed介绍1. 分布式背景介绍2. deepspeed介绍 二、deepspeedtransformer代码实战1. 预处理和Json文件2. 训练代码 三、deepspeed加速Bloom lora微调1. 配置文件2. 训练代码 Reference 一、DeepSpeed介绍 1. 分布式背景介绍 分布式计算环境中&#xff0c;主节…

进程间通信方法——命名管道

命名管道 匿名管道应用的一个限制就是只能在具有共同祖先&#xff08;具有亲缘关系&#xff09;的进程间通信。如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文件来做这项工作&#xff0c;它经常被称为命名管道。&#xff08;命名管道是有文件名的&#xff0…

Vs窗口布局移动窗口vs直接卡死2

(1条消息) Vs窗口布局移动窗口vs直接卡死_vs拖动窗口布局卡死_Ma_Hong_Kai的博客-CSDN博客 由于莫名其妙的更新导致又卡死了&#xff0c;导致最近一年多无法拖动vs的框挺折磨 前一段时间看到一个有意思的命令 搞了搞了 可以拖动了&#xff08;目测应该是微软自己发现这个问…

【图像识别】openCV基础知识

图像处理基础 一、使用OpenCV前要准备的工作1.先导入需要用到的库2.自定义&#xff0c;图片展示函数 二、开始学习常用函数1.生成随机整数①. 函数说明②.代码a. 二维灰度图b. 三维彩色图 ③.代码现象a. 二维灰度图b. 三维彩色图 2.通道的分离与合并①先导入一张图片② 将其RGB…

多元回归预测 | Matlab基于麻雀算法(SSA)优化高斯过程回归(SSA-GPR)的数据回归预测,matlab代码,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于麻雀算法(SSA)优化高斯过程回归(SSA-GPR)的数据回归预测,matlab代码,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源…

合宙Air001震撼来袭!

Air001芯片特性 采用ARM 32位的M0内核&#xff0c;主频可达48MHz&#xff1b; 4K RAM32K Flash&#xff1b; 1.7&#xff5e;5.5V超宽范围供电&#xff0c;USB和电池都能直接供电&#xff1b; 内嵌可配4/8/16/22.12/24MHz的RC振荡器&#xff0c;无需外挂晶振就能48MHz运行…

你连存活到JDK8中著名的Bug都不知道,你怎么敢跳槽涨薪的?

在笔者研究 JDK 源码时&#xff0c;注意到在CopyOnWriteArrayList 和ArrayList 的构造器中都出现了如下 bug 字样 6260652 其实代表的JDK bug 列表中的编号 http://bugs.java.com/bugdatabase/view_bug.do?bug_id6260652 http://bugs.java.com/bugdatabase/view_bug.do?bug…

GBU808-ASEMI薄体整流桥GBU808

编辑&#xff1a;ll GBU808-ASEMI薄体整流桥GBU808 型号&#xff1a;GBU808 品牌&#xff1a;ASEMI 芯片个数&#xff1a;4 封装&#xff1a;GBU-4 恢复时间&#xff1a;≥2000ns 工作温度&#xff1a;-50C~150C 浪涌电流&#xff1a;200A 正向电流&#xff1a;8A 反…

Golang 命令源码文件

Go 语言标准库中专门用于接收和解析命令参数。这个代码包的名字叫 flag。 函数 flag.StringVar 接受 4 个参数。 第 1 个参数是用于存储该命令参数值的地址&#xff0c;具体到这里就是在前面声明的变量 name 的地 址了&#xff0c;由表达式 &name 表示。 第 2 个参数是为…

高级运维开发工程师带你处理linux木马(挖矿病毒)实战例子

一、事态描述 centos7测试服务器&#xff0c;突然密码登不上去了&#xff0c;然后CPU占100%。已经猜到&#xff0c;登录密码过于简单&#xff0c;密码被破解挂马了。大概率是CPU挖矿病毒。 二、重置centos7登录root密码 步骤1 启动Linux Centos7系统&#xff0c;当出现如下画…

JavaWeb JSP 内置对象

1.JSP 内置对象 在jsp自动转换成的java文件的service方法中&#xff0c;我们可以看到这九个内置对象&#xff1a; 具体如下&#xff1a; request&#xff08;HttpServletRequest&#xff09;&#xff1a;代表客户端的HTTP请求。通过该对象&#xff0c;可以获取请求参数、请求…

时序区间预测 | Matlab基于高斯过程回归(GPR)时间序列区间预测,matlab代码,单变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基于高斯过程回归(GPR)时间序列区间预测,matlab代码,单变量输入模型 评价指标包括:MAE、MBE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量…