雷子_w 2023-02-21 16:57 采纳率: 50%
浏览 46
已结题

vc中出现不能解决的问题2

是上一篇的延续 上一篇放出的是原先的代码

img



已经根据建议改动 以下是改动后的代码
改变内容是
1: fopen变为fopen_s
2:文件中斜杠换了方向

#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1000;
int n, num = 0;
void query();//查询函数//
void xiugai();//修改函数//
void output();//输出函数//
void input();//输入函数//
void count();//读取文件//
void tuichu();//退出函数//
void menu();//菜单函数//
void deletee();//删除函数//
void ave();//求全班平均值函数//

//学生结构体//
struct student
{
    char name[10]; //姓名
    int number[10]; //学号
    float chinese; //语文成绩 
    float math; //数学成绩 
    float english; // 英语成绩
    float ave;//成绩平均值
    float sum;
}  stu[1];

void count()
{
    FILE* fp;  //定义文件指针fp//
    fp = fopen_s(&fp,"C:/hi/students.doc", "at+");     //以“追加”方式打开students文本文件//
    if (fp == NULL)                        //判断文件是否为空//
        printf("Cannot open file!");
    struct student stu1;
    n = 0;         //初始化//
    while (1)
    {
        if (feof(fp))  //检测文件是否结束//
            break;
        fread(&stu1, sizeof(struct student), 1, fp);   //读取文件//
        n++;
    }
    n--;
    fclose(fp); //关闭文件//

}
void menu() // 菜单 //
{
        int i;
        system("cls");
        printf("\t\t欢迎进入学生信息管理系统\n");
        printf("\t\t================================\n");
        printf("\t\t*****     请择操作序号:    *****\n");
        printf("\t\t*       1 输入学生信息         *\n");
        printf("\t\t*       2 输出学生信息         *\n");
        printf("\t\t*       3 修改学生信息         *\n");
        printf("\t\t*       4 查询学生信息         *\n");
        printf("\t\t*       5 删除学生信息         *\n");
        printf("\t\t*      6 查看班级平均分        *\n");
        printf("\t\t*           0 退出             *\n");
        printf("\t\t================================\n");
        scanf_s("%d\n", &i);
        system("cls");
        count();
        switch (i)
        {
        case 0:tuichu(); break;  //退出系统//
        case 1:input(); break;    //输入学生信息//    
        case 2:output(); break;     //输出学生信息//
        case 3:xiugai(); output(); break;    //修改学生信息//
        case 4:query(); break;  //查询学生信息//
        case 5:deletee(); break;//删除学生信息//
        case 6:ave(); break;//班级平均分//
        default:
            printf("输入错误\n");     //错误纠正// 
        }
}
void input() //成绩输入//
{
    int i = 0, sum;
    char c;
    FILE* fp;
    count();
    printf("请输入学生的人数:\n");
    scanf_s("%d\n", &sum);
    fp = fopen_s(&fp, "C:/hi/students.doc", "at+");
    for (i = 0; i < sum; i++, n++)
    {
        printf("输入学生学号\n");
        scanf_s("%d\n", &stu[i].number);

        printf("输入学生姓名\n");
        scanf_s("%s\n", &stu[i].name); getchar();

        printf("输入学生语文成绩\n");
        scanf_s("%f\n", &stu[i].chinese);

        printf("输入学生数学成绩\n");
        scanf_s("%f\n", &stu[i].math);

        printf("输入学生英语成绩\n");
        scanf_s("%f\n", &stu[i].english);

        stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
        stu[i].ave = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
        fwrite(&stu[i], sizeof(struct student), 1, fp);
    }
    fclose(fp);
    printf("录入成绩成功!\n");
    system("cls");
}
void output() // 输出 //
{
    int i;
    FILE* fp;
    fp = fopen_s(&fp, "C:/hi/students.doc", "rt");    //读取打开students//
    system("cls");    //清屏//
    printf("请输入\n");
    printf("|*学号---姓名---大学语文----大学数学----大学英语----总成绩----平均分*| \n");
    for (i = 0; i < n; i++)
    {
        fread(&stu[i], sizeof(struct student), 1, fp);
        printf("%12d", stu[i].number);
        printf("%12s", stu[i].name);
        printf("%10.1f", stu[i].chinese);
        printf("%10.1f ", stu[i].math);
        printf("%10.1f ", stu[i].english);
        printf("%10.1f", stu[i].sum);
        printf("%10.1f ", stu[i].ave);
        printf("\n");
    }
    fclose(fp);      //关闭文件//
}
void xiugai()  //修改//
{
    int i, tp, num;
    FILE* fp;
    printf("请输入要修改学生的学号:");
    scanf_s("%d\n", &num);
    for (i = 0; i < n; i++)
    {
        if (n == *stu[i].number)
        {
            printf("要修改的学生信息为:\n");
            printf("学号\t姓名\t大学语文成绩\t大学数学成绩\t大学英语成绩\t总成绩\t平均分\n");
            printf("%12d", num);
            printf("%12s", stu[i].name);
            printf("%10.1f", stu[i].chinese);
            printf("%10.1f ", stu[i].math);
            printf("%10.1f", stu[i].sum);
            printf("%10.1f ", stu[i].ave);
            printf("\n");
            do {
                printf("请选择要修改的内容:\n");
                printf("1学号\n2姓名\n3大学语文成绩\n4大学数学成绩\n5大学英语成绩\n");
                scanf_s("%d", &tp);
                switch (tp)
                {
                case 1:
                    printf("请输入学号:\n");
                    scanf_s("%d", &stu[i].number);
                    break;
                case 2:
                    printf("请输入姓名:\n");
                    scanf_s("%s", &stu[i].name);
                    break;
                case 3:
                    printf("请输入大学语文成绩:\n");
                    scanf_s("%f", &stu[i].chinese);
                    stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
                    stu[i].ave = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
                    break;
                case 4:
                    printf("请输入大学数学成绩:\n");
                    scanf_s("%f", &stu[i].math);
                    stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
                    stu[i].ave = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
                    break;
                case 5:
                    printf("请输入大学英语成绩:\n");
                    scanf_s("%f", &stu[i].english);
                    stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
                    stu[i].ave = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
                    break;

                }
            } while (tp < 6);
        }
    }
    fp = fopen_s(&fp, "C:\hi\students.doc", "w+");   //以写方式打开students//
    for (i = 0; i < n; i++)
        fwrite(&stu[i], sizeof(struct student), 1, fp);
    fclose(fp);    //关闭文件//

}
void query()// 查找 //
{
    int i, n;
    FILE* fp;
    char c3;
    fp = fopen_s(&fp, "C:/hi/students.doc", "rt");    //读取打开students//
    system("cls");     //清屏//
    printf("请输入学生的学号:");
    scanf_s("%d", &n);
    for (i = 1;; i++)
    {
        if (n == *stu[i].number)
        {
            fread(&stu[i], sizeof(struct student), 1, fp);
            printf("该学生学号为%d\n", i);
            printf_s("该学生的大学语文成绩为:%10.1f\n", stu[i].chinese);
            printf_s("大学数学成绩为:%10.1f\n", stu[i].math);
            printf_s("大学英语成绩为:%10.1%f\n", stu[i].english);
            printf_s("平均分为:%10.1f\n", stu[i].ave);

        }
        printf("\n\n\t\t是否继续(Y/N):");
        scanf_s("%s", &c3);
        c3 = getchar();
        if (c3 == 'Y')
            fclose(fp);      //关闭文件//
    }
}

