C语言学生管理系统(单链表)

学生管理系统(单链表)

某个班的学生,每个学生的信息包括学号、姓名、3门课成绩。从键盘输入学生的数据,要求:能够给用户提供以下功能:要求: 1、找到每门课成绩最高的学生,打印其全部信息;2、查找平均分最高的学生打印其信息;

已经实现了的功能如上所述

代码:

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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#include<stdio.h>
#include<stdlib.h>

typedef struct {
int id;
char name[10];
double math;
double chinese;
double english;
} Student;

typedef struct SNode {
Student elem;
struct SNode* next;
} SNode,*SList;


void Order();
//初始化一个单链表
void init(SList &S);
//输入学生信息
void setSList(SList &S);

//打印整个单链表
void PrintList(SList &S);

//获得平均分最高的
void getMaxNode(SList &S);
//打印单个节点
void PrintNode(SNode* &S);
//获得单个科目的最大值
void getMax(SList &S);
//排序 这里我设计的排序都是使用冒泡排序 冒泡排序是适用于顺序表和链表的
void SortByChinese(SList &S);
void SortByMath(SList &S);
void SortByEnglish(SList &S);
void BubbleSort(SList &S);


int main() {
Order();
SList S;
int order;
scanf("%d",&order);
while(order!=10) {
switch(order) {
case 1:
init(S);
break;
case 2:
PrintList(S);
break;
case 3:
setSList(S);
break;
case 4:
getMaxNode(S);
break;
case 5:
getMax(S);
break;
deflaut:
printf("请输入正确的指令:\n");
break;
}
printf("请输入你要执行的命令:");
scanf("%d",&order);
}
}

void Order() {
printf("1.初始化一个单链表:\n");
printf("2.打印整个单链表\n");
printf("3.输入学生信息\n");
printf("4.打印平均分最大的人\n");
printf("5.分别打印三科分最高的人\n");
printf("请输入你要执行的命令:");
}
void init(SList &S) {
S = (SNode *)malloc(sizeof(SNode));
S->next = NULL;
if(S) {
printf("单链表创建成功!!!\n");
} else {
printf("内存不足,单链表创建失败!!!\n");
}
}
void PrintList(SList &S) {

SList L = (SList)malloc(sizeof(SList));
L = S;
while(L->next) {
printf("%d\t",L->elem.id);
//打印学生姓名
for(int j=1; L->elem.name[j]!='#'; j++) {
printf("%c",L->elem.name[j]);
}
printf("\t");
printf("数学成绩:%lf\t",L->elem.math);
printf("语文成绩:%lf\t",L->elem.chinese);
printf("英语成绩:%lf\t",L->elem.english);
printf("\n");
L = L->next;
}
}
void setSList(SList &S) {
//输入学生信息就是给单链表插入数据的过程
//这里采用的方法是前插法创建链表
int num;
int i=0;
printf("请输入你要输入几个学生信息:");
scanf("%d",&num);
while(num!=0) {
SNode* L = (SNode *)malloc(sizeof(SNode));
printf("请输入学生的学号:");
scanf("%d",&L->elem.id);
getchar();
printf("请输入学生姓名(学生姓名以#结尾):");
i=0;
do {
i++;
scanf("%c",&L->elem.name[i]);
} while(L->elem.name[i]!='#');
printf("请输入学生的数学成绩:");
scanf("%lf",&L->elem.math);
printf("请输入学生的语文成绩:");
scanf("%lf",&L->elem.chinese);
printf("请输入学生的英语成绩:");
scanf("%lf",&L->elem.english);

L->next = S;
S = L;
num--;
}


}
void getMaxNode(SList &S) {
//用一个指针执行平均分最高的
double totalMax;
//给总数一个初始化 因为每人都是三科 平均分的最大值就是总分的最大值
totalMax = 0;
double total;
SNode* LMax = (SNode *)malloc(sizeof(SNode));
SNode* L = (SNode *)malloc(sizeof(SNode));
L = S;
LMax = L;
while(L->next) {
total = L->elem.chinese + L->elem.english + L->elem.math;
if(total > totalMax) {
totalMax = total;
LMax = L;
}
L = L->next;
}
printf("平均分最大的人是:\n");
PrintNode(LMax);

}
void PrintNode(SNode* &S) {

printf("%d\t",S->elem.id);
//打印学生姓名
for(int j=1; S->elem.name[j]!='#'; j++) {
printf("%c",S->elem.name[j]);
}
printf("\t");
printf("数学成绩:%lf\t",S->elem.math);
printf("语文成绩:%lf\t",S->elem.chinese);
printf("英语成绩:%lf\t",S->elem.english);
printf("\n");
}
void getMax(SList &S) {
double englishMax = 0.0;
double chineseMax = 0.0;
double mathMax = 0.0;
double chinese;
double english;
double math;

SNode* LChineseMax = (SNode *)malloc(sizeof(SNode));
SNode* LMathMax = (SNode *)malloc(sizeof(SNode));
SNode* LEnglishMax = (SNode *)malloc(sizeof(SNode));
SNode* L = (SNode *)malloc(sizeof(SNode));
L = S;
while(L->next) {
chinese = L->elem.chinese;
english = L->elem.english;
math = L->elem.math;
if(math > mathMax) {
mathMax = math;
LMathMax = L;
}
if(english > englishMax) {
englishMax = english;
LEnglishMax = L;
}
if(chinese > chineseMax) {
chineseMax = chinese;
LChineseMax = L;
}
L = L->next;
}
printf("数学分最大的人是:\n");
PrintNode(LMathMax);
printf("语文分最大的人是:\n");
PrintNode(LChineseMax);
printf("英语分最大的人是:\n");
PrintNode(LEnglishMax);

}


程序运行截图

过程1

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信