精华内容
下载资源
问答
  • 学生学生成绩管理系统分析报告,kkkkkkkkkk
  • 学生成绩管理系统可行性分析报告 一引言 1.编写目的 为了提供一个有价值的方向 便于项目团队成员更好地了解项目情况 使项目工作开展的各 个过程有价值 因此以文件化的形式 记录软件开发中将要面临的问题及其解决方案...
  • 学生成绩管理系统需求分析报告介绍学生成绩管理系统
  • 吐尔逊 一组织结构分析 学生成绩管理系统是为了利用计算机实现一个学校的学生成绩管理工作因此系统应该有一个全局管理功能以便实现不同的功能选择也就是应具备全局管理功能这里用总控模块实现由于处理信息时涉及管理...
  • 文档名称测试分析报告 项目计划学生成绩管理系统 项目负责人李嘉成任子静 开发小组苏队小组 1 测试分析报告 1?引言 1.1?编写目的 该测试分析报告文档有助于实现以下目标了解软件的具体功能作为软件开发 人员开发的...
  • C语言课程设计报告源码下载方式关注微信公众号 跨时代的jay回复 学生成绩管理系统为大家提供一些帮助!获取链接后复制到浏览器即可下载 课题题目: 学生信息管理系统 班 级: 信卓11801 姓 名: 聂健 班级序号: ...

    C语言课程设计报告

    源码下载方式

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

    回复 学生成绩管理系统

    为大家提供一些帮助!

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

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

    班 级: 信卓11801

    姓 名: 聂健

    班级序号: 09

    同组成员: 无

    完成时间: 2019 年 12 月 11 日

    目录

    一.题目

    二.设计目的

    三.总体设计

    四.详细设计

    五.调试与测试:

    六.课程设计心得及体会

    七.程序清单

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

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

    功能:

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


    二.设计目的

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

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

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

    三.总体设计

    0a06f225d793ac8dd0a848f23011f4d7.png

    6fd24211aac59ddacf84a3a07a7c783c.png

    (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类型即可

    四.详细设计

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

    9d0e50e9066ca3e9db5a1717d9add6ee.png

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

    <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判断有没有到达文件的最后一行。

    ec554f71b91cc1963016e73619ad16d5.png

    创建链表流程图

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

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

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

    2.排序

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

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

    使用擂台法进行排序。

    3.查询信息

    1. 通过姓名
    2. 通过学号

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

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

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

    a6032ce8195a07f23c980e5c9e0eb475.png

    (查询学生信息流程图)

    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;//当删除了头时,把新的头返回

    5774ba8370089c52f02d18015ce47a02.png

    删除学生流程图

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

    print(head);

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

            p = head;
    	while(p)
    	{
    		printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn",p->num,p->name , p->s1 , p->s2 , p->s3 , p->sum , p->rank );
    		p = p->next;
            

    7.统计各分数段的人数

    58589ad26bd51ee4a3bf8df88474b86e.png

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

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

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

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

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

    1. 统计总分和各科的最高分,最低分,以及相应的姓名

    使用擂台法进行比较

    while(p!=NULL)
    {
    	if(p->sum > summax->sum)
    	{ 
    		summax = p;
    	}
    	p = p->next;
    }

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

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

    五.调试与测试

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

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

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

    a178a5736d16424bf6cd343fe52ab809.png

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

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

    9c03b8c1c2250a3d480daa3d264fb28f.png

    ed49b4061381cde9d23269bebdd46e35.png

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

    系统测试:

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

    5b06c9d17d49d0ce555f8f489123b497.png

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

    3c327510db72b50b4f45aa4d885a551e.png

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

    29f1b23cb70c4921316f0a3cb2c91b62.png

    功能4:删除学生

    78b51685e6ccf892e187791b77fcb97c.png

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

    a0ec952383083fab706b1678e9fd1260.png

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

    功能5:各科成绩分析

    9868e1825da923f1e4c74ecf8787d773.png

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

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

    d4613624f2fa5f77f2941041f7069add.png

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

    3c64269b276716e08b9a98740c4d778f.png

    再来看看6的功能

    0bfea8cad1d093604a8afd800d9a7719.png

    测试成功!

    六.课程设计心得与体会

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

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

    七.程序清单

    student.h

    /*
    头文件
    */
    #include<stdio.h>
    #include<stdlib.h> 
    #include<string.h>
    #include<malloc.h>
    #include<math.h>
    #include<conio.h
    #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 filen" );
    		exit(1);
    	}
    	fgets( title, 100, fp );
    	head = p;
    	fscanf( fp , "%ld%s%f%f%fn",&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课程1t课程2t课程3t总分t排名n");
            printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
    			printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
            printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
    			printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
                printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" , 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课程1t课程2t课程3t总分t排名n");
                printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
                printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" , 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课程1t课程2t课程3t总分t排名n");
                printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
            printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
            printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
            printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名n");
            printf( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn" ,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课程1t课程2t课程3t总分t排名tn");
    	while(p)
    	{
    		p->sum = p->s1 + p->s2 + p->s3;
            fprintf(fp , "%ldt%st%.2ft%.2ft%.2ft%.2ft%2dn",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( "%ldt%st%.2ft%.2ft%.2ft%.2ft%3dn",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--100nB等级为80--89nC等级为60--80nD等级为<60n");
        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等级tAtBtCtDt总数n课程1t%dt%dt%dt%dt%3dn",n1,n2,n3,n4,n1+n2+n3+n4);
        printf("课程2t%dt%dt%dt%dt%3dn",n5,n6,n7,n8,n5+n6+n7+n8);
    	printf("课程3t%dt%dt%dt%dt%3dn",n9,n10,n11,n12,n9+n10+n11+n12);
    	printf("总数t%dt%dt%dt%dt%3dn",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--100nB等级为80--89nC等级为60--80nD等级为<60n");
    	fprintf(fp,"n等级tAtBtCtDt总数n课程1t%dt%dt%dt%dt%3dn",n1,n2,n3,n4,n1+n2+n3+n4);
        fprintf(fp,"课程2t%dt%dt%dt%dt%3dn",n5,n6,n7,n8,n5+n6+n7+n8);
    	fprintf(fp,"课程3t%dt%dt%dt%dt%3dn",n9,n10,n11,n12,n9+n10+n11+n12);
    	fprintf(fp,"总数t%dt%dt%dt%dt%3dn",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总分tt课程1ttt课程2ttt课程3n");
    	printf("最高分t%.2f(%s)t%.2f(%s)tt%.2f(%s)tt%.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)tt%.2f(%s)tt%.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,"tt总分ttt课程1ttt课程2ttt课程3n");
    	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("ttt学生成绩管理系统n");
    	printf("nt************STUDENT-SCORE-SYSTEM  5.0***************n");
    	printf("nt************powered by 信卓11801聂健***************n");
    	printf("nttt按任意键登录系统n");
    	getchar();
    	system("cls");
    	do
    	{
    		printf("欢迎你,管理员!n");
    		printf("|---------------------------------------|n");
    		printf("|t请输入选项编号(0-6):tt|");
    		printf("n|---------------------------------------|n");
    		printf("|t1--浏览学生信息:tt|n");
    		printf("|t2--查询学生信息:tt|n");
    		printf("|t3--修改学生信息:tt|n");
    		printf("|t4--删除学生信息:tt|n");
    		printf("|t5--各科成绩:ttt|n");
    		printf("|t6--最高分:ttt|n");
    		printf("|t0--退出系统:ttt|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课程1t课程2t课程3t总分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;
     }

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

    展开全文
  • 学生成绩管理系统 可行性分析报告 组长丁国宝 组员刘宝同 赵一清 陈 敏 可行性研究 1.引言 2.可行性研究的前提 3 .对现有系统的分析 4.所建议的系统 5.结论 1 引言 1.1 编写目的 基于java建立学生成绩管理系统采用...
  • 学生成绩管理系统需求分析报告.doc 借给大家借鉴 参考参考
  • 学生成绩管理系统课程设计实验报告
  • word文档,学生成绩管理系统分析设计,基于x86汇编,实现学生成绩的录入,删除,成绩导出到文件文件,从文件导入成绩,排序输出,分页显示
  • 学生成绩管理系统可行性分析与需求分析报告
  • PAGE / NUMPAGES 学生成绩管理系统 课程设计报告 编写人李梦婕 同组人员李梦婕课程设计负责人 縢肖莉 郭青艳 李强 完成日期2011-5-28 指导教师刘晓静 批阅日期2011-6-1 分数 需求分析 用数组或链表数据结构完成一个...
  • 数据库系统课程设计任务书院(系):理学院专业:信息与计算科学姓名:学号:10课程设计题目:学生成绩管理系统成绩:问题阐述与分析:(主要阐述设计题目背景、设计实现意义及所要解决的主要问题,要明确给出所要用的...

    数据库系统课程设计任务书

    (

    )

    理学院

    业:

    信息与计算科学

    名:

    号:

    10

    课程设计题目:

    学生成绩管理系统

    绩:

    问题阐述与分析:

    (主要阐述设计题目背景、

    设计实现意义及所要解决的主要问题,

    要明

    确给出所要用的数据库知识点)

    一.

    设计背景

    学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策

    者和管理者来说都至关重要

    ,

    所以学生成绩管理系统应该能够为用户提供充足的信息

    和快捷的查询手段,对学生来说可以轻松的查阅自己在校的成绩以及信息等。

    作为计算机应用的一部分

    ,

    使用计算机对学生成绩信息进行管理

    ,

    有着手工管理

    所无法比拟的优点

    .

    例如

    :

    检索迅速、查找方便、可靠性高、存储量大、保密性好、寿

    命长、成本低等。

    学生成绩管理系统提供了强大的学生成绩管理管理功能,方便系统管理员对学生

    成绩等信息的添加、修改、删除、查询、留言等操作,同时一样的方便学生对自己各

    科成绩查询,学习和交流。

    二.

    设计实现意义

    设计一个适用于普通高等院校的学生成绩管理系统,用于对学生各学科成绩信息

    以及其他与成绩相关信息进行综合管理。该系统是面向教务管理部门而设计的,通过

    该系统可以很方便的对存储在后台数据库的数据进行各种管理工作。

    .

    所需解决主要问题

    (

    1

    )

    目标分析

    教师需求

    1.

    教师

    (

    管理员

    )

    够实现对整个学生信息的添加、修改、删除、查询等操作,对

    教师

    (

    管理员

    )

    用户的添加、删除、修改等操作。

    2.

    教师

    (

    管理员

    )

    可以将学生成绩的数据库发布到网上,学生的信息发布到网上,

    方便学生教师进行查询,达到资源共享的目的。

    展开全文
  • 通过调研目前教学管理系统中的学生成绩管理子系统,了解学生管理子系统的业务流程;通过分析比较,结合用户对学生管理系统的改进意见与实现情况,运用面向对象思想方法,设计和实现一个满足功能和性能,并有所创新的...
  • 学生成绩信息管理系统分析报告 系统目标 本系统立足于教务处的角度,面向全校同学和老师,对全学校的学生和成绩做统一管理
  • 建立一个学生成绩管理系统,传统的手工方式,使得数据容易丢失,在统计时易发生错误高,速度慢,而用计算机可以提高工作速度以及数据的准确性,便于管理。在计算机联网后,数据在网上传递,可以实现数据共享,避免...
  • 学生成绩管理系统 需求分析软件工程报告,内容详实具体
  • 系统功能,系统背景,业务流程分析,数据流程分析,数据字典等
  • 软 件 测 试 实 训 报 告 班级软件测试1406班 姓名贺勇游 学号20XX180182 目录 第一部分 学生成绩管理系统需求分析1 项目概述2 项目背景2 系统具体需求5 第二部分 学生成绩管理系统测试计划8 概述9 测试摘要9 测试...
  • 目 录 一 前言2 二 需求分析3 三 系统设计5 四 数据库设计7 五 编程步骤19 六 测试25 七 课程设计总结33 八 参考资料34 九 附录34;一前言;1.功能需求;1.功能模块;开始;数 据 项密码 数据类型varchar 数据长度50 (2) ...
  • 学生课程成绩管理系统测试报告需求分析+概要设计+测试用例
  • 学生成绩管理系统项目可行性分析与需求分析报告,是一个完整的设计报告,相信能帮助大家的设计。
  • 2019-9-149:35 1? 引言. 1 1.1? 编写目的. 1 1.2? 背景. 1 1.3? 定义. 1 1.4? 参考资料. 1 2? 可行性研究的前提. 2 2.1? 要求.
  • 目录 1?需求分析. 2?总体设计. 2.1?功能模块设计....所有功能模块的流程图....详细设计....输入函数....输出函数....测试的步骤和内容....调试方法与步骤....测试结果的分析与讨论....编写目的 明确用户对学生成绩管理系统的功能需求和性能需

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 319
精华内容 127
关键字:

学生成绩管理系统分析报告