实验目的:
1. 熟悉结构体的使用方法
2. 学会综合运用循环语句与选择语句并结合字符串数组及数组实现学生相关信息的排序、查找、录入、删除等功能。
3. 学会使用typedef声明新类型名
4. 学会利用函数简化main()函数,使得程序层次清晰;同时通过使用函数减少重复代码,提高程序的可读性。
6. 提高debug能力。
I7-8550U+8G内存+128G SSD固态硬盘+1T机械硬盘+NVIDIA GeForce 940M
操作系统:Windows10
编译器:Dev C++
文本编译器:Notepad++
实验步骤与内容:
1. #include <stdio.h>,#include<stdlib.h> ,#include<string.h> ,#include"process.h",#include"ctype.h" 声明下面即将使用的头文件
2. 使用typedef定义结构体,用于存储学生的相关信息及方便进行后续操作;
3. 使用循环、数组等,针对菜单提示、成绩录入、修改、添加/追加、删除、查询统计(按学号、姓名、各科成绩查询(包括成绩段查询),按分数段统计人数等)、退出等功能分别声明、定义和调用不同函数实现。
4. 在main()函数中使用swich语句调用相关函数,实现学生信息管理系统的基本功能。
结论分析与体会:
1. 当程序有较多重复或相似的代码时,可以使用函数统一编写相应的功能,在针对每种具体的情况做出适当的调整,从而减少代码量,提高程序的可读性,同时便于程序的后期维护(如debug)。
2. 在输出数据时,可以使用%-10s等输出方式,使得输出的数据左对齐。
3. 可以使用函数对结构体进行整体操作,从而减少代码量。
4. 插入时,首先将插入数据保存起来,采用自后向前循环覆盖法,用插点及其后方的数据自后而前逐一覆盖后一位同学的信息,最后再用插入数据的信息覆盖插入点的信息。
插入时,可以先放在尾部,再与前面的数据交换位置i与j交换,后面的数据依次后退一个单位覆盖后面的数据,当然总数n也要加一(用一个counts记录)另外,插入时可以调用编辑中的录入。
即:t = stu[n+i];
for (k=n+i-1;k>=place;k--)
stu[k+1]=stu[k];
stu[place]= t;
5. 删除时,采用自前向后覆盖法,原理类似于插入。
通过这次较为大型的实验,我明显感觉到自身debug能力的提高,并初步感受到了代码量巨大时细心和规范的习惯的重要性。同时,通过不断地查阅资料,程序的功能也不断地完善,最终不知不觉地写了900多行代码。看到程序真的按照构思正确执行时,内心很有成就感。
用户界面:(功能展示)
1.编辑功能(含录入、修改、删除、插入):
2.显示功能:
3.查询功能
4.排序功能:
5.统计功能:
6.文件功能:既可以读入,也可以修改或进行其他操作并当即保存至本次打开的文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "process.h"
#include "ctype.h"
typedef struct
{
char num[10];
char name[10];
char sex[10];
int internet;
int math;
int english;
double aver;
}Student;
Student stu[1000];
Student*pt=stu;
int input(Student*pt,int n);/*输入若干条记录*/
void sh