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

时间:2021-08-05 04:58:42

本文实例为大家分享了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