c语言课程设计报告书--学生成绩管理
- 格式:doc
- 大小:415.00 KB
- 文档页数:15
C 语言程序设计报告
课题:学生成绩管理
时间:
一、需求分析
任务要求:
自学C语言中有关链表及外部文件的内容,设计出学生成绩管理。具体要求如下:
1.主要功能:
(1)能按学期、按班级完成对学生成绩的录入、修改
(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序
(3)能查询学生成绩,不及格科目及学生名单
(4)能按班级输出学生的成绩单
系统功能需求分析:
1、定义一个结构体类型,成员包括学期、班级、各科成绩、建立链表,定义该结构体类型的指针,用于指向各结点;
2、分别建立具有添输入、修改、查询、总分及平均分、排序等功能的子函数,完成相应功能,对程序实现模块化。
二、概要设计
系统总体设计框架:
对程序进行模块化,建立输入、修改、查询、查找和显示功能的子函数,各子函数中运用链表存储数据。
系统功能模块图:
三、详细设计
主要功能模块的算法设计思路如下:
1、输入信息函数
(1)定义指向结构体变量的指针; (2)移动指针,找到插入结点; (3)在要插入的结点输入信息; (4)返回头指针。 2、修改信息
(1)定义指向结构体变量的指针;
(2)用指针检验链表中是否有记录,若没记录,出现报错,然后要求重新输入; (3)根据要修改的编号查找对应结点; (4)修改信息;
(5)修改成功。
3、排序函数
(1)定义所要排序的班级和链表的头指针为形参;
(2)调用排序函数,把班级和链表的头指针赋给形参;
(3)在子函数中进行排序;
(4)输出排序结果。
4、显示学生成绩信息(void Disp(Link l))
(1)选择想要查询的项目(学生各科成绩、不及格科目、班级成员);(2)用指针检验是否有记录;
(3)若无记录,输出提示信息,返回主函数;
若有记录,移动指针,依次输出记录;
5、查询班级成绩信息(void Find(Link l))
(1)选择所要查询的班级;
(2)输入班级:
(3)在链表中寻找相应结点;
(4)输出结点信息。
以上各个函数的流程图如下:
子函数排序:
求和:
求平均数:
四、主要源程序代码
#include
#include
#include
#define NULL 0
#define LEN sizeof (struct student)
#define PRINT printf("======================main menu=======================\n")
#define PRIN printf("Please chose the number:\n")
#define PRI printf("Sorry,the number you chose is error,please chose again\n")
struct student \*定义一个结构体*\
{
int term; \*学期*\
int class; \*班级*\
char name[20]; \*姓名*\
int score_1; \*科目一*\
int score_2; \*科目二*\
int score_3; \*科目三*\
float ave; \*平均分*\
int 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_3\n");
scanf("%d%d%s%d%d%d",&p1->term,&p1->class,p1->name,&p1->score_1,&p1->score_2,&p1-> score_3);
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);
scanf("%d%d%s%d%d%d",&p1->term,&p1->class,p1->name,&p1->score_1,&p1->score_2,&p1-> score_3);
}
p2->next=NULL;
return(head);
}
void sort(struct student *p,int f) \*排序(形参为链表的头指针和想要排序的班级)*\ {
int a,b,c,e;
float d;
char z[20];
struct student *r,*s;
while(f!=p->class) \*判断是否是想要排序的班级*\
p=p->next;
for(r=p;f==p->class&&r;r=r->next)
for(s=p;s->next&&f==s->next->class;s=s->next)