C语言初学者如何做出美观的图形界面(附源码及完整文件)

C语言初学者如何做出美观的图形界面(附源码及完整文件)地方

大家好,又见面了,我是你们的朋友全栈君。

主要面向想做出图形界面的C语言初学者

C语言初学者开始都是在黑白控制台上开发一些小程序,实现一些小功能,因为基础的C语言可视化效果比较差,所展示的都是黑白的字符和数字,比较单调乏味。一些大学的计算机类专业学生,大一学习C语言,学习基础语法和算法,通过平台刷题提高自己编程能力,一般不专门学习图形化编程,期中或者期末可能会有开发一个小游戏或者小系统(如学生成绩管理系统、银行管理系统、日程管理系统等)的任务。这时如果在实现基本功能的情况下做出优美的图形界面,会比较出彩并且会有满满的成就感。

C语言图形化编程

一、环境准备

操作系统:windows 10
编译环境:VS 2017
图形库:EasyX_20190415(beta)

下载链接
VS 2017: 微软官网
EasyX图形库:EaxyX官网

下面介绍一下EasyX:
EasyX 是针对 C++ 的图形库,可以帮助 C语言或C++语言初学者快速上手图形和游戏编程,比如用编译环境和EasyX图形库可以轻松画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,或者导入一张图片,可以练习图形学的各种算法,等等。
如何安装:
需要先下载安装好编译环境VS2017,然后再下载安装EasyX图形库,安装时选择安装在Visual C++2017目录下即可。
安装截图

二、程序运行截图

欢迎界面
在这里插入图片描述
系统初始界面
在这里插入图片描述
学生端
在这里插入图片描述
教师端
在这里插入图片描述

三、部分源码展示

下面是代码的头文件、宏定义、函数声明部分。完整源码请在下方获取

 /************************************************************************ 程序名:日程管理系统 版本号:2.0 程序功能:1)设计学生端口和教师端口,学生端学生自我管理,教师端教师监督管理 2)注册、登录账号,修改密码 3)添加、修改、删除、显示日程 4)文件自动保存 5) 精美界面,界面友好,交互性强 6)系统会进行自动保存 7)登录后退出需要重新登录 ************************************************************************/
/*对库函数的定义*/
#include <graphics.h> // 引用图形库头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include <conio.h>
#include<tchar.h>
/*宏定义*/
#define NUMBER 100//定义可容纳(学生/教师)的用户数量 
#define MANAGELENGTH 30//定义事件长度(包含时间) 
#define STRLENGTH 30//定义用户名长度
#define NUMLENGTH 12//定义密码长度 
/*定义图片*/
IMAGE welcome;//欢迎界面
IMAGE welcome_button;//ENTER按钮
IMAGE startup;//初始界面
IMAGE stu1;//学生端初始
IMAGE stu1_return;
IMAGE stu1_exit;
IMAGE stu_register;//学生端:创建账户
IMAGE stu_logon;//学生端:学生登录
IMAGE stu_resetpassword;//学生端:修改密码
IMAGE stu_schedulemanagement1;//学生端:日程管理界面1
IMAGE stu_schedulemanagement2;//学生端:日程管理界面2
IMAGE stu_schedulemanagement2_return;
IMAGE stu_schedulemanagement2_exit;
IMAGE teacher1;//教师端初始
IMAGE teacher1_return;
IMAGE teacher1_exit;
IMAGE teacher_register;//教师端:创建账户
IMAGE teacher_logon;//教师端:教师登录
IMAGE teacher_resetpassword;//教师端:修改密码
IMAGE teacher_schedulemanagement1;//教师端:日程管理界面1
IMAGE teacher_schedulemanagement2;//教师端:日程管理界面2
IMAGE teacher_schedulemanagement2_return;
IMAGE teacher_schedulemanagement2_exit;
IMAGE createschedule;//学生端:创建日程
IMAGE resetschedule;//学生端:修改日程
IMAGE finishedcondition;//学生端:完成状态
IMAGE setstuschedule;//教师端:设定学生日程
IMAGE resetstuschedule;//教师端:修改学生日程
IMAGE checkfinishedcondition;//教师端:查看完成状态
IMAGE end;//结束界面
/*全局变量*/
int nStudentNum = 0;//注册的学生编号(从0开始)(同时也代表着注册人数) 
int nTeacherNum = 0;//注册的教师编号 (第一个注册的用户编号为0) 
int nStuFlag = 0;//定义判断学生是否登录的标志变量
int nTeacherFlag = 0;//定义判断教师是否登录的标志变量 
int studentnum;//定义登录的学生编号
int teachernum;//定义登录的教师编号
/*定义学生结构体数组*/
struct student
{ 

wchar_t szName[STRLENGTH];//定义学生用户名
wchar_t password1[NUMLENGTH];//定义学生账户密码
wchar_t password2[NUMLENGTH];//定义学生二次输入密码
int nSerialNum;//定义学生序号(从1开始) 
int nManagement = 0;//定义学生的日程事件数 
wchar_t Management1[10][MANAGELENGTH];//定义存储该学生设定的初始时间字符数组 设定一个学生最多设定10个事件 
wchar_t Management2[10][MANAGELENGTH];//定义存储该学生设定的截止时间字符数组
wchar_t Management3[10][MANAGELENGTH];//定义存储该学生设定的日程内容字符数组
wchar_t FinishStatus[10][MANAGELENGTH];//定义每个学生设定的日程的完成状态 
}stu[NUMBER];
/*定义教师的结构体数组*/
struct  teacher
{ 

wchar_t szName[STRLENGTH];//定义教师用户名
wchar_t password1[NUMLENGTH];//定义教师账户密码
wchar_t password2[NUMLENGTH];//定义教师二次输入密码 
int nSerialNum;//定义老师序号(从1开始) 
}teacher[NUMBER];
/*函数声明***********************************************/
/*欢迎界面函数*/
void Welcome(FILE *fp);
/*文件保存函数*/
void SaveFile(FILE *fp);
/*一级主菜单函数*/
void Select_MainMenu(FILE *fp);
/*二级菜单函数*/
//二级菜单学生端目录显示
void OutputStu_SecondMenu(FILE *fp);
//二级菜单教师端目录显示
void OutputTeacher_SecondMenu(FILE *fp);
//二级菜单:学生创建账户 
void Stu_Register(FILE *fp);
// 二级菜单:学生登录
void Stu_Logon();
//二级菜单:学生修改密码
void Stu_ResetPassword(FILE *fp);
//二级菜单:学生日程管理
void Stu_ScheduleManagement(FILE *fp);
//二级菜单:教师创建账户
void Teacher_Register(FILE *fp);
//二级菜单:教师登录
void Teacher_Logon();
//二级菜单:教师修改密码
void Teacher_ResetPassword(FILE *fp);
//二级菜单:教师对学生日程管理
void Teacher_ScheduleManagement(FILE *fp);
/*二级菜单结束*/
/*三级菜单*/
//三级菜单:新建日程 
void CreateSchedule(FILE *fp);
//三级菜单:修改日程
void ResetSchedule(FILE *fp);
//三级菜单:完成状态
void FinishedCondition(FILE *fp);
//三级菜单:设定学生日程
void SetStuSchedule(FILE *fp);
//三级菜单:修改学生日程
void ResetStuSchedule(FILE *fp);
//三级菜单:查看学生完成状态
void CheckFinishedCondition();
/*三级菜单结束*/
/*函数声明结束********************************************/

