从0写一个电话号码管理的C入门项目【适合初学者】
0.前言
上次发了一个嵌入式的学习路线,很多粉丝问我各个阶段的入门项目,其中第二阶段的《基于socket聊天室》写了4篇循序渐进的文章,而第一阶段的《电话号码本管理》也非常想要。
一口君必须安排。该项目,一口君同样采用循序渐进的步骤,一点点为大家讲解这个小项目是如何从头开始点点写出来的。
1. 项目说明
运行环境:ubuntu16.04
语言 :C语言
1) 功能说明
本项目功能包括简易菜单、单链表、包括增删改查等基本操作。
链表插入采用尾插法。
2) 后续可在此基础上增加功能:
信息保存,数据库操作、CS/架构远程管理等。
3) 实现说明
现在要创建新节点newstudent,并通过尾插法插入到该链表中
p = head;
PHONE *newstudent = (PHONE *)malloc(sizeof(PHONE));
newstudent->next = NULL;
while(head->next != NULL)
{
head = head->next;
}
这几行代码执行完毕后,各指针结果如下:

head->next = newstudent;
执行完该行代码后,各指针结果如下:

head = p;
执行完该行代码后,各指针结果如下:
其他链表的操作,就不再过度叙述。
4) 代码流程图

2. 执行结果
文件如下:
peng@ubuntu:/mnt/hgfs/code/test$ tree .
.
├── list.c
├── main.c
└── phone.h
0 directories, 3 files
编译运行
peng@ubuntu:/mnt/hgfs/code/test$ gcc *.c
peng@ubuntu:/mnt/hgfs/code/test$ ./a.out
程序截图
登录界面:
进入电话管理主界面,并添加一个电话条目:
显示添加的电话信息:

3. 代码阅读方法
为了方便读者阅读代码,一口君给这个小项目创建了git工程,这样大家可以很方便的追述一口君编写代码的记录,便于学习。
同时git是现在软件开发必须掌握的一门版本管理技术。
1. 安装git

然后需要设置一下邮箱和用户名
git config --global user.email 21689991@qq.com
git config --global user.name yikoupeng
修改默认提交commit的打开软件为vim
git config --global core.editor "vim"
2. 显示历史修改记录
输入以下命令,显示所有commit信息。
git log

3. 如何让代码更新到最开始的那个状态?
比如我们想切换到最开始的那个版本节点
git checkout 61b662ad92e8115f012f6247046eb4756a532a15
大家可以看到,这个是我最初的版本,只有1个main.c文件,这个代码只有最简单的菜单功能,并且字体也都没有设置颜色。
要想切换到最新的版本,可以执行以下命令
git checkout b3004eef8a1c7828095af1a87181d58a7230e91e

4. 如何提交一个commit?
比如我们在各个文件增加一个文件头

下面命令可以查看到修改过的文件内容
git diff

通过下面命令提交新版本

然后输入以下命令提交commit
git commit
然后退弹出下面界面,我们可以用vim操作命令来提交这个commit的信息,
红框内是我输入的信息

用git log查看,可以看到,我们提交的信息已经更新了。

