Linux下C语言开发通讯录管理软件(一)
一个能对个人信息进行管理的简易通讯录管理软件,能对联系人进行增删改查,以及向文件中写入保存和从文件读取联系人数据.
(一) 实现主菜单及其菜单项选择功能
(头文件说明:
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语言开发通讯录管理软件(一)相关推荐
- GCC编译器简明教程(Linux下C语言开发环境的搭建)
GCC编译器简明教程(Linux下C语言开发环境的搭建) 市面上常见的Linux都是发行版本,典型的Linux发行版包含了Linux内核.桌面环境(例如GNOME.KDE.Unity等)和各种常用的必 ...
- 关于Linux下C语言开发基础的实验内容。
Linux下C语言开发基础实验内容 目录 1.Linux下C语言开发流程 2.vi,vim编辑器的使用 3.Gcc编译器的使用 总体选项: 警告选项: 4.GDB 基本命令的使用 5.Make 工程管 ...
- Linux下C语言开发(信号signal处理机制)
信号signal处理是Linux程序的一个特色,用信号处理来模拟操作系统的中断功能,对于系统程序员来说是最好的一个选择了.同样信号处理也是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概 ...
- c语言进程waitpid,Linux下C语言开发(进程控制编程——wait()、waitpid())
wait()和wait()函数说明 wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或该进程接收到一个指定的信号为止.如果该父进程没有子进程或它的子进程已经结束,则 ...
- Linux下c语言实现通讯录,学生通讯录管理系统linux下C语言
程序代码 #include #include #include #include #define LEN sizeof(struct student) struct student { char xh ...
- Windows及Linux下的虚拟主机Web管理软件
Windows平台: Parallels.Zkeys(宏杰虚拟主机管理系统).WINIIS(慧林虚拟主机管理系统).HZHOST(华众虚拟主机管理系统).易方虚拟主机管理系统.蓝芒虚拟主机管理系统等. ...
- Linux下C语言编程
第1章 Linux下C语言编程简介 本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Li ...
- 初识Linux下C语言编程
本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了 ...
- 基于JavaSwing开发讯友桌面通讯录管理软件 课程设计 大作业源码 毕业设计
基于JavaSwing开发讯友桌面通讯录管理软件: (毕业设计/大作业) 开发环境: Windows操作系统 开发工具:MyEclipse+Jdk+SQLServer数据库 运行效果图: 基于Jav ...
- 仿OpenStack开发云计算管理软件”--熟悉开发环境
他山之石,可以成云 --咆哮金刚猪的云烹饪之路 第一周(7月13日-7月19日):熟悉开发环境 实验内容: 云平台功能模块分析 云平台架构设计 Flask开发环境搭建 Flask可运行的代码框架 实验 ...
最新文章
- ORACLE穿透防火墙问题
- hdmi-cec_如何使用HDMI-CEC使用PlayStation 4或Pro自动打开电视
- 利用计算机绘制地质图的思路和方法,基于平面地质图的三维地质建模方法研究...
- acl 允许同网段访问_ENSP模拟交换环境中调用高级ACL限制不同网段之间互访
- 语音识别开放平台调研以及主要技术
- 如何强制在访问博客园博客的时候变成博客园分配的二级域名方式
- Android手机修改wifi图标,安卓手机怎么改wifi密码?
- 修改putty的缺省值设置
- 传奇3服务器配置文件,分享传奇三架设的全部详细攻略
- 7*24小时全球实时财经新闻直播摘要python抓取
- 【帧率倍频】基于FPGA的视频帧率倍频系统verilog开发实现
- chia 免费软件快速p图 支持官方最新协议
- JS 判断浏览器客户端类型(ipad,iphone,android)
- 这份程序员常用技术栈和工具清单,刷爆朋友圈……
- React 中使用 render props
- 软件质量测试:Jmeter察看结果树的响应数据中的中文显示乱码问题处理
- 22、python数据处理虚拟变量的转化
- C# 简单的操作其他程序
- ladp3 获取属性_Ldap3 库使用方法(三)
- 逆向分析HyperSnap 7 专业版完成注册