学生信息管理系统

学生信息管理系统


一、实现目标

实现一个简单的学生信息管理系统,要求系统能为客户提供下列各项服务:
1.教学管理人员能够使用这个系统对学生基本信息,课程信息进行管理,包括数据的添加,修改,删除和浏览;
2.能对学生选课进行管理,包括添加学生选课信息。录入成绩;
3.能够使用查询功能,快速查到指定学生或者指定课程的基本信息以及所指定学生的选课信息;
4.能够对学生选课情况进行简单统计,包括所选的总的课程数,总学分数以及平均成绩;
5.要注意添加学生基本信息,课程信息相关数据时,学号和课程号不能重复;还有在添加学生选课信息时,要求该学生和课程必须时存在的,而且不能添加重复的选课信息;
6.提供友好的交互界面,可以方便用户进行功能选择,实现信息的管理和查询,并可清晰地显示相关的信息。

二、实现方式

使用VS的MFC。微软基础类库(英语: Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
在这里插入图片描述
MFC的使用
MFC的入门教程

三、主要函数

1.结构体

代码如下(示例):

struct student {
    char name[30];// 学生姓名
    char num[30];//学号
    int zy;//专业
    int bj;//班级
    int math;//数学成绩
    int english;//英语成绩
    int dl;//专业课导论成绩
    int c;//C语言成绩
    int ty;//体育成绩
    int s;//总分
    double ave;//平均分
};

2.开始函数声明

代码如下(示例):

void fileread(struct student stu[M]);//*读取文件函数
void filesave(struct student stu[M]);//*保存文件函数
void input(struct student stu[M]);//****输入数据函数
void output(struct student stu[M]);//***输出函数
void del(struct student stu[M]);//******删除学生信息函数 (1 、2)
void gai(struct student stu[M]);//******改成绩函数
void chakan(struct student stu[M]);//**查询学生成绩信息函数
void name_(struct student stu[M]);//****使用学生姓名删其信息 1
void num_(struct student stu[M]);//*****使用学生学号删其信息 2
void order(struct student stu[M]);//****进行排序函数


int count = 0;//输入学生成绩信息的个数,一开始为零
struct student t;

//这个t是进行order排序时用的


int main()
{
    int sum = 0, xuan;//xuan一开始进入界面进行选择 ,
    system("mode con: cols=369 lines=3690"); //控制编译器高和宽
    struct student stu[M];
    //**********代码运行界面*********
    printf("\t\t\t\t\t\t   欢迎使用学生成绩管理信息系统\n");
    do {
        printf("\t\t\t\t\t  -------------------------------------------\n");
        printf("\t\t\t\t\t\t   ***学生成绩信息管理系统***\n");
        printf("\t\t\t\t\t\t\t ***************\n");
        printf("\t\t\t\t\t\t\t 1、输入学生信息\n");
        printf("\t\t\t\t\t\t\t 2、浏览学生信息\n");
        printf("\t\t\t\t\t\t\t 3、查看学生信息\n");
        printf("\t\t\t\t\t\t\t 4、修改学生成绩\n");
        printf("\t\t\t\t\t\t\t 5、删除学生信息\n");
        printf("\t\t\t\t\t\t\t 6、学生信息排序\n");
        printf("\t\t\t\t\t\t\t 7、读取文件信息\n");  //从文件读取
        printf("\t\t\t\t\t\t\t 8、保存到文件\n");    //保存到文件
        printf("\t\t\t\t\t\t\t 9、退出系统\n");
        printf("\t\t\t\t\t\t\t ***************\n");
        printf("\t\t\t\t\t\t\t 请输入你的选择\n");
        scanf_s("%d", &xuan); //进行选择功能
        fflush(stdin);       //清除输入缓冲区
        if (xuan > 9 || xuan <= 0)
        {
            sum++;
            if (sum >= 8)
            {
               printf("输入错误次数过8次,程序将重新开始\n");
                //通过限制错误输入,避免进入死胡同
                system("pause");        //程序暂停,重新选择
                system("cls");   //清屏语句
            }
        }
        switch (xuan)       //根据选择,调用不同的函数来完成不同的任务
        {
        case 1:input(stu); break;   //输入
        case 2:output(stu); break;  //输出
        case 3:chakan(stu); break; //查询
        case 4:gai(stu); break;     //修改
        case 5:del(stu); break;     //删除
        case 6:order(stu); break;   //排序
        case 7:fileread(stu); break;//读取文件数据
        case 8:filesave(stu); break;//保存文件数据
        case 9:printf("使用完毕,请关掉程序\n"); system("pause"); break;
        default:printf("无效的选择,请重新输入\n"); break;
        }
    } while (xuan != 9);
    printf("本程序结束 over\n");
    return 0;
}

3.保存文件函数

代码如下(示例):

void filesave(struct student stu[M])
{
    int a = 0;
    char b;
    FILE* fp;
    printf("请确认一边是否已经输入学生信息了:'yes' or 'no'?\n");
    scanf_s("%c", &b,1);
    fflush(stdin);//清除输入缓冲区
    while (b != 'yes' && b != 'no')
    {
        if (b != 'yes' && b != 'no')
            printf("输入错误,重新输入\n");
        printf("确定请输入'yes' or 'no'?\n");
        scanf_s("%c", &b,1);
        fflush(stdin);//清除输入缓冲区
    }
    if (b == 'yes')
    {
        errno_t err = fopen_s(&fp, "D:\Stu\stuSys","w");
        if (err)
        {
            printf("文件打开错误,程序无法进行\n");
            exit(0);
        }
        for (a = 0; a < count; a++)
        {
            fwrite(&stu[a], sizeof(struct student), 1, fp);
        }
        fclose(fp);
        if (count == 0)
            printf("无学生成绩信息,不能保存\n");
        else
            printf("数据已经保存\n");
    }
    else
        return;
}

4.读取文件函数

代码如下(示例):

void fileread(struct student stu[M])
{
    int a = 0;
    char b;
    FILE* fp;
    system("cls");//清屏语句
    printf("请确认是否已经输入或存有学生信息:'yes'or'no'?\n");
    scanf_s("%c", &b,1);
    fflush(stdin);//清除输入缓冲区
    while (b != 'yes' && b != 'n0')
    {
            if (b != 'yes' && b != 'no')
                printf("输入错误,重新输入\n");
        printf("请确认是否已经输入或存有学生信息:'yes'or'no'?\n");
        scanf_s("%c", &b,1);
        fflush(stdin);//清除输入缓冲区
    }
    if (b == 'yes')
    {
        errno_t err = fopen_s(&fp, "D:\Stu\stuSys", "r");
        if (err)
        {
            printf("文件打开错误,程序不能进行\n");
            exit(0);
        }
        fread(&stu[a], sizeof(struct student), 1, fp);
        count = 0;
        count++;
        a++;
        while (fread(&stu[a], sizeof(struct student), 1, fp))
        {
            a++;
            count++;
        }
        fclose(fp);
        printf("数据读取完毕!!!\n");
        system("cls");//清屏语句
        system("pause");//系统重新开始 ,进行选择功能(1~9)
    }
    else
        return;
}

5.输入函数

代码如下(示例):

void input(struct student stu[M])     
{
    int len;
    system("cls");//清屏语句
    printf("请添加要输入学生的信息\n");
    do {
        printf("输入学生学号(12位数)\n");
        //do-while循环,输错时,有提示(学号为12个数字)
        scanf_s("%s", &stu[count].num,15);
        len = strlen(stu[count].num);
    } while (len != 12);
    printf("输入同学的姓名(字母)\n");
    scanf_s("%s", stu[count].name,20);
    printf("输入学生的专业代码:1物联网工程 2计算机科学与技术 3软件工程 4大数据 \n");
    //采用如此方法解决了专业输入难问题
    scanf_s("%d", &stu[count].zy,1);
    printf("输入学生班级号码:1、31 2、32  \n");
    scanf_s("%d", &stu[count].bj,1);
    do {
        printf("按顺序输入不大于100的学生各科成绩\n");
        printf("数学、英语、专业导论课、C语言、体育\n");
        scanf_s("%d%d%d%d%d", &stu[count].math, &stu[count].english, &stu[count].dl, &stu[count].c, &stu[count].ty,15);
    } //判断分数值是否超过100 ,若超过则重新输入
    while (stu[count].math > 100 || stu[count].english > 100 || stu[count].dl > 100 || stu[count].c > 100 || stu[count].ty > 100);
    //求总分
    stu[count].s = (stu[count].math + stu[count].english + stu[count].dl + stu[count].c + stu[count].ty);
    //求平均值
    stu[count].ave = stu[count].s / 5.0;    
    //输入学生成绩信息的个数
    count++;     

}

6.输出函数

代码如下(示例):

void output(struct student stu[M])
{
    int j;
    system("cls");//清屏语句
    if (count == 0)
    {
        printf("目前没有学生信息记录\n");
        return;
    }
    for (j = 0; j < count; j++)
    {
        //for循环控制输出的个数
        for (j = 0; j < count; j++)
        {
            printf("学号:%s  ", stu[j].num);
            printf("姓名:%s  ", stu[j].name);
            if (stu[j].zy == 1)
                printf("专业:物联网工程");
            else if (stu[j].zy == 2)
                printf("专业:计算机科学与技术");
            else if (stu[j].zy == 3)
                printf("专业:软件工程");
            else
                printf("专业:大数据");
            printf("班级:18221071%d  ", stu[j].bj);
            printf("数学:%d", stu[j].math);
            printf("英语:%d", stu[j].english);
            printf("专业课导论:%d", stu[j].dl);
            printf("C语言:%d", stu[j].c);
            printf("体育:%d", stu[j].ty);
            printf("总分:%d", stu[j].s);
            printf("平均:%.1lf ", stu[j].ave);
            printf("顺序:%d \n", j + 1);
        }
    }
}

7.查看函数

代码如下(示例):

void chakan(struct student stu[M])   
{
    int j = 0;
    char xh[25];//通过学号查找学生信息
    system("cls");
    if (count == 0)
    {
        printf("目前没有学生信息\n");
        return;
    }
    else
    {
        printf("请输入你想要查看的同学学号(12位数字)\n");
        scanf_s("%s", &xh,15);
        fflush(stdin);//清除输入缓冲区
        for (j = 0; j < count; j++)
        {
            if (strcmp(stu[j].num, xh) == 0)//判断大小是否相等
            {
                printf("学号:%s  ", stu[j].num);
                printf("姓名:%s  ", stu[j].name);
                if (stu[j].zy == 1)
                    printf("专业:物联网工程");
                else if (stu[j].zy == 2)
                    printf("专业:计算机科学与技术");
                else if (stu[j].zy == 3)
                    printf("专业:软件工程");
                else
                    printf("专业:大数据:");
                printf("班级:18221071%d", stu[j].bj);
                printf("数学:%d", stu[j].math);
                printf("英语:%d", stu[j].english);
                printf("专业课导论:%d", stu[j].dl);
                printf("C语言:%d", stu[j].c);
                printf("体育:%d", stu[j].ty);
                printf("总分:%d", stu[j].s);
                printf("平均:%.1lf ", stu[j].ave);
                // *******在查看学生个人成绩时,可以看到总分排名*****
                int a, b, c = j;
                //*****冒泡排序******
                for (a = 0; a < count; a++)    
                {
                    for (b = a + 1; b < count; b++)
                    {
                        if (stu[b].s > stu[a].s)
                        {
                            t = stu[b];
                            stu[b] = stu[a];
                            stu[a] = t;
                        }
                    }
                }
                int d = 1;
                for (a = 0; a < count; a++)
                {
                    if (stu[c].s < stu[a].s)
                        d++;
                    else
                        break;
                }
                printf("总分排名:%d\n", d);
            }
        }
        if (j == count)//判断是否有学生成绩信息
            printf("没有你所查看的学生信息\n");
    }
}

8.修改成绩函数

代码如下(示例):

void gai(struct student stu[M])
{
    int j, course;
    char xh[25];
    system("cls");//清屏语句
    if (count == 0)//判断是否有学生成绩信息
    {
        printf("目前没有学生信息\n");
        return;
    }
    else
    {
        printf("修改的学生学号为:\n");
        scanf_s("%s", &xh,12);
        fflush(stdin);//清除输入缓冲区
        for (j = 0; j < count; j++)
            if (strcmp(stu[j].num, xh) == 0)
            {
                printf("修改学生成绩\n");
                printf("选择课程: 1、数学 2、英语 3、专业课导论 4、C语言 5、体育\n");
                scanf_s("%d", &course,1);
                printf("改为多少分:\n");
                //进行修改所选学生的一门的成绩
                switch (course)
                {
                case 1:scanf_s("%d", &stu[j].math,3); break;
                case 2:scanf_s("%d", &stu[j].english,3); break;
                case 3:scanf_s("%d", &stu[j].dl,3); break;
                case 4:scanf_s("%d", &stu[j].c,3); break;
                case 5:scanf_s("%d", &stu[j].ty,3); break;
                default:printf("请重新输入\n"); break;
                }
            }
    }
}

9.自定义删除函数

代码如下(示例):

void del(struct student stu[M])
{
    int choice;
    system("cls");//清屏语句
    if (count == 0)
    {
        printf("目前没有学生信息\n");
        return;
    }
    else
    {
        printf("请选择你所要删除的方式:1、学号 2、姓名 3、取消\n");
        scanf_s("%d", &choice,1);
        switch (choice)
        {
        case 3:return; break;
        case 2:name_(stu); break;
        case 1:num_(stu); break;
        default:printf(",输入错误,重新输入\n"); break;
        }
    }
}

10.排序函数

代码如下(示例):

void order(struct student stu[M])
{
    int j, choice, i;
    system("cls");//清屏语句
    printf("请输入你想要进行排序的方式(所有排序的方式均是降序)!!!\n");
    printf("1、数学 2、英语 3、物联网导论 4、C语言 5、体育 6、平均分 7、学号 8、专业序号排名\n");
    scanf_s("%d", &choice,1);
    //********以下都使用冒泡排序 *****
    switch (choice)
    {
        // 数学排名降序
    case 1:for (i = 0; i < count; i++)
          {
               for (j = i + 1; j < count; j++)
               {
                    if (stu[j].math > stu[i].math)
                    {
                        t = stu[j];
                        stu[j] = stu[i];
                        stu[i] = t;
                     }
                }
           }
          break;
        // 英语排名降序
    case 2:for ( i = 0; i < count; i++)
           {
               for ( j = i + 1; j < count; j++)
               {
                    if (stu[j].english > stu[i].english)
                    {
                        t = stu[j];
                        stu[j] = stu[i];
                        stu[i] = t;
                    }
               }
           }
          break;
          //专业课导论排名降序
    case 3:for (i = 0; i < count; i++)
           {
                for (j = i + 1; j < count; j++)
                {
                     if (stu[j].dl > stu[i].dl)
                     {
                         t = stu[j];
                         stu[j] = stu[i];
                         stu[i] = t;
                     }
                }
            }
           break;
           //C语言排名降序
    case 4:for (i = 0; i < count; i++)
    {
        for (j =i + 1; j < count; j++)
        {
            if (stu[j].c > stu[i].c)
            {
                t = stu[j];
                stu[j] = stu[i];
                stu[i] = t;
            }
        }
    }
          break;
          //体育排名降序
    case 5:for (i = 0; i < count; i++) 
    {
        for (j = i + 1; j < count; j++)
        {
            if (stu[j].ty > stu[i].ty)
            {
                t = stu[j];
                stu[j] = stu[i];
                stu[i] = t;
            }
        }
    }
          break;
          //平均分(总分)排名降序
    case 6:for (i = 0; i < count; i++) 
    {
        for (j = i + 1; j < count; j++)
        {
            if (stu[j].ave > stu[i].ave)
            {
                t = stu[j];
                stu[j] = stu[i];
                stu[i] = t;
            }
        }
    }
          break;
          // 学号排名升序
    case 7:for (i = 0; i < count; i++) 
    {
        for (j = i + 1; j < count; j++)
        {
            if (strcmp(stu[j].num, stu[i].num) < 0)
            {
                t = stu[j];
                stu[j] = stu[i];
                stu[i] = t;
            }
        }
    }
          break;
          // 专业序号排名升序
    case 8:for (i = 0; i < count; i++) 
    {
        for (j = i + 1; j < count; j++)
        {
            if (stu[j].zy < stu[i].zy)
            {
                t = stu[j];
                stu[j] = stu[i];
                stu[i] = t;
            }
        }
    }
          break;
    default:printf("请重新输入\n"); 
        break;
    }
}

四、示意图展示

在这里插入图片描述
在这里插入图片描述

总结

一篇很完整、很不错的论文、希望你们喜欢 摘要 学生成绩管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强.数 据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。 经过分析如此情况,我们使用Microsoft公司的visualstudio开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。 关键词:sql2000,c#,数据一致性,信息管理系统。 Abstract:Student achievement management system is representative information management system (MIS) , whose development mainly consists of two aspects: building and maintain of backward database and development of foreward application program.To the former, we must build a database who has great data-consistence,great data-completion and good data-security. But to the later,that the application program has enough functions and is case to use is required. After analysing so-called condition, we decide to use visualstudio of Microsoft corporation, exploitation implement, utilizing the implement who provides all kinds of face to the object, especially the data window of intellectualized which is able to controlit by concise and convenient,first,we should build the systerm application prototype in a short time,then, carry out the system needing iteration , amending and improving unceasingly, until the consumer satisfied with the viable system which is formed. Key words:sql2000,c# , data window , information management system. 一、引言 1.1 项目开发背景 几年前,各个学校的学生成绩管理基本上都是靠手工进行,随着各个学校的规模增大,有关学生成绩管理工作所涉及的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生成绩管理.但手工管理具有效率底、易出错、对学校的管理提供决策信息较为困难等缺点.我校尽管部分学院或系已开出学生成绩管理系统,但开发的系统不具有通用性,所以我想借本次毕业设计之际,开发一个不仅适用本校各系而且适用于其它各校的通用高校学生成绩管理系统. 采用软件工程的指导方法,选用C/S模式设计的方案,应用SQL Server 2000数据库管理系统,C#程序设计语言,Visual Studio.NET 2003开发工具等开发出来的基于WINDOWS系列的学生学籍管理系统.该系统面向各部门和全体学生,实现对学生成绩情况、学籍情况等的计算机管理。系统支持学生查询自己的学籍信息和成绩信息,还可以修改自己的密码,而教师可以对学生的学籍信息和成绩信息进行添加、删除和修改等的操作,同时本系统支持报表的输出打印功能。减少了部门之间工作的中间环节,提高了跨部门管理的效率。 1.2 项目开发的目标 建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平.帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化、规范化和自动化. 1.3 项目提出的意义 现在我国的大中专院校的学生成绩管理水平普遍不高,有的还停留在纸介质基础上,这种管理手段已不能适应时代的发展,因为它浪费了了许多的人力和物力.在当今信息时代这种传统的管理方法必然被计算机为基础的信息管理系统所代替.如果本系统能被学校所采用,将会改变以前靠手工管理学生成绩的状况,可以树立良好的办学形象,提高工作效率. 二、常用的软件开发方法 2.1 结构化系统开发方法 2.1.1 结构化系统开发的基本思想 用系统工程的思想和工程化的方法,按照用户至上的原则,采取结构化、模块化、自顶向下的方法对系统进行分析与设计。 2.1.2 结构化系统开发方法的特点 1.强调用户的参与。 2.深入调查研究。 3.使用结构化、模块化方法。 4.严格按照阶段进行。 5.开发过程工程化。 2.1.3 结构化系统开发方法的阶段划分 1、系统规划阶段 根据用户的系统开发要求,初步调查,明确问题,然后进行可行性研究。 2、系统分析阶段 系统分析阶段的主要任务是分析业务流程,分析数据与数据流程,提出新系统的逻辑方案。 3、系统设计阶段 系统时间阶段的主要任务是总体结构设计和模块设计。根据设计要求选择合适的软硬件设备,进行代码、用户界面、文件、数据库、网络结构的设计。 4、系统实施阶段 系统实施阶段的主要任务包括编程、操作人员培训以及数据准备,然后投入试运行。 5、系统运行阶段 系统运行阶段的主要任务是进行系统的日常运行管理、评价、审计工作。 2.2 原型开发方法 2.2.1 原型的概念 原型开发方法首先有用户提出开发要求,开发人员识别和归纳用户需求,根据识别、归纳的结果,构造出一个原型,然后同用户一起评价这个原型。如果根本不行,则重新构造原型;如果不满意,则修改原型,直到用户满意为此。 原型按照建立的目的不同可分为抛弃型原型和增量渐进型原型。 2.2.2 抛弃型原型 抛弃型原型主要用于验证软件需求以及设计方案和算法,这是当前使用较广泛的原型。 抛弃型原型开发模型如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值