从学生课程安排txt文档中读取内容并计算相关学分情况

#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <errno.h>

#define PATH "D:\\vs-code\\my-code\\course.txt"
#define LINE 200

struct Student
{
    int    coures_id[1024];//课程号
    char coures_name[60];//课程名称
    char credit[10];//学分
    char grade[4];//修读年级
    char term[2];//学期
    char coures_pro[20];//课程性质
    char coures_englishname[300];
    char isread[50];//是否修读
}; 
static int howcount=0;
static int weather=0;
static char head[1024];

int print_first_line( FILE *file);
int get_data(FILE *file,struct Student student[], int* count);
void printdate(struct Student student_data[]);
void print_course(struct Student student[]);




int main(int argc,char *argv[])
{
    //防止出现汉字乱码化
    SetConsoleOutputCP(CP_UTF8);
    
    
    FILE            *file;
    int             count = 0;
    int             islook= 0;
    char             head[1024];

   
    struct Student student_data[LINE];

    printf("录入数据时否查看录入时的情况:[1=yes][0=no]\n");
    scanf("%d",&weather);
    if((file = fopen(PATH,"r"))==0)//打开文件
    {
        printf("open the data file error:%s\n",strerror(errno));
        return -1;
    }
 
   //打印第一行,列出相关消息
   if((print_first_line(file))<0)
   {
        printf("print_firstline error:%s\n",strerror(errno));
        return -2;
   }

    //将文档中的内容存储到结构体数组中
    while(1)
    {
      if (( get_data(file,student_data,&count))<0)
      {
            printf("get_data opened error:%s\n",strerror(errno));
           return -3;
       }
     
       if(count==1)//判断文档中内容是否结束
       {
          break;
       }
    }
     fclose(file);//录入结束,关闭文件
    printf("是否查看录入后的情况:[1=yes][0=no]\n");
    scanf("%d",&islook);
    if(1==islook)
    {
         print_course(student_data);
    }
   

    printf("这个文档有 %d 个课程\n",howcount);
 
    printf("这是该文档的学习进度状况\n");
    printdate(student_data);//打印学分情况表格



    return 0;
}


//读取并且保存第一行相关文字
int print_first_line(FILE *file)
{
   
    fgets(head,sizeof(head),file);
 

    return 0;
}
//获取内容
int get_data(FILE *file,struct Student student[], int *count)
{
    static  int i=0;
    char line[1024];
    fscanf(file,"%s",student[i].coures_id);//学号

    fscanf(file,"%s",student[i].coures_name);//名字

    fscanf(file,"%s",student[i].credit);//学分

    fscanf(file,"%s",student[i].grade);//修读年级

    fscanf(file,"%s",student[i].term);//学期
 
    fscanf(file,"%s",student[i].coures_pro);//课程性质

    fscanf(file,"%s",student[i].isread);//是否修读
  
    fgets(line,sizeof(line),file);
    if(weather == 1)
    {
        printf("%s\n",student[i].coures_id);
        printf("%s\n",student[i].coures_name);
        printf("%s\n",student[i].credit);
        printf("%s\n",student[i].grade);
        printf("%s\n",student[i].term);
        printf("%s\n",student[i].coures_pro);
        printf("%s\n",student[i].isread);
    }
    if(fgets(student[i].coures_englishname,sizeof(student[i].coures_englishname),file)==NULL)//英语名字
    {

        *count = 1;
    }
 
    i ++;
    howcount++;
   
    return 0;
} 
//打印学分情况表格
void printdate(struct Student student_data[])

{
    double          sum=0,sum2=0,sum3=0;
    int             num=0;
    int             ati=0;
    double          atf=0,atf2=0,atf3=0;
   for(num=0;num<=howcount;num++)
    {

        if((ati=atoi(student_data[num].isread))==1)
        {
            atf=atof(student_data[num].credit);
            sum+=atf;       
        }
        if((ati=atoi(student_data[num].isread))==0)
        {
        atf2=atof(student_data[num].credit);
        sum2 +=atf2;
        }

        atf3=atof(student_data[num].credit);
        sum3 +=atf3;
    }


    printf("——————————————————————————————————————————————————\n");  
    printf("|     情况                 |         学分        |\n");
    printf("——————————————————————————————————————————————————\n");
    printf("|     全部学分             |      %.2lf         |\n",sum3);
    printf("——————————————————————————————————————————————————\n");  
    printf("|     已修学分             |      %.2lf          |\n",sum);
    printf("——————————————————————————————————————————————————\n");
    printf("|     未修学分             |      %.2lf         |\n",sum2);
    printf("——————————————————————————————————————————————————\n");   
}

//打印课程信息
void print_course(struct Student student[])
{   
    printf("%s",head);
    for(int i=0;i<howcount;i++)
    {
        printf("%s      %s           %s            %s             %s             %s             %s             \n",student[i].coures_id,student[i].coures_name,student[i].credit,student[i].grade,student[i].term,student[i].coures_pro,student[i].coures_englishname);
    }
}

通过一些简单的函数将txt文件中的数据读取并且存储到结构体数组中去,并计算出学分情况统计图,相当于复习c语言基础知识。当是也有多处不足,望各位海涵。欢迎关注,交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值