关于学生管理系统的总结

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

.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,解决分数相同名次的问题。然后在之后的函数,在教师界面显示出所有的排名。然而,在大师兄启示下,我们这样遍历结构体的效率似乎并不是很高,正在寻求新的解决方案。

猜你喜欢

转载自www.cnblogs.com/kid971220/p/10104519.html
今日推荐