当前位置:首页 > 通信资讯 > 正文

本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下

elemtype.h

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 /***************************** * 这是学生成绩管理系统中的记录结构文件。 * 文件名:elemtype.h * 作者: * 创建日期:2012-12-05 * 完成日期:2012-12-07 * 版本:1.0 * 修改记录: * * ******************************/ #ifndef ELEMTYPE #define ELEMTYPE #include <stdio.h> //用宏定义来规定各个字符串数据项的最大长度。 //定义姓名最大长度 #define MAX_NAME 30 //定义学生课程数量 #define SCORE_NUM 3 /*学生分类信息*/ typedef enum { SCIENCE =0,//理科 ARTS,//文科 MEDICINE,//医科 OTHER//其它 }StuType; /*学生信息结构体*/ typedef struct { char name[MAX_NAME+1];//学生姓名 StuType type;//学生分类,具体定义见学生分类信息 int ID;//学号 float score[SCORE_NUM];//所修课程分数 }ElemType; /*函数功能: 从文件中读取数据并保存到数组中,n为文件中保存的记录条数 参数说明: filename-数据文件名称 n-数组中当前保存的有效记录条数 array-用于存储学生信息的数组 返回值: true-成功添加了一条记录; false-添加记录不成功 */ bool ReadDataFromFile(char *filename, ElemType array[], int n); /*函数功能: 显示所有学生信息 参数说明: n-数组中当前保存的有效记录条数 array-用于存储学生信息的数组 返回值: */ void DispalyAll(ElemType array[], int n); /*函数功能: 修改学生信息,即从控制台输入一个学生信息,根据该信息在数组中进行查找并修改 参数说明: n-数组中当前保存的有效记录条数 array-用于存储学生信息的数组 返回值: true-成功修改了一条记录 false-修改记录不成功 */ bool ModifyStudentInfo(ElemType array[],int n); /*函数功能: 计算某一科目平均分 参数说明: n-数组中当前保存的有效记录条数 array-用于存储学生信息的数组 返回值: -1-没有找到对应记录 对应记录的下标 */ void CalcSubjectScore(ElemType array[], int n ); /*函数功能: 根据学号查找学生,计算其平均分 参数说明: n-数组中当前保存的有效记录条数 array-用于存储学生信息的数组 返回值: -1-没有找到对应记录 对应记录的下标 */ void CalcStudentScore(ElemType array[], int n ); /*函数功能: 添加学生信息,即从控制台输入一条学生信息,然后将输入的学生信息保存到数组中 参数说明: n-数组中当前保存的有效记录条数 array-用于存储学生信息的数组 返回值: true-成功添加了一条记录,提示:此种情况下n需要增加1 false-添加记录不成功 */ void SortStu(ElemType array[], int n); /*函数功能: 把数组中的数据写到文件中保存 参数说明: filename-数据文件名称 n-数组中当前保存的记录条数 array-用于存储学生信息的数组 返回值: true-成功添加了一条记录; false-添加记录不成功 */ bool WriteDataToFile(char *filename, ElemType array[], int n); #endif

