作业信息

这个作业属于哪个课程 <班级的链接>(如2022-2023-1-计算机基础与程序设计
这个作业要求在哪里 <作业要求的链接>(如2022-2023-1计算机基础与程序设计第十四周作业)
这个作业的目标 <>
作业正文 ... 本博客链接

学习目标
学习资源
教材
·阅读 「反作弊」:任何时候发现同学们有抄袭作业,抄袭代码的情况,即时课程总成绩清零
学习任务
·加入云班课,参考本周学习资源

自学教材

·《C语言程序设计》第13章并完成云班课测试
·参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学年 学号 《计算机基础与程序设计》第十四周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。本周作业还要完成下面任务:

教材学习内容总结

13.1二进制文件和文本文件
文本文件(也称ASCII码文件) 将数值型数据的每一位数字作为一个字符以其ASCII码的形式存储的 每个数字单独占用一个字节的存储空间
二进制文件 数值型数据以二进制形式存储的 把整个数字作为一个二进制数来存储,并非每位数字单独占用
字节流,把数据看成由字节构成的序列

13.2文件的打开和关闭
fopen函数


定义文件指针
FILE *fp;

fclose 函数

13.3按字符读写文件




13.4按格式读写文件

13.5按数据块读写文件

13.6本章扩充内容
13.6.1文件的随机读写
13.6.2标准输入/输出重定向

教材学习中的问题和解决过程

如何运用本章函数写代码,读入文件和记录显示等基本操作。
我后面通过完成实验学习编程,巩固本章内容的方法还不错.

代码调试中的问题和解决过程

/*1.学生成绩管理系统V2.0
学生成绩管理系统是一个非常实用的程序,如果能够把用户输入的数据存盘,下次运行时读出,就更有用了。
某班有最多不超过40人(具体人数由键盘输入)参加期末考试,考试科目为数学(MT)、英语(EN)和物理(PH)。利用结构体编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号、姓名和各科考试成绩;
(2)计算每个学生的总分和平均分;
(3)按每个学生的总分由低到高排出名次表;
(4)按姓名的字典顺序排出成绩表;
(5)按姓名查询学生排名及其考试成绩;
(6)将每个学生的记录信息写入文件,包括每个学生的学号、姓名,各科考试成绩,以及其总分与平均分;
(7)从文件中读出每个学生的记录信息并显示。
要求程序运行后先显示如下菜单,并提示用户输入选项:
1.Append record
2.Caculate total and average score of every student
3.Sort in ascending order by total score of every student
4.Sort in dictionary order by name
5.Search by name
6.Write to a file
7.Read from a file
0.Exit
Please enter your choice:
然后,根据用户输入的选项执行相应的操作。
*/
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 40
typedef struct student
{
    long studentID;
    char studentName[10];
    int score[3];
    float ave;
} STUDENT;
int menu();
void input(STUDENT stu[],int n,int m);
void calc(STUDENT stu[],int n,int m);
void sortascending(STUDENT stu[],int n);
void sortname(STUDENT stu[],int n);
int search(STUDENT stu[],int n);
void prints(STUDENT stu[],int i);
void writetofile(STUDENT stu[],int n);
int readfrom(STUDENT stu[]);
void printScore(STUDENT stu[],int n,int m);
int main()
{
    int i,j;
    char select;
    STUDENT stu[N];
    int n;
    printf("How many students?\n");
    scanf("%d",&n);
    while(1)
    {
        select=menu();
        switch(select)
        {
            case 1:
                input(stu,n,3);
                break;
            case 2:
                calc(stu,n,3);
                printScore(stu,n,3);
                break;
            case 3:
                sortascending(stu,n);
                printScore(stu,n,3);
                break;
            case 4:
                sortname(stu,n);
                printScore(stu,n,3);
                break;
            case 5:
                calc(stu,n,3);
                i=search(stu,n);
                prints(stu,i);
                break;
            case 6:
                writetofile(stu,n);
                break;
            case 7:
                n=readfrom(stu);
                printScore(stu,n,3);
                break;
            case 0:
                printf("End");
                exit(0);
            default:
                printf("Error!");

        }
    }

}
int menu()
{
    int select;
    printf("\n1.Append record\n");
    printf("2.Caculate total and average score of every student\n");
    printf("3.Sort in ascending order by total score of every student\n");
    printf("4.Sort in dictionary order by name\n");
    printf("5.Search by name\n");
    printf("6.Write to a file\n");
    printf("7.Read from a file\n");
    printf("0.Exit\n");
    printf("Please Input your choice:\n");
    scanf("%d",&select);
    return select;
}
void input(STUDENT stu[],int n,int m)
{
    int a,b;
    for(a=0; a<n; a++)
    {
        printf("Input record %d:\n",a+1);
        scanf("%ld",&stu[a].studentID);
        scanf("%s",&stu[a].studentName);
        for(b=0; b<m; b++)
        {
            scanf("%d",&stu[a].score[b]);
        }
    }
}
void calc(STUDENT stu[],int n,int m)
{
    int i,j,sum;
    for(i=0;i<n;i++)
    {
        sum=0;
        for(j=0;j<m;j++)
        {
            sum+=stu[i].score[j];
        }
        stu[i].ave=(float)sum/m;
    }

}
void sortascending(STUDENT stu[],int n)
{
    int i,j,k,z;
    long x;
    float m,y;
    char temp[10];
    STUDENT stu1;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(stu[i].ave>stu[j].ave)//交换至当i<j时,sum[i]<sum[j]
            {
                strcpy(temp,stu[i].studentName);
                strcpy(stu[i].studentName,stu[j].studentName);
                strcpy(stu[j].studentName,temp);

                x=stu[i].studentID;
                stu[i].studentID=stu[j].studentID;
                stu[j].studentID=x;

                m=stu[i].ave;
                stu[i].ave=stu[j].ave;
                stu[j].ave=m;
                for(k=0;k<3;k++)
                {
                    y=stu[i].score[k];
                    stu[i].score[k]=stu[j].score[k];
                    stu[j].score[k]=y;
                }
            }
        }
    }

}
void sortname(STUDENT stu[],int n)
{
    int i,j,k;
    long x;
    float y;
    float m;
    char temp[10];
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(strcmp(stu[j].studentName,stu[i].studentName)<0)
            {
                strcpy(temp,stu[i].studentName);
                strcpy(stu[i].studentName,stu[j].studentName);
                strcpy(stu[j].studentName,temp);

                x=stu[i].studentID;
                stu[i].studentID=stu[j].studentID;
                stu[j].studentID=x;

                for(k=0;k<3;k++)
                {
                    y=stu[i].score[k];
                    stu[i].score[k]=stu[j].score[k];
                    stu[j].score[k]=y;
                }
                m=stu[i].ave;
                stu[i].ave=stu[j].ave;
                stu[j].ave=m;
            }
        }
    }

}
int search(STUDENT stu[],int n)
{
    int i;
    char x[10];
    scanf("%s",&x);
    for(i=0;i<n;i++)
    {
        if(stu[i].studentName==x) return i;
    }
}

