数据结构实验报告(一)学生信息管理系统

大二计算机学生报告的汇总

进入计算机专业以来每天的必要工作就是写报告,按照老师的话来说,我们计算机专业的学生经过长时间的训练,以后出去写代码就跟喝水一样简单.在这里我将发表部分我写的报告,仅以此怀念我的大二时光.(报告写的不好.仅供欣赏)

报告汇总之c语言数据结构报告篇(一)

学生信息管理系统

代码区

代码说明:此代码所运用的软件是ios系统的x-code

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int sum;
//创建一个学生的信息结构体
typedef struct student{
    long id;
    char name[64];
    float grade;
}s;
//定义顺序表
typedef struct {
    s* student;
    int length;
}SqList;
//构造空顺序表
int CreatStudent(SqList*L){
    L->student=(s*)malloc(sizeof(s));
    if (L->student==NULL)
        return 0;
    else
    {
        L->length=0;
        return 1;
    }
}
//录入基础学生信息和需要插入的学生信息
void GetStudent(SqList*L,int i){
    printf("请输入学生的学号:");
    scanf("%ld",&L->student[i].id);
    printf("请输入学生的姓名:");
    scanf("%s",L->student[i].name);
    printf("请输入学生的成绩:");
    scanf("%f",&L->student[i].grade);
    L->length++;
}
void jiaohuan(SqList*L,int i);
//打印学生信息
void PrintStudent(SqList*L,int i)
{
    printf("%ld\n%s\n%.3f\n\n",L->student[i].id,L->student[i].name,L->student[i].grade);
}
//查找指定的学生信息
void FindStudent (SqList*L)
{
    int n;
    printf("请输入查找方式:\n0=学号查找\n1=存储位置查找");//查找方式的选择
    scanf("%d",&n);
    printf("请输入需要查找学生的信息:");
    switch (n) {
        case 0:
        {
            long number;//输入需要查找的学生学号
            scanf("%ld",&number);
            for (int i=0;i<=L->length;i++)
            {
                if (number==L->student[i].id)
                    PrintStudent(L,i);//打印出查找到的学神信息
            }
            break;
        }
        case 1:
        {
            int number;
            scanf("%d",&number);//输入需要查找的学生位置
            PrintStudent(L,number-1);
            break;
        }
        default:
            printf("您输入的查找方式有误请确认后再操作");
            break;
    }
    
}
//删除指定的学生信息
void DeletStudent (SqList*L,int i)
{
    if(i<0||i>sum)
        printf("输入信息有误");
    else
    {
        for (int m=i-1;m<sum;m++)
        {
            L->student[m]=L->student[m+1];
        }
        //删除
        sum--;
        L->length--;
    }
}
//更新表中的学生信息
void ReGetStudent (SqList*L)
{
    int p;
    printf("请输入需要更新的位置:");
    scanf("%d",&p);
    GetStudent(L, p-1);
}
void charu(SqList* L)
{
    printf("请输入需要插入的位置:");
    int p;
    scanf("%d",&p);
    GetStudent(L, sum);
    sum++;
    for (int i=sum-1;i>p-1;i--)
        jiaohuan(L,i);
    
    
}
void jiaohuan(SqList*L,int i)
{
    long a;
    a=L->student[i-1].id;
    L->student[i-1].id=L->student[i].id;
    L->student[i].id=a;
    char b[64];
    strcpy(b, L->student[i-1].name);
    strcpy(L->student[i-1].name,L->student[i].name);
    strcpy(L->student[i].name, b);
    float c;
    c=L->student[i-1].grade;
    L->student[i-1].grade=L->student[i].grade;
    L->student[i].grade=c;
    
}
void paixu (SqList*L)
{
    printf("请输入排序的要求:0代表学号;1代表成绩");
    int m;
    scanf("%d",&m);
    switch (m) {
        case 0:
            while (1)
            {
                int f=0,q=0;
                f=q;
                for (int i=0;i<sum-1;i++)
                    if (L->student[i].id>L->student[i+1].id)
                    {
                        jiaohuan(L, i+1);
                        f=1;
                    }
                    else f=0;
                if (f==0)
                    break;
                
            }
            break;
            
        case 1:
            while (1)
            {
                int f=0,q=0;
                f=q;
                for (int i=0;i<sum-1;i++)
                    if (L->student[i].grade>L->student[i+1].grade)
                    {
                        jiaohuan(L, i+1);
                        f++;
                    }
                if (f==q)
                    break;
            }
            break;
    }
}

void qingkong (SqList*L)
{
    L->length=0;sum=0;

    printf("所有数据已经清空");
}

