Home
>
文件管理的文档有用吗
>
成绩管理系统文档
成绩管理系统文档

time:2020-08-01 13:20:03

author:重庆佰鼎科技有限公司

【Font size: big medium smail

本文由重庆佰鼎科技有限公司提供,重点介绍了成绩管理系统文档相关内容。重庆佰鼎科技有限公司专业提供文件管理的文档有用吗,文档管理模版,文档管理课件等多项产品服务。作为一家高度专业性的公司,以我们丰富的经验,专业的人员给您提供满意服务。

成绩管理系统文档 C语言课程设计报告

源码下载方式

关注微信公众号 跨时代的jay

回复 学生成绩管理系统

为大家提供一些帮助!

获取链接后复制到浏览器即可下载

课题题目: 学生信息管理系统

班 级: 信卓11801

姓 名: 聂健

班级序号: 09

同组成员: 无

完成时间: 2019 年 12 月 11 日

目录

一.题目

二.设计目的

三.总体设计

四.详细设计

五.调试与测试:

六.课程设计心得及体会

七.程序清单

一.题目:学生信息管理系统

要求:从文件中读取原始数据,并将修改后的数据保存在一个新的文件当中。

功能:

浏览所有学生的所有信息用姓名和学号查询学生的信息用姓名和学号修改学生的信息用姓名和学号删除学生统计各个课程分数段的人数统计总分和各个课程的最高分、最低分以及对应的姓名二.设计目的

如今学校的学生越来越多,成绩管理的工作量越来越大,手工管理成绩的弊端也越来越明显。随着科学技术的不断提高,计算机科学日渐成熟,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有手工管理所无法比拟的优点。所以我想借本次课程设计之际,设计一个简易的学生成绩管理系统。

掌握: 1.掌握动态创建链表,并实现对数据的删除,检索,修改。

增强工程化意识,提高c语言实践能力。

三.总体设计

(1)程序源文件分为:

1.student.h 包含所有的头文件以及定义

2.function.cpp 实现各个函数的功能

3.main.cpp 主函数

4.data.txt 学生原始数据

(2)主函数实现菜单的选择:使用swicth语句实现菜单的选择

1.浏览学生信息

2.查询学生信息

3.修改学生信息

4.删除学生信息

5.各科成绩

6.最高分最低分以及对应的姓名

(3)函数包括:

1.struct student * create() //用动态链表建立基础的学生信息库 从文件中将学生信息读取出来

2.void sort(struct student *head) //排序

3.void locatename(struct student *head) //通过姓名查询信息

4.void locatenum(struct student *head) //通过学号查询信息

5.struct student * delname(struct student *head) //通过姓名删除学生信息

6.struct student * delnum(struct student *head) //通过学号删除学生信息

7.void changename(struct student *head) //通过姓名去修改学生数据

8.void changenum(struct student *head) //通过学号去修改学生数据

9.void filein(struct student *head) //保存到文件中

10.void print(struct student *head) //打印所有学生信息

11.void ABCD(struct student *head) //统计各分段的人数

12.void max(struct student * head) //总分以及各个课程的最高分,最低分以及对应的姓名

对于创建链表和删除学生这两个函数需要返回head

创建链表时返回head:

其他函数中都传入了一个参数head

那么都可以访问到链表中的所有数据

删除学生返回head:

当删除第一个学生时,即把头给删了

这时需要换头 head = delname(head); head= delnum(head);

其它函数使用void类型即可

四.详细设计

使用结构体链表实现上述要求,在头文件中定义结构体,分为数据域和指针域。首先创建一个动态链表,将文件中的原始数据保存在链表中,指针域将链表链接起来。

实现整个系统:菜单调用函数

<0> filein(head); //将修改后的信息保存在新的文件中 data11.txt

<1> print(head); //打印所有学生的所有信息 实现菜单1的功能

<2> locatename(head) //通过姓名查询单个学生的所有信息 实现菜单2的姓名查询功能

locatenum(head) //通过学号查询单个学生的所有信息 实现菜单2的学号查询功能

<3> changename(head); //通过姓名修改学生的信息 实现菜单3的姓名查询功能

changenum(head); //通过学号修改学生的功能 实现菜单3的学号查询功能

