使用c语言的EasyX库实现文件管理系统(对文本内内容操作)

该博客介绍了一个使用C语言和EasyX库来绘制电场随时间变化折线图的代码实现。代码包括数据处理(最大值、最小值、平均值和差值计算)和画图子程序,展示了如何从文本文件读取数据并进行可视化。虽然代码能完成坐标轴绘制,但因缺少实际数据,目前只能显示坐标轴。
摘要由CSDN通过智能技术生成

使用c语言的EasyX库实现文件管理系统

代码思路

1、利用两个文本文件,一个文本文件保存需要的数据,另一个保存需要处理的数据,对需要处理的文本内容进行最小值,最大值,平均值的求解。
2、把处理的数据存入数组,转化性质,用Easyx进行画图。
3、添加必要的提示文本,达到更好的人机交互

头文件的应用

#include <stdio.h>
#include <graphics.h> //EasyX头文件
#include <string.h>
#include <conio.h>//getch()函数头文件
#include <stdlib.h>//itoa()函数头文件

相关子文件的引用

void picture(int* c);//画图函数    
double Max(double shuj[], int len);
double Min(double shuj[], int len);
double DMin(double shuj[], int len);
double DMax(double shuj[], int len);
double Avg(double shuj[], int len);

画图子程序

void picture(int* c)   //画图程序
    {
        int dat[11] = { 40000,30000,20000,10000,0,-10000,-20000,-30000,-40000,-50000 };//Y轴
        int time[10] = { 0,12,13,14,15,16,17,18,19,20 };//X轴
        int i = 0,j;
        char str[10];

        
        initgraph(1250, 550, SHOWCONSOLE);
        
        setbkcolor(WHITE);
        cleardevice();

        /*************************x轴单位长度**********************/
        settextcolor(RGB(255, 55, 39));
        for (i = 1; i <= 9; i++)
        {
            itoa(time[i], str, 10);//将数字转化成字符串
            outtextxy(120 * i, 260, str);
        }
        /**************************y轴单位长度*********************/
        settextcolor(RGB(255, 55, 39));
        for (i = 0; i <= 10; i++)
        {
            itoa(dat[i], str, 10);//将数字转化成字符串
            outtextxy(10, 50 + 50 * i, str);
        }
        /*******************************x轴***********************/
        setlinecolor(RGB(170, 70, 10));
        line(60, 250, 1150, 250);
        line(1150, 250, 1130, 240);//x轴箭头
        line(1150, 250, 1130, 260);//x轴箭头
        settextcolor(RGB(78, 67, 197));
        outtextxy(1150, 250, "x / 时间");
        /******************************y轴********************/
        setlinecolor(RGB(57, 170, 180));
        line(60, 40, 60, 770);
        line(60, 40, 50, 60);//y轴箭头
        line(60, 40, 70, 60);//y轴箭头
        outtextxy(20, 20, "y / 数据");
        /***************************折线图************************/
        settextcolor(RGB(94, 196, 200));
        settextstyle(20, 0, "楷体");
        outtextxy(390, 10, "2008-7-25 12:00:00 - 2008-7-25 20:00:00 电场的变化");//标题
        setlinecolor(RGB(87, 190, 214));
        for (i = 1; i < 481; i++)
        {
             line(120 + 2 * i, c[i], 120 + 2 * (i + 1), c[i + 1]);
            //Easyx的坐标和广义坐标不同,好好学习呦
        }  


        getch();
        closegraph();
    }

画图程序使用Easyx插件进行编写,b站可学习

数据处理子程序

double Max(double shuj[], int len) //最大值程序
{
    double max = 0;
    int i;

    for (i = 0; i < len; i++)
    {
        if (max < shuj[i])
        {
            max = shuj[i];
        }

    }
    return max;
}

double Min(double shuj[], int len)
{
    double min = 0;
    int i;

    for (i = 0; i < len; i++)
    {
        if (min > shuj[i])
        {
            min = shuj[i];
        }

    }
    return min;
}