注意
这样提交的代码是放置到了本地仓库,还没有上传到服务器,
用于自己学习足够了,还可以上传到服务器,
这样我们就可以和众多开发者同步维护这套代码,
如果运气好,该项目吸引到了风投,
那不仅可以扬名立万还可以早日财务自由。
在此我们要非常感谢linus,
正是这位大神开发了git,才实现 了同时和全球上百万的开发者
高效维护Linux内核,
而git也被众多软件公司作为版本管理的首选。
代码下载方法:
关注公众号:一口Linux
后台回复:电话号码管理
从0写一个电话号码管理的C入门项目【适合初学者】的更多相关文章
- 从0写一个Golang日志处理包
WHY 日志概述 日志几乎是每个实际的软件项目从开发到最后实际运行过程中都必不可少的东西.它对于查看代码运行流程,记录发生的事情等方面都是很重要的. 一个好的日志系统应当能准确地记录需要记录的信息,同 ...
- 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载
用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分: 1.servlet部分 Export 2.工具类:TxtFileU ...
- 用extjs6.0写一个点击新建窗口的功能
一.写一个按钮 注意id { id: 'ListEdit', text:'编辑', iconCls:'x-fa fa-edit' } 二.写新建的页面 下面我新建的是表单,有几点需要注意的: ① 因为 ...
- Extjs6(二)——用extjs6.0写一个系统登录及注销
本文基于ext-6.0.0 一.写login页 1.在view文件夹中创建login文件夹,在login中创建文件login.js和loginController.js(login.js放在class ...
- Extjs6(三)——用extjs6.0写一个简单页面
本文基于ext-6.0.0 一.关于border布局 在用ext做项目的过程中,最常用到的一种布局就是border布局,现在要写的这个简单页面也是运用border布局来做.border布局将页面分为五 ...
- 使用TypeScript给Vue 3.0写一个指令实现组件拖拽
最近在用vue3重构后台的一个功能.一个弹窗组件,弹出一个表单.然后点击提交. 早上运维突然跑过来问我,为啥弹窗挡住了下边的表格的数据,我添加的时候,都没法对照表格来看了.你必须给我解决一下. 我参考 ...
- 记录心得-IntelliJ iDea 创建一个maven管理的的javaweb项目
熟能生巧,还是记录一下吧~ 开始! 第一步:File--New--Project--Maven--Create from archetype--maven-archetype-webapp 第二步:解 ...
- 假如现在有一堆长度大于3小于9的电话号码,用座机呼叫,如果出现这样的号码【123和12345】那么12345将永远不会被拨出,因为拨到123的时候电话已经呼出了,试写一个函数输出所有不能被呼出的电话号码(java实现)
解题: 假如现在有一堆长度大于3小于9的电话号码,用座机呼叫,如果出现这样的号码[123和12345]那么12345将永远不会被拨出,因为拨到123的时候电话已经呼出了,试写一个函数输出所有不能被呼出 ...
- 用weexplus从0到1写一个app
说明 基于wexplus开发app是来新公司才接触的,之前只是用过weex体验过写demo,当时就被用vue技术栈来开发app的开发体验惊艳到了,这个开发体验比react native要好很多,对于我 ...
- 从 0 到 1 到完美,写一个 js 库、node 库、前端组件库
之前讲了很多关于项目工程化.前端架构.前端构建等方面的技术,这次说说怎么写一个完美的第三方库. 1. 选择合适的规范来写代码 js 模块化的发展大致有这样一个过程 iife => commonj ...
随机推荐
- bugly进阶01-集成bugly时的相关参数
bugly进阶01-集成bugly时的相关参数 个人github CSDN博客 前言 bugly的集成十分的简单,在代码中只需要简单的一个语句就可以轻松集成: - (BOOL)application: ...
- 通俗易懂的路径搜索之A-star算法
A-star算法 搜索技术 搜索技术是一种通用的问题求解技术,可以将待解决的问题转化为可搜索的问题空间,然后在该空间中搜索求解.搜索技术在人工智能领域有着非常广泛的应用. 盲目搜索 盲目搜索是最简单的 ...
- 4.4K Star!推荐一款新一代的极简监控系统!轻量高性能!超500个监控指标,颜值高、功能强大!
在信息化快速发展的今天,企业运维面临的挑战日益增多.传统的运维监控系统往往存在功能冗余.性能低下.操作复杂等问题,难以满足现代企业对高效.稳定.智能的运维管理需求. 今天给大家推荐一款新一代极简运维监 ...
- Rougamo、Fody 实现静态Aop
最近在看项目,看到别人使用Rougamo框架,好奇花了点时间仔细研究了,在这里记录一下. 0. 静态编织 Aop 首先,我们先了解什么是Aop? Aop 是指面向切面编程 (Aspect Orient ...
- go语言的基础语法
字符串数组 package main import ( "fmt" ) func main() { var str string str = "hello world&q ...
- Docker开始收费了,开始转学podman【第一篇podman容器的安装和基本操作】
podman 什么是Podman?Podman是无守护程序容器引擎,用于在Linux系统上开发,管理和运行OCI容器.容器可以以root用户或无根模式运行.简而言之:`alias docker = p ...
- 可视化—D3学习笔记小小案例记录一下
D3全称是Data-Driven Documents数据驱动文档,是一个开源的javascript库,可以用于数据可视化图形的创建,该库更接近底层,与 g2.echarts 不同,d3 能直接操作 s ...
- 全网最好看的单细胞umap图绘制教程
全网最好看的单细胞umap图绘制教程 作者按 大家或许都曾被Nature, Science上的单细胞umap图吸引过,不免心生崇拜.在这里,我们将介绍一种简单方便的顶刊级umap图可视化 全文字数|预 ...
- hbuilderx打正式包所需的私钥证书的创建方法
现在使用uniapp作为底层框架来开发app应用已经成为了很多公司的事实标准,而uniapp的开发工具hbuilderx云打包的时候,需要私钥证书和证书profile文件. 而且还需要将打包好的ipa ...
- Hadoop 部署
hadoop部署步骤: 环境rhel8.2 1.配置主机网络信息 使物理机能和主机ping通 使用secureCRT与虚拟连接 设置网卡(dhcp) [root@maoqiyang ~]# nmcli ...