<4> head= delname(head); //通过姓名删除学生数据 实现菜单4的姓名删除功能

head= delnum(head); //通过学号删除学生数据 实现菜单4的学号删除功能

//如果删除的是头 这时头换了 p = head; head = p->next;

<5> ABCD(head); //统计各个分数段的人数 并将运行结果写进一个新的文件 abcd.txt

<6> max(head); //输出总分和各个课程的最高分和最低分的相关信息各个函数的实现过程:

1.动态创建链表

//动态创建链表的过程

struct student *p,*q,*head;

p = q = (struct student *)malloc(sizeof(struct student));//开辟空间

head = p;

while(p!=NULL)

{

q = (struct student *)malloc(sizeof(struct student));

p->next = q;

p = q;

}

p->next = NULL;return head;//在while中将数据域加入即可

核心部分即为:链表连接过程使用while循环,使用feof判断有没有到达文件的最后一行。

创建链表流程图

对于从文件中读取数据,核心部分是不变的。但是需要注意的是,由于文件中第一行是字符串,所以需要使用fgets读取第一行数据。从第二行开始将数据依次保存在里链表中。

从文件中将数据赋值给变量,使用fscanf。

读取完毕后,fclose关闭文件。

2.排序

为什么要将排序单独写成一个函数?

当老师问我这个问题时,我是这样回答的。因为在后面的功能中有删除以及修改学生的数据,我只要调用一下函数,即可实现排序的实时更新。

使用擂台法进行排序。

3.查询信息

通过姓名通过学号姓名匹配需要调用一个函数 strcmp(A,B);

当两字符串完全相同时,函数返回0。

当为整形时,只许判断 if(A == B)即可。

(查询学生信息流程图)

4.修改学生信息

对于修改学生数据,与查询是差不多的流程。当匹配到了学生后,重新赋值就可以了。

scanf("%f",&p->s1);

scanf("%f",&p->s2);

scanf("%f",&p->s3);此时,重新调用一下排序函数,sort(head);即可实现数据的实时更新。

5.删除学生

struct student *p , *q;

p = head;

while( p不匹配 && p->next!=NULL)

{

q = p;

p = p->next;

}//一旦匹配,跳出while

if(匹配)

{

if( p == head ) //如果是头匹配

{

head = p->next;//换头,此过程就把头也删了

}

else

{

q->next = p->next;

}

}if(不匹配)

{

NONE

}

return head;//当删除了头时,把新的头返回

删除学生流程图

6.输出所有学生的所有数据

print(head);

将链表中的头找到,即可找到访问所有人的所有数据

p = head;

while(p)

