C语言实现学生信息管理系统(多文件)

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

elemtype.h

/****************************** 这是学生成绩管理系统中的记录结构文件。* 文件名: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

#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

//这是主测试文件#include "elemtype.h"#define MAX_STUDENT_NUM 100void 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;}/////functionvoid displayInfo(){ puts("********************************************************************" ); puts("  欢迎使用x大学计算机(软件)学院学生管理系统V1.0" ); puts("********************************************************************\n" );}/////functionvoid 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 );}

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

天才是百分之一的灵感加上百分之久十久的努力

C语言实现学生信息管理系统(多文件)

相关文章:

你感兴趣的文章:

标签云: