基于数组的学生信息管理系统实验报告

更新时间:2024-01-14 10:51:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《C语言程序设计实训1》报告 设 计学 院专 班 姓 提 交

题 目: 基于数组的学生信息管理系统 称: 信息科学技术学院 业: 软件工程 级: x班 名: xxx 学 号 xxx

日 期: 2014年6月

一、实验内容

编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩。N定义为符号常量(学生数)。全局类型的定义如下:

#define N 10 struct Student{ char num[15];//学号 char name[15];//姓名 char major[10];//专业(computer,software,network) int classNo;//班级(1-2) int score[3];//3门课的成绩(0-2) }; typedef struct Student STU;

二、实验要求

(1) main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。

STU student[N]; //保存输入的N名学生信息 (2) 定义函数Input:从键盘输入N个学生的信息。 (3) 定义函数Save:将学生信息存入文件。

(4) 定义函数Output:将某个学生信息表格化屏幕输出。

(5) 定义函数Fetch:从文件中随机读取第n个(0<=n<=N-1)学生的信息。 (6) 定义函数Max:求所有学生某门课程的最高分和分数最高的学生的姓名。 (7) 定义函数Sort_select:对所有学生,按平均成绩由低到高进行简单选择排序。 (8) 定义函数Sort_buble:对某个班级的学生,按平均成绩由高到低进行起泡排序。并调

用Output输出。 定义局部变量:

STU stu_class_ave[N]; //按平均成绩排序后的某个班级的学生信息; int count; //实际元素个数

(9) 定义函数Sort_insert:对某个专业的学生,按某门课程成绩由低到高进行直接插入排

序。并调用Output输出。 定义局部变量:

STU stu_class_ subject [N]; //按某门课程成绩排序后的某个专业的学生信息; int count; //实际元素个数

(10) 定义函数Search:实现班级和成绩的综合查找(如1班,总分240分以上同学)。

三、算法流程图

函数Sort_select的算法流程图

四、程序清单(关键语句和变量加注释)

#include//预编译的文件包含指令 #include//exit()的函数声明 #include//字符串的头文件

//------------------------------------------类型定义-------------------------------------------------------------- struct Student

{ char num[15];//学号 char name[15];//姓名

char major[10];//专业(computer,software,network) int classNo;//班级(1-2) int score[3];//3门课的成绩(0-2) };

typedef struct Student STU;

//---------------------------------------------函数声明----------------------------------------------------------- void input(STU *p);//从键盘输入N个学生的信息

void save(STU *p,int n);//将学生信息存入文件

void output(STU *p);//将某个学生信息表格化屏幕输出

void fetch();//从文件中随机读取第n个(0<=n<=N-1)学生的信息

void Max();//求所有学生某门课程的最高分和分数最高的学生的姓名

void sort_buble();//对某个班级的学生,按平均成绩由高到低进行起泡排序。并调用Output输出

void sort_insert();//对某个专业的学生,按某门课程成绩由低到高进行直接插入排序。并调用Output输出

void sort_select();//对所有学生,按平均成绩由低到高进行简单选择排序

void search();//实现班级和成绩的综合查找(如1班,总分240分以上同学)

//----------------------------------------主函数开始--------------------------------------------------------------

#define N 10//数组长度定义为10

void main()//以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数 { {

printf(\请输入功能编号,运行系统相应功能\\n\

printf(\输入学生信息\\n2-信息存盘\\n3-从文件中随机读取某个学生的信息\\n\int j,id;

STU student[N];//用于保存输入的N名学生信息 while(1)

printf(\输出所有学生某门课程的最高分和分数最高的学生的姓名\\n5-对所有学生

printf(\对某个班级学生按总平均成绩由高到低排序\\n7-对某个专业的学生按某门printf(\实现班级和成绩的综合查找\\n\getchar();//吸收回车键 switch(id) { case 1: { } case 2: { } case 3: { } case 4:

fetch();//随机读取 break;

save(student,N);//存储信息 break;

for(j=0;j

break;

printf(\第%d个\\n\input(student+j);

按总平均成绩由低到高排序\\n\课程成绩由低到高排序\\n\

scanf(\输入功能编号,运行系统相应功能

}

}

{ } case 5: { } case 6: { } case 7: { } case 8: { }

default://不符合8个常量 }

{ break;

search();//综合查找 break;

sort_insert();//某专业课程排序 break;

sort_buble();//某班级总平均成绩排序 break;

sort_select();//所有总平均成绩排序 break; Max();//最高分 break;

if((id)<1||(id)>8) }

break;//break while

//--------------------------------------------------输入函数--------------------------------------------------- void input(STU *p) {

int i;

fclose(fp); }

//---------------------------------------------------某课程插入排序-------------------------------------------- void sort_insert() {

int count=0;//实际元素个数

int i,j,k,c;

STU student[N],stu[N]; FILE *fp;

printf(\输入要读取的文件夹名:\\n\gets(filename); {

char se_major[15];//专业

STU stu_class_subject[N];//按某门课程成绩排序后的某个专业的学生信息 char filename[20];

if((fp=fopen(filename,\ printf(\ return;

}

for(i=0;i

if((fread(&student[i],sizeof(STU),1,fp))!=1) return;

printf(\请输入您要查找的专业(computer,software,network):\

gets(se_major);

printf(\请输入您要查找的课程(0-2):\

scanf(\ for(i=0;i

{ if(strcmp(student[i].major,se_major)==0)//计数 } {

for(j=i-1;j>=0;j--) {

if(stu_class_subject[j].score[c]

stu_class_subject[count]=student[i];

{

count++;

for(i=1;i

}

break; } if(j!=i-1)

{ stu[0]=stu_class_subject[i]; for(k=i;k>=j+1;k--) }

{stu_class_subject[k]=stu_class_subject[k-1];} stu_class_subject[j+1]=stu[0];//插入位置

printf(\排序后的信息为:\\n\

printf(\学号 姓名 专业 班级 成绩0 成绩1 成绩2\\n\ for(i=0;i

{output(&stu_class_subject[i]);}//由低到高输出 fclose(fp); }

//-----------------------------------------------------------查找--------------------------------------------------- void search() {

int i,k,count=0; int sum[N],fscore; FILE *fp;

STU student[N],stu[N];

printf(\输入要读取的文件夹名:\\n\gets(filename); {

char filename[20];

if((fp=fopen(filename,\ printf(\ exit(0);

}

for(i=0;i

if((fread(&student[i],sizeof(STU),1,fp))!=1) exit(0); for(i=0;i

{sum[i]=student[i].score[0]+student[i].score[1]+student[i].score[2];}//计算总分 printf(\请输入要查找的班级、分数下限:\

scanf(\ for(i=0;i

}

printf(\学号 姓名 专业 班级 成绩0 成绩1 成绩

for(i=0;i

if(student[i].classNo==k&&fscore<=sum[i])//计数 {stu[count]=student[i]; count++;}

2\\n\

fclose(fp);

五、程序测试(输入、输出的截图及文件的内容)

六、实验总结(实验过程中遇到的具体问题,如何解决,不要说空话、套话,雷同扣分)

本文来源:https://www.bwwdw.com/article/ozmo.html

Top