一个能对个人信息进行管理的简易通讯录管理软件,能对联系人进行增删改查,以及向文件中写入保存和从文件读取联系人数据.

(一)    实现主菜单及其菜单项选择功能

(头文件说明:

ctrlcur.h : 封装了Linux下对光标的一些操作(光标移动定位,字体前景背景色设置,清屏等), 详细介绍及源码:https://blog.csdn.net/zhou_1999/article/details/81173261

termio.h : 用于实现无回显读取字符函数getch(),既无需按下回车即可读取字符  参考博客 : https://blog.csdn.net/gaopu12345/article/details/30467099)

#include <stdio.h>
#include <string.h>
#include <termio.h>
#include "ctrlcur.h"
#define MAIN_MENU_WIDTH 30int getch(void);
void putLine(char *,int,int);
void mainMenu();
void delimiter(int);
//菜单的长度
int hight = 1;int main(int argc,char *argv[])
{mainMenu();return 0;
}
//分隔符
void delimiter(int len)
{int i;printf("├");for(i = 0; i < len - 2; i++){printf("─");}printf("┤\n");hight++;}void putLine(char *con,int y,int isSelect)
{int length = MAIN_MENU_WIDTH;printf("│");MOVETO(y,(length - 12)/2);if(isSelect != 0){SET_FRONT_COLOR(FRONT_RED);SET_BACKGROUND_COLOR(BACKGROUND_WHITE);printf("%-16s",con);SET_FRONT_COLOR(FRONT_WHITE);SET_BACKGROUND_COLOR(BACKGROUND_BLACK);}else{printf("%-16s",con);}MOVETO(y,length);printf("│\n");hight++;
}
void mainMenu()
{int i;int isSelect = 1;char ch1,ch2,ch3;char item[][MAIN_MENU_WIDTH-2] = {"1.进入通讯录","2.添加联系人","3.从文件导入","4.导出到文件","5.清空联系人","0.退出通讯录"};int itemNum = sizeof(item)/sizeof(item[0]);while(1){do{system("clear");hight = 1;printf("┌");for(i = 0; i < MAIN_MENU_WIDTH - 2; i++){printf("─");}printf("┐\n");hight++;printf("│");MOVETO(hight,MAIN_MENU_WIDTH/3);printf("通  讯  录");MOVETO(hight,MAIN_MENU_WIDTH);printf("│\n");hight++;delimiter(MAIN_MENU_WIDTH);putLine("",hight,0);for(i = 0; i < itemNum; i++){if(isSelect == i){putLine(item[i],hight,1);}else{putLine(item[i],hight,0);}putLine("",hight,0);}printf("└");for(i = 0; i < MAIN_MENU_WIDTH - 2; i++){printf("─");}printf("┘\n");ch1 = getch();if(ch1 == 27){ch2 = getch();if(ch2 == 91){ch3 = getch();if(ch3 == 65){if(isSelect > 0){isSelect--;}}if(ch3 == 66){if(isSelect < itemNum-1){isSelect++;}}}}if(ch1 == '1'){isSelect = 0;}if(ch1 == '2'){isSelect = 1;}if(ch1 == '3'){isSelect = 2;}if(ch1 == '4'){isSelect = 3;}if(ch1 == '5'){isSelect = 4;}if(ch1 == '0'){isSelect = 5;}}while(ch1 != 13);return;}
}
int getch(void)
{struct termios tm, tm_old;int fd = 0, ch;if (tcgetattr(fd, &tm) < 0) {//保存现在的终端设置return -1;}tm_old = tm;cfmakeraw(&tm);//更改终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理if (tcsetattr(fd, TCSANOW, &tm) < 0) {//设置上更改之后的设置return -1;}ch = getchar();if (tcsetattr(fd, TCSANOW, &tm_old) < 0) {//更改设置为最初的样子return -1;}return ch;
}

以上代码仅实现了主界面的显示以及方向键选择菜单,但是并没有实现任何功能,有待以后完善~~

Linux下C语言开发通讯录管理软件(一)相关推荐

  1. GCC编译器简明教程(Linux下C语言开发环境的搭建)

    GCC编译器简明教程(Linux下C语言开发环境的搭建) 市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境(例如GNOME.KDE.Unity等)和各种常用的必 ...

  2. 关于Linux下C语言开发基础的实验内容。

    Linux下C语言开发基础实验内容 目录 1.Linux下C语言开发流程 2.vi,vim编辑器的使用 3.Gcc编译器的使用 总体选项: 警告选项: 4.GDB 基本命令的使用 5.Make 工程管 ...

  3. Linux下C语言开发(信号signal处理机制)

    信号signal处理是Linux程序的一个特色,用信号处理来模拟操作系统的中断功能,对于系统程序员来说是最好的一个选择了.同样信号处理也是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概 ...

  4. c语言进程waitpid,Linux下C语言开发(进程控制编程——wait()、waitpid())

    wait()和wait()函数说明 wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或该进程接收到一个指定的信号为止.如果该父进程没有子进程或它的子进程已经结束,则 ...

  5. Linux下c语言实现通讯录,学生通讯录管理系统linux下C语言

    程序代码 #include #include #include #include #define LEN sizeof(struct student) struct student { char xh ...

  6. Windows及Linux下的虚拟主机Web管理软件

    Windows平台: Parallels.Zkeys(宏杰虚拟主机管理系统).WINIIS(慧林虚拟主机管理系统).HZHOST(华众虚拟主机管理系统).易方虚拟主机管理系统.蓝芒虚拟主机管理系统等. ...

  7. Linux下C语言编程

    第1章 Linux下C语言编程简介 本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Li ...

  8. 初识Linux下C语言编程

    本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了 ...

  9. 基于JavaSwing开发讯友桌面通讯录管理软件 课程设计 大作业源码 毕业设计

    基于JavaSwing开发讯友桌面通讯录管理软件:  (毕业设计/大作业) 开发环境: Windows操作系统 开发工具:MyEclipse+Jdk+SQLServer数据库 运行效果图: 基于Jav ...

  10. 仿OpenStack开发云计算管理软件”--熟悉开发环境

    他山之石,可以成云 --咆哮金刚猪的云烹饪之路 第一周(7月13日-7月19日):熟悉开发环境 实验内容: 云平台功能模块分析 云平台架构设计 Flask开发环境搭建 Flask可运行的代码框架 实验 ...

最新文章

  1. ORACLE穿透防火墙问题
  2. hdmi-cec_如何使用HDMI-CEC使用PlayStation 4或Pro自动打开电视
  3. 利用计算机绘制地质图的思路和方法,基于平面地质图的三维地质建模方法研究...
  4. acl 允许同网段访问_ENSP模拟交换环境中调用高级ACL限制不同网段之间互访
  5. 语音识别开放平台调研以及主要技术
  6. 如何强制在访问博客园博客的时候变成博客园分配的二级域名方式
  7. Android手机修改wifi图标,安卓手机怎么改wifi密码?
  8. 修改putty的缺省值设置
  9. 传奇3服务器配置文件,分享传奇三架设的全部详细攻略
  10. 7*24小时全球实时财经新闻直播摘要python抓取
  11. 【帧率倍频】基于FPGA的视频帧率倍频系统verilog开发实现
  12. chia 免费软件快速p图 支持官方最新协议
  13. JS 判断浏览器客户端类型(ipad,iphone,android)
  14. 这份程序员常用技术栈和工具清单,刷爆朋友圈……
  15. React 中使用 render props
  16. 软件质量测试:Jmeter察看结果树的响应数据中的中文显示乱码问题处理
  17. 22、python数据处理虚拟变量的转化
  18. C# 简单的操作其他程序
  19. ladp3 获取属性_Ldap3 库使用方法(三)
  20. 逆向分析HyperSnap 7 专业版完成注册

热门文章

  1. Nero刻录软件超级实用技巧大搜罗
  2. 山西省计算机二级考试试题,2011山西省计算机等级考试试题 二级C试题考资料
  3. rs232接口_RS232接口与RS485究竟有什么区别?
  4. eviews求相关系数
  5. Nopcommerce kendo UI Roxy Fileman控件的汉化
  6. 海量数据处理--大数据处理概论
  7. SQL常用脚本大全,建议收藏!
  8. 数学建模入门篇(0基础必看,全是自己的经验)
  9. 小米手机MIUI安装Google服务框架和Google Play的教程
  10. 计算机课堂有趣的游戏,有趣的课堂游戏作文范文5篇