精华内容
下载资源
问答
  • 学生成绩管理系统v6.0.docx
    2021-05-21 14:48:51

    #include

    #include

    #include

    #define m_l 10

    #define m_num 30

    #define m_cs 6

    typedef struct student

    {

    long num ;

    char name[m_l];

    float score[m_cs];

    float sum;

    float aver;

    }STU;

    int menu(void);

    void Readscore(STU stu[],int n,int m);

    void Aversumofeverystudent(STU stu[],int n,int m);

    void Aversumofeverycourse(STU stu[],int n,int m);

    void Sortbyscore(STU stu[],int n,int m,int (*compare)(float a,float b));

    int Ascending(float a,float b);

    int Descending(float a,float b);

    void swapfloat(float *x,float *y);

    void swaplong(long *x,long *y);

    void swapchar(char x[],char y[]);

    void Assortbynum(STU stu[], int n, int m);

    void Sortbyname(STU stu[], int n, int m);

    void Searchbynum(STU stu[], int n, int m);

    void Searchbyname(STU stu[], int n, int m);

    void StatisticAnlysis(STU stu[], int n, int m);

    void Printscore(STU stu[], int n, int m);

    void Writetofile(STU stu[], int n, int m);

    void Readfromfile(STU stu[], int *n, int *m);

    int main()

    {

    char ch;

    int n=0,m=0;

    STU stu[m_num];

    printf("请输入学生人数(n<=%d):\n",m_num);

    scanf("%d",&n);

    printf("请输入课程数目(m<=%d):\n",m_cs);

    scanf("%d",&m);

    while(1)

    {

    ch=menu();

    switch(ch)

    {

    case 1:

    Readscore(stu,n,m);

    break;

    case 2:

    Aversumofeverystudent(stu ,n,m);

    break;

    case 3:

    Aversumofeverycourse(stu ,n,m);

    break;

    case 4:

    Sortbyscore(stu ,n,m,Descending);

    printf("\n成绩降序排序\n");

    Printscore( stu ,n, m);

    break;

    case 5:

    Sortbyscore(stu ,n,m,Ascending);

    printf("\n成绩升序排序\n");

    Printscore( stu ,n, m);

    break;

    case 6:

    Assortbynum( stu , n, m);

    printf("\n学号升序排序\n");

    Printscore( stu ,n, m);

    break;

    cas

    更多相关内容
  • 学生信息管理系统V6.0: 设计一个学生信息管理系统,包括学生成绩信息数据的求和、排序、查找、模糊查找、分类统计、输出、读写文件等基本操作,要求编程实现如下菜单驱动的学生信息管理系统: (1)录入每个学生的...
  • 学生管理系统V6.0

    2018-01-05 23:48:57
    期末c语言程序设计大作业,主要实现了学生成绩管理系统的基本功能
  • 学生成绩管理系统V6.0

    2012-01-05 20:26:49
    系统用于统计学生的成绩并排名,可按姓名或学号查询,并可写入文件。但还未完善。
  • void htl(STU stu[],int a,int b) { STU temp; int i,j; for(i=0;i;i++) { for(j=i;j;j++) { if(stu[i].sum[j].sum) { temp=stu[i].sum; stu[i].sum=stu[j].sum; stu[j].sum=temp;...}
  • 学生成绩管理系统是一个非常实用的程序,如果能把用户输入的数据存盘,下次运行时独处,就更有用了。增加文件读写的功能编程实现如下菜单驱动的学生成绩管理系统: (1)录入每个学生的学号,姓名和各科考试成绩; (2)...

    github:https://github.com/Jackie0Feng/SAMS
    #系统需求描述

    某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目最多不超过6门(具体门数由键盘输入)。学生成绩管理系统是一个非常实用的程序,如果能把用户输入的数据存盘,下次运行时独处,就更有用了。增加文件读写的功能编程实现如下菜单驱动的学生成绩管理系统:
    (1)录入每个学生的学号,姓名和各科考试成绩;
    (2)计算每门课程的总分和平均分;
    (3)计算每个学生的总分和平均分
    (4)按每个学生的总分由高到低排出名次表;
    (5)按每个学生的总分由低到高排出名次表;
    (6)按学号由小到大排出成绩表;
    (7)按姓名的字典顺序排出成绩表;
    (8)按学号查询学生排名及其各科考试成绩;
    (9)按姓名查询学生排名及其各科考试成绩;
    (10)按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;
    (11)输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。
    (12)将每个学生的记录信息写入文件。
    (13)从文件中读出每个学生的记录信息并显示。
    要求程序运行后先显示如下菜单,并提示用户输入选项:
    1.Input record
    2.Caculate total and average score of every course
    3.Caculate total and average score of every student
    4.Sort in descending order by total score of every student
    5.Sort in ascending order by total score of every student
    6.Sort in ascending order by number
    7.Sort in dictionary order by name
    8.Search by number
    9.serch by name
    10.Statistic analysis
    11.List record
    12.Write to a file
    13.Read from a file
    0.Exit
    Please enter your choice:
    根据用户输入的选项执行相应的操作
    实验目的:在学生管理系统V4.0的基础上,通过增加任务要求,熟悉文件的基本操作,模块化程序设计,增量测试方法。

    #顶层设计
    最后一个版本就是添加文件功能,其实就是简单的讲我们的数据存储下来,以后要用的时候不用输入了,而是从本地读取。连文件管理都算不上,不过这就算操作系统的最基础的文件管理功能了。以后回看操作系统知识时脑中的概念会更加具象。

    /*程序功能:   学生成绩管理
    编码者:   JackieFeng
    日期:  14/11/2021
    版本号:6.0
    备注:
    某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目最多不超过6门(具体门数由键盘输入)。
    学生成绩管理系统是一个非常实用的程序,如果能把用户输入的数据存盘,下次运行时独处,就更有用了。
    增加文件读写的功能编程实现如下菜单驱动的学生成绩管理系统:
    (1)录入每个学生的学号,姓名和各科考试成绩;
    (2)计算每门课程的总分和平均分;
    (3)计算每个学生的总分和平均分
    (4)按每个学生的总分由高到低排出名次表;
    (5)按每个学生的总分由低到高排出名次表;
    (6)按学号由小到大排出成绩表;
    (7)按姓名的字典顺序排出成绩表;
    (8)按学号查询学生排名及其各科考试成绩;
    (9)按姓名查询学生排名及其各科考试成绩;
    (10)按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;
    (11)输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。
    (12)将每个学生的记录信息写入文件。
    (13)从文件中读出每个学生的记录信息并显示。*/
    #include <stdio.h>
    #include "SAMS.h"
    #include <string.h>
    #include <stdlib.h>
    //#pragma warning(disable : 4996)
    
    int main()
    {
        int order = -1;//用户指令
        
        /*int n;
        long num[STU_NUM];
        float score[STU_NUM];*/
        //初始数据
        int n = 5;//学生人数
        int m = 3;//课程数
    
        long num[STU_NUM] = { 10001,10002,10003,10004,10005 };
        char name[][MAX_LEN] = { "tom","jack","bill","amy","jackie" };
        float score[STU_NUM] = { 20.0,80.0,50.0,66.0,95.0 };
        float score2[STU_NUM][COURSE_NUM] = { {20.0,80.0,50.0},//2表示二维
                                                                            {66.0,95.0,77.0},
                                                                            {63.0,77.0,81.0},
                                                                            {86.0,43.0,72.0},
                                                                            {96.0,95.0,89.0} };
        /*这次改变了一个字段,将一维的课程升级为了二维数组,
        又新增了一个功能统计每个学生所有课程的平均分和总分,
        所以需要新增两个一维数组sum[],aver[]存储一下此信息.*/
       /* float sum[STU_NUM] = { 0 };
        float aver[STU_NUM] = { 0 };*/
        //AverSumofEveryStudent(score2, sum, aver, n, m);
    
        //初始化结构体数组数据
        STU students[STU_NUM];
        for (int i = 0; i < n; i++)
        {
            students[i].num = num[i];
            strcpy_s(students[i].name, MAX_LEN, name[i]);
            for (int j = 0; j < m; j++)
            {
                students[i].score[j] = score2[i][j];
            }
        }
        AverSumofEveryStudent(students, n, m);
    
        Mean();//显示菜单
        //使用系统
        while (1)
        {
            printf("Please enter your choice : \n");
            scanf_s("%d", &order);
            getchar();//读走缓存里的回车符
            switch (order)
            {
            case 1://录入成绩
                //n = ReadScore(num, score, n);
                n = ReadScore(students, n, m);
                AverSumofEveryStudent(students, n, m);//每次录入结束后都得重新计算
                break;
            case 2://计算每门课程的总分和平均分;
                AverSumofEveryCourse(students, n, m);
                break;
            case 3://计算每个学生的总分和平均分
                AverSumofEveryStudent(students, n, m);
                printf("已经重新计算总分和平均分\n");
                break;
            case 4://按每个学生的总分由高到低排出名次表;
                SortbyScore(students, n, m, Descending);
                printf("Descendingly scorted by scores:\n");
                PrintScore(students, n, m);
                break;
            case 5://按每个学生的总分由低到高排出名次表;
                SortbyScore(students, n, m, Ascending);
                printf("Ascendingly scorted by scores:\n");
                PrintScore(students, n, m);
                break;
            case 6://按学号升序排名
                SortbyNum(students, n, m, Ascending);
                printf("Ascendingly scorted by num:\n");
                PrintScore(students, n, m);
                break;
            case 7://按姓名的字典顺序排出成绩表;
                SortbyName(students, n, m);
                printf("Dictionarily scorted by name:\n");
                PrintScore(students, n, m);
                break;
            case 8://按学号查询学生排名及其各科考试成绩;
                SearchbyNum(students, n, m);
                break;
            case 9://按姓名查询学生排名及其各科考试成绩;
                SearchbyName(students, n, m);
                break;
            case 10://按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别,
                       //统计每个类别的人数以及所占的百分比;
                StatistAnalysis(students, n, m);
                break;
            case 11://输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。
                PrintScore(students, n, m);
                AverSumofEveryCourse(students, n, m);
                break;
            case 12://将每个学生的记录信息写入文件。
                puts("正在写入students.txt文件");
                WritetoFile(students, n, m);
                break;
            case 13://从文件中读出每个学生的记录信息并显示。
                STU  studentsNew[STU_NUM];
                ReadfromFile(studentsNew, n, m);
                puts("新文件内容如下");
                PrintScore(studentsNew, n, m);
                break;
            case 0://退出系统
                printf("Good Bye!\n");
                exit(0);//建议main函数用exit(0)表示正常结束
            default:
                Mean();
                break;
            }
        }
    }
    
    int Mean(void)
    {
        printf("1.Input record\n");
        printf("2.Caculate total and average score of every course\n");
        printf("3.Caculate total and average score of every student\n");
        printf("4.Sort in descending order by total score of every student\n");
        printf("5.Sort in ascending order by total score of every student\n");
        printf("6.Sort in ascending order by number\n");
        printf("7.Sort in dictionary order by name\n");
        printf("8.Search by number\n");
        printf("9.Search by name\n");
        printf("10.Statistic analysis\n");
        printf("11.List record\n");
        printf("12.Write to a file\n");
        printf("13.Read from a file\n");
        printf("0.Exit\n");
        printf("666.Show mean\n");
        return 0;
    }
    

    头文件

    /*
    函数名称:   WritetoFile
    功能描述:   将每个学生的记录信息写入文件
    参数:
        STU students:学生结构体数组
        n:总人数
        m:课程总数
    返回:
    备注:*/
    void WritetoFile(STU students[], int n, int m);
    /*
    函数名称:   ReadfromFile
    功能描述:   从文件中读出每个学生的记录信息并显示
    参数:
        STU students:学生结构体数组
        n:总人数
        m:课程总数
    返回:
    备注:*/
    void ReadfromFile(STU students[], int n, int m);
    
    

    #具体实现

    void WritetoFile(STU students[], int n, int m)
    {
        FILE* fp;
        if (fopen_s(&fp,"students.txt", "w") != 0)
        {
            puts("文件打开失败");
            exit(0);
        }
        else//按数据块读写文件
        {
            int num = fwrite(students, sizeof(STU), n, fp);
            printf("成功写入%d条数据\n", num);
            fclose(fp);
        }
    }
    
    void ReadfromFile(STU students[], int n, int m)
    {
        FILE* fp;
        if (fopen_s(&fp, "students.txt", "r") != 0)
        {
            puts("文件打开失败");
            exit(0);
        }
        else//按数据块读写文件
        {
            int num = fread(students, sizeof(STU), n, fp);
            printf("成功写入%d条数据\n", num);
            fclose(fp);
        }
    }
    
    展开全文
  • 12-18 回答/*************************************************************************学 生 成 绩 管 理 系 统 (结构版)开发者:07042T 陈影开发时间:2007-6-21Compiler: Microsoft visual C++ 6.0System Log...

    匿名用户

    1级

    2008-12-18 回答

    /*************************************************************************

    学 生 成 绩 管 理 系 统 (结构版)

    开发者:07042T 陈影

    开发时间:2007-6-21

    Compiler: Microsoft visual C++ 6.0

    System Loginpassword:chenying

    本系统支持每个学员录入学号、姓名、以及三门课成绩,且计算总分、平均成绩

    插入、删除、修改、排序、查询个人成绩 浏览所有学生成绩。

    1、使用结构保存每个学员的信息。

    2、通过函数实现各个功能模块。

    3、使用对文件的写操作记录成绩文件.默认保存在程序所在的目录下

    4、不管是用户怎样操作数据都会有文件记录,实现了实时记录数据,但是给用户

    看到的文件是用户对数据操作好之后保存下来的数据.

    Copyright ? 2007 北大青鸟APTECH重庆足下 Inc. All Rights Reserved ChenYiWan

    /*************************************************************************/

    #include //标准输入输出

    #include //其它操作

    #include //windows相关

    #include //字符串操作

    #include //系统输入输出

    #include //时间相关操作

    /**********************下面是对用到的全局常量声明*************************/

    #define NAME 10 //学生姓名长度

    #define PASSWORD " " //系统登陆密码

    int input=0; //全局变量标记当前录入学员个数

    float ave,sum; //平均成绩和总分

    FILE *fp; //声明一个文件指针

    /**************************结构体定义************************************/

    struct student{ //学生成绩结构

    char name[NAME]; //学生姓名

    int num; //学生学号

    float score1; //记录学生成绩1

    float score2; //记录学生成绩2

    float score3; //记录学生成绩3

    float ave; //平均分

    float sum; //总分

    }*pp; //声明一个结构指针

    /**********************下面是对用到的函数声明*****************************/

    void Password(); //密码验证函数

    void Save(struct student stu[]); //保存信息函数

    void InputStu(struct student stu[]); //录入信息函数

    void DelStu(struct student stu[]); //删除信息函数

    void ModifyStu(struct student stu[]); //修改信息函数

    void FindStu(struct student stu[]); //查找信息函数

    void InsertStu(struct student stu[]); //插入信息函数

    void SortStu(struct student stu[]); //排 序 函 数

    void ListStu(struct student stu[]); //显示学员成绩信息

    //**************************程序主体**************************************

    void main() //程序入口

    {

    system("color 02"); //设置当前窗口的背景色和前景色

    struct student stu[50]; //最大学员人数

    struct student *p; //声明一个结构指针

    p=stu; //指针指向结构变量stu

    int in; //接收用户的选择

    char ch; //用于判断是否继续

    Password(); //调用密码验函数

    do

    {

    system("cls");

    printf("\n\n");

    printf("\t\t ╭————————————————————╮\n");

    printf("\t\t | 学 生 个 人 成 绩 管 理 |\n");

    printf("\t\t |————————————————————|\n");

    printf("\t\t | 1. 录入学生个人成绩 |\n");

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

    printf("\t\t | 2. 修改学生个人成绩 |\n");

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

    printf("\t\t | 3. 查询学生个人成绩 |\n");

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

    printf("\t\t | 4. 浏览所有学生成绩 |\n");

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

    printf("\t\t | 5. 删 除 学 生 成绩 |\n");

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

    printf("\t\t | 6. 插 入 学 生 成绩 |\n");

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

    printf("\t\t | 7. 学 员 成 绩 排序 |\n");

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

    printf("\t\t | 8. 学 员 成 绩 保存 |\n");

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

    printf("\t\t | 9. 退出成绩管理系统 |\n");

    printf("\t\t ╰————————————————————╯\n");

    printf("\t\t 请您正确选择: ");

    if(!(scanf("%d",&in)==1))

    {

    while((ch=getchar())!='\n')

    putchar(ch);

    printf(" 没有此选项,请正确选择!");

    getch();

    continue;

    }

    fflush(stdin);

    switch(in)

    {

    case 1:

    InputStu(stu); //调用录入成绩函数

    break;

    case 2:

    ModifyStu(stu); //调用修改成绩函数

    break;

    case 3:

    FindStu(stu); //调用查询个人成绩函数

    break;

    case 4:

    ListStu(stu); //调用浏览所有学生成绩函数

    break;

    case 5:

    DelStu(stu); //调用删除学生成绩函数

    break;

    case 6:

    InsertStu(stu); //插入学员成绩信息

    break;

    case 7:

    SortStu(stu); //调用排序函数

    break;

    case 8:

    Save(stu); //保存学员成绩函数

    break;

    case 9: //退出系统

    return;

    default:

    printf("没有此选项,请正确选择!");

    getch();

    break;

    }

    }while(1);

    }

    void InputStu(struct student stu[]) //录入学员成绩函数原形

    {

    pp=stu; //指针指向结构

    system("cls"); //清屏

    int i;

    printf("请问你要输入几个学生的信息:");

    scanf("%d",&input);

    if((fp=fopen("inputdata.sys","wb+"))==NULL) //当前目录下是否存在inputdata.sys文件

    { //"wb+":读写打开或建立一个二进制文件,允许读和写

    printf("Cannot open file strike any key exit!");

    getch();

    exit(1);

    }

    fprintf(fp,"学号 姓名 计算机应用 Java \tC语言 \tA v e\tS u m\n");

    for(i=0;i

    {

    printf("输入学生学号:"); //输入学号

    fflush(stdin);

    scanf("%d",&stu[i].num);

    printf("输入学生姓名:"); //输入姓名

    fflush(stdin);

    gets(stu[i].name);

    printf("输入学生3科成绩\n");

    printf("——————————————————————————————\n");

    printf("\n计算机应用: "); //第一科成绩

    fflush(stdin);

    scanf("%f",&stu[i].score1);

    printf("\nJava 语言: "); //第二科成绩

    fflush(stdin);

    scanf("%f",&stu[i].score2);

    printf("\nC 语言: "); //第三科成绩

    fflush(stdin);

    scanf("%f",&stu[i].score3);

    printf("——————————————————————————————\n");

    stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;

    stu[i].ave=stu[i].sum/3;

    //下面这句代码的意思是写文件操作,后面遇到这样的代码是一样的意思

    fprintf(fp," %d %s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);

    }

    }

    void ModifyStu(struct student stu[])

    {

    pp=stu;

    int id,i=0; //id为接收用户输入的学号

    if((fp=fopen("modifydata.sys","wb+"))==NULL)

    {

    printf("Cannot open file strike any key exit!");

    getch();

    exit(1);

    }

    fprintf(fp,"学号 姓名 计算机应用 Java \tC语言 \tA v e\tS u m\n");

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

    scanf("%d",&id);

    Sleep(500);

    printf("\n\t查找相关数据.");

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

    {

    Sleep(250);

    printf(".");

    }

    for(i=0;i

    {

    if(stu[i].num==id) //如果找到了就执行下面语句 ,找不到直接回主界面

    {

    printf("\n输入学生新学号:"); //输入学号

    fflush(stdin);

    scanf("%d",&stu[i].num);

    printf("\n输入学生新姓名:"); //输入姓名

    fflush(stdin);

    gets(stu[i].name);

    printf("输入学生3科新成绩\n");

    printf("——————————————————————————————\n");

    printf("\n计算机应用: ");

    scanf("%f",&stu[i].score1);

    fflush(stdin);

    printf("\nJava 语言: ");

    scanf("%f",&stu[i].score2);

    fflush(stdin);

    printf("\n C 语言: ");

    scanf("%f",&stu[i].score3);

    printf("——————————————————————————————\n");

    stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;

    stu[i].ave=stu[i].sum/3;

    fprintf(fp," %d %s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);

    }

    }

    }

    void FindStu(struct student stu[]) //查询个人成绩信息

    {

    int i=0,id; //循环变量和用于接收学号

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

    scanf("%d",&id);

    for(i=0;i

    {

    if (stu[i].num==id) //如果找到你查询的数据就执行下面语句

    { //如果找不到。直接回程序主界面

    stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;

    stu[i].ave=stu[i].sum/3;

    printf("\n学号 姓名 计算机应用 java语言 C 语言 总 分 平均成绩\n");

    printf("\n%d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f\n\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);

    system("pause");

    }

    }

    }

    void InsertStu(struct student stu[]) //插入学员成绩信息

    {

    int flag=1;

    pp=stu;

    int i,id;

    if((fp=fopen("insertdata.sys","wb+"))==NULL)

    {

    printf("Cannot open file strike any key exit!");

    getch();

    exit(1);

    }

    fprintf(fp,"学号 姓名 计算机应用 Java \tC语言 \tA v e\tS u m\n");

    printf("输入你插入的学号:");

    scanf("%d",&id);

    for(i=0;i

    {

    if(stu[i].num==id) //判断学员的学号信息否存在?

    {

    printf("学号信息已经存在!\n");

    flag=0;

    getch();

    break;

    }

    }

    if (flag!=0)

    {

    input++; //插入一个,原来的总数增加1

    printf("请确认输入要插入学生的学号:");

    scanf("%d",&stu[input-1].num); //如果不存在..那么就把插入的信息放到结构数组最后

    printf("输入学生姓名:");

    fflush(stdin);

    gets(stu[input-1].name);

    printf("输入学生3科成绩\n");

    printf("——————————————————————————————\n");

    printf("\n计算机应用: ");

    fflush(stdin);

    scanf("%f",&stu[input-1].score1);

    printf("\nJava 语言: ");

    fflush(stdin);

    scanf("%f",&stu[input-1].score2);

    printf("\nC 语言: ");

    fflush(stdin);

    scanf("%f",&stu[input-1].score3);

    printf("——————————————————————————————\n");

    stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;

    stu[i].ave=stu[i].sum/3;

    fprintf(fp," %d %s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[input-1].num,stu[input-1].name,stu[input-1].score1,stu[input-1].score2,stu[input-1].score3,stu[input-1].ave,stu[input-1].sum);

    Sleep(500);

    printf("插入数据成功!\n");

    getch();

    }

    }

    void ListStu(struct student stu[]) //浏览所有学生成绩

    {

    int i=0;

    for(i=0;i

    {

    stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;

    stu[i].ave=stu[i].sum/3;

    }

    printf("\n学号 姓名 计算机应用 java语言 C 语言 平均成绩 总 分\n");

    for(i=0;i

    {

    printf("\n %d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave, stu[i].sum);

    }

    getch();

    }

    void DelStu(struct student stu[]) //删除学员信息函数

    {

    pp=stu;

    struct student temp;

    int delnum;

    char ask;

    int i,j;

    if((fp=fopen("Deldata.sys","wb+"))==NULL)

    {

    printf("Cannot open file strike any key exit!");

    getch();

    exit(1);

    }

    fprintf(fp,"学号 姓名 计算机应用 Java \tC语言 \tA v e\tS u m\n");

    system("cls");

    printf("\n\n\t请输入你要删除的学员的学号:");

    fflush(stdin);

    scanf("%d",&delnum);

    printf("\n\t是否确认删除学员%d的信息(y/n)",delnum);

    fflush(stdin);

    ask = getchar();

    if(ask != 'n')

    {

    for(i=0;i

    {

    if(stu[i].num == delnum)

    break;

    }

    if(i > input)

    printf("\n\t没有你要删除的学员!\n");

    else

    {

    for(j=i;j

    {

    temp = stu[j];

    stu[j] = stu[j+1];

    stu[j+1] = temp;

    }

    input--; //删掉一个学员信息后学员总数相应-1

    system("cls");

    printf("\n\n删除成功!\n");

    }

    stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;

    stu[i].ave=stu[i].sum/3;

    fprintf(fp," %d %s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);

    getch();

    }

    }

    void SortStu(struct student stu[]) //排序函数

    {

    int i,j,chose; //i,j为循环变量 chose为接收用户输入的排序方式

    struct student temp;

    printf("排序前的数据为\n");

    printf("\n学号 姓名 计算机应用 java语言 C语言 平均成绩 总 分\n");

    for(i=0;i

    {

    printf("\n %d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);

    }

    printf("\n1.按学号排序\t2.按总分(高→低)排序\n");

    printf("\n请您正确选择:");

    fflush(stdin);

    scanf("%d",&chose);

    if(chose==1)

    {

    for(i=0;i

    {

    for(j=i+1;j

    {

    if(stu[i].num>stu[j].num)

    {

    temp=stu[i];

    stu[i]=stu[j];

    stu[j]=temp;

    }

    }

    }

    printf("\n学号 姓名 计算机应用 java语言 C语言 平均成绩 总 分\n");

    for(i=0;i

    {

    printf("\n %d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);

    }

    system("pause");

    }

    else if(chose==2)

    {

    for(i=0;i

    {

    for(j=i+1;j

    {

    if(stu[i].ave

    {

    temp=stu[i];

    stu[i]=stu[j];

    stu[j]=temp;

    }

    }

    }

    printf("\n学号 姓名 计算机应用 java语言 C语言 平均成绩 总 分\n");

    for(i=0;i

    {

    printf("\n %d %s %.1f\t %.1f\t %.1f\t %.1f\t %.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);

    }

    system("pause");

    }

    }

    void Password() //密码验证函数

    {

    char *pass=NULL; //初始化指针

    int i,count;

    time_t start,end; //时间函数

    pass=(char *)malloc(255*sizeof(char)); //分配内存

    while(1)

    {

    count=0;

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

    printf("\n\t\t UserName:ChenYiWan \n");

    printf("\n\t\t PassWord:");

    while((count>=0)&&(pass[count++]=getch())!=13) //密码输入

    {

    if(pass[0]=='\b')

    {

    count=0;

    continue;

    }

    else if(pass[count-1]=='\b')

    {

    printf("%c%c%c",'\b','\0','\b');

    count-=2;

    }

    else

    putchar('*');

    }

    pass[--count]='\0';

    if(!strcmp(pass,PASSWORD)) //开始验证

    {

    printf("\n\n\t\t\t\t\t\tLoading");

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

    {

    Sleep(250);

    printf(".");

    }

    system("cls");

    printf("\n\n\n\n\n\n\n\n\n\t\t\t");

    printf(" 欢 迎 登 陆 学 生 成 绩 管 理 系 统 !");

    start=time(NULL);

    end=time(NULL);

    while(end-start<2) //延时2秒执行以下程序

    {

    end=time(NULL);

    }

    system("cls");

    free(pass); //释放储存密码的内存

    return ;

    }

    free(pass); //释放密码错误的那块内存

    pass=(char *)malloc(255*sizeof(char)); //重新分配储存密码内存

    system("cls");

    printf("\a\n\n\n\n\n\n\n\n\t\t\t\t密 码 错 误 !");

    getch();

    system("cls");

    }

    }

    void Save(struct student stu[]) //成绩保存函数

    {

    int i,j;

    pp=stu; //指针指向结构

    system("cls");

    printf("\n\n\n\n\t\t\tSaving");

    for(j=0;j<20;j++)

    {

    Sleep(300);

    printf(".");

    }

    if((fp=fopen("stu_list2.doc","wb+"))==NULL)

    {

    printf("Cannot open file strike any key exit!");

    getch();

    exit(1);

    }

    fprintf(fp,"学号 \t姓名 计算机应用\tJava \tC语言 \tA v e\tS u m\n");

    for(i=0;i

    {

    stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;

    stu[i].ave=stu[i].sum/3;

    fprintf(fp," %d \t%s \t%.1f \t%.1f \t%.1f \t%.1f \t%.1f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave,stu[i].sum);

    }

    }

    展开全文
  • C语言小项目:学生信息管理系统(超详细)

    千次阅读 多人点赞 2021-07-20 11:09:58
    学生信息管理系统需求概述总体设计功能划分数据结构程序流程详细设计 需求概述 编写一个可以对学生的成绩信息进行管理的系统,通过该系统可以实现对学生成绩的显示,排序,增删改查,保存载入并且统计出各科最高分和...

    需求概述

    编写一个可以对学生的成绩信息进行管理的系统,通过该系统可以实现对学生成绩的显示,排序,增删改查,保存载入并且统计出各科最高分和不及格人数

    展示

    在这里插入图片描述

    总体设计

    功能划分

     密码登录模块
     班级创建模块
     学生信息录入模块
     学生信息显示模块
     学生信息查询模块
     学生信息排序模块
     学生信息统计模块
     学生信息删除模块
     学生信息新增模块
     学生信息修改模块
     学生信息保存模块
     学生信息载入模块
     系统退出模块

    数据结构

    学生结构体链表
    包含学生的学号,姓名,成绩,总分,平均分,排名在这里插入图片描述

    程序流程

    在这里插入图片描述

    详细设计

    头文件部分

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    

    结构体

    #define N 30//最大容量
    #define M 3//功课门数
    typedef struct info
    {
        int sid;//学号
        char name[20];//姓名
        int score[M];//M门功课的成绩
        double total;//总分
        double aver;//平均分
        int order;
    }INFO;
    typedef struct stu
    {
        INFO data;//数据域
        struct stu *next;//指针域
    }STU;
    

    密码登录模块

    int command,i,flag=0;//command为操作指令,i计数器,flag判断密码是否正确
    char c, Password[6];
    STU *h;
    printf("请输入密码(3次机会)\n");
    for(i=0;i<3;i++)
    {
        int x=0;
        while(x<5&&c!=13)//13是回车符的ASCII码
        {
            c=getch();
            Password[x++]=c;
            if(c!=13)
            putchar('*');//输入的密码以*的形式显示
        }
        Password[x]='\0';
        if(strcmp(Password,"12345\0")==0)
        {
            flag=1;
            break;//如果密码正确则跳出循环
        }
        else
            if(i==2)
                printf("\n密码错误!退出系统!");
            else
                printf("\n密码错误!请输入正确密码:");
    }
    if(flag)
    {
    //进入系统
    }
    

    菜单显示

    void showMenu()
    {
        printf("\n密码正确!\n");
        printf("------学生信息管理系统V2.0--------\n");
        printf("*       1. 创建班级              *\n");
        printf("*       2. 学生信息录入          *\n");
        printf("*       3. 学生信息显示          *\n");
        printf("*       4. 学生信息查询          *\n");
        printf("*       5. 学生信息排序          *\n");
        printf("*       6. 学生信息统计          *\n");
        printf("*       7. 学生信息删除          *\n");
        printf("*       8. 学生信息新增          *\n");
        printf("*       9. 学生信息修改          *\n");
        printf("*       10. 学生信息保存         *\n");
        printf("*       11.学生信息载入          *\n");
        printf("*       0. 退出系统              *\n");
        printf("----------------------------------\n");
        printf("*  作者:是我啊东山,学号:xxxx   *\n");
        printf("----------------------------------\n");
    }
    

    班级创建模块

    printf("请输入需要创建的班级人数:");
    scanf("%d",&count);//count为全局变量
    printf("初始化班级人数为%d人\n",count);
    

    学生信息录入模块

    STU *createClass(int n)//n为要创建的个数
    {
        STU *p,*q,*h;//h为头指针,p指向新创建的学生,q指向最后一个学生
        int i;
        for(i=0;i<n;i++)
        {
            p=(STU *)malloc(sizeof(STU));
            printf("请输入第%d个学生的学号、姓名、语数英成绩:",i+1);
            scanf("%d%s%d%d%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2]);
            p->data.total=p->data.score[0]+p->data.score[1]+p->data.score[2];
            p->data.aver=p->data.total/M;
            p->data.order=0;
            p->next=NULL;
            if(i==0)
                h=p;//将头指针固定在链表头部
            else
                q->next=p;//将链表末尾和新创建的学生连接起来
            q=p;//q指针指向新创建的学生即链表的末尾
        }
        return h;//返回头指针
    }
    

    学生信息显示模块

    void showStuInfo(STU *h)//h为头指针
    {
        STU *p;
        p=h;
        printf("|排名  |学号  |姓名  |语文  |数学  |英语  |总分  |平均分|\n");
        while(p!=NULL)
        {
            printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver);
            p=p->next;//当前学生信息答应完后,让p指向下一个学生
        }
    }
    

    学生信息查询模块

    void searchStuInfo(STU *h,int n)//h为头指针,n为学号
    {
        STU *p;
        p=h;
        int flag=0;
        while(p!=NULL)
        {
            if(p->data.sid==n)//学号匹配则输出
            {
                printf("|排名  |学号  |姓名  |语文  |数学  |英语  |总分  |平均分|\n");
                printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver);
                flag=1;
                break;
            }
            else//学号不匹配则指向下一个学生
                p=p->next;
        }
        if(flag)//输出查询结果
            printf("查询完毕!\n");
        else
            printf("查无此人!\n");
    }
    

    学生信息排序模块

    void sortStuInfo(STU *h)//h为头指针
    {
        int x,i=1;
        INFO t;
        STU *p,*r,*s;
        p=h;//指向第一个节点
        r=p->next;//指向第二个节点
        s=r->next;//指向第三个节点
        printf("总分排序输入0\n语文排序输入1\n数学排序输入2\n英语排序输入3\n");
        printf("请输入:");
        scanf("%d",&x);
        if(x)
        {
            while(p!=NULL)
            {
                while(r!=NULL)
                {
                    if(p->data.score[x-1]<r->data.score[x-1])//如果前一个小于后一个则交换
                    {
                        t=p->data;
                        p->data=r->data;
                        r->data=t;
                    }
                    else
                        r=r->next;
                }
                p=p->next;
                r=s;
            }
        }
        else
        {
            while(p!=NULL)
            {
                while(r!=NULL)
                {
                    if(p->data.total<r->data.total)//如果前一个小于后一个则交换
                    {
                        t=p->data;
                        p->data=r->data;
                        r->data=t;
                    }
                    else
                        r=r->next;
                }
                p=p->next;
                r=s;
            }
        }
        p=h;
        while(p!=NULL)
        {
            p->data.order=i++;
            p=p->next;
        }
    }
    
    

    学生信息统计模块

    void countStuInfo(STU *h)//h为头指针
    {
        STU *p,*r,*s;
        INFO t;
        p=h;//指向第一个节点
        r=p->next;//指向第二个节点
        s=r->next;//指向第三个节点
        int i,c=0,m=0,y=0;
        while(p!=NULL)
        {
            if(p->data.score[0]<60)c++;
            if(p->data.score[1]<60)m++;
            if(p->data.score[2]<60)y++;
            p=p->next;
        }
        for(i=0;i<3;i++)
        {
            p=h;
            while(p!=NULL)
            {
                while(r!=NULL)
                {
                    if(p->data.score[i]<r->data.score[i])//如果前一个小于后一个则交换
                    {
                        t=p->data;
                        p->data=r->data;
                        r->data=t;
                    }
                    else
                        r=r->next;
                }
                p=p->next;
                r=s;
            }
            p=h;
            switch(i)
            {
                case 0:printf("语文最高:");break;
                case 1:printf("数学最高:");break;
                case 2:printf("英语最高:");
            }
            printf("%s %d分\n",p->data.name,p->data.score[i]);
        }
        printf("不及格人数统计:\n");
        printf("语文:%d人\n数学:%d人\n英语:%d人\n",c,m,y);
    
    }
    

    学生信息删除模块

    STU *deleteStuInfo(STU *h)//h为头指针,s为学号
    {
        STU *head,*p,*q;
        head=h;
        int s;
        if(count==0)
        {
            printf("班级为空!\n");
            return head;
        }
        p=h;
        q=p->next;
        printf("请输入要删除的学生的学号:");
        scanf("%d",&s);
        printf("\n");
        if(p->data.sid==s)//如果是头节点,直接返回第二个
        {
            printf("删除成功!\n");
            return q;
        }
        else
        {
            while(q!=NULL)
            {
                if(q->data.sid==s)
                {
                    p->next=q->next;
                    printf("删除成功!\n");
                    return head;
                }
                else
                {
                    p=p->next;
                    q=p->next;
                }
            }
            printf("查无此人!\n");
            return head;
        }
    }
    
    

    学生信息新增模块

    void addStuInfo(STU *h)//h为头指针
    {
         STU *p,*q;
         p=h;
         while(p!=NULL)
         {
             if(p->next==NULL)
             {
                 count++;//人数加一
                 if(count>N)
                    printf("超出最大容量\n");
                 else
                 {
                     q=(STU *)malloc(sizeof(STU));
                     printf("请输入添加的学生的学号、姓名、成绩:");
                     scanf("%d%s%d%d%d",&q->data.sid,q->data.name,&q->data.score[0],&q->data.score[1],&q->data.score[2]);
                     q->data.total=q->data.score[0]+q->data.score[1]+q->data.score[2];
                     q->data.aver=q->data.total/M;
                     q->data.order=0;
                     q->next=p->next;
                     p->next=q;
                     printf("添加成功!\n");
                     break;
                 }
             }
             p=p->next;
         }
    }
    
    

    学生信息修改模块

    void changeStuInfo(STU *h, int n)//h为头指针
    {
        int flag=0;
        STU *p;
        p=h;
        while(p!=NULL)
        {
            if(p->data.sid==n)
            {
                printf("请输入学生的学号、姓名、语数英成绩:");
                scanf("%d%s%d%d%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2]);
                p->data.total=p->data.score[0]+p->data.score[1]+p->data.score[2];
                p->data.aver=p->data.total/M;
                p->data.order=0;
                printf("修改成功!\n");
                flag=1;
                break;
            }
            else
                p=p->next;
        }
        if(flag==0)
            printf("查无此人!\n");
    }
    

    学生信息保存模块

    void saveStuInfo(STU *h)//h为头指针
    {
        STU *p;
        FILE *fp;
        p=h;
        fp=fopen("data.txt","w");
        if(fp==NULL)
        {
            printf("无法打开文件!");
            exit(0);
        }
        else
        {
            fprintf(fp,"%d\n",count);//保存学生人数信息
            while(p!=NULL)
            {
                fprintf(fp,"%d%s\n%d\n%d\n%d\n%f\n%f\n%d\n",p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver,p->data.order);//保存学生信息
                p=p->next;
            }
        }
        fclose(fp);
        printf("保存成功\n");
    }
    
    

    学生信息载入模块

    STU *loadStuInfo(STU *h)//h为头指针
    {
        int i;
        STU *p,*q;
        FILE *fp;
        fp=fopen("data.txt","r");
        if(fp==NULL)
        {
            printf("无法打开文件!");
            exit(0);
        }
        else
        {
            fscanf(fp,"%d\n",&count);//读取学生人数信息
            printf("|排名  |学号  |姓名  |语文  |数学  |英语  |总分  |平均分|\n");
            for(i=1;i<count;i++)
            {
                p=(STU *)malloc(sizeof(STU));
                fscanf(fp,"%d%s%d%d%d%lf%lf%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2],&p->data.total,&p->data.aver,&p->data.order);
                printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver);
                p->next=NULL;
                if(i==1)
                    h=p;//将头指针固定在链表头部
                else
                    q->next=p;//将链表末尾和新创建的学生连接起来
                q=p;//q指针指向新创建的学生即链表的末尾
            }
            printf("读取成功\n");
        }
        fclose(fp);
        return h;
    }
    

    完整代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    
    #define N 30//最大容量
    #define M 3//功课门数
    typedef struct info
    {
        int sid;//学号
        char name[20];//姓名
        int score[M];//M门功课的成绩
        double total;//总分
        double aver;//平均分
        int order;
    }INFO;
    typedef struct stu
    {
        INFO data;//数据域
        struct stu *next;//指针域
    }STU;
    
    int count=0,n;
    void showMenu();//显示菜单
    STU *createClass(int n);//学生信息录入模块
    void showStuInfo(STU *h);//学生信息显示模块
    void searchStuInfo(STU *h,int n);//学生信息查询模块
    void sortStuInfo(STU *h);//学生信息排序模块
    void countStuInfo(STU *h);//学生信息统计模块
    STU *deleteStuInfo(STU *h);//学生信息删除模块
    void addStuInfo(STU *h);//学生信息新增模块
    void changeStuInfo(STU *h, int n);//学生信息修改模块
    void saveStuInfo(STU *h);//学生信息保存模块
    STU *loadStuInfo(STU *h);//学生信息载入模块
    
    int main()
    {
        int command,i,flag=0;//command为操作指令,i计数器,flag判断密码是否正确
        char c, Password[6];
        STU *h;
        printf("请输入密码(3次机会)\n");
        for(i=0;i<3;i++)
        {
            int x=0;
            while(x<5&&c!=13)//13是回车符的ASCII码
            {
                c=getch();
                Password[x++]=c;
                if(c!=13)
                putchar('*');//输入的密码以*的形式显示
            }
            Password[x]='\0';
            if(strcmp(Password,"12345\0")==0)
            {
                flag=1;
                break;//如果密码正确则跳出循环
            }
            else
                if(i==2)
                    printf("\n密码错误!退出系统!");
                else
                    printf("\n密码错误!请输入正确密码:");
        }
        if(flag)
        {
            showMenu();
            printf("请选择:");
            scanf("%d",&command);
            printf("\n");
            while(1)//根据command的值执行不同的值
            {
                switch(command){
                    case 1:{
                        printf("请输入需要创建的班级人数:");
                        scanf("%d",&count);
                        printf("初始化班级人数为%d人\n",count);
                    };break;
                    case 2:{
                        h=createClass(count);
                        printf("学生信息录入成功!\n");
                    };break;
                    case 3:{
                        showStuInfo(h);
                        printf("学生信息显示成功!\n");
                    };break;
                    case 4:{
                        printf("请输入学生的学号:");
                        scanf("%d",&n);
                        searchStuInfo(h,n);
                    };break;
                    case 5:{
                        sortStuInfo(h);
                        printf("排序成功!\n");
                    };break;
                    case 6:countStuInfo(h);break;
                    case 7:h=deleteStuInfo(h);break;
                    case 8:addStuInfo(h);;break;
                    case 9:{
                        printf("请输入要修改的学生的学号:");
                        scanf("%d",&n);
                        changeStuInfo(h,n);
                    };break;
                    case 10:saveStuInfo(h);break;
                    case 11:h=loadStuInfo(h);break;
                    case 0:exit(0);//退出系统
                }
                printf("按任意健继续");
                getch();//让程序暂停一下,按任意键继续
                system("cls");//清除屏幕
                showMenu();
                printf("请选择:");
                scanf("%d",&command);
            }
        }
        return 0;
    }
    void showMenu()
    {
        printf("\n密码正确!\n");
        printf("------学生信息管理系统V2.0--------\n");
        printf("*       1. 创建班级              *\n");
        printf("*       2. 学生信息录入          *\n");
        printf("*       3. 学生信息显示          *\n");
        printf("*       4. 学生信息查询          *\n");
        printf("*       5. 学生信息排序          *\n");
        printf("*       6. 学生信息统计          *\n");
        printf("*       7. 学生信息删除          *\n");
        printf("*       8. 学生信息新增          *\n");
        printf("*       9. 学生信息修改          *\n");
        printf("*       10. 学生信息保存         *\n");
        printf("*       11.学生信息载入          *\n");
        printf("*       0. 退出系统              *\n");
        printf("----------------------------------\n");
        printf("*  作者:顾凡,学号:092620209   *\n");
        printf("----------------------------------\n");
    }
    STU *createClass(int n)//n为要创建的个数
    {
        STU *p,*q,*h;//h为头指针,p指向新创建的学生,q指向最后一个学生
        int i;
        for(i=0;i<n;i++)
        {
            p=(STU *)malloc(sizeof(STU));
            printf("请输入第%d个学生的学号、姓名、语数英成绩:",i+1);
            scanf("%d%s%d%d%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2]);
            p->data.total=p->data.score[0]+p->data.score[1]+p->data.score[2];
            p->data.aver=p->data.total/M;
            p->data.order=0;
            p->next=NULL;
            if(i==0)
                h=p;//将头指针固定在链表头部
            else
                q->next=p;//将链表末尾和新创建的学生连接起来
            q=p;//q指针指向新创建的学生即链表的末尾
        }
        return h;//返回头指针
    }
    void showStuInfo(STU *h)//h为头指针
    {
        STU *p;
        p=h;
        printf("|排名  |学号  |姓名  |语文  |数学  |英语  |总分  |平均分|\n");
        while(p!=NULL)
        {
            printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver);
            p=p->next;//当前学生信息答应完后,让p指向下一个学生
        }
    }
    
    void searchStuInfo(STU *h,int n)//h为头指针,n为学号
    {
        STU *p;
        p=h;
        int flag=0;
        while(p!=NULL)
        {
            if(p->data.sid==n)//学号匹配则输出
            {
                printf("|排名  |学号  |姓名  |语文  |数学  |英语  |总分  |平均分|\n");
                printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver);
                flag=1;
                break;
            }
            else//学号不匹配则指向下一个学生
                p=p->next;
        }
        if(flag)//输出查询结果
            printf("查询完毕!\n");
        else
            printf("查无此人!\n");
    }
    
    void countStuInfo(STU *h)//h为头指针
    {
        STU *p,*r,*s;
        INFO t;
        p=h;//指向第一个节点
        r=p->next;//指向第二个节点
        s=r->next;//指向第三个节点
        int i,c=0,m=0,y=0;
        while(p!=NULL)
        {
            if(p->data.score[0]<60)c++;
            if(p->data.score[1]<60)m++;
            if(p->data.score[2]<60)y++;
            p=p->next;
        }
        for(i=0;i<3;i++)
        {
            p=h;
            while(p!=NULL)
            {
                while(r!=NULL)
                {
                    if(p->data.score[i]<r->data.score[i])//如果前一个小于后一个则交换
                    {
                        t=p->data;
                        p->data=r->data;
                        r->data=t;
                    }
                    else
                        r=r->next;
                }
                p=p->next;
                r=s;
            }
            p=h;
            switch(i)
            {
                case 0:printf("语文最高:");break;
                case 1:printf("数学最高:");break;
                case 2:printf("英语最高:");
            }
            printf("%s %d分\n",p->data.name,p->data.score[i]);
        }
        printf("不及格人数统计:\n");
        printf("语文:%d人\n数学:%d人\n英语:%d人\n",c,m,y);
    
    }
    void sortStuInfo(STU *h)//h为头指针
    {
        int x,i=1;
        INFO t;
        STU *p,*r,*s;
        p=h;//指向第一个节点
        r=p->next;//指向第二个节点
        s=r->next;//指向第三个节点
        printf("总分排序输入0\n语文排序输入1\n数学排序输入2\n英语排序输入3\n");
        printf("请输入:");
        scanf("%d",&x);
        if(x)
        {
            while(p!=NULL)
            {
                while(r!=NULL)
                {
                    if(p->data.score[x-1]<r->data.score[x-1])//如果前一个小于后一个则交换
                    {
                        t=p->data;
                        p->data=r->data;
                        r->data=t;
                    }
                    else
                        r=r->next;
                }
                p=p->next;
                r=s;
            }
        }
        else
        {
            while(p!=NULL)
            {
                while(r!=NULL)
                {
                    if(p->data.total<r->data.total)//如果前一个小于后一个则交换
                    {
                        t=p->data;
                        p->data=r->data;
                        r->data=t;
                    }
                    else
                        r=r->next;
                }
                p=p->next;
                r=s;
            }
        }
        p=h;
        while(p!=NULL)
        {
            p->data.order=i++;
            p=p->next;
        }
    }
    
    STU *deleteStuInfo(STU *h)//h为头指针,s为学号
    {
        STU *head,*p,*q;
        head=h;
        int s;
        if(count==0)
        {
            printf("班级为空!\n");
            return head;
        }
        p=h;
        q=p->next;
        printf("请输入要删除的学生的学号:");
        scanf("%d",&s);
        printf("\n");
        if(p->data.sid==s)//如果是头节点,直接返回第二个
        {
            printf("删除成功!\n");
            return q;
        }
        else
        {
            while(q!=NULL)
            {
                if(q->data.sid==s)
                {
                    p->next=q->next;
                    printf("删除成功!\n");
                    return head;
                }
                else
                {
                    p=p->next;
                    q=p->next;
                }
            }
            printf("查无此人!\n");
            return head;
        }
    }
    
    void addStuInfo(STU *h)//h为头指针
    {
         STU *p,*q;
         p=h;
         while(p!=NULL)
         {
             if(p->next==NULL)
             {
                 count++;//人数加一
                 if(count>N)
                    printf("超出最大容量\n");
                 else
                 {
                     q=(STU *)malloc(sizeof(STU));
                     printf("请输入添加的学生的学号、姓名、成绩:");
                     scanf("%d%s%d%d%d",&q->data.sid,q->data.name,&q->data.score[0],&q->data.score[1],&q->data.score[2]);
                     q->data.total=q->data.score[0]+q->data.score[1]+q->data.score[2];
                     q->data.aver=q->data.total/M;
                     q->data.order=0;
                     q->next=p->next;
                     p->next=q;
                     printf("添加成功!\n");
                     break;
                 }
             }
             p=p->next;
         }
    }
    
    void changeStuInfo(STU *h, int n)//h为头指针
    {
        int flag=0;
        STU *p;
        p=h;
        while(p!=NULL)
        {
            if(p->data.sid==n)
            {
                printf("请输入学生的学号、姓名、语数英成绩:");
                scanf("%d%s%d%d%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2]);
                p->data.total=p->data.score[0]+p->data.score[1]+p->data.score[2];
                p->data.aver=p->data.total/M;
                p->data.order=0;
                printf("修改成功!\n");
                flag=1;
                break;
            }
            else
                p=p->next;
        }
        if(flag==0)
            printf("查无此人!\n");
    }
    
    void saveStuInfo(STU *h)//h为头指针
    {
        STU *p;
        FILE *fp;
        p=h;
        fp=fopen("data.txt","w");
        if(fp==NULL)
        {
            printf("无法打开文件!");
            exit(0);
        }
        else
        {
            fprintf(fp,"%d\n",count);//保存学生人数信息
            while(p!=NULL)
            {
                fprintf(fp,"%d%s\n%d\n%d\n%d\n%f\n%f\n%d\n",p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver,p->data.order);//保存学生信息
                p=p->next;
            }
        }
        fclose(fp);
        printf("保存成功\n");
    }
    
    STU *loadStuInfo(STU *h)//h为头指针
    {
        int i;
        STU *p,*q;
        FILE *fp;
        fp=fopen("data.txt","r");
        if(fp==NULL)
        {
            printf("无法打开文件!");
            exit(0);
        }
        else
        {
            fscanf(fp,"%d\n",&count);//读取学生人数信息
            printf("|排名  |学号  |姓名  |语文  |数学  |英语  |总分  |平均分|\n");
            for(i=1;i<count;i++)
            {
                p=(STU *)malloc(sizeof(STU));
                fscanf(fp,"%d%s%d%d%d%lf%lf%d",&p->data.sid,p->data.name,&p->data.score[0],&p->data.score[1],&p->data.score[2],&p->data.total,&p->data.aver,&p->data.order);
                printf("|%-6d|%-6d|%-6s|%-6d|%-6d|%-6d|%-6.0f|%-6.2f|\n",p->data.order,p->data.sid,p->data.name,p->data.score[0],p->data.score[1],p->data.score[2],p->data.total,p->data.aver);
                p->next=NULL;
                if(i==1)
                    h=p;//将头指针固定在链表头部
                else
                    q->next=p;//将链表末尾和新创建的学生连接起来
                q=p;//q指针指向新创建的学生即链表的末尾
            }
            printf("读取成功\n");
        }
        fclose(fp);
        return h;
    }
    
    展开全文
  • 学生成绩管理系统V6.0 某班有最多不超过30人(具体人数由键盘输入)参加最多不超过六门的考试(具体门数由键盘输入),定义结构体类型,用结构体数组作函数参数,编程实现学生成绩的管理。 2.实验要求 采用自顶...
  • 学生成绩管理系统C语言大作业)

    万次阅读 多人点赞 2020-07-13 10:41:59
    设计一个学生成绩管理系统,包括学生成绩数据的增删改查等基本操作,通过编程实现如下菜单驱动的学生成绩管理系统: (1)录入每个学生的学号、姓名和各科考试成绩; (2)计算每门课程的总分和平均分; (3)计算每...
  • 本文实例为大家分享了C++学生成绩管理系统的具体代码,供大家参考,具体内容如下* (程序头部注释开始)* ...学生成绩管理系统》* 作 者: 刘江波* 完成日期: 2012 年 6 月 26 日* 版 本 号: v.626* 对任务及求解方...
  • c语言课程设计 学生信息管理系统 源代码 使用VC6 main() { int choice; load_message(); do { clear(); printf("\n\n\n *****学生信息管理系统*****\n\n\n"); printf(" 1.学生信息录入:\n\n"); printf(" 2....
  • 学生成绩管理系统学生成绩管理系统学生成绩管理系统
  • 学生成绩管理系统1.0

    2012-05-29 23:54:56
    学生成绩管理系统1.0,大学生实验必备·····有了1.0做基础,6.0不是问题`
  • 学生管理系统(C语言)

    2021-11-05 01:08:35
    以下是一个普通的学生管理系统,对于一些小项目要注意拿来做练习。
  • 学生成绩管理系统 开发工具:VC++6.0 开发时间:2021.5.5 开发者:kkflaming 一、系统功能介绍 1.录入学生信息:用户可以自由输入学生信息到系统中。 2.打印学生信息:格式化展示系统中的学生信息。 3.保存学生信息...
  • PAGE 1PAGE 1C语言学生信息系统课设项目说明本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行。(书生)项目运行截图代码界面截图完整源码/** Copyright (c) ...
  • //打印菜单函数 void printMenu() { printf("\n|---------学生成绩管理系统V6.0---|\n"); printf("|--------1.添加学生信息----------|\n"); printf("|--------2.查询学生信息----------|\n"); printf("|--------3....
  • VC6.0编译通过, 利用结构体,结构体指针,单链表,文件操作,命令窗口下简单菜单设计,可从文件读入数据,自动保存数据,有错误自动判断修复,能添加,删除,查询,显示,排序记录,已经适合多数初学者期末C语言作业...
  • 说明: 去年写的毕业设计题目, 基于Windows C 开发的学生成绩管理系统 开发环境:VC++6.0, Mysql 4.0 运行平台:Windows Xp/2000
  • /* (程序头部凝视開始) ...* 文件名: 学生成绩管理系统 * 作 者: 刘江波 * 完毕日期: 2012 年 6 月 23 日 * 版 本 号: v.623 * 对任务及求解方法的描写叙述部分 * 程序头部的凝视结束...
  • 源码编号:B-E00007 点击查看(分类规则)项目类型:Java EE项目(非开源)项目名称:基于Java web的图书借阅管理系统(books)当前版本:V2.0.3版本难度等级:✩复杂程度:✩✩✩点击查看难度等级用户类型:有普通用户和...
  • //简单的学习成绩管理 #include<stdio.h> int score[5][4]={{100,90,89,78}, {101,55,89,87}, {102,87,67,65}, {103,99,76,89}, {104,78,67,88}}; int main() { int a,num; void query(int); v...
  • 图书管理系统(C+MySQL)

    千次阅读 2020-06-10 13:16:44
    C+MySQL图书管理系统 /////////////////////////////////////项目效果///////////////////////////////////// //登录界面 //借阅人登录界面 //借阅人功能菜单 //管理员登录界面 //管理员功能菜单 //分类查询 ...
  • 学生成绩管理系统V3.0链表版

    千次阅读 2015-12-23 09:07:35
    刚刚做完的一个课题作业,虽然还... printf(" * 从文件批量录入学生信息 *\n");  printf(" ****************************************************************\n");  stu = creat_file();  break;  ...
  • printf("╭══════╣通讯管理系统V1.0╠══════╮\n"); printf("║ ╰════════╯ ║\n"); printf("║ 【1】添加数据 【3】退出系统 ║\n"); printf("║ ║\n"); printf("║ 【2】查询...
  • C语言程序设计学习指导(第3版)》是国家精品开放课程、中国大学MOOC课程主讲教材《c语言程序设计》(第3版)的配套参考书。《C语言程序设计学习指导(第3版)》共2章,第1章为习题解答,包括主教材中的全部习题及解答。...
  • 手机c语言编程软件

    千次阅读 2021-05-19 03:39:45
    如果在手机上学C语言编程,可以试试名为易历知食复的软件,其内部有项功能叫微C程序设计,可以在手机上进行C语言编程练习,其自带的示例如下图:最简制单的入门程序:运行结果:99乘法表程序:运行结果:其自带的...
  • 校园导航系统课程设计,#校园管理系统

    千次阅读 多人点赞 2020-06-07 15:29:30
    ****校园导航系统****@大学 C++/C语言/数据结构/课设 1.课程设计目的 (1)为了进一步巩固课堂上所学到的知识,深刻把握为了进一步巩固课堂上所学到的知识,深刻掌握所学重要的数据结构类型的基本概念,逻辑结构和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 578
精华内容 231
关键字:

c语言学生管理系统v6.0