鱼C论坛

 找回密码
 立即注册
查看: 920|回复: 1

求大佬调试一下

[复制链接]
发表于 2021-12-29 21:45:23 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>
void DisplayMainMenu();//菜单
void DataInput();//输入数据
void DataQuery();//数据查询
void DataDelete();//数据删除
void DataSort();//数据排序
void QueryById(int );//学号查询
void QueryByRoom(int );//宿舍查询
void QueryMark(int );//成绩查询
void sort1();//综合成绩排序
void sort2();//实际学分排序
void markput();//输出
typedef struct {  
        int Id;        
        char name[10];
        char sex[6];   
        int room;     
        int tel;      
} StudentInfo;   
typedef struct {
        int Id;
        char courseNo[10];  
        char courseName[20];
        float a;
        float b;
        float c;  
        float d;
        float e;
        float f;  
} MarkInfo;
StudentInfo si[30];   
MarkInfo mi[150];   //定义的两个结构体

源代码
#include<stdio.h>
#include<stdlib.h>
typedef struct {  
        int Id;        
        char name[10];
        char sex[6];   
        int room;     
        int tel;      
} StudentInfo;   
typedef struct {
        int Id;
        char courseNo[10];  
        char courseName[20];
        float a;
        float b;
        float c;  
        float d;
        float e;
        float f;  
} MarkInfo;
StudentInfo si[30];   
MarkInfo mi[150];     
int  sp=0;         
int  mp=0;         
void ReadFile();
void DisplayMainMenu();
void DataInput();
void DataQuery();
void DataDelete();
void DataSort();
void QueryById(int );
void QueryByRoom(int );
void QueryMark(int );
void sort1();
void sort2();
void markput();
void main()
{
        int x;
        ReadFile();
        while (1)
        {
                DisplayMainMenu();
                scanf  ("%d",&x);
                switch (x)
                {
                case 1 : DataInput(); break;
                case 2 : DataQuery(); break; //搜索
                case 3 : DataDelete(); break;
                case 4 : DataSort(); break;
                case 5 : exit(0);
                }
        }
}
void ReadFile( )
{
        FILE *fp;//声明fp是指针,用来指向FILE类型的对象
        if((fp = fopen("C:\\Users\\lenovo\\Desktop\\A.txt","r"))==NULL)printf("cant open the file\n");
        while (!feof(fp))//当条件为不是文件尾时均执行后续代码
        {
                fscanf(fp,"%d%s%s%d%d", &si[sp].Id,si[sp].name,&si[sp].sex,&si[sp].room,&si[sp].tel);
                sp++;//fscanf功 能:从一个流中执行格式化输入
        }
        fclose (fp);
        fp = fopen("C:\\Users\\lenovo\\Desktop\\B.txt","r");//r 以可读写方式打开文件,该文件必须存在
        while (!feof(fp))
        {        fscanf(fp,"%d%s%s%f%f%f%f",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);
                if (mi[mp].c == -1)
                        mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;
                else
                        mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;
                if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;//计算学分
                else if ( mi [mp].e >= 80. )
                        mi[mp].f = mi[mp].a *0.8;
                else if ( mi[mp].e >= 70. )
                        mi[mp].f = mi[mp].a *0.75;
                else if ( mi[mp].e >= 60. )
                        mi[mp].f = mi[mp].a *0.6;
                else mi[mp].f = 0;
                mp++;
        }
        fclose(fp);
}
void DisplayMainMenu()
{
        printf ("\n 1) 数据录入 \n 2) 数据查询 \n 3) 数据删除 \n 4) 数据排序 \n 5) 程序结束 \n ");
}
void DataInput()
{
        FILE *fp;
        int i;
        printf ("学生的学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩\n");
        while(1)
{scanf("%d%s%s%f%f%f%f",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);
        if(mi[mp].Id==-1)break;
        if (mi[mp].c == -1)
                mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;
        else
                mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;
        if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;
        else if ( mi [mp].e >= 80. )
                mi[mp].f = mi[mp].a *0.8;
        else if ( mi[mp].e >= 70. )
                mi[mp].f = mi[mp].a *0.75;
        else if ( mi[mp].e >= 60. )
                mi[mp].f = mi[mp].a *0.6;
        else mi[mp].f = 0;
        mp++;}
        fp = fopen("C:\\Users\\lenovo\\Desktop\\B.txt","r+");
        for(i=0;i<mp;i++)        fprintf(fp,"%d%s%s%f%f%f%f",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[mp].b,&mi[i].c, &mi[i].d);
        fclose(fp);
}
void DataQuery()
{
        int x,y,z;
        printf( "\n 1) 学生基本情况查询\n 2) 成绩查询\n");
        scanf("%d",&x);
        if (x == 1) // 查询学生信息
        {
                printf ("1) 按学号查询 2) 按宿舍查询\n");
                scanf("%d",&y);
                if  (y == 1 )  
                {
                        printf ( " 输入学号\n");
                        scanf ("%d",&z);
                        QueryById(z);
                }
                if  (y == 2)
                {  
                        printf ( " 输入宿舍号\n");
                        scanf ("%d",&z);
                        QueryByRoom(z);
                }
        }
        if   ( x ==2)  // 查询成绩信息
        {
                printf ( " 输入学号\n");
                scanf ("%d",&y);
                QueryMark(y);
        }
}
void DataDelete()
{
        FILE *fp;
        int x;
        int i=0;
        int k,d;
        printf( "输入学号\n");
        scanf( "%d",&x);
        while( si[i].Id != x) i++;
        if (i<sp-1)
        {
                for ( k=i; k<sp-1; k++)
                {
                        si[k] = si[k+1];   
                }
        }
        if ( i<sp) sp--;
        d = 0;  
        for (k=0;k<mp;k++)
        {
                if ( mi[k].Id == x ) d++;
                else mi[k-d] = mi[k];
        }
        mp = mp - d;
        fp = fopen("C:\\Users\\lenovo\\Desktop\\B.txt","r+");//r+以读写方式打开文件
        for(i=0;i<mp;i++)        fprintf(fp,"%d%s%s%f%f%f%f",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[i].b,&mi[i].c, &mi[i].d);
}