{

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n",p->num,p->name , p->s1 , p->s2 , p->s3 , p->sum , p->rank );

p = p->next;

7.统计各分数段的人数

统计各个等级的人数流程图

遍历链表,对数据域进行判断

设置12个变量,初始化为1

将90-100设为等级A,将80-89设置为B,将60-79设置为C将<60设置为D。

每次判断,在相应的位置就+1,最终算出人数,以一个表格的形式展现,并定义文件指针,将结果写进一个新的文件当中。

统计总分和各科的最高分,最低分,以及相应的姓名使用擂台法进行比较

while(p!=NULL)

{

if(p->sum > summax->sum)

{

summax = p;

}

p = p->next;

}总分与各科的方法是一样的

当找到了这个节点,就可以找到对应的姓名。

五.调试与测试

在这个过程中出现了许许多多的问题,在不断的调试中,将bug不断地修复。开始有删除头删不掉的情况,打印的时候排名有问题,最终形成了第三个版本的此系统。

一般情况下我是首先去测试一下代码,看看所有的功能是否都能正常使用。如果出现逻辑上的问题,会debug寻找错误的原因,并去解决bug。一个常见的方法就是合理的使用printf。

比如之前我就遇到了一个问题。

当时在if语句中是这么写的,if(answer == 1),运行就出问题。我要查询的是姓名查询,但是按了1后没有反应。然而说明在哪里出现了问题。于是我用printf测试。

到底有没有进入到locatename(head)这个函数。

再次运行时,没有出现???,于是判定是在if语句中出现问题,根本没有进入。最后排查得出,由于定义char类型 ,必须使用字符,用‘1’表示。

系统测试:

功能1:打印所有学生的所有信息

功能2:用学号和姓名查询学生的信息

功能3:修改学生的成绩:完成总分和排名的实时更新

功能4:删除学生

我们回到功能1,测试一下曹操有没有被删掉

可以看到,曹操已经被删除。

功能5:各科成绩分析

由于删掉一人,因此总人数29人。

功能6:总分以及各个课程的最高分最低分以及对应的姓名。

再来测试一下:假如我修改了张三的成绩为3个100

再来看看6的功能

测试成功!

六.课程设计心得与体会

通过此次课程设计,使我更加扎实的掌握了有关链表和结构体方面的知识,在设计过程中,中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因。所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我对建立一个工程有了一个新的认识,首先是想清楚这个系统的流程,将框架搭建起来后,再起写一些细节方面的东西,千万不能稀里糊涂的写,到最后没有用处,白白浪费时间。

我认为此次课设不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。同时也希望今后能够多花时间去思考,去动手写一些代码。

七.程序清单

student.h

/*

头文件

*/

#include

#include

#include

#include

#include

#include

#define LEN sizeof(struct student)

/*

结构体

*/

struct student

{

long num;

char name[100];

float s1;

float s2;

float s3;

float sum;

int rank;

struct student *next;

};

/*

函数声明

*/

struct student * create();

struct student * delname(struct student *head);

struct student * delnum(struct student *head);

void sort(struct student *head);

struct student * changename(struct student *head);

struct student * changenum(struct student *head);

void filein(struct student *head);

void locatename(struct student *head);

void locatenum(struct student *head);

void print(struct student *head);

void ABCD(struct student *head);

void max(struct student *head);

function.cpp

#include"student.h"

/*

函数

*/

struct student * create() //建立基础的学生信息库 从文件中将学生信息读取出来

{

char title[100];

FILE *fp;

struct student *head, *p , *q;

p = q = (struct student *)malloc(LEN);

if( ( fp = fopen("data00.txt","r") ) == NULL )

{

printf( "can't open file\n" );

exit(1);

}

fgets( title, 100, fp );

head = p;

fscanf( fp , "%ld%s%f%f%f\n",&q->num, p->name, &p->s1,&p->s2,&p->s3 );

p->sum = p->s1 + p->s2 + p->s3;

while(!feof(fp))

{

q = (struct student *)malloc(LEN);

fscanf( fp,"%ld%s%f%f%f%\n", &q->num,q->name, &q->s1,&q->s2,&q->s3 );

q->sum = q->s1 + q->s2 + q->s3;

p->next = q;

p = q;

}

p->next = NULL;

fclose(fp);

return head;

}

void sort(struct student *head) //排序

{

struct student *p , *q ;

p = head;

while( p ) //擂台法进行排序

{

p->sum = p->s1 + p->s2 + p->s3;

p->rank = 1;

q = head;

while(q!=p)

{

if((q->sum) > (p->sum))

{

p->rank +=1;

}

else if((q->sum)< (p->sum))

{

q->rank +=1;

}

q = q->next;

}

p = p->next;

}

}

void locatename(struct student *head) //查询信息

{

struct student *p , *q;

char name[20];

printf("\n请输入要查询学生的姓名:");

scanf("%s",name);

p = head;

q = p->next;

if(strcmp(name,p->name)==0)

{

printf("\n学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,p->num,p->name, p->s1, p->s2, p->s3 , p->sum ,p->rank );

}

else

{

while(q && (strcmp(q->name,name)!=0))

{

q = q->next;

}

if(q)

{

printf("查询的信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,q->num,q->name, q->s1, q->s2, q->s3 , q->sum ,q->rank );

}

else

{

printf("没有%s学生\n",name);

}

}

}

void locatenum(struct student *head) //查询信息

{

struct student *p , *q;

long num;

printf("\n请输入要查询学生的学号:");

scanf("%d",&num);

fflush(stdin);

p = head;

q = p->next;

if( p->num == num )

{

printf("\n学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,p->num,p->name, p->s1, p->s2, p->s3 , p->sum ,p->rank );

}

else

{

while(q && q->num != num )

{

q = q->next;

}

if(q)

{

printf("查询的信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,q->num,q->name, q->s1, q->s2, q->s3 , q->sum ,q->rank );

}

else

{

printf("没有该学生,请重新输入\n");

}

}

}

struct student * delname(struct student *head) //通过姓名删除学生信息

{

char name[20];

struct student *p , *q;

printf("请输如你想要删除的姓名\n");

scanf("%s",name);

if( head==NULL )

{

printf("\nlist null!\n");

return head;

}

p = head;

while( strcmp(p->name,name)!=0 && p->next!=NULL)

{

q = p ;

p = p->next;

} //直到找到为止

if(strcmp(p->name,name)==0 ) //姓名匹配

{

if( p == head ) //如果这个学生是第一个学生的话

{

head = p->next;

printf("你删除的学生信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" , p->num,p->name, p->s1, p->s2, p->s3 ,p->sum, p->rank );

printf("学生%s删除成功\n",name);

}//头head要换 不然找不到了

else

{

q->next=p->next;

printf("你删除的学生信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,p->num, p->name, p->s1, p->s2, p->s3 ,p->sum, p->rank );

printf("学生%s删除成功\n",name);

}

}

if(strcmp(p->name,name)!=0 )

{

printf("没有%s学生\n",name);

}

return head;

}

struct student * delnum(struct student *head) //通过学号删除学生信息

{

long num;

struct student *p , *q;

printf("请输如你想要删除的学号\n");

scanf("%ld",&num);

fflush(stdin);

if( head==NULL )

{

printf("\nlist null!\n");

return head;

}

p = head;

while( p->num != num && p->next!=NULL)

{

q = p ;

p = p->next;

} //直到找到为止

if(p->num == num ) //姓名匹配

{

if( p == head ) //如果这个学生是第一个学生的话

{

head = p->next;

printf("你删除的学生信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" , p->num,p->name, p->s1, p->s2, p->s3 ,p->sum, p->rank );

printf("学号为%ld的学生删除成功\n",num);

}//头head要换 不然找不到了

else

{

q->next=p->next;

printf("你删除的学生信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,p->num, p->name, p->s1, p->s2, p->s3 ,p->sum, p->rank );

printf("学号为%ld的学生删除成功\n",num);

}

}

if(p->num != num )

{

printf("没有该学生,请重新输入\n");

}

return head;

}

struct student * changename(struct student *head) //通过姓名去修改学生数据

{

struct student *p ,*q;

char name[20];

printf("请输入你想修改的姓名\n");

scanf("%s",name);

fflush(stdin);

p = head;

while( strcmp(p->name,name)!=0 && p->next!=NULL)

{

q = p ;

p = p->next;

} //直到找到为止

if(strcmp(p->name,name)==0)

{

printf("学生%s存在\n",p->name);

printf("你要修改的学生信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,p->num, p->name, p->s1, p->s2, p->s3 ,p->sum, p->rank );

printf("请修改课程1的成绩:\n");

scanf("%f",&p->s1);

printf("请修改课程2的成绩:\n");

scanf("%f",&p->s2);

printf("请修改课程3的成绩:\n");

scanf("%f",&p->s3);

p->sum = p->s1 + p->s2 + p->s3;

sort(head);

printf("成绩已经完成更新\n");

printf("更新后的学生信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,p->num, p->name, p->s1, p->s2, p->s3 ,p->sum,p->rank );

}

else

{

printf("没有%s学生\n",name);

}

return head;

}

struct student * changenum(struct student *head) //通过学号去修改学生数据

{

struct student *p ,*q;

long num;

printf("请输入你想修改的学号\n");

scanf( "%ld",&num );

fflush(stdin);

p = head;

while( p->num != num && p->next!=NULL)

{

q = p ;

p = p->next;

} //直到找到为止

if( p->num == num )

{

printf("学号为%ld的学生存在\n",p->num);

printf("你要修改的学生信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,p->num, p->name, p->s1, p->s2, p->s3 ,p->sum, p->rank );

printf("请修改课程1的成绩:\n");

scanf("%f",&p->s1);

printf("请修改课程2的成绩:\n");

scanf("%f",&p->s2);

printf("请修改课程3的成绩:\n");

scanf("%f",&p->s3);

p->sum = p->s1 + p->s2 + p->s3;

sort(head);

printf("成绩已经完成更新\n");

printf("更新后的学生信息为:\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n" ,p->num, p->name, p->s1, p->s2, p->s3 ,p->sum,p->rank );

}

else if( p->num == num )

{

printf("学号为%ld的学生存在\n",p->num);

printf("请修改课程1的成绩:\n");

scanf("%f",&p->s1);

printf("请修改课程2的成绩:\n");

scanf("%f",&p->s2);

printf("请修改课程3的成绩:\n");

scanf("%f",&p->s3);

printf("成绩已经完成更新\n");

p->sum = p->s1 + p->s2 + p->s3;

}

else

{

printf("\n没有该学生,请重新输入\n");

}

return head;

}

void filein(struct student *head)//保存到文件中

{

char title[50];

FILE *fp;

struct student *p;

if((fp=fopen("data11.txt","w"))==NULL)//打开文件

{

printf("can't open.\n");

exit(-1);

}

p = head;

fprintf(fp,"学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\t\n");

while(p)

{

p->sum = p->s1 + p->s2 + p->s3;

fprintf(fp , "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%2d\n",p->num,p->name, p->s1, p->s2, p->s3 , p->sum , p->rank );

p = p->next;

}

fclose(fp);

}

//输出学生信息 此函数已经完成

void print(struct student *head)

{

struct student *p;

p = head;

while(p)

{

printf( "%ld\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%3d\n",p->num,p->name , p->s1 , p->s2 , p->s3 , p->sum , p->rank );

p = p->next;

}

}

void ABCD(struct student *head)

{

int n1 = 0;

int n2 = 0;

int n3 = 0;

int n4 = 0;

int n5 = 0;

int n6 = 0;

int n7 = 0;

int n8 = 0;

int n9 = 0;

int n10 = 0;

int n11 = 0;

int n12 = 0;

//统计分数段的人数

struct student *p;

FILE *fp;

p = head;

printf("A等级为90--100\nB等级为80--89\nC等级为60--80\nD等级为<60\n");

while(p!=NULL)

{

if( p->s1 >= 90 )

{

n1 ++;

}

if( (p->s1 >= 80 ) && ( p->s1 < 90 ) )

{

n2 ++;

}

if( (p->s1 >= 60 ) && ( p->s1 < 80 ) )

{成绩管理系统文档

n3 ++;

}

if( p->s1 < 60 )

{

n4 ++;

}

if( p->s2 >= 90 )

{

n5 ++;

}

if( (p->s2 >= 80 ) && ( p->s2 < 90 ) )

{

n6 ++;

}

if( (p->s2 >= 60 ) && ( p->s2 < 80 ) )

{

n7 ++;

}

if( p->s2 < 60 )

{

n8 ++;

}

if( p->s3 >= 90 )

{

n9 ++;

}

if( (p->s3 >= 80 ) && ( p->s3 < 90 ) )

{

n10 ++;

}

if( (p->s3 >= 60 ) && ( p->s3 < 80 ) )

{

n11 ++;

}

if( p->s3 < 60 )

{

n12 ++;

}

p = p->next;

}

printf("\n成绩分析已经生成表格\n");

printf("\n等级\tA\tB\tC\tD\t总数\n课程1\t%d\t%d\t%d\t%d\t%3d\n",n1,n2,n3,n4,n1+n2+n3+n4);

printf("课程2\t%d\t%d\t%d\t%d\t%3d\n",n5,n6,n7,n8,n5+n6+n7+n8);

printf("课程3\t%d\t%d\t%d\t%d\t%3d\n",n9,n10,n11,n12,n9+n10+n11+n12);

printf("总数\t%d\t%d\t%d\t%d\t%3d\n",n1+n5+n9,n2+n6+n10,n3+n7+n11,n4+n8+n12,n1+n2+n3+n4+n5+n6+n7+n8+n9+n10+n11+n12);

if((fp=fopen("abcd.txt","w"))==NULL)//打开文件

{

printf("can't open.\n");

exit(-1);

}

fprintf(fp,"成绩分析已经生成表格\n");

fprintf(fp,"A等级为90--100\nB等级为80--89\nC等级为60--80\nD等级为<60\n");

fprintf(fp,"\n等级\tA\tB\tC\tD\t总数\n课程1\t%d\t%d\t%d\t%d\t%3d\n",n1,n2,n3,n4,n1+n2+n3+n4);

fprintf(fp,"课程2\t%d\t%d\t%d\t%d\t%3d\n",n5,n6,n7,n8,n5+n6+n7+n8);

fprintf(fp,"课程3\t%d\t%d\t%d\t%d\t%3d\n",n9,n10,n11,n12,n9+n10+n11+n12);

fprintf(fp,"总数\t%d\t%d\t%d\t%d\t%3d\n",n1+n5+n9,n2+n6+n10,n3+n7+n11,n4+n8+n12,n1+n2+n3+n4+n5+n6+n7+n8+n9+n10+n11+n12);

fclose(fp);

}

void max(struct student * head)

{

struct student *p,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*summax,*summin,*s1max,*s2max,*s3max,*s1min,*s2min,*s3min;

FILE *fp;

p = head;

p1 = head;

p2 = head;

p3 = head;

p4 = head;

p5 = head;

p6 = head;

p7 = head;

summax = p;

s1max = p1;

s2max = p2;

s3max = p3;

summin = p4;

s1min = p5;

s2min = p6;

s3min = p7;

summax->sum = summax->s1+summax->s2+summax->s3;

summin->sum = summin->s1+summin->s2+summin->s3;

while(p!=NULL)

{

if(p->sum > summax->sum)

{

summax = p;

}

p = p->next;

}成绩管理系统文档

while(p1!=NULL)

{

if(p1->sum > s1max->sum)

{

s1max = p1;

}

p1 = p1->next;

}

while(p2!=NULL)

{

if(p2->sum > s2max->sum)

{

s2max = p2;

}

p2 = p2->next;

}

while(p3!=NULL)

{

if(p3->sum > s3max->sum)

{

s3max = p3;

}

p3 = p3->next;

}

while(p4!=NULL)

{

if(p4->sum < summin->sum)

{

summin = p4;

}

p4 = p4->next;

}

while(p5!=NULL)

{

if(p5->s1 < s1min->s1)

{

s1min = p5;

}

p5= p5->next;

}

while(p6!=NULL)

{

if(p6->s2 < s2min->s2)

{

s2min = p6;

}

p6 = p6->next;

}

while(p7!=NULL)

{

if(p7->s2 < s3min->s3)

{

s3min = p7;

}

p7 = p7->next;

}

printf("\t总分\t\t课程1\t\t\t课程2\t\t\t课程3\n");

printf("最高分\t%.2f(%s)\t%.2f(%s)\t\t%.2f(%s)\t\t%.2f(%s)\n",summax->sum,summax->name,s1max->s1,s1max->name,s2max->s2,s2max->name,s3max->s3,s3max->name);

printf("最低分\t%.2f(%s)\t%.2f(%s)\t\t%.2f(%s)\t\t%.2f(%s)\n",summin->sum,summin->name,s1min->s1,s1min->name,s2min->s2,s2min->name,s3min->s3,s3min->name);

if((fp=fopen("max.txt","w"))==NULL)//打开文件

{

printf("can't open.\n");

exit(-1);

}

fprintf(fp,"\t\t总分\t\t\t课程1\t\t\t课程2\t\t\t课程3\n");

fprintf(fp,"最高分\t%.2f(%s)\t%.2f(%s)\t%.2f(%s)\t%.2f(%s)\n",summax->sum,summax->name,s1max->s1,s1max->name,s2max->s2,s2max->name,s3max->s3,s3max->name);

fprintf(fp,"最低分\t%.2f(%s)\t%.2f(%s)\t%.2f(%s)\t%.2f(%s)\n",summin->sum,summin->name,s1min->s1,s1min->name,s2min->s2,s2min->name,s3min->s3,s3min->name);

fclose(fp);

}main.cpp

#include"student.h"

#define _CRT_SECURE_NO_WARNINGS

int main()

{

char answer;

int choice;

struct student *head ;

head = create();

sort(head);

printf("\t\t\t学生成绩管理系统\n");

printf("\n\t************STUDENT-SCORE-SYSTEM 5.0***************\n");

printf("\n\t************powered by 信卓11801聂健***************\n");

printf("\n\t\t\t按任意键登录系统\n");

getchar();

system("cls");

do

{

printf("欢迎你,管理员!\n");

printf("|---------------------------------------|\n");

printf("|\t请输入选项编号(0-6):\t\t|");

printf("\n|---------------------------------------|\n");

printf("|\t1--浏览学生信息:\t\t|\n");

printf("|\t2--查询学生信息:\t\t|\n");

printf("|\t3--修改学生信息:\t\t|\n");

printf("|\t4--删除学生信息:\t\t|\n");

printf("|\t5--各科成绩:\t\t\t|\n");

printf("|\t6--最高分:\t\t\t|\n");

printf("|\t0--退出系统:\t\t\t|\n");

printf("|---------------------------------------|\n");

printf("请输入选项");

scanf("%d",&choice);

fflush(stdin);

switch(choice)

{

case 0:

{

printf("********退出系统*********\n");

filein(head);//将修改后的成绩保存在data11.txt中

printf("修改的数据已经保存在data11.txt中\n");

printf("欢迎下次使用\n");

exit(0);

break;

}

case 1:

{

system("cls");

printf("*************学生成绩一览表********************\n");

printf("学号\t姓名\t课程1\t课程2\t课程3\t总分\t排名\n");

print(head); //打印所有人的信息

printf("\n按任意键继续回到菜单\n");

getch();

system("cls");

break;

}

case 2:

{

while(1)

{

printf("请选择查询方式\n");

printf("1.姓名\n2.学号\n");

scanf("%s",&answer);

if( answer == '1' )

{

locatename(head);//查询信息

}

if(answer == '2' )

{

locatenum(head);

}

if(answer != '1' && answer!= '2')

{

printf("输入错误\n");

}

printf("1.按任意键回车后继续查询\n0.退出\n");

scanf("%s",&answer);

fflush(stdin);

if(answer == '0' )

{

break;

}

}

printf("\n按任意键回到菜单");

getch();

system("cls");

break;

}

case 3:

{

while(1)

{

printf("请选择修改成绩的方式\n");

printf("1.姓名\n2.学号\n");

scanf("%s",&answer);

if(answer == '1')

{

changename(head);

sort(head); //修改成绩后重新排序

}

if(answer == '2')

{

changenum(head);

sort(head); //修改成绩后重新排序

}

if(answer != '1' && answer!= '2')

{

printf("输入错误\n");

}

printf("是否继续\n");

printf("1.按任意键回车后继续修改\n0.退出\n");

scanf("%s",&answer);

if(answer=='0')

{

break;

}

}

printf("\n按任意键回到菜单\n");

getch();

system("cls");

break;

}

case 4:

{

while(1)

{

printf("请选择删除学生的方式\n");

printf("1.姓名\n2.学号\n");

scanf("%s",&answer);

if(answer=='1')

{

head= delname(head); //删除头时头要换

sort(head); //删除学生后重新排序

}

if(answer=='2')

{

head= delnum(head); //删除头时头要换

sort(head); //删除学生后重新排序

}

if(answer != '1' && answer!= '2')

{

printf("输入错误\n");

}

printf("是否继续\n");

printf("1.继续删除\n0.退出\n");

scanf("%s",&answer);

if(answer=='0')

{

break;

}

}

printf("\n按任意键继续执行你想要的操作");

getch();

system("cls");

break;

}

case 5:

{

ABCD(head);//计算人数

printf("\n按任意键继续执行你想要的操作");

getch();

system("cls");

break;

}

case 6:

{

max(head);

printf("\n按任意键继续执行你想要的操作");

getch();

system("cls");

break;

}

default:

{

printf("********没有这个选项*********\n按任意键重新输入\n");

getch();

break;

}

}

}while(1);

return 0;

}学生原始数据没有展现出来,需要的私我哦

Reprint please indicate:http://www.cnsoftweb.com/wdgl-3532.html