精华内容
下载资源
问答
  • C语言课程设计报告源码下载方式关注微信公众号 跨时代的jay回复 学生成绩管理系统为大家提供一些帮助!获取链接后复制到浏览器即可下载课题题目: 学生信息管理系统班 级: 信卓11801姓 名: 聂健班级序号: 09同组...

    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;

    }//一旦匹配,跳出whileif(匹配)

    {

    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

    /*结构体*/

    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_WARNINGSint 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;

    }

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

    展开全文
  • 论文 学生管理系统 XXXXXXXX PAGE II PAGE I 苏州科技学院本科生毕业设计论文 PAGE I 实验报告 学生信息管理系统 学号XXXXXXXX 姓名XXXXXX 班级XXXXXXXXXXXXXXX 摘 要 本文着重阐述了学生信息管理系统的开发过程对于...
  • 学生管理系统 XXXXXXXX 实验报告 学生信息管理系统 学号XXXXXXXX 姓名XXXXXX 班级XXXXXXXXXXXXXXX 学生管理系统 XXXXXXXX 摘 要 本文着重阐述了学生信息管理系统的开发过程对于设计思想和设计流程也 做出了全面的...
  • MySQL学生成绩管理系统设计实验报告

    千次阅读 多人点赞 2020-12-01 21:46:15
    主要介绍学生成绩管理系统项目开发的背景、目的、对象以及研究内容。 1.1项目背景 每个学校都需要在期末进行考试成绩的统计分析工作,而这些工作都必须在考试结束后一个星期的时间内完成。大量的成绩数据的统计工作...

    一、概述

    主要介绍学生成绩管理系统项目开发的背景、目的、对象以及研究内容。

    1.1项目背景

    每个学校都需要在期末进行考试成绩的统计分析工作,而这些工作都必须在考试结束后一个星期的时间内完成。大量的成绩数据的统计工作如果只靠人工完成,费时费力,还容易出错。随机计算机技术的快速发展,计算机在日常管理应用中迅速普及,利用计算机进行学生成绩管理势在必行。因此需要开发出一个满足学校进行成绩的录入、查询、修改等需求的功能完善,安全可靠,迅速便捷的成绩管理系统。
    

    1.2编写目的

    开发出一个操作简便、界面友好、灵活实用、安全可靠的学生成绩管理系统。该系统的开发以任课教师和学生服务为对象,能够提高学校对学生成绩的统计分析效率,减轻教务管理人员对学生成绩管理和统计的负担,能提高学校对学生成绩的规范化管理。
    该成绩系统能够及时对学生成绩进行收集整理,使学校相关部门及时获取可靠的学生成绩信息,便于管理。方便各任课教师记录,统计所带班级学生成绩,提高工作效率,减轻负担,提高教学质量。实现快速方便地处理大量成绩数据信息,完成成绩的录入、修改、删除、查询等处理要求。方便学生查询自己各科目成绩。

    1.3软件定义

    学生成绩管理系统是记录了学生成绩的系统,可以实现查询、更新、插入、删除等功能。根据不同用户设置不同的权限,来确保学生成绩信息的安全行和完整性。

    1.4开发环境

    windows10操作系统,mysql5.6.17数据库服务器,Eclipse4.12.0,Navicat。

    二、可行性分析

    由于本系统管理的对象单一,且每个数据内容具有较强的关联性,涉及的计算过程不是很复杂。因此,比较适合于采用数据库管理。在技术难度方面,由于有指导老师的指导和相关参考文献,特别是网上资料,特别是参考其它程序的功能,因此完全可以实现。

    2.1经济可行性分析

    随着科学技术的不断发展与创新,计算机作用的日益突显,计算机软件成为人们解决问题的一个有效手段,当然,它的作用也越来越重要。在当今信息时代,国民经济和国防建设、社会发展、人民生活都离不开软件,软件也无处不在。软件产业也是一个新兴产业,尽管起步晚,但是发展迅速,已经成为增长最快的产业,是具有高投入/高产出、无污染、低能耗的绿色产业。学生成绩管理系统是一个基于教务处数据库的一个管理系统,对已经使用的类似的系统进行调查分析、类比,本课题具有的特点:开发工作量小,可以有两个人合作开发或一个人独立开发,开发周期短,有熟练的开发人员一个月就可以完成系统的开发与测试。

    2.2技术可行性分析

    从技术方面来说,Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。可以利用所学的Java知识进行编程,再与数据库连接,通过SQL语句即可轻松查询和更新后台数据库中的数据。

    三、需求分析

    3.1功能要求

    根据用户需求,系统需向用户提供以下功能:
    1、系统登录功能:根据教师、学生两种身份设计不同用户的操作权限和登录方式。
    2、班级管理功能:班级的添加、修改、删除功能。
    3、成绩管理功能:录入、修改、删除、查询、统计学生成绩,能一次性录入某班全部学生成绩。
    4、信息管理功能:添加、修改、删除、查询学生基本信息,能一次性导入某班全部学生信息。
    5、成绩查询功能:每个学生可以查询自己所有课程的成绩。教师可以查询所带班级的成绩,可以对成绩进行排序和统计。
    在这里插入图片描述
    图3-1-1 学生成绩管理系统功能结构图

    3.2性能要求

    1、易操作性:所开发的系统应做到操作简单,尽量使系统操作不受用户对电脑知识水平的限制。
    2、可维护性:系统应易于修改、易于扩充、易于维护,能够适应业务不断发展变化的需要。
    3、可靠性:系统在运行中要不发生或极少发生故障,在偶然事故及操作失误时,系统应具有较强的出理能力,而不应造成信息的丢失或破坏。
    4、安全性:保证系统的物理安全、数据存储和获取的安全与保密,做好使用人员的授权管理。
    5、实用性:系统的设计应最大限度发挥计算机的高速处理、海量存储能力。
    6、开放性:系统能够在开放的硬件体系结构中运行,并且能与其他系统顺利连接,不会因外部系统的不同面要做在量的修改工作。

    四、数据库设计

    4.1 数据库需求分析

    数据库对系统操作和处理的数据具有综合管理的作用,在具有信息管理的系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的执行效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。
    数据库需求分析就是分析用户的需求,根据用户的需求,分析确定该系统会操作处理那些数据,对确定好的数据根据它们之间的关联关系进行结构设计。需求分析结果直接反映客户的要求,需求分析结果是否准确将直接影响到后面各个阶段的设计结果是否合理和正确。因此做好数据库的需求分析是非常重要的环节。
    数据库需求分析的任务就是通过详细调查现实中要处理的对象,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
    针对该系统的要求,对该系统的数据库需求做了详细的分析。基于学生成绩管理系统的数据库功能主要体现在多用户登录信息、学生基本信息、教师基本信息、学生成绩信息的管理上。

    4.2用户对系统的要求

    4.2.1信息要求

    老师能查询所有成绩相关信息,包括某一学生的学号、成绩等详细信息,学生能查到关于自己具体的信息,包括每门课的成绩,学院,专业,班级等

    4.2.2处理要求

    1、需查询学生相关信息时能进行查询;
    2、学生成绩信息发生变更时,能进行修改、插入、删除等;
    3、学生的信息发生变更时,能进行更新、删除。

    4.2.3安全性与完整性要求

    安全性要求:
    1、系统应设置访问用户的标识以鉴别是否为合法用户,并设置密码,保证用户身份不被盗用;
    2、对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
    3、对不同用户设置不同的权限,区分不同用户,如学生、成绩管理员。

    4.3数据需求描述

    数据流图:

    在这里插入图片描述

    图4-3-1 顶层数据流图

    数据字典:
    ①学生Student(学号Sno、姓名Sname、性别Sex、专业号Mno、班号Cnum)
    属性名 字段类型 长度 主键或外键 说明
    SNO INT 5 主键 学号
    SNAME CHAR 20 姓名
    SEX CHAR 2 性别
    MNO INT 5 外键 专业号
    CNUM INT 5 外键 班号

    ②教师Teacher(职工号Tno、姓名Tname、职称Title)
    属性名 字段类型 长度 主键或外键 说明
    TNO INT 5 主键 职工号
    TNAME CHAR 20 姓名
    TITLE CHAR 5 职称

    ③课程Course(课程号Cno、课程名Cname、学分Credit)
    属性名 字段类型 长度 主键或外键 说明
    CNO INT 5 主键 课程号
    CNAME CHAR 30 课程名
    CREDIT CHAR 2 学分

    ④班级Class(班号Cnum、人数Num)
    属性名 字段类型 长度 主键或外键 说明
    CNUM INT 5 主键 班号
    NUM INT 5 人数

    ⑤系Depart(系号Dno、系名Dname)
    属性名 字段类型 长度 主键或外键 说明
    DNO INT 5 主键 系号
    DNAME CHAR 30 系名

    ⑥专业Major(专业号Mno、专业名Mname、系号Dno)
    属性名 字段类型 长度 主键或外键 说明
    MNO INT 5 主键 专业号
    MNAME CHAR 20 专业名
    DNO INT 5 外键 系号
    ⑦选课CV(学号Sno、课程号Cno、成绩Result)
    属性名 字段类型 长度 主键或外键 说明
    SNO INT 5 学号
    CNO INT 5 课程号
    RESULT CHAR 5 成绩

    ⑧学生—教师ST(学号Sno、职工号Tno、课程号Cno)
    属性名 字段类型 长度 主键或外键 说明
    SNO INT 5 学号
    TNO INT 5 职工号
    CNO INT 5 课程号

    4.4逻辑结构设计

    一个系有若干个专业,一个专业有若干个班级,一个学生可以选修多门课程。
    

    关系模式表:
    ①学生Student(学号Sno、姓名Sname、性别Sex、专业号Mno、班号Classno)
    学号->姓名,学号->性别,学号->专业号,班号->专业号;
    ②教师Teacher(职工号Tno、姓名Tname、职称Title)
    职工号->姓名,职工号->职称;
    ③课程Course(课程号Cno、课程名Cname、学分Credit)
    课程号->课程名,课程号->学分;
    ④班级Class(班号Cnum、人数Num)
    班号->人数;
    ⑤系Depart(系号Dno、系名Dname)
    系号->系名;
    ⑥专业Major(专业号Mno、专业名Mname、系号Dno)
    专业号->专业名,专业号->系号;
    ⑦选课CV(学号Sno、课程号Cno、成绩Result)
    学号、课程号->成绩;
    ⑧学生—教师ST(学号Sno、职工号Tno、课程号Cno)
    学号、职工号->课程号

    其中①为第三范式,②③④⑤⑥⑦⑧均为BCNF范式

    4.5 物理设计

    4.5.1索引设计:

    CREATE TABLE Student1 (
    Sname CHAR(20),
    Sno INT(5),
    Sex CHAR(2),
    Mno INT(5),
    Classno INT(5),
    PRIMARY KEY (Sno),
    Index Student1(Sno)
    );
    CREATE TABLE Teacher1 (
    Tno INT(5),
    Tname CHAR(20),
    Title CHAR(5),
    Index Teacher1(Tno)
    );
    CREATE TABLE Course1 (
    Cname CHAR(20),
    Cno INT(5),
    Credit CHAR(2),
    Index Course1(Cno)
    );
    CREATE TABLE Class1 (
    Cnum INT(5),
    Num INT(5),
    Index Class1(Cnum)
    );
    CREATE TABLE Depart1 (
    Dname CHAR(20),
    Dno INT(5),
    Index Depart1(Dno)
    );
    CREATE TABLE Major1 (
    Mname CHAR(20),
    Mno INT(5),
    Dno INT(5),
    Index Major1(Mno)
    );
    CREATE TABLE CV1 (
    Sno INT(5),
    Cno INT(5),
    Result CHAR(5),
    Index CV1(Sno,Cno)
    );
    CREATE TABLE ST1 (
    Sno INT(5),
    Tno INT(5),
    Cno INT(5),
    Index ST1(Sno,Tno)
    );

    4.5.2触发器设计:

    1、删除课程表中的课程号,相应删除选课表和学生-教师表中的课程号:
    DELIMITER %%
    Create trigger deletorder
    after delete on Course
    for each row
    begin
    delete from CV where Cno=old.Cno;
    delete from ST where Cno=old.Cno;
    end %%
    DELIMITER %%

    4.6数据库实施

    4.6.1用户模式设计

    视图设计:
    1、成绩查询
    Create view Rselect
    As
    Select cnum,CV.sno,sname,cno,result
    From Student,CV
    Where Student.sno=CV.sno;
    2、学生所学课程及学分统计
    Create view Total
    As
    Select Sno,CV.Cno,Cname,Credit
    From Course,CV
    Where Course.Cno=CV.Cno;
    3、学生总成绩、平均成绩
    Create view sum
    As
    Select CV.Sno 学号,sname 姓名,sum(result) 总成绩,avg(result) 平均成绩
    From Student,CV
    Where Student.Sno=CV.Sno;

    存储过程设计:
    1、修改成绩
    DELIMITER CREATEPROCEDUREXiugai(INSno1INT(5),INCno1INT(5),INResult1CHAR(5))BEGINupdateCVsetResult=Result1whereSno=Sno1andCno=Cno1;END CREATE PROCEDURE Xiugai (IN Sno1 INT(5), IN Cno1 INT(5),IN Result1 CHAR(5)) BEGIN update CV set Result=Result1 where Sno=Sno1 and Cno=Cno1; END
    DELIMITER ;
    2、查询总学分
    DELIMITER CREATEPROCEDUREXuefen(INSno1INT(5),INSnameCHAR(20))BEGINSelectSno,Sname,Sum(Credit)asFromstudent,CVWhereStudent.sno=CV.snoGroupbySno;END CREATE PROCEDURE Xuefen (IN Sno1 INT(5),IN Sname CHAR(20)) BEGIN Select Sno,Sname,Sum(Credit) as 总学分 From student,CV Where Student.sno=CV.sno Group by Sno; END
    DELIMITER ;

    4.6.2安全性设计

    新建表
    create table user(username varchar(10),passw1 varchar(40),passw2 varchar(40));
    insert into user values (‘user1’,MD5(‘110’),SHA1(‘110’));
    insert into user values (‘user2’,MD5(‘120’),SHA1(‘120’));
    insert into user values (‘user3’,MD5(‘112’),SHA1(‘112’));

    Create user ‘cu1’@‘localhost’ identified by ‘110’;
    Create user ‘cu2’@‘localhost’ identified by ‘120’;
    Create user ‘cu3’@‘localhost’ identified by ‘112’;

    cus1@ localhost授权,即管理员的权限
    Grant all on Stu.Student to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.Teacher to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.Course to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.Depart to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.Major to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.CV to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.ST to ‘cu1’@‘localhost’ with grant option;

    cus2@ localhost授权,即学生的权限
    Grant select on Stu.CV to ‘cu2’@‘localhost’ with grant option;

    cus3@ localhost授权,即教师的权限
    Grant select,update on Stu.CV to ‘cu3’@‘localhost’ with grant option;

    4.6.3事务设计

    1、修改某一门课程的学分:
    Delimiter //
    Create Procedure BB(IN Cno1 INT(5),IN Cname1 CHAR(20),IN Credit1 CHAR(2))
    Begin
    declare t_err int default 0;
    declare CONTINUE HANDLER FOR SQLEXCEPTION SET t_err = 1;

    Start Transaction;
    Select Cno修改前的课程号 from Course where Cno=Cno1;
    Select Cname修改前的课程名 from Course where Cname=Cname1;
    Select Credit修改前的学分 from Course where Cno=Cno1;
    do sleep(20);/暂停20秒/
    Update Course set Credit = Credit1 where Cno=Cno1;
    Select Credit 修改后的学分 from Course where Cno=Cno1;
    if t_err =1 then
    Rollback; /* 有sql 错误 回滚 /
    else
    commit; /
    无 sql 错误 提交 */
    end if;
    end //

    Delimiter ;

    2、修改成绩:
    Delimiter //
    Create Procedure BC(IN Sno1 INT(5),IN Cno1 INT(5),IN Result1 CHAR(5))
    Begin
    declare t_err int default 0;
    declare CONTINUE HANDLER FOR SQLEXCEPTION SET t_err = 1;

    Start Transaction;
    Select sum(Result)修改成绩前的总分 from CV where Sno=Sno1;
    Select avg(Result)修改成绩前的平均分 from CV where Sno=Sno1;
    Select Result查询需要修改的课程号的成绩 from CV where Sno=Sno1 and Cno=Cno1;
    do sleep(20);/暂停20秒/
    Update CV set Result = Result1 where Sno=Sno1 and Cno=Cno1;
    Select Result查询修改后的课程号的成绩 from CV where Sno=Sno1 and Cno=Cno1;
    Select sum(Result)修改成绩后的总分 from CV where Sno=Sno1;
    Select avg(Result)修改成绩后的平均分 from CV where Sno=Sno1;

       if t_err =1 then
          Rollback; /* 有sql 错误 回滚 */
       else
          commit; /* 无 sql 错误 提交 */
       end if;
    

    end //

    Delimiter ;

    五、软件设计

    5.1登陆界面

    在这里插入图片描述

    图5-1-1 登陆界面
    在这里插入图片描述

    图5-1-2 登陆成功界面

    5.2学生成绩查询界面

    在这里插入图片描述

    图5-2-1 学生成绩查询界面图

    5.3教师界面

    在这里插入图片描述

    图5-3-1 教师界面图
    在这里插入图片描述

    图5-3-2 新增学生信息界面图
    在这里插入图片描述

    图5-3-3 更新学生信息界面图
    在这里插入图片描述

    图5-3-4 删除学生信息界面图

    六、项目设计总结

    通过学生成绩管理系统项目设计,加深了对数据库设计的理解,对于设计一个数据库项目的流程有了一定的概念。在这次项目设计中,回顾了以前很多的知识点,但是也发现了很多问题,最终解决了,所以也收获了很多。
    此次项目的设计让我们对Mysql数据库的了解更加深入,了解到了更多的知识点,也对Navicat软件有了一定的了解。在整个设计过程中,通过把各个管理信息连接起来的分析,锻炼了我们对事情的分析能力,通过怎么解决过程中遇到的问题,提高了我们查找文献的能力,对网络资源利用的能力与同学交流的能力。 项目最终开发出来的程序实现的功能比较简单,但也基本达到了项目设计的要求,可以看出设计程序的组员是花了不少心思的。
    最重要的是,这次数据库项目的设计,为我们以后程序开发的道路打下了扎实的基础。

    展开全文
  • 1.题目与要求1.1问题提出 设计学生成绩管理系统,有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计学生成绩管理系统1.2本系统涉及的知识点 结构体数组、结构体指针、数组、...

    1.题目与要求

    1.1问题提出

    设计学生成绩管理系统,有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统

    1.2本系统涉及的知识点

    结构体数组、结构体指针、数组、循环、函数、分支、指针

    1.3 功能要求

    1、成绩录入:输入学生的学号、姓名及三门课的成绩;

    2、成绩查询:(至少一种查询方式)。按学号查询学生记录,或查询不及格学生的记录;

    3、成绩统计:计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序后输出;对学生单科成绩排序,输出学生姓名与该科成绩;

    4、退出系统:退出整个系统(即主菜单);

    1.4 根据所选菜单编写相应代码:

    1)输入学生的信息,利用循环赋值的方式,给结构体数组赋值。

    2)输出平均分函数ave:首先定义double型数组,利用循环赋值的方式,计算出三门课的成绩的平均值放入数组中,利用循环的方式,输出相关值及平均值。

    3)按学号查询成绩函数search:首先输入要查询的学号,与结构体中的学号进行比较,如果相等输出这个学生的信息,另外输出没有查到相关结果。

    4)按平均分排序后输出函数average:首先另外一个定义结构体数组、结构体指针变量,计算三门课程的平均值存到结构体成员aver中,利用循环的方式,进行平均分排序,输出相应的学生信息。

    5)对学生单科成绩排序后输出函数grade:首先另外一个定义结构体数组、结构体指针变量,通过选择k的值来选择按分数几排序,利用循环的方式,进行单科成绩排序(从大到小),输出学生姓名及该课的成绩。

    6)退出程序。

    3d1c56b565a292d2847be3ac5208b532.png

    2、附录:程序清单

    #include <stdio.h>

    #include<stdlib.h>

    typedef struct student

    {

    int num;

    char name[13];

    int score[3];

    double aver;

    }STU;

    void ave(STU s[],int n)

    { double a[1000];

    int i;

    for(i=0;i<n;i++)

    a[i]=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3.0;

    printf("学号t姓名tt分数1t分数2t分数3t平均分n");

    for(i=0;i<n;i++)

    printf("%dt%stt%dt%dt%dt%.1fn",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],a[i]);

    }

    void search(STU s[],int n, int a)

    {

    int i,k=0;

    for(i=0;i<n;i++)

    {

    if(s[i].num==a)

    { printf("学号t姓名t分数1t分数2t分数3tn");

    printf("%dt%st%dt%dt%dn",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2]);

    k=k+1;

    break;

    }

    }

    if(k==0)

    printf("t没有查询到相关信息");

    }

    void average(STU s[],int n)

    { int i,j;

    STU ss[10000];

    STU *p=ss;

    for(i=0;i<n;i++)

    s[i].aver=(s[i].score[0]+s[i].score[1]+s[i].score[2])/3.0;

    for(i=0;i<n;i++)

    ss[i]=s[i];

    for(i=0;i<n-1;i++)

    {

    for(j=i+1;j<n;j++)

    {

    if(ss[i].aver<ss[j].aver)

    {

    STU temp=*(p+i);

    *(p+i)=*(p+j);

    *(p+j)=temp;

    }

    }

    }

    printf("学号t姓名t平均分n");

    for(i=0;i<n;i++)

    printf("%dt%st%.1fn",(p+i)->num,(p+i)->name,(p+i)->aver);

    }

    void grade(STU s[],int n)

    {int i,j,k;

    STU ss[10000];

    STU *p=ss;

    for(i=0;i<n;i++)

    ss[i]=s[i];

    printf("请输入k的值查询,k=0时按分数1,k=1时按分数2,k=2时按分数3:");

    scanf("%d",&k);

    for(i=0;i<n-1;i++)

    {

    for(j=i+1;j<n;j++)

    {

    if(ss[i].score[k]<ss[j].score[k])

    {

    STU temp=*(p+i);

    *(p+i)=*(p+j);

    *(p+j)=temp;

    }

    }

    }

    printf("姓名t分数n");

    for(i=0;i<n;i++)

    printf("%st%dn",(p+i)->name,(p+i)->score[k]);

    }

    main()

    { int N,i;

    STU s[10000];

    int num1;

    int menu;

    printf("请输入学生个数:");

    scanf("%d",&N);

    for(i=0;i<N;i++)

    {

    printf("请输入学号 姓名 分数1 分数2 分数3n");

    scanf("%d%s%d%d%d",&s[i].num,s[i].name,&s[i].score[0],&s[i].score[1],&s[i].score[2]);

    }

    printf("nn");

    printf("*************学生成绩管理系统*************nn");

    printf("1--------输出平均分n");

    printf("2--------按学号查询成绩n");

    printf("3--------按平均分排序后输出n");

    printf("4--------对学生单科成绩排序后输出n");

    printf("5--------退出程序n");

    printf("nn");

    while(1)

    {

    printf("n请输入菜单号:");

    scanf("%d",&menu);

    switch(menu)

    {

    case 1: ave(s,N);break;

    case 2: printf("请输入要查询的学号:");

    scanf("%d",&num1);

    search(s,N,num1);

    break;

    case 3: average(s,N);break;

    case 4: grade(s,N);break;

    case 5: exit(0);

    default:

    printf("菜单号输入错误n");

    break;

    }

    }

    }

    3、运行过程

    4c8739e4673fb81ba132ce9b58313b93.png

    f592d06b9ad0913879dfa59c1c9727ec.png

    74301b9fe955a2b273faa3c8f8adf5c2.png

    fdf32cf0469b43d6c0d248cc433b7419.png

    7f7a0d870b6a0505b52850e25bf71675.png

    8bd46193d4bba12d84e49e52b8e33297.png
    展开全文
  • C语言 学生信息管理系统 课程设计实验报告 源码
  • 此资源对应于我博客上发布的学生信息管理系统JAVA代码,我一共传了代码、MySQL数据库资源和完整的实验报告,三份可以下载下来就可以当一次很优秀的课程设计作业。
  • 1、目的:为规范订单/合同管理,使订单/合同执行有序进行,特制定本流程。2、适用范围适用于业务部门、集团各分公司所有订单/合同执行的全过程。3、职责3.1分公司各部门3.1.1业务部门(1)负责接收订单/合同,与客户...

    1

    、目

    为规范订单

    /

    合同管理,使订单

    /

    合同执行有序进行,特制定本流程。

    2

    、适用范围

    适用于业务部门、集团各分公司所有订单

    /

    合同执行的全过程。

    3

    、职责

    3.1

    分公司各部门

    3.1.1

    业务部门

    (

    1

    )负责接收订单

    /

    合同,与客户进行沟通,提供客户所有要求信息。

    (

    2

    )负责组织相关部门进行订单

    /

    合同评审。

    (

    3

    )负责编制“报价联系单”、“大货采购单

    /

    购销合同”。

    3.1.2

    技术部门

    (

    1

    )负责编制“报价单”,“工程更改通知单”。

    (

    2

    )负责产品技术、工艺可行性评审及价格评审。

    3.1.3

    生产部门

    (

    1

    )负责产品生产保证可行性评审。

    (

    2

    )负责按照订单的各项要求安排生产。

    3.1.4

    品质部门

    (

    1

    )负责产品的质量保证可行性评审。

    (

    2

    )负责按照订单的各项要求及检验规范安排产品检验。

    3.2

    服务管理委员会

    3.2.1

    采购部

    (

    1

    )负责原材料、外购件资源配套能力、价格的评审。

    (

    2

    )负责每天对钢材等主要原材料价格进行通报,做出“主要原材料价格趋势图”,并

    通过电子邮件知会各分公司总经理、总裁及董事长,作为各分公司总经理决策参考。

    3.2.2

    财务部

    (

    1

    )负责产品报价单销售毛利率、销售费用率、销售利润率的评审。

    (

    2

    )负责对汇率、出口退税等影响产品报价因素进行及时通报,每月出具汇率、出口关

    税报表,作为各分公司总经理决策参考。当汇率、出口退税出现变动时,第一时间通知

    各分公司总经理。

    3.2.3

    品质监督部

    (1)

    负责产品质量保证可行性评审;负责订单

    /

    合同的备案管理。

    (2)

    负责监督和检查各分公司在生产之前完成检验规范、检验标准的制定。

    3.2.4

    总裁负责订单

    /

    合同的审批。

    展开全文
  • 计算机学院 C语言程序设计报告设计名称学生成绩管理系统 专业软件工程 指导老师 班级 姓名 学号 座号 2011-6-15 一实验目的 1.在编辑应用程序过程中逐步加深对C语言编程的理解 2.加强实践的能力动手能力同时...
  • java学生信息管理系统实验报告 JAVA 程序设计实验报告学 号:姓 名: 班 级: 实验、Java 课程设计--------学生信息管理系统一、实验目的 1. 掌握 Java 基本语法2. 理解面向对象编程特点3. 理解 Java I/O 编程4....
  • 学生信息管理系统 数据库实验报告课题:ACCESS数据库设计小组成员:组员:组员:组员:班级:通信指导老师:目 录一、开发背景--------------------------------------------------- 3二、项目目标-----------------...
  • 学生学籍管理系统实验报告 设计一个基于文件结构的学籍管理系统,要求实现对学生基本信息进行录入、查询、修改和删除等基本操作。
  • 学生管理系统实验报告 学 期 2018-2019 课程名称 Java 程序设计实验 实验目的 掌握JDK的安装与环境变量的配置熟练使用 EclipseWindowBulider 插件 navicat 和 MySql 熟练掌握 Java 基础语法与程序结构了解面向对象的...
  • 学生通讯录管理系统(c语言课程设计实验报告).doc还剩26页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,很抱歉,此页已超出免费预览范围啦!如果喜欢就下载吧,价低环保!内容要点:C 语言课程设计报告——...
  • 试验汇报 学生信息管理系统 学号XXXXXXXX 姓名XXXXXX 班级XXXXXXXXXXXXXXX 摘 要 本文着重叙述了学生信息管理系统开发过程对于设计思想和设计步骤也做出了全方面叙述在数据库创建思想和各个数据表之间具体关联等方面...
  • 2 次实验报告实验内容及基本要求:实验项目名称:小型数据库设计实验类型: 设计每组人数: 1实验内容及要求:按照数据库设计流程开发实现一个小型的数据库应用系统实验结果:一、小型数据库描述:现有一个小型的...
  • 学生管理系统设计与实现(查找和排序)实验报告文档
  • 移通学院 C 语言程序设计报告设计名称学生成绩管理系统 专业 指导老师 班级 姓名 学号 座号 时间 1 一实验目的 1.在编辑应用程序过程中逐步加深对C 语言编程的理解 2.加强实践的能力动手能力同时进一步对所学的...
  • 学生信息管理系统包含实验报告,描述了设计思路,以及操作过程。
  • 设计一个类Cstudent,类中包含一个学生的基本数据如下: 编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。 并假设编号为整数,且从1号往后连续编号;姓名为字符串,性别为字符。如: 1 LiPing m 18 89 98 ...
  • C++课程设计报告 学生籍贯信息管理系统 班级 学号 姓名 目录 . . 一程序设计思路及步骤 一程序设计步骤 ( 二 ) 程序设计思路 二流程图 三完整源程序 四运行界面 五存在问题 六心得体会 . . 学生籍贯信息管理系统 一...
  • C语言课程设计报告源码下载方式关注微信公众号 跨时代的jay回复 学生成绩管理系统为大家提供一些帮助!获取链接后复制到浏览器即可下载 课题题目: 学生信息管理系统 班 级: 信卓11801 姓 名: 聂健 班级序号: ...
  • 计算机与信息工程学院 面向对象课程设计报告 班 级 计算机学院 专 业 计算机科学与技术 题 目 学牛成绩管理系统 指导教师 导师职称 学 号 姓 名 组 长: 年 月 日 一 设计目的 1定义类 2实现程序功能 4 错误未定义...
  • C语言应用实验报告 题 目 学生成绩管理系统数组版 专业名称 班 级 学 号 学生姓名 指导教师 完成时间 目 录 第 1 章需求分析3 第 2 章总体设计4 2.1 系统的程序流程图4 4 2.2 系统的全局变量和常量4 2.3 系统的函数...
  • 系统概述:通过对学校日常教学管理中的课程、选课、学生、教师、成绩等相关内容进行分析,完成具有学生管理、成绩管理、课程管理等相关功能的小型数据库管理应用系统。 基本要求: 1、完成进学生、班级、课程表的...
  • 结业设计简单的学生管理系统 结业设计简单的学生管理系统
  • 实训报告 实训名称 学生成绩管理系统 系?部 专业班级 学生姓名 学 号 指导教师 完成日期 南京铁道职业技术学院 装订 装订线 目 录 目? 录. 3 1? 实训概述. 3 2? Java? 访问并处理数据库的课题描述. 3 2.1? 课题简介....
  • 学院 计算机与信息工程学院 面向对象课程设计报告 班 级 计算机学院 专 业 计算机科学与技术 题 目 学生成绩管理系统 指导教师 导师职称 学 号 姓 名 组 长 word 专业资料 . 年 月 日 word 专业资料 . 目 录 一 设 ...
  • JOUKKAL 0T NORTHWKSTZRN POLTTECHHICAL UHMRfiTTT ltDfG Dfe COUXGE c语言应用实验报告 题目 学生成绩管理系统数组版 专业名称 班 级 学 号 学生姓名 指导教师 完成时间 TOC \o "1-5" \h \z \o "Current Document" ...
  • # 第一题:设计一个全局变量,来保存很多个学生信息;学生(学号, 姓名,年龄);思考要用怎样的结构来保存;# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄);你将其保存在全局...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 293
精华内容 117
关键字:

学生管理系统设计实验报告