C语言 学生系统管理器

基于数组的“学生信息管理系统”

实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理。
定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩。N定义为符号常量,定义N名学生信息的结构体数组。

实验要求:
(1) main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2) 定义函数Input:从键盘输入一个学生信息。
(3) 定义函数Output:将某个学生信息格式化输出。
(4) 定义函数Save:将某个学生信息存入文件。
(5) 定义函数Fetch:从文件中随机读取某个学生的信息。
(6) 定义函数Max:求所有学生某门课程的最高分和分数最高的学生的姓名。
(7) 定义函数Sort_select:对某个专业的学生,按总平均成绩 由低到高进行简单选择排序。
(8) 定义函数Sort_buble:对某个班级的学生,按总平均成绩由高到低进行起泡排序。
(9) 定义函数Sort_insert:对某个班级的学生,按某门课程成绩由低到高进行直接插入排序。定义函数Search:实现班级和成绩的综合查找(如1班,总分240分以上同学)。

这是初稿,所以很多冗余的地方,懒得省,所以比较长,并且用的是比较简单的语言,不足之处多多见谅。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define N 10

int menu(void);  //菜单函数
void choose(void);  //选择选项函数
void Input(void);
void Output(void);
void Save(void);
void Fetch(void);
void Max(void);
void Sort_select(void);
void Sort_buble(void);
void Sort_insert(void);
void Search(void);

struct student
{
   
    int No;   //学号
    char name[10];
    char major[10];  //专业
    char cla[5];  //班级
    int CScore;  //C语言成绩
    int EScore;  //英语成绩
    int MScore;  //数学成绩
}stu[N];

struct sco_stu  //排序时用到
{
   
    int No;
    char name[10];
    int average;
};

int menu(void)
{
   
    int mchoice;
    printf("********************菜单********************\n\n");
    printf("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("---------------------------------------------------------------\n");
 
    printf("请输入选项:");
    scanf("%d", &mchoice);
    printf("\n");
    while(mchoice > 9)  //当输入超过9时需要重新输入正确的数据
    {
   
        printf("请输入0-9:");
        scanf("%d", &mchoice);
    }
    return mchoice;
}

void choose(void)
{
   
    int choice;
    choice = menu();
    while(0 <= choice && choice <= 9)
    {
   
        switch(choice)
        {
   
        case 1:
             Input();
            break;
        case 2:
            Output();
            break;
        case 3:
            Save();
            break;
        case 4:
            Fetch();
            break;
        case 5:
            Max();
            break;
        case 6:
            Sort_select();
            break;
        case 7:
            Sort_buble();
            break;
        case 8:
            Sort_insert();
            break;
        case 9:
            Search();
            break;
        case 0:
            printf("已退出程序\n");
            exit(0);
        }
        choice = menu();
    }
}

void Input(void)
{
   
    int i,en;
    for(i = 0; i < N; i++)
    {
   
        if(stu[i].No == 0)  //学号为0时说明该单元为空,才能存入信息,否则进行+1操作,查询下一个单元是否为空
        {
   
            printf("输入信息请按1,停止输入请按0\n");   //可以随时继续输入信息或者停止输入
            scanf("%d", &en);
            
            if(en == 0)
                return;
            else
            {
   
                printf("请输入以下信息:\n");
                printf("学号(1-100):");
                scanf("%d", &stu[i].No);
                printf("姓名:");
                scanf("%s", stu[i].name);
                printf("专业:");
                scanf("%s", stu[i].major);
                printf("班级:");
                scanf("%s", stu[i].cla);
                printf("C语言成绩:");
                scanf("%d", &stu[i].CScore);
                printf("英语成绩:");
                scanf("%d", &stu[i].EScore);
                printf("数学成绩:");
                scanf("%d", &stu[i].MScore);
                printf("\n");
            }
        }
    }
}

void Output(void)
{
   
    int i;
    int flag = 0;  //flag为错误提示
    int no;
    printf("请输入要输出信息的学生学号:");
    scanf("%d", &no);
    for(i = 0; i < N; i++)
    {
   
        if(stu[i].No == no)
        {
   
            printf("学号:%d\n", stu[i].No);
            printf("姓名:%s\n", stu[i].name);
            printf("专业:%s\n", stu[i].major);
            printf("班级:%s\n", stu[i].cla);
            printf("C语言成绩:%d\n", stu[i].CScore);
            printf("英语成绩:%d\n", stu[i].EScore);
            printf("数学成绩:%d\n", stu[i].MScore);
            printf("\n");
            flag++;
        }
    }
        
    if(flag == 0)  //当查找完整个数组后没有找到学生信息时,flag为0,则报错
    {
   
        printf("没有该学生学号,需要重新输入学号\n\n");
        Output();
    }
}

void Save(void)
{
   
    FILE *fp;
    int i, sno;
    int flag = 0;  //错误标志位
    fp = fopen("manager", "a");  //已附加方式打开只写文件,写入的文件会被加到文件尾
    printf("请输入要保存进文档里的学生信息学号:")
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值