double Avg(double shuj[], int len)
{
    double sum = 0, avg = 0;
    int i;

    for (i = 0; i < len; i++)
    {
        sum = sum + shuj[i];
    }
    avg = sum / len;
    return avg;
}

double DMin(double shuj[], int len)
{
    double dmin = 0, Dshuj = 0;
    int i;

    for (i = 1; i <= len; i++)
    {
        Dshuj = shuj[i] - shuj[i - 1];

        if (dmin > Dshuj)
        {
            dmin = Dshuj;
        }
    }
    return dmin;
}

double DMax(double shuj[], int len)
{
    double dmax = 0, Dshuj = 0;
    int i;

    for (i = 1; i <= len; i++)
    {
        Dshuj = shuj[i] - shuj[i - 1];

        if (dmax < Dshuj)
        {
            dmax = Dshuj;
        }
    }
    return dmax;
}

代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <graphics.h> //EasyX头文件
#include <string.h>
#include <conio.h>//getch()函数头文件
#include <stdlib.h>//itoa()函数头文件

void picture(int* c);//函数声明    F:\CR1000_Tab60sec.dat
double Max(double shuj[], int len);
double Min(double shuj[], int len);
double DMin(double shuj[], int len);
double DMax(double shuj[], int len);
double Avg(double shuj[], int len);

int main(void)
{
    char txt[128] = {'\0'}, Date[30];//数据处理所需的数组
    char ch;
    int nn = 0, huan = 0, i = 0, j = 0, choicex = 0, choice = 0 ,choicez = 0,len, Cshuj;
    int c[500];//画图转化
    double shu, max = 0, min = 0, avg = 0, Sum = 0, dmax = 0, dmin = 0, Dshuj = 0;
    double Shuj[500];
    FILE* fp;
    FILE* date;
    FILE* Savedate;
    
    printf("\n--------------------------**欢迎使用文件处理系统**--------------------------\n");

    do /*输入文件路径,直到路径正确*/
    {
        printf("**请您输入文件路径: ");
        gets_s(txt);
        //判断文件是否打开失败
        if ((fp = fopen(txt, "rt")) == NULL)
        {
            puts("----输入的文件路径有误,重新输入----");
           

        }
    } while ((fp = fopen(txt, "rt")) == NULL);


    date = fopen("status.txt", "wt");//把要处理数据存到status.txt文本文件
    if (date == NULL) {
        printf("File open error!\n");
        return 0;
    }

    Savedate = fopen("Save.txt", "wt");//把要保存数据存到Savedate.txt文本文件
    if (Savedate == NULL) {
        printf("File open error!\n");
        return 0;
    }

    printf("打开文件成功\n\n");
    printf("----------------------**数据列表**--------------------\n\n");
    printf("              *时间数据*        *电场数据*  \n");
    /*********对原始数据进行处理,采集需要的时间和电场数据***********/

    while ((ch = fgetc(fp)) != EOF) /*对文件内每字符进行判断*/
    {

        if (ch == '\n') /*让系统跳过文件前面的头文件*/
        {
            nn++;
        }
        if (nn >= 4)
        {
            if (ch == ',')
            {
                huan++;
                if (huan == 1)
                {
                    fprintf(Savedate, ", ");
                    printf("     ");
                }
            }
            if (ch != ',' && ch != '"')
            {
                if (ch != '\n')
                {
                    if (huan == 0)
                    {
                        fprintf(Savedate,"%c", ch);
                        printf("%c", ch);

                    }
                    if (huan == 2)
                    {
                        fprintf(Savedate,"%c",ch);
                        fprintf(date, "%c", ch);
                        printf("%c", ch);
                    }
                }
                if (ch == '\n')
                {
                    fprintf(Savedate, "\n");
                    fprintf(date, "\n");
                    huan = 0;
                    printf("\n");
                    printf("         ");
                }
            }
        }
    }
    printf("\n\n---------------------- **数据读取完毕** --------------------\n");
    fclose(date); //操作结束后关闭所有文件
    fclose(Savedate);
    fclose(fp);


    /****************利用处理文本文件采集电场数据*************/
    date = fopen("status.txt", "rb");
    if (date == NULL) {
        printf("File open error!\n");
        return 0;
    }
    while (fgets(Date, 30, date) != NULL)
    {
        shu = atof(Date);//数据转化
        Shuj[j] = shu;
        j++;
    }
    len = j -1;
    Shuj[i] = '\0';
    fclose(date);
    printf("\n***********************************************\n\n");

    /****************数据处理(最大值,最小值,平均值)********************/
    max = Max(Shuj, len);
    min = Min(Shuj, len);
    avg = Avg(Shuj, len);
    /******************数据处理(差分最大值,差分最小值)*********************/
    dmax = DMax(Shuj, len);
    dmin = DMin(Shuj, len);
    /********************************数据输出********************************/
    do
    { 
        printf("\n----*是否对电场数据进行统计分析\n");
        printf("----“1”对电场数据的分析\n");
        printf("----“2”无需对电场数据进行统计分析\n");
        printf("输出:");
        scanf_s("%d", &choicex);
        if ((choicex != 1) && (choicex != 2))
        {
            printf("\n--**输入有误------请重新输入**--\n");
        }

    } while ((choicex!=1)&& (choicex != 2));
   
    if (choicex == 1)
    { 
         printf("\n***********************************************\n");
         printf("        **电场数据的最大值为: %.4f\n\n", max);
         printf("        **电场数据的最小值为: %.4f\n\n", min);
         printf("        **电场数据的平均值为: %.4f\n\n", avg);
         printf("        **电场数据的差分的最大值为: %.4f\n\n", dmax);
         printf("        **电场数据的差分的最小值为: %.4f\n", dmin);
         
    }
    if (choicex == 2)
    {
        printf("*-------------------------------------------------------*");
    }
   
    printf("\n***********************************************\n");

    ///*************************图像输出***********************/
    do
    { 
        printf("\n----请选择要输出的图像:\n");
        printf("----“1”输出电场数据\n");
        printf("----“2”输出差分后的电场数据\n");
        printf("输出:");
        scanf_s("%d",&choice);
        if ((choice != 1) && (choice != 2))
        {
            printf("\n--**输入有误------请重新输入**--\n");
        }

    } while ((choice != 1) && (choice != 2));
   
    for (i = 1; i <= len; i++)
    {
        if (choice == 1)
        {
            Cshuj = (int)(Shuj[i]);
           Cshuj = 250 - (Cshuj / 200);
          c[i] = Cshuj;
        }
        if (choice == 2)
        {
              Cshuj = (int)(Shuj[i] - Shuj[i - 1]);
              Cshuj = 250 - (Cshuj / 200);
              c[i] = Cshuj;
        }
    }//相关参数转化(Easyx)
     picture(c);
     /***********************************************************/
     do
     { 
         printf("\n----是否需要输出另一张图像\n");
        printf("----“1”确认输出另一张图像\n");
        printf("----“2”不需要输出另一张图像\n");
        printf("输出:");
        scanf_s("%d", &choicez);
        if ((choicez != 1) && (choicez != 2))
        {
            printf("\n--**输入有误------请重新输入**--\n");
        }

     } while ((choicez != 1) && (choicez != 2));
    
     for (i = 1; i <= len; i++)
     {

         if (choicez == 1 && choice == 1)//输出差分处理的图像
         {
             Cshuj = (int)(Shuj[i] - Shuj[i - 1]);
             Cshuj = 250 - (Cshuj / 200);
             c[i] = Cshuj;
         }
         if (choicez == 1 && choice == 2)//输出未处理的图像
         {
             Cshuj = (int)(Shuj[i]);
             Cshuj = 250 - (Cshuj / 200);
             c[i] = Cshuj;
         }

         if (choicez == 2)
         {
             break;
         }
     }
     if (choicez == 1)
     {
         picture(c);
     }
     printf("\n图像展示完毕\n");
     printf("\n------------------------*感谢您的使用*---------------------\n");
    return 0;
}
void picture(int* c)
    {
        int dat[11] = { 40000,30000,20000,10000,0,-10000,-20000,-30000,-40000,-50000 };//Y轴
        int time[10] = { 0,12,13,14,15,16,17,18,19,20 };//X轴
        int i = 0;
        char str[10];

        
        initgraph(1250, 550, SHOWCONSOLE);
        
        setbkcolor(WHITE);
        cleardevice();

        /*************************x轴单位长度**********************/
        settextcolor(RGB(255, 55, 39));
        for (i = 1; i <= 9; i++)
        {
            itoa(time[i], str, 10);//将数字转化成字符串
            outtextxy(120 * i, 260, str);
        }
        /**************************y轴单位长度*********************/
        settextcolor(RGB(255, 55, 39));
        for (i = 0; i <= 10; i++)
        {
            itoa(dat[i], str, 10);
            outtextxy(10, 50 + 50 * i, str);
        }
        /*******************************x轴***********************/
        setlinecolor(RGB(170, 70, 10));
        line(60, 250, 1150, 250);
        line(1150, 250, 1130, 240);//x轴箭头
        line(1150, 250, 1130, 260);//x轴箭头
        settextcolor(RGB(78, 67, 197));
        outtextxy(1150, 250, "x / 时间");
        /******************************y轴********************/
        setlinecolor(RGB(57, 170, 180));
        line(60, 40, 60, 770);
        line(60, 40, 50, 60);//y轴箭头
        line(60, 40, 70, 60);//y轴箭头
        outtextxy(20, 20, "y / 电场数据");
        /***************************折线图************************/
        settextcolor(RGB(94, 196, 200));
        settextstyle(20, 0, "楷体");
        outtextxy(390, 10, "2008-7-25 12:00:00 - 2008-7-25 20:00:00 电场的变化");//标题
        setlinecolor(RGB(87, 190, 214));
        for (i = 1; i < 481; i++)
        {
            line(120 + 2 * i, c[i], 120 + 2 * (i + 1), c[i + 1]);
            
        }   //画布坐标的正方向恰好与广义坐标系的正方向相反


        getch();
        closegraph();
    }
