一. 题目分析
对例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