void QueryById(int x)
{
        int i;
        for (i=0;i<sp;i++)
        {
                if ( si[i].Id == x )
                {
                        printf ("\n 学号 姓名 性别 宿舍号码 电话号码\n");
                        printf (" %d %s %s %d %d\n",si[i].Id,si[i].name,si[i].sex,si[i].room,si[i].tel);
                }
        }
       
}
void QueryByRoom(int x)
{
    int i;
        for (i=0;i<sp;i++)
        {
                if ( si[i].room == x )
                {
                        printf ("\n 学号 姓名 性别 宿舍号码 电话号码\n");
                        printf (" %d %s %s %d %d\n",si[i].Id,si[i].name,si[i].sex,si[i].room,si[i].tel);
                }
        }
}
void QueryMark(int x)
{
    int i=0;
    while(si[i].Id!=x)
    {
                i++;
    }
    printf("学号:  %d  姓名:  %s\n",si[i].Id,si[i].name);
        for (i=0;i<sp;i++)
        {
                if ( si[i].Id == x )
                {
                        printf ("课程编号: %s  课程名称: %s  综合成绩: %f  实得学分: %f\n",mi[i].courseNo,mi[i].courseName,mi[i].e,mi[i].f);
                }
        }
}
void DataSort()
{
        int x;
        printf (" 1) 综合成绩排序\n 2} 实际学分排序\n");
        scanf("%d",&x);
        if ( x == 1 ) sort1();
        if ( x == 2 ) sort2();
}
void sort1()
{
        int i,j;
        MarkInfo t;
        for (i=mp-1;i>=1;i--)
        {
                for (j=0;j<i;j++)
                {
                        if (mi[j].e>mi[j+1].e)   
                        {
                                t=mi[j];
                                mi[j] = mi[j+1];
                                mi[j+1] = t;
                        }
                }
        }
        markput();
}
void sort2()
{
    int i,j;
        MarkInfo t;
        for (i=mp-1;i>=1;i--)
        {
                for (j=0;j<i;j++)
                {
                        if (mi[j].f>mi[j+1].f)   
                        {
                                t=mi[j];
                                mi[j] = mi[j+1];
                                mi[j+1] = t;
                        }
                }
        }
        markput();
}
void markput()
{
        int i;
        for( i=0;i<mp;i++)
        {
                printf("\n 学号  %d  课程编号  %s  课程名称  %s  学分  %f  平时成绩  %f  实验成绩  %f  卷面成绩  %f  综合成绩  %f  实得学分  %f\n",mi[i].Id,mi[i].courseNo,mi[i].courseName,mi[i].a,mi[i].b,mi[i].c,mi[i].d,mi[i].e,mi[i].f);
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-2 23:09:37 | 显示全部楼层
看了看应该是文件打开的问题,这个代码是要一个A.txt,文件和一个B.txt文件
你可以将这两文件和你的代码放到同一文件夹下,将打开文件的代码全改成
  1. fopen("./A.txt","r"))
复制代码
  1. fopen("./B.txt","r"))
复制代码

应该就没问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 23:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表