void deletee() //删除//
{
    int i, n;
    char c4;
    FILE* fp;
    fp = fopen_s(&fp, "C/hi/students.doc", "w+");
    printf("请输入你要删除学生的学号:\n");
    scanf_s("%d\n", &n);
    for (i = 0;; i++)
    {
        if (n == *stu[i].number)
        {
            printf("确认删除学号为%d学生的成绩?\n", n);
            printf("Y or N\n");
            c4 = getchar();
            if (c4 == 'Y')
            {
                for (i = 1;; i++)
                    stu[i] = stu[i + 1];

            }num--;
        }
        else printf("输入错误!学生不存在!\n");
    }
    fclose(fp);
    system("cls");     //清屏//
}
void ave()//全班平均分//
{
    int i, n, sum;
    float C = 0, M = 0, E = 0;//表示语文 数学 英语 的总分//
    printf("输入学生人数:\n");
    scanf_s("%d\n", &sum);
    FILE* fp;
    fp = fopen_s(&fp, "C:/hi/students.doc", "rt");    //读取打开students//
    system("cls");     //清屏//
    for (i = 0; i <= sum; i++)
    {
        C = stu[i].chinese + C;
        M = stu[i].math + M;
        E = stu[i].english + E;
    }
    printf("全班语文成绩平均值为:%10.1d\n", C / sum);
    printf("全班数学成绩平均值为:%10.1d\n", M / sum);
    printf("全班英语成绩平均值为:%10.1d\n", E / sum);
    fclose(fp);
    system("cls");     //清屏//
}
void tuichu() //退出//
{
    char c;
    system("cls");
    printf("\n\t 感谢使用");
    getchar();
    c = getchar();
}

​
  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-02-21 17:05
    关注

    main函数都没写啊,兄弟

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月1日
  • 已采纳回答 2月21日
  • 创建了问题 2月21日

悬赏问题

  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