在此之前,华妹给大家讲了《你还在嵌入式C语言学习中迷茫吗?不妨来看一下这篇编程技巧》这篇文章,大家应该已经有了一定了解。俗话讲,光说不练假把式。所以,今天华妹就给大家带来了基于Linux下的C语言项目实战--本地账号管理系统。
C语言是一种面向过程、抽象化的通用程序设计语言,它的先天特性决定了它并不适合写出美观的GUI界面,而选择使用C语言来实现用户登录的设计,只是为了让大家感受C语言项目实战开发的过程。所以,以下内容并不会像在公司当中实际项目开发描述的那样的官方、精确。
一.项目需求
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),学习嵌入式
免费领取嵌入式开发系列资料