double Max(double shuj[], int len)
{
    double max = 0;
    int i;

    for (i = 0; i < len; i++)
    {
        if (max < shuj[i])
        {
            max = shuj[i];
        }

    }
    return max;
}

double Min(double shuj[], int len)
{
    double min = 0;
    int i;

    for (i = 0; i < len; i++)
    {
        if (min > shuj[i])
        {
            min = shuj[i];
        }

    }
    return min;
}

double Avg(double shuj[], int len)
{
    double sum = 0, avg = 0;
    int i;

    for (i = 0; i < len; i++)
    {
        sum = sum + shuj[i];
    }
    avg = sum / len;
    return avg;
}

double DMin(double shuj[], int len)
{
    double dmin = 0, Dshuj = 0;
    int i;

    for (i = 1; i <= len; i++)
    {
        Dshuj = shuj[i] - shuj[i - 1];

        if (dmin > Dshuj)
        {
            dmin = Dshuj;
        }
    }
    return dmin;
}

double DMax(double shuj[], int len)
{
    double dmax = 0, Dshuj = 0;
    int i;

    for (i = 1; i <= len; i++)
    {
        Dshuj = shuj[i] - shuj[i - 1];

        if (dmax < Dshuj)
        {
            dmax = Dshuj;
        }
    }
    return dmax;
}

原始数据文件

