1、 C C 语言程序设计报告语言程序设计报告 课题:学生成绩管理课题:学生成绩管理 时间:时间:2010/7/152010/7/15 - 1 - 一、需求分析一、需求分析 任务任务要求:要求: 自学 C 语言中有关链表及外部文件的内容,设计出学生成绩管理学生成绩管理。 具 体要求如下: 1.主要功能: (1)能按学期、按班级完成对学生成绩的录入、修改 (2)能按班级统计学生的成绩,求学生的总分及平均分,并能 根据学生的平均成绩进行排序 (3)能查询学生成绩,不及格科目及学生名单 (4)能按班级输出学生的成绩单 系统功能需求分析: 1、定义一个结构体类型,成员包括学期、班级、各科成绩、建立 链表,
2、定义该结构体类型的指针,用于指向各结点; 2、分别建立具有添输入、修改、查询、总分及平均分、排序等功 能的子函数,完成相应功能,对程序实现模块化。 二、概要设计 系统总体设计框架: 对程序进行模块化,建立输入、修改、查询、查找和显示功能的 子函数,各子函数中运用链表存储数据。 系统功能模块图系统功能模块图: - 2 - 三、三、详细设计详细设计 主要功能模块的算法设计思路如下: 1、输入信息函数 (1)定义指向结构体变量的指针; (2)移动指针,找到插入结点; (3)在要插入的结点输入信息; (4)返回头指针。 2、修改信息 (1)定义指向结构体变量的指针; (2)用指针检验链表中是否有记录,
3、若没记录,出现报错,然后要求重新输入; (3)根据要修改的编号查找对应结点; (4)修改信息; (5)修改成功。 3、排序函数 (1)定义所要排序的班级和链表的头指针为形参; (2)调用排序函数,把班级和链表的头指针赋给形参; (3)在子函数中进行排序; (4)输出排序结果。 4、显示学生成绩信息(void Disp(Link l)) (1)选择想要查询的项目(学生各科成绩、不及格科目、班级成员) ; (2)用指针检验是否有记录; 输入学生信息 成绩管理 成绩查询 添 加 信 息 修 改 记 录 求 总 分 平 均 分 排 序 输 出 结 果 成 绩 查 询 不 及 格 科 目 学 生 名 单
4、 - 3 - (3)若无记录,输出提示信息,返回主函数; 若有记录,移动指针,依次输出记录; 5、查询班级成绩信息(void Find(Link l)) (1)选择所要查询的班级; (2)输入班级: (3)在链表中寻找相应结点; (4)输出结点信息。 以上各个函数的流程图如下: 主函数 定义程序所需变量 调用 CREAT 函数创建一个信息链表并返回指针 继续进行操作 1、修改信息 2、统计成绩并排序 3、查找信息 4、输出成绩 输 入 所 需 修 改 学 生 的 姓 名 输入班级 查询 分数 查询科 目 查询班 级 输入班级序号 调用add并赋值给P-sum 查找班内成员 调用 average
5、 函数 输入姓 名并查 找学生 输出不 及格学 生的姓 名及成 绩 输入班 级序号 并输出 班级成 员的名 字 逐个输出他们的各科成 绩 并赋值给 P-ave 输出排序前的学生成绩 调用 sort 进行排序 输出排序后的学生成绩 是否继续操作 - 4 - 子函数 排序:排序: f!=p-class p=p-next f=r-class f=s-next-class *学期* int class; *班级* char name20; *姓名* int score_1; *科目一* int score_2; *科目二* int score_3; *科目三* float ave; *平均分* int
6、 sum; *总分* struct student *next; ; int n; struct student *creat(void) *创建信息链表* struct student *head; struct student *p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN); printf(“Please input the student information:n“); printf(“Term Class Name Score_1 Score_2 Score_3n“); scanf(“%d%d%s%d%d%d“, head=NULL; while(p1-term!=0) n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct student *) malloc(LEN)