四、完整文件

程序中要多次用到图形库的函数,建议刚接触的初学者查看EasyX安装时附带的官方帮助文档,也可以参考我的源代码。但是考虑到帮助文档内容较少,对函数的用法介绍较少,EasyX图形库详细函数用法介绍文档和完整代码文件可以添加微信获取:A18792660219

注:如果有特别需要,可以微信私我获取ppt、开发文档、用户手册、演示视频等配套资料。

五、要点

1、创建项目:新建-项目-空项目-右键“源文件”-添加-新建项-C++文件
2、编码字符集:unicode字符集
在这里插入图片描述
3.将图片资源直接导入到所命名的文件夹中,注意不要将图片打包文件夹后再放入,要直接将图片导入对应文件夹。

4.解决方案配置有两种选择:debug和release,程序编译后会生成对应的文件,如debug文件夹,将图片资源导入该文件夹就可以直接运行文件夹内的可执行文件,否则无法运行,release同理。

5.信息存储用的C语言文件模块,相信可以解决大多数C语言初学者的难题。

六、最后的话

本文不谈高深的技术,只介绍了最基础的基于EasyX图形库的C语言图形化编程,比较简单适合初学者,但是学好了同样可以开发出非常棒的程序。当时刚接触C语言和图形界面时不知从何下手,后来发现EasyX这个简单好用的库,没有找到很多详细的文章和博客。自己看EaxyX帮助文档和一些源码学到了一些东西,最后写出了这个日程管理系统,于是决定将我学到的东西和写的程序分享给大家,没有多好,希望给大家一个参考,衷心的希望本文可以对大家有所帮助,欢迎大家留言呀。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144471.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • kubernetes 清除状态为 Evicted 的 pod[通俗易懂]

    kubernetes 清除状态为 Evicted 的 pod[通俗易懂]kubectlgetpods–all-namespaces|grepEvicted|awk'{print$2}’|xargskubectldeletepod

  • 汇编中的inc和dec

    汇编中的inc和dec

  • java工厂模式实例(设计模式)「建议收藏」

    java工厂模式实例(设计模式)「建议收藏」java工厂模式开篇声明,此理解为作者自身理解,不一定正确,如有错误请大佬们指正。工厂模式,在作者看来,从现实生活来说,就是一个工厂,里面有N个车间,每个车间会生产不同的产品,而租户只需要告诉这个工厂的老板我需要一个什么产品,老板会去找到对应的车间返回给租户使用。画个图理解:如果使用java语言来描述则是,对具有相同动作,不同动作执行过程的一类方法抽象出一个接口类,然后不同的实现类对接口类中的接口进行不同的实现,并且编写一个工厂类,根据传入获取不同的实现类实例返回给调用者

  • oracle sql 字符串拼接_mysql将字符串和数字拼接

    oracle sql 字符串拼接_mysql将字符串和数字拼接一、MySQL在Java中我们通常用加号”+”来实现字符串的拼接,MySQL中也可以使用”+”来实现,比如:先加入测试数据CREATETABLEtest(idINT,nameVARCHAR(10),scoreFLOAT);INSERTINTOtestVALUES(1,’zhang’,98);INSERTINTOtestVALUES(2,’li’,95);Demo1SELECT…

  • springloaded配置说明

    springloaded配置说明

  • 图像分割必备知识点 | Unet详解 理论+ 代码

    图像分割必备知识点 | Unet详解 理论+ 代码文章转自:微信公众号【机器学习炼丹术】。文章转载或者交流联系作者微信:cyx645016617Unet其实挺简单的,所以今天的文章并不会很长。喜欢的话可以参与文中的讨论、在文章末尾点赞、在看点一下呗。0概述语义分割(SemanticSegmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。上图为自动驾驶中的移动分割任务的分割结果,可以从一张图片中有效的识别

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号