&Meku 、 2021-06-07 16:20 采纳率: 100%
浏览 352
已结题

用线性表实现学生信息表

这是题目内容:

用线性数组做一个班级学生档案记录的程序,要求:

    1)用结构体表示学生记录,包括但不限于:学号、姓名、性别、班级、生日、宿舍、籍贯等信息;

    2)学生记录用数组存储,按照学号递增顺序记录;

    3)学生记录插入:插入包括自己在内的10名学生;

    4)学生记录删除:删除指定位置学生;

    5)查找学生:根据姓名查找学生在记录中的位序;

 

#include<stdio.h>  
#include<malloc.h>  
#include<stdlib.h>  
#include<string.h>  
#define OK 1  
#define ERROR 0  
#define OVERFLOW -2  
#define MAXSIZE 1000 

typedef int Status; // 定义函数返回值类型  

typedef struct
{
    int num;		//学号
    char name[20];	//姓名
    char sex;		//性别
    int age;		//年龄
    char place[10];	//籍贯
    float weight;	//体重
    float height;	//身高
    int birthday;	//生日
    int dormitory;	//宿舍
}student;

typedef student ElemType;

typedef struct
{
    ElemType* elem; // 存储空间的基地址   
    int length; // 当前长度   
}SqList;

Status InitList(SqList* L) // 构造空的顺序表 L   
{
    L->elem = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);
    if (!L->elem)  exit(OVERFLOW);  		//分配失败退出 
    L->length = 0;  		//长度为0 
    return OK;
}

ElemType GetElem(SqList& L, int i) // 访问顺序表,找到 i位置,返回给 e  
{
    return L.elem[i];
}

int Search(SqList& L, char str[]) // 根据名字查找,返回该同学在顺序表中的编号   
{
    for (int i = 1;i <= L.length;i++)  	//查找成功,返回序号 i+1
    {
        if (strcmp(L.elem[i].name, str) == 0)
            return i;
    }
    return 0;
}

Status ListInsert(SqList& L, int i, ElemType e) // 在 i位置插入某个学生的信息   
{
    if ((i < 1) || (i > L.length + 1)) return ERROR;
    if (L.length == MAXSIZE)   return ERROR;
    for (int j = L.length;j >= i;j--)
    {
        L.elem[j + 1] = L.elem[j];  	//插入位置及之后的元素后移
    }
    L.elem[i] = e;  		//将新元素e放入第i个位置
    ++L.length;
    return OK;
}

Status ListDelete(SqList& L, int i) // 在顺序表中删除 i位置的学生信息   
{
    if ((i < 1) || (i > L.length))   return ERROR;
    for (int j = i;j <= L.length;j++)
    {
        L.elem[j] = L.elem[j + 1];  	//被删除元素之后的元素前移
    }
    --L.length;  	//长度减一 
    return OK;
}

void Input(ElemType* e)  		//输入 
{
    printf(" 学号:");
    scanf_s("%d", &e->num);
    printf(" 姓名:");
    scanf_s("%s", e->name, 4);
    printf(" 性别:");
    scanf_s("%s", &e->sex, 3);
    printf(" 年龄:");
    scanf_s("%d", &e->age);
    printf(" 籍贯:");
    scanf_s("%s", e->place, 20);
    printf(" 体重:");
    scanf_s("%f", &e->weight);
    printf(" 身高:");
    scanf_s("%f", &e->height);
    printf(" 生日:");
    scanf_s("%d", &e->birthday);
    printf(" 宿舍:");
    scanf_s("%d", &e->dormitory);
    printf("输入完成\n\n");
}

void Output(ElemType& e)  		//输出 
{
    printf_s("学号:%d 姓名:%s 性别:%s 年龄:%d 籍贯:%s 体重:%f 身高:%f 生日:%d 宿舍:%d", e.num, &e.name, e.sex, e.age, &e.place, e.weight, e.height, e.birthday, e.dormitory);

}

int main()
{
    SqList L ;
    ElemType a, b, c, d;
    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("0. 退出\n");
    int x = 0, choose;
    while (1)
    {
        printf("请输入你要选择的功能前的序号:");
        scanf_s("%d", &choose);
        if (choose == 0)   break;
        switch (choose)
        {
        case 1:
            if (InitList(&L))
                printf("成功建立顺序表\n");
            else
                printf("顺序表建立失败\n");
            break;
        case 2:
            printf("请输入要录入学生的人数:");
            scanf_s("%d", &x);
            for (int i = 1;i <= x;i++)
            {
                printf("第%d个学生:\n", i);
                Input(&L.elem[i]);
            }
            L.length = x;
            break;
        case 3:
            for (int i = 1;i <= x;i++)
            {
                a = GetElem(L, i);
                Output(a);
            }
            break;
        case 4:
            char s[20];
            printf("请输入要查找的学生姓名:");
            scanf_s("%s", s, 4);
            if (Search(L, s))
                Output(L.elem[Search(L, s)]);
            else
                printf("对不起,查无此人\n");
            printf_s("");
            break;
        case 5:
            printf_s("请输入要查询的位置:");
            int id1;
            scanf_s("%d", &id1);
            b = GetElem(L, id1);
            Output(b);
            break;
        case 6:
            printf("请输入要插入的位置:");
            int id2;
            scanf_s("%d", &id2);
            printf("请输入学生信息:\n");
            Input(&c);
            if (ListInsert(L, id2, c))
            {
                x++;
                printf("插入成功\n");
            }
            else
            {
                printf("插入失败\n");
            }
            break;
        case 7:
            printf("请输入要删除的位置:");
            int id3;
            scanf_s("%d", &id3);
            if (ListDelete(L, id3))
            {
                x--;
                printf("删除成功\n");
            }
            else
            {
                printf("删除失败\n");
            }
            break;
        case 8:
            printf("已录入的学生个数为:%d\n\n", L.length);
            break;
        }
    }
    printf("\n\n请按任意键退出\n\n");
    return 0;
}

    可以正常编译,选择1和选择2可以使用,但是其他选择在运行的时候会出问题,不知道怎么修改。

    运行选择三的时候会出现(引发了异常: 读取访问权限冲突),不知道为什么

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 16:53
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月18日
  • 已采纳回答 10月10日

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测