zoukankan      html  css  js  c++  java
  • 关于学生管理系统的总结

    本次团队合作完成学生管理系统使得我的编程能力得到了很大提升,而在这次合作之前我们花了很长时间统一结构体和各个函数命名,这对我们后期整合和调试有莫大裨益,避免了很多问题,比如重定义之类。

    .c文件名(以及内部函数):

    admin.c  判断登陆者逻辑文件

    main.c   主函数

    manager.c  管理员功能主函数

    add_teacher

    del_teacher

    change_teacher

    reset_teacher

    unlock_teacher

    find_teacher

    view_on_teacher

    view_off_teacher

    change_password

    batch_add_teacher

    menuc.c    所有菜单

    student.c   学生功能主函数

    find_news

    find_all_rank

    find_one_rank

    change_stu_password

    supermanager.c  超级管理员主函数

    add_manager

    del_manager

    reset_manager

    unlock_manager

    teacher.c    老师登陆主函数

    change_tea_password

    teacher_info.c   老师录入学生信息主函数

    add_student

    del_student

    change_student

    view_on_student

    view_off_student

    find_studnet

    reset_studnet

    unlock_studnet

         batch_add_studnet

    teacher_score.c  老师录入学生成绩主函数

    add_score

    change_score

    find_score

    rank_score

    rank_all

    rank_chinese

    rank_math

    rank_english

    batch_add_score

    tool.c  任意键返回、显示信息n秒、获取按键、隐藏密码等功能函数

    struct.h内三个主结构体

    学生结构体

    typedef struct student

    {

    }student;

    老师结构体

    typedef struct teacher

    {

    }teacher;

    管理员结构体

    typedef struct manager

    {

    }manager;

    而在本次项目中,我负责学生和成绩显示部分

    #include "student.h"
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <getch.h>
    #include "struct.h"
    #include "tool.h"
    //学生操作函数
    //显示自己基本信息
    void find_news(int* str)
    {
    int i=* str;
    system("clear");
    printf("姓名%s 学号%.8d 性别%c 年龄%d 语文:%d 数学:%d 英语:%d 平均分:%f 总分:%d\n",stu[i].name,stu[i].num,stu[i].sex,stu[i].age,stu[i].chinese,stu[i].math,stu[i].english,stu[i].avg,stu[i].sum);
    anykey_continue();

    }


    //列出自己所有成绩排名
    void find_all_rank(int* str)
    {
    int i=* str;
    system("clear");
    puts("总分排名为:");
    printf("%d\n",stu[i].rank_all);
    anykey_continue();
    }


    //显示每科成绩排名
    void find_one_rank(int* str)
    {
    int i=*str;
    system("clear");
    puts("单科排名为:");
    printf("语文:第%d名\n",stu[i].rank_chinese);
    printf("数学:第%d名\n",stu[i].rank_math);
    printf("英语:第%d名\n",stu[i].rank_english);
    anykey_continue();

    }

    //修改自己登录密码
    void change_stu_password(int* str)
    {
    char new[10]={};
    char sure[10]={};
    while(1)
    {
    system("clear");
    printf("请修改您的密码\n");
    hide(new);
    printf("请再次输入您的密码\n");
    hide(sure);
    if(strcmp(new,sure)==0)
    {
    strcpy(stu[*str].password,new);
    printf("修改成功\n");
    anykey_continue();
    return;
    }
    printf("前后输入不同,新密码修改失败,请再次输入\n");
    getch();
    }

    }

    排名部分

    //排名函数
    void rank_score(void)
    {
    for(int i=0;i<stu_count;i++)
    {
    stu[i].sum=stu[i].chinese+stu[i].math+stu[i].english;
    stu[i].avg=stu[i].sum/3;
    }
    for(int i=0;i<stu_count;i++)
    {
    stu[i].rank_all=stu_count;
    stu[i].rank_chinese=stu_count;
    stu[i].rank_math=stu_count;
    stu[i].rank_english=stu_count;
    for(int j=0;j<stu_count;j++)
    {
    if(stu[i].sum>=stu[j].sum && stu[i].num!=stu[j].num)
    {
    stu[i].rank_all--;
    }
    if(stu[i].chinese>=stu[j].chinese && stu[i].num!=stu[j].num)
    {
    stu[i].rank_chinese--;
    }
    if(stu[i].math>=stu[j].math && stu[i].num!=stu[j].num)
    {
    stu[i].rank_math--;
    }
    if(stu[i].english>=stu[j].english && stu[i].num!=stu[j].num)
    {
    stu[i].rank_english--;
    }
    }

    }
    }

    //显示总分排名
    void rank_all(void)
    {
    for(int i=0;i<stu_count;i++)
    {
    for(int j=0;j<stu_count;j++)
    {
    if(i+1==stu[j].rank_all && stu[j].index==0)
    {
    printf("姓名:%s 学号:%.8d 分数:%d 名次:%d\n",stu[j].name,stu[j].num,stu[j].sum,i+1);
    }
    }
    }
    anykey_continue();
    }
    //显示语文成绩排名
    void rank_chinese(void)
    {
    for(int i=0;i<stu_count;i++)
    {
    for(int j=0;j<stu_count;j++)
    {
    if(i+1==stu[j].rank_chinese && stu[j].index==0)
    {
    printf("姓名:%s 学号:%.8d 分数:%d 名次:%d\n",stu[j].name,stu[j].num,stu[j].chinese,i+1);
    }
    }
    }
    anykey_continue();
    }
    //显示数学成绩排名
    void rank_math(void)
    {
    for(int i=0;i<stu_count;i++)
    {
    for(int j=0;j<stu_count;j++)
    {
    if(i+1==stu[j].rank_math && stu[j].index==0)
    {
    printf("姓名:%s 学号:%.8d 分数:%d 名次:%d\n",stu[j].name,stu[j].num,stu[j].math,i+1);
    }
    }
    }
    anykey_continue();
    }
    //显示英语成绩排名
    void rank_english(void)
    {
    for(int i=0;i<stu_count;i++)
    {
    for(int j=0;j<stu_count;j++)
    {
    if(i+1==stu[j].rank_english && stu[j].index==0)
    {
    printf("姓名:%s 学号:%.8d 分数:%d 名次:%d\n",stu[j].name,stu[j].num,stu[j].english,i+1);
    }
    }
    }
    anykey_continue();
    }

    我的思路是先用for循环计算出所有的总分、平均分,然后将所有人的名次置为最低,然后开始遍历,遇到一个比自己分数低并且不是自己的便提升一位名次,相同的同样+2,解决分数相同名次的问题。然后在之后的函数,在教师界面显示出所有的排名。然而,在大师兄启示下,我们这样遍历结构体的效率似乎并不是很高,正在寻求新的解决方案。

  • 相关阅读:
    wampserver服务器离线,无法访问此网站 找不到 项目 的服务器 DNS 地址。
    node.js(一)介绍与安装
    js全局函數
    类和对象的定义
    iframe框架学习
    while和do-while的区别
    html5视频音频
    列表
    html表格的学习
    云课堂数组1
  • 原文地址:https://www.cnblogs.com/kid971220/p/10104519.html
Copyright © 2011-2022 走看看