关于数据结构和算法:学生信息管理系统c语言简版章节实验作业

56次阅读

共计 3831 个字符,预计需要花费 10 分钟才能阅读完成。

学生信息管理系统(c 语言简版)——章节试验作业

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define MaxSize 50
typedef struct {char number[20];
    char name[20];
    int math;
    int computer;
    int ad_math;
    int average;
}Student;
typedef struct
{Student student[MaxSize];
    int length;
}SqList;
void Show()   // 菜单
{printf("**********************************\n");
    printf("WELCOME!\n");
    printf("\n");
    printf("新科院学生信息管理系统 \n\n");
    printf("\t 1. 查问 \t 2. 插入 \n\n");
    printf("\t 3. 删除 \t 4. 打印 \n\n");
    printf("\t 5. 排序 \t 6. 退出 \n\n");
    printf(".............7. 录入.............\n");
    printf("\n");
    printf("输出相干序号实现相干性能!\n");
    printf("**********************************\n");
}
void InitList(SqList*& L)  // 初始化
{L = (SqList*)malloc(sizeof(SqList));
    L->length = 0;
}
void CreateList(SqList*&L)   // 录入信息
{
    int i = 0, n;
    printf("请输出录入学生人数:");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {printf("姓名:");
        scanf("%s", &L->student[i].name);
        getchar();    // 排汇换行符
        printf("学号:");
        scanf("%s", &L->student[i].number);
        getchar();
        printf("数学问题,计算机问题,高数问题:\n");
        scanf("%d%d%d", &L->student[i].math, &L->student[i].computer, &L->student[i].ad_math);
        L->student[i].average = (L->student[i].ad_math + L->student[i].computer + L->student[i].math) / 3; // 均匀问题
        getchar();     // 排汇换行符
        if (i == n - 1)   // 强制跳出循环
            break;
    }
    L->length = n;
    printf("录入胜利!");
    Sleep(3000);
}
void DispList(SqList*&L)    // 打印
{
    int i, flag;
    if (L->length==0)    // 判空
    {printf("道歉!无数据,请录入!");    
        Sleep(3000);
        return;
    }
    while (1) {for (i = 0; i < L->length; i++)
        {printf("姓名:%s\t", L->student[i].name);
            printf("学号:%s\n", L->student[i].number);
            printf("数学问题:%d\t", L->student[i].math);
            printf("计算机问题:%d\t", L->student[i].computer);
            printf("高数问题:%d\t", L->student[i].ad_math);
            printf("均匀问题:%d\n", L->student[i].average);
            printf("............................\n");
        }
        printf("输出 0 退出打印!\n");
        scanf("%d", &flag);
        if (flag == 0)      // 跳出打印结果显示
            break;
    }
}
void SeekElem(SqList* L)   // 查问
{
    int i = 0, flag;
    char num[MaxSize];
    printf("请输出要查找学生信息的学号:\n");
    scanf("%s", num);
    while (1) {while (i < L->length && strcmp(num, L->student[i].number) != 0)
        {i++;}
        if (strcmp(num, L->student[i].number) == 0)
        {printf("姓名:%s\t", L->student[i].name);
            printf("学号:%s\n", L->student[i].number);
            printf("数学问题:%d\t", L->student[i].math);
            printf("计算机问题:%d\t", L->student[i].computer);
            printf("高数问题:%d\t", L->student[i].ad_math);
            printf("均匀问题:%d\n", L->student[i].average);
        }
        else
            printf("查无此人!\n");
        printf("输出 0 退出打印!\n");
        scanf("%d", &flag);
        if (flag == 0)      // 跳出打印结果显示
            break;
    }
}
void ListInsert(SqList*& L)  // 插入
{
    int n, i, flag;
    printf("请输出插入学生信息个数:");
    scanf("%d", &n);
    printf("请输出插入学生信息:\n");
        for (i = 0; i < n; i++)
        {printf("姓名:");
            scanf("%s", &L->student[L->length + i].name);
            getchar();    // 排汇换行符
            printf("学号:");
            scanf("%s", &L->student[L->length + i].number);
            getchar();
            printf("数学问题,计算机问题,高数问题:\n");
            scanf("%d%d%d", &L->student[L->length + i].math, &L->student[L->length + i].computer, &L->student[L->length + i].ad_math);
            getchar();     // 排汇换行符
            L->student[i].average = (L->student[L->length + i].ad_math + L->student[L->length + i].computer + L->student[L->length + i].math) / 3; // 均匀问题
        }
        L->length = L->length + n;
        printf("\a");
        printf("插入胜利!");
        Sleep(2000);      // 显示插入胜利提醒
}
void ListDelete(SqList*& L)   // 删除
{
    int i, j;
    char num[MaxSize];
    printf("请输出要删除学生信息的学号:\n");
    scanf("%s", num);
    for (i = 0; i < L->length; i++)
    {if (strcmp(num, L->student[i].number) == 0)
        {for (j = i; j < L->length - 1; j++)
                L->student[j] = L->student[j + 1];
            L->length--;
            printf("删除胜利!");
            Sleep(3000);
            return;   // 删除胜利,强制退出函数
        }
    }
    printf("输出谬误!\a");  
    Sleep(3000);
}
void Sort(SqList*&L)   // 排序
{
    int i, j;
    Student temp;
    printf("依照均匀问题降序输入学生的信息如下:\n");
    for (i=0; i<L->length-1; i++)
        for (j = 0; j < L->length - i - 1; j++)    // 冒泡排序(降序排列){if (L->student[j].average < L->student[j + 1].average)
            {temp = L->student[j];
                L->student[j] = L->student[j+1];
                L->student[j+1] = temp;
            }
        }
    DispList(L);
}
int main()
{
    int n;
    SqList* L;
    InitList(L);
    while (1) {system("cls");    // 清屏函数
        Show();
        printf("请输出 1 - 7 的数:");
        scanf("%d", &n);
        switch (n) {
        case 1:
            SeekElem(L);
            break;
        case 2:
            ListInsert(L);
            break;
        case 3:
            ListDelete(L);
            break;
        case 4:
            DispList(L);
            break;
        case 5:
            Sort(L);
            break;
        case 6:
            printf("........ 正在退出中........");
            Sleep(3000);
            system("cls");
            printf("\a 退出胜利!"),
                exit(0);
            break;
        case 7:
            CreateList(L);
            break;
        default:
            printf("\a 输出谬误!请从新输出(1—7)!"),
                Sleep(2000);
            break;
        }
    }
}

正文完
 0