elemtype.cpp

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 #include "elemtype.h" #include <stdlib.h> #include <string.h> // ///function ///从文件中读取学生信息,保存到一个足够大的数组中。 bool ReadDataFromFile(char *filename, ElemType array[], int n) { FILE* fp; int i; if ((fp=fopen(filename,"rb"))==NULL ) { return false; } for (i=0; i<n; i++) { fread(array+i,sizeof(ElemType),1,fp); } fclose(fp); return true; } void DispalyAll(ElemType array[], int n) { //add your code here int i; printf("%s%10s%9s%12s%10s%10s\n","NAME","TYPE","ID","SCORE1","SCORE2","SCORE3"); for(i=0;i<n;i++) { printf("%s",array[i].name); switch(array[i].type) { case 0: printf("%10s","SCIENCE"); break; case 1: printf("%10s","ARTS"); break; case 2: printf("%10s","MEDICIEN"); break; case 3: printf("%10s","OTHER"); default: break; } printf("%10d%10.2f%10.2f%10.2f\n",array[i].ID,array[i].score[0],array[i].score[1],array[i].score[2]); } printf("\n"); } bool ModifyStudentInfo(ElemType array[],int n) { //add your code here int number; int i,j; printf("输入需要修改学生信息的学生学号:"); scanf("%d",&number); for(i=0;i<n;i++) { if(number==array[i].ID) { printf("请输入该同学的新信息,按姓名,学科种类,学号,各科成绩的顺序\n"); printf("(学科种类只需填对应代码---理科0,文科1,医科2,其他3):\n"); scanf("%s %d %d",array[i].name,&array[i].type,&array[i].ID); for(j=0;j<SCORE_NUM;j++) { scanf("%f",&array[i].score[j]); } return true; break; } } return false; } void CalcSubjectScore(ElemType array[], int n) { //add your code here int i,j; float sum[SCORE_NUM]={0},ave[SCORE_NUM]; for(j=0;j<SCORE_NUM;j++) { for(i=0;i<n;i++) { sum[j]=sum[j]+array[i].score[j]; } ave[j]=sum[j]/n; } for(j=0;j<SCORE_NUM;j++) { printf("科目 %d 均分:%.2f\n",j+1,ave[j]); } } void CalcStudentScore(ElemType array[], int n) { //add your code here int findID,i,j; float sum=0; printf("请输入查找学生的学号:"); scanf("%d",&findID); for(i=0;i<n;i++) { if(findID==array[i].ID) { for(j=0;j<SCORE_NUM;j++) { sum=sum+array[i].score[j]; } break; } } printf("该学生总分为:%.2f\n",sum); } void SortStu(ElemType array[], int n) { //add your code here int j; printf("请输入添加的学生信息(按姓名,学科种类,学号,各科分数的顺序)\n"); printf("(学科种类只需输入对应代码---理科0,文科1,医科2,其他3):\n"); scanf("%s %d %d",array[n].name,&array[n].type,&array[n].ID); for(j=0;j<SCORE_NUM;j++) { scanf("%f",&array[n].score[j]); } n=n+1; printf("添加成功!\n"); DispalyAll(array,n); } // ///function ///把数组中所有有效记录以二进制形式保存到文件中 bool WriteDataToFile(char *filename, ElemType array[], int n) { //add your code here int i; FILE* fp; if( (fp=fopen(filename,"rw"))==NULL ) { printf("cannot open file\n"); return false; } for(i=0;i<n+1;i++) { fwrite(array+i,sizeof(ElemType),1,fp); } fclose(fp); return true; }

main.cpp

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 //这是主测试文件 #include "elemtype.h" #define MAX_STUDENT_NUM 100 void displayInfo(); void run(ElemType* array, int n); int main() { int n = 5;//n 为数组中有效记录条数,初始文件中为5 ElemType total[MAX_STUDENT_NUM]; char filename[] = "student.dat"; if (!ReadDataFromFile(filename,total,n)) { printf("打开文件%s失败",filename); } displayInfo(); run(total,n); return 0; } // ///function void displayInfo() { puts("********************************************************************" ); puts(" 欢迎使用x大学计算机(软件)学院学生管理系统V1.0" ); puts("********************************************************************\n" ); } // ///function void run(ElemType* array, int n) { int option = 0; //提示用户选择操作 puts(" "); puts("请选择操作:\n" ); puts("0:直接退出 "); puts("1:显示所有学生信息 ") ; puts("2:修改某个学生信息 ") ; puts("3:计算所有学生某一科平均分 ") ; puts("4:计算某一个学生分数 ") ; puts("5:添加一个学生信息 ") ; puts("6:写回文件并退出 \n" ) ; do { scanf("%d", &option ); //根据用户选择调用相关函数完成指定的操作 switch(option ) { //显示所有学生信息 case 1: DispalyAll(array,n); break; //修改某个学生信息 case 2: { if( ModifyStudentInfo(array,n) ) { printf("\n"); DispalyAll(array,n); printf("修改成功!\n"); } else printf("未找到此学生!\n"); } break; //计算所有学生某一科平均分 case 3: CalcSubjectScore(array,n); break; //计算某一个学生分数 case 4: CalcStudentScore(array,n); break; //添加一个学生信息 case 5: SortStu(array,n); break; //写回文件并退出 case 6: { if( WriteDataToFile("student.dat",array,n) ) { printf("保存成功!\n"); DispalyAll(array,n+1); } break; } default: break; } }while(option != 0 ); }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_42316621/article/details/100076928

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。