void prints(STUDENT stu[],int i)
{
    int j;
    printf("%d\t%10ld",i,stu[i-1].studentID);
    for(j=0;j<3;j++)
    {
        printf("%4d",stu[i-1].score[j]);
    }
    float x=3*stu[i-1].ave;
    printf("%6.1f\t%6.1f\n",x,stu[i-1].ave);
}

void writetofile(STUDENT stu[],int n)
{
    FILE *fp;
    if((fp=fopen("score.txt","w"))==NULL)
    {
        printf("Failure to open score.txt!\n");
        exit(0);
    }
    fwrite(stu,sizeof(STUDENT),n,fp);
    fclose(fp);
}
int readfrom(STUDENT stu[])
{
    FILE *fp;
    int i;
    if((fp=fopen("score.txt","r"))==NULL)
    {
        printf("Failure to open score.txt!\n");
        exit(0);
    }
    for(i=0;!feof(fp);i++)
    {
        fread(&stu[i],sizeof(STUDENT),1,fp);
    }
    fclose(fp);
    printf("Total students is %d.\n",i-1);
    return i-1;
}
void printScore(STUDENT stu[],int n,int m)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        printf("%d%10ld%8s",m-n,stu[i].studentID,
               stu[i].studentName);
        for(j=0;j<m;j++)
        {
            printf("%4d",stu[i].score[j]);
        }
        printf("%6.1f\t%6.1f\n",3*stu[i].ave,stu[i].ave);
    }

}
```## 学习进度条

|            | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| --------   | :----------------:|:----------------:|:---------------:  |:-----:|
| 目标        | 5000行            |   30篇           | 400小时            |       |
| 第三周      | 400/3300          |  2/28           | 26/271           |  鼓足干劲加油干!     |
| 第四周      | 250/3550          |  2/30            | 24/295            |       |
本周额外作业2022-2023-1学期 20221417 《计算机基础与程序设计》实验七-缓冲区溢出https://www.cnblogs.com/20031004wzy/p/16951029.html
posted on 2022-12-04 21:02  20221417wzy  阅读(36)  评论(0编辑  收藏  举报