在这里插入图片描述
有很多数据,这里只是一部分

输出数据文件

在这里插入图片描述

Easyx画图展示

在这里插入图片描述
在这里插入图片描述

总结

本文提供的画图代码只能画出坐标轴,因为缺少数据
仅供参考
书山有路勤为径,学海无涯苦作舟

### 回答1: C语言EasyX企业人事管理系统是一款使用C语言EasyX图形开发的软件,主要用于企业人事管理,包括员工信息的增删改查、考勤管理、薪资管理等功能。通过EasyX图形的支持,用户可以在操作界面上方便地完成各种操作,提高了使用体验。该系统可以帮助企业方便地管理人事信息,提高管理效率。 ### 回答2: C语言EasyX企业人事管理系统是一种基于C语言EasyX图形开发的企业人事管理软件,它通过图形化界面和简单易用的功能帮助企业进行人事管理。 该系统主要包括以下几个模块:员工信息管理、薪资管理、考勤管理、招聘管理和统计报表。 在员工信息管理模块中,可以对员工的基本信息进行录入和管理,包括姓名、性别、年龄、职位等。管理员可以进行员工信息的查询、修改和删除操作,方便地进行员工档案管理。 薪资管理模块可以自动计算员工的薪资,根据员工的职位、工龄以及绩效等因素进行综合评定,生成工资表并打印出来。同时,管理员还可以进行薪资发放的记录和统计,方便查阅和核实。 考勤管理模块可以记录员工的考勤情况,包括迟到、早退、缺勤等情况,并自动生成相应的考勤统计报表。管理员可以随时查看员工的考勤记录,也可以对员工的考勤情况进行修改和补充。 招聘管理模块可以帮助企业进行招聘流程的管理,包括发布招聘信息、筛选简历、安排面试等工作。管理员可以在系统中录入招聘岗位和招聘需求,并对应聘者进行筛选和管理,提高招聘效率。 统计报表模块可以生成各类统计报表,包括人事统计、薪资统计、考勤统计等,管理员可以根据需要查询和导出相应的报表,为企业管理提供数据支持。 总之,C语言EasyX企业人事管理系统通过图形化界面和简单易用的功能,帮助企业实现人事管理的自动化和规范化,提高工作效率和准确性。 ### 回答3: EasyX企业人事管理系统是基于C语言开发的一款软件,旨在帮助企业更高效地管理人事方面的工作。下面将详细回答这个问题。 EasyX企业人事管理系统具有以下主要功能和特点: 1.员工信息管理:系统可以存储和管理企业所有员工的基本信息,包括姓名、年龄、性别、部门、职位、工资等。管理员可以根据需要进行员工信息的查询、修改和删除。 2.招聘管理:系统可以协助企业进行招聘工作,管理员可以发布招聘信息,并记录应聘者的基本信息和面试情况,方便后续的选拔和录用。 3.奖惩管理:系统可以记录员工的奖励和惩罚情况,包括员工表现优异的奖励和工作不当的处罚。管理员可以根据员工的绩效进行相应的奖惩,并能够生成相应的统计报表。 4.考勤管理:系统可以记录员工的考勤情况,包括上下班打卡记录、请假和加班情况等。管理员可以根据考勤记录进行管理和统计,确保员工的工作时间和出勤情况。 5.工资管理:系统可以计算和管理员工的工资,包括基本工资、绩效奖金和其他补贴等。管理员可以根据各项工资组成的规定进行相应的计算,同时能够生成工资条和工资报表。 6.权限管理:系统可以设置不同用户的权限,包括管理员和普通员工等。管理员拥有最高的权限,可以对系统进行设置和管理,普通员工只能进行自己相关信息的查询和修改。 总之,EasyX企业人事管理系统可以帮助企业更好地管理和处理人事方面的工作,提高工作效率和管理水平。这款软件基于C语言开发,具有良好的稳定性和可扩展性,并且操作简单,易于使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值