int main()
{
    SqList *text=(SqList*)malloc(sizeof(SqList)*10000);
    //为text划分存储空间
    CreatStudent(text);
    printf("共有多少名学生:");
    //录入基础有多少学生
    scanf("%d",&sum);
    text->length=0;
    for (int i=0;i<sum;i++)
        GetStudent(text,i);
    //获得基础学生信息
    int c;
    printf("(1)显示:显示当前所有学生信息记录;\n");
    printf("(2)录入:从键盘输入一条学生信息记录,插入到表中指定的位置;\n");
    printf(" (3)查找:根据学号或者记录的位置查找学生的各项信息;\n");
    printf("(4)删除:删除指定位置的学生信息记录;\n");
    printf("(5)更新:更新指定位置的学生信息记录;\n");
    printf("(6)统计:统计表中学生人数。\n");
    printf(" (7) 排序:按照学号或者绩点进行排序\n");
    printf("(8)清空:清空表中所有记录\n");
    int p=1;
    while (p==1)
    {
        printf("请输入你的操作指令:\n");
        scanf("%d",&c);
        switch (c) {
            case 1:
                for (int i=0;i<sum;i++)
                    PrintStudent(text,i);
                break;
            case 2:
                charu(text);
                break;
            case 3:
                FindStudent(text);
                break;
            case 4:
            {
                int m;
                printf("请输入需要删除学生的位置:");
                scanf("%d",&m);
                DeletStudent(text, m);
            }
                break;
            case 5:
                ReGetStudent(text);
                break;
            case 6:
                printf("学生的总数是:%d",sum);
                break;
            case 7:
                paixu(text);
                break;
            case 8:
                qingkong(text);
                break;
            case 0:
                p=0;
                break;
            default:
                printf("输入指令不对,请重新输入如果退出请输入0;");
                break;
        }
    }
}

报告区

第一部分:实验分析与设计(可加页)
一、 实验内容描述(问题域描述)
设计一个学生信息管理系统,实现对学生基本信息的添加、删除、修改和查询等操作,其中每个学生信息包含学号,姓名和绩点。要求系统完成以下主要功能:
(1)显示:显示当前所有学生信息记录;
(2)录入:从键盘输入一条学生信息记录,插入到表中指定的位置;
(3)查找:根据学号或者记录的位置查找学生的各项信息;
(4)删除:删除指定位置的学生信息记录;
(5)更新:更新指定位置的学生信息记录;
(6)统计:统计表中学生人数。
(7) 排序:按照学号或者绩点进行排序
(8)清空:清空表中所有记录

二、 实验基本原理与设计(数据结构设计与算法设计)

(1) 显示利用栈的顺序遍历输出每一个学生的信息;
(2) 录入需要先通过遍历找到需要插入的位置,然后获取需要录入的学生的信息,利用尾插法插入该学生信息。
(3) 查找通过遍历每一个学生的信息和所拥有的数据进行对比最终得出结果
(4) 删除直接从该位置开始后面的学生信息向前进一
(5) 先通过查找找到指定位置然后对其中的元素信息进行替换
(6) 遍历过程中设置一个变量让其每次加一
(7) 对所需要排序的内容进行比较如果不一致则进行交换并将变量j++;重复循环直到变量j为0;
(8) 清空令length为0;
三、主要仪器设备及耗材
1.PC机
2.开发环境(比如:VC,Eclipse)
X-code
第二部分:实验调试与结果分析(可加页)
一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
1.调试方法描述
① 输入c程序,并保存;
② 编译c程序,找出程序的语法错误并改正;
③ 输入测试数据,运行c程序;
④ 若有错利用断点一步步运行查错
⑤ 重复②-④步,直到得到正确的运行结果。

2.实验输入/输出数据记录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.实验过程发现的问题

在设计除排序算法外的算法的时候没有什么太大问题;在设计排序算法时,我发现总会出现未完全排序的情况,因为顺序表与链表不同不能排序过程中直接插入,直到我引入了一个新的变量,让他来检验排序是否完全完成;虽然时间复杂度有所上升,但是能较好的完成功能的需要。

二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
1.结果描述
功能1-8全部都能正常实现;没有意外。
2.实验现象分析
所有程序经调试均符合题目要求。
3.影响因素讨论
① 程序的输入提示不够,不知道何时需要输入数据,所以要增加输入提示,提示用户改做什么;
② 输出提示不够,输出结果不太清晰;
4.算法分析(包括时间和空间)
T(n)=o(n3);
5.结论
顺序表便于查找指定位置的内容,也便于顺序查找,但是在插入的时候不是很方便;总体来说这个实验我做的时间不算长但是其中的思路还是花了点时间。顺序表还是很实用的。
三、 实验小结、建议及体会
通过这次上机实验,使我对顺序表有了更加深刻的理解,结构体的用法也更加熟练,虽然在编程中出现了很多错误,但是最终错误都得以解决,让我下一次遇到这些问题更加的得心应手。锻炼了我的逻辑能力。
运用顺序表来写一个学生管理系统,有其优势就是统计显示比较方便快捷,但是也有其劣势那就是录入和删除的繁琐,每一次录入删除需要移动所有数据。但好在在排序上,顺序表的便捷和可读比链表好。
下一次遇到顺序表和链表的问题时可以多比较一下其各自的时间和空间复杂度,选择更加便捷不容易出错的作为一开始的思路。
算法在节省空间存储的基础上却又加大了程序运行时间的开销,空间与时间是难以兼得的熊和鱼掌,程序员编写的时候需要考虑侧重点

发布了10 篇原创文章 · 获赞 9 · 访问量 257

猜你喜欢

转载自blog.csdn.net/qq_45621040/article/details/103943804
今日推荐