学生信息管理系统的操作

img

img


刚入门c语言的大学生不会做啊,请大家帮帮忙,真的不好搞谢谢!

img


为什么最后运行不出来呢?

把代码贴上来,方便大家修改。图中红色箭头所指“插入代码块” ,ctrl + c , ctrl + v。

img


整体修改完善如下,供参考:

#include <stdio.h>
#include <string.h>
#define N 3
struct Student
{
    char num[13]; // 学号
    char name[11];// 姓名
    char sex[5];  // 性别
    int  age;     // 年龄
    int  cprogram;// c 成绩
    int  english; // e 成绩
    int  math;    // m 成绩
    double aver;  // 平均成绩
}stu[N];

void input(struct Student stu[], int n)
{
    int i;
    for(i = 0;i < n; i++)
    {
        printf("请输入第%d/%d个学生的信息:\n",i+1,n);
        printf("------------------------------------------\n");
        printf("学号(12个字符以内):");
        scanf("%s",stu[i].num);
        getchar();
        printf("姓名(10个字符以内):");
        scanf(" %s",stu[i].name);
        getchar();
        printf("性别(4个字符以内):");
        scanf(" %s",stu[i].sex);
        getchar();
        printf("年龄(整数):");
        scanf(" %d",&stu[i].age);
        printf("《c语言》成绩(整数):");
        scanf("%d",&stu[i].cprogram);
        printf("《英 语》成绩(整数):");
        scanf("%d",&stu[i].english);
        printf("《高 数》成绩(整数):");
        scanf("%d",&stu[i].math);
        stu[i].aver=(stu[i].cprogram+stu[i].english+stu[i].math)/3.0;
        printf("------------------------------------------\n\n");
    }
}

void output(struct Student stu[], int n)
{
    int i;
    if (n <= 0) return;
    printf("%-13s %-11s %-5s %-8s %-8s %-8s %-8s %-8s\n","学号","姓名",
                                   "性别","年龄","c语言","英语","高数","平均分");
    printf("---------------------------------------------------------------------------\n");
    for (i = 0; i < n; i++)
        printf("%-13s %-11s %-5s %-8d %-8d %-8d %-8d %-8.1f\n",stu[i].num,stu[i].name,
         stu[i].sex,stu[i].age,stu[i].cprogram,stu[i].english,stu[i].math,stu[i].aver);
    printf("---------------------------------------------------------------------------\n\n");
}

void menu()
{
    printf("请选择排序字段:\n");
    printf("---------------------------------------------------------------------------------\n");
    printf("(1)学号 (2)姓名 (3)性别 (4)年龄 (5)c语言 (6)英语 (7)高数 (8)平均分 (0)退出程序\n");
    printf("---------------------------------------------------------------------------------\n");
}
void menu1()
{
    printf("请选择排序方向:\n");
    printf("---------------------------------------------------------------------------------\n");
    printf("    (1)升序                           (2)降序                   (0)退出程序\n");
    printf("---------------------------------------------------------------------------------\n");
}
void sort(struct Student stu[], int n, int field, int direction)
{
    int i, j;
    struct Student tmp;
    if (field < 1 || field > 8 || direction < 1 || direction > 2) return;
    for (i = n - 1; i > 0; i--){
        for (j = 0; j < i; j++){
            if (field == 1 && direction == 2 && strcmp(stu[j].num, stu[j+1].num)  < 0  || //学号 降序
                field == 1 && direction == 1 && strcmp(stu[j].num, stu[j+1].num)  > 0  || //学号 升序
                field == 2 && direction == 2 && strcmp(stu[j].name,stu[j+1].name) < 0  || //姓名 降序
                field == 2 && direction == 1 && strcmp(stu[j].name,stu[j+1].name) > 0  || //姓名 升序
                field == 3 && direction == 2 && strcmp(stu[j].sex, stu[j+1].sex)  < 0  || //性别 降序
                field == 3 && direction == 1 && strcmp(stu[j].sex, stu[j+1].sex)  > 0  || //性别 升序
                field == 4 && direction == 2 && stu[j].age < stu[j+1].age              || //年龄 降序
                field == 4 && direction == 1 && stu[j].age > stu[j+1].age              || //年龄 升序
                field == 5 && direction == 2 && stu[j].cprogram < stu[j+1].cprogram    || //c语言 降序
                field == 5 && direction == 1 && stu[j].cprogram > stu[j+1].cprogram    || //c语言 升序
                field == 6 && direction == 2 && stu[j].english  < stu[j+1].english     || //英语 降序
                field == 6 && direction == 1 && stu[j].english  > stu[j+1].english     || //英语 升序
                field == 7 && direction == 2 && stu[j].math     < stu[j+1].math        || //高数 降序
                field == 7 && direction == 1 && stu[j].math     > stu[j+1].math        || //高数 升序
                field == 8 && direction == 2 && stu[j].aver     < stu[j+1].aver        || //平均分降序
                field == 8 && direction == 1 && stu[j].aver     > stu[j+1].aver         ) //平均分升序
                {
                    tmp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = tmp;
                }

        }
    }
}

int main()
{
    int exit = 1, field, direction;
    printf("现某班有%d名学生,请分别依次输入%d个学生的信息:\n\n",N,N);
    input(stu, N);
    //output(stu,N);
    while (exit){
        menu();
        scanf("%d", &field);
        if (field >= 1 && field <= 8){
            do {
                menu1();
                scanf("%d", &direction);
            }while (direction < 0 || direction > 2);
            if (direction >= 1 && direction <= 2){
                sort(stu, N, field, direction);
                printf("\n排序后的学生信息:\n");
                printf("===================\n");
                output(stu,N);
            }
            else if (direction == 0)
                exit = 0;
        }
        else if (field == 0)
            exit = 0;
    }
    return 0;
}