学生管理系统的修改

本文档分析并改进了一个学生信息管理系统,强调了文档注释、功能完善和数据结构优化。通过实现刷新和保存功能,利用结构体存储学生信息,并解决了因文件读取细节导致的问题。调试过程中,注意到fprintf()和fscanf()的使用要求,以及NS盒图绘制的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 题目分析

对例1的学生信息管理系统,要求完成以下基本任务:
1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。
2.将功能补充完全(基于文件处理,完成刷新和保存功能)。
3.将学生信息改为更好的数据组织,而非离散形式(结构体)。
提高要求:
可将程序中的不足(如数据验证)等根据自己的能力与理解完成。

分析:
1.代码中缺乏了文档注释,函数注释,语句注释。
2.刷新功能本质是及时更新,先判断文件有无添加的数据,如果没有的话将重新添入数据,有的话则读入成功。应用fscanf()
3.保存功能应用fprintf()
4.可将每一个学生的学号、姓名、年龄、性别 、3门课程成绩用结构体形式储存。

二. 关键算法构造

添加的功能:
1.readfile():刷新功能。从保存的txt文件里读取数据,若无数据将选择4选项添加数据,有数据则刷新成功。
2.save():保存功能。将数据保存至.txt.文件里。
修改部分:
修改了提示语,删减了多余的学号输入语句

流程图:
在这里插入图片描述

NS盒图:
在这里插入图片描述

三. 程序实现

#include<stdio.h>   /*I/O函数*/
#include<stdlib.h>  /*其它说明*/
#include<string.h>  /*字符串函数*/
#define LEN 15      /* 学号和姓名最大字符数,实际请更改*/
#define N 100    /* 最大学生人数,实际请更改*/

struct record
{
    char code[LEN+1]; /* 学号*/
    char name[LEN+1]; /* 姓名*/
    int age;          /* 年龄*/
    char sex;         /* 性别*/
    float score[3];   /* 3门课程成绩*/
}stu[N];        

int k=1,n=0, m=0;/*定义全局变量, n代表当前记录的学生总人数,m为新增加的学生人数*/    

/* 函数声明*/
void help();         /* 帮助界面*/
void readfile();    /* 刷新功能实际上为读入数据*/
void seek();        /* 查找信息*/
void modify();       /* 修改数据*/
void insert();       /* 插入数据*/
void del();          /* 删除数据*/
void display();       /* 显示信息*/
void save();          /* 保存信息*/
void menu();        /* 菜单界面*/


int main()          /* 主函数*/
{ 
    while(k)
    {
        menu();
    }
    system("pause");
    return 0;
} 
void help()      /* 帮助信息*/
{ 
    printf("\n0.欢迎使用系统帮助!\n");
    printf("\n1.初次进入系统后,请先选择增加学生信息;\n");
    printf("\n2.按照菜单提示键入数字代号;\n");
    printf("\n3.增加学生信息后,切记保存;\n");
    printf("\n4.谢谢您的使用!\n");
    system("pause");         /* 发出一个DOS命令,屏幕上输出"请按任意键继续"*/
} 
void readfile()
{
    char filename[LEN+1];             /* 文件名*/
    FILE *fp;                             /* 文件指针*/
    int i=0;
    printf("请输入欲存有学生信息的文件名(包括后缀):\n");    
    scanf("%s",filename);
    if((fp=fopen(filename,"r"))==NULL)         /* 以只读的方式打开指定文件*/
    {
        printf("打开文件%s错误",filename);
        printf("你需要先选择菜单4增加学生信息\n");
        system("pause");
        return;
    }
     /* 循环读入学生信息*/
    while(fscanf(fp,"%s%s%d%c%f%f%f",stu[i].code,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值