Source File,同时输入文件名,建立保存目录——点击确定,创建源文件成功。编写程序,再编译,链接,执行等。 4总体设计
数据录入 显示 排序 按学号、姓名、名次 主菜修改 按学号、姓名、名次 单 查询 按姓名、学号、名次 统计信息 课程的最高分、最低分、平均分 保存 读取 退出 5 系统流程图
6
开始 输出界面 学号 选择操作 姓名 选择1 输入数据 性别 五门成绩 选择2 查询 按姓名、学号、名次 选择3 修改 按学号、姓名、名次 选择4 排序 按学号、姓名、名次 选择5 统计信息 最高、低分、平均分 选择6 读取数据选择7 保存数据选择8 显示数据 选择8 退出系统 结束 7
6 数据结构设计
针对要处理的学生信息和数据格式的实际情况,本程序使用了结构体型数据、全局变量和宏定义,用结构体型数据存放学生的各种信息,并由学号从小到大的顺序把各结构体建立成链表;用全局变量保存对于每个同学都相同的信息等;用宏定义使程序更加简洁也使程序更容易更改 6.1 宏定义 如下:
#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/
#define numsubs 5 /*学科数目*/ 6.2 全局变量 如下:
extern int numstus; /*学生数目*/
extern student *pointer; /*指向结构体数组*/ extern int lens;
6.3结构体类型的具体层次结构 如下:
typedef struct message_student /*结构体定义*/ {
char number[6]; char name[20];
8
char sex[4];
float subject[numsubs]; float score; float average; int index; }student;
7 主要模块的算法说明
对于每个模块其功能的实现实际上就是对各相应函数的调用,每个函数都能够完成相对独立的一个任务,按一定的规则调用这些函数就能解决小型成绩管理系统内的问题。因此,程序设计是靠定义函数和调用函数来实现的。下面是对程序中各个函数的具体介绍: 7.1 int findrecord(student stud[])
数据查询函数:查找指定学号或姓名或名次学生的信息并将其信息输出;(1)判定numstus是否为0,若是则返回值-1并输出没有可被查找的记录;若不是则选择用何种方式查找并传递给字符数组str[0];(2)判断str[0]的值,如等于1,则将输入的学号传递给数组str,在调用strcmp和display函数找出并显示出来;如等于2,则将输入的姓名传递给数组str,在调用strcmp和display函数找出并显示出来;如等于3,则将输入的名次传递给整型变量num,在比较和调用display函数找出并显示出来;如超出范围则显示没有查找所要的信息并返回-1,否则返回整型变量i。 7.2 int openfile(student stu[])
9
文件打开函数:(1)判定numstus是否为0,如否则显示已经有记录存在是否保存,如选择Y,则调用writetotext函数,并将numstus置为0;(2)如是,则先判断文件是否为空,如是返回-1;如否,先获取文件名,再获得该文件名下的信息并显示文件读取成功,是否显示记录;(3)如选y,调用display函数显示记录,否则返回0. 7.3 void sort(student stud[])
数据排序函数:(1)首先比较numstus是否得0,如是,输出没有可供查询的记录,如否则选择排序的方式按学号、姓名、名次,并将输入的数字传递给字符数组str;(2)判段str[0],并调用sortname2函数。 7.4
void statistic(student stud[])
统计数据函数:(1)判定numstus是否为0,如是则输出没有可被查找的的记录;(2)如否,怎选择统计成绩的科目并传递给字符变量c1,并利用for循环语句算出最高分、最低分与平均分。 7.5
int writetotext(student stud[])
保存文件函数:经写入的文件名存入文件变量fp中并显示已成功存储和数据列表。 7.6
void amendrecord(student stud[])
修改信息函数:(1)判断numstus是否为0,如是,则显示没有
10