C++实现学生考勤信息管理系统

时间:2021-12-08 06:03:48

学生考勤信息管理系统记录了学生的缺课情况,它包括:

缺课日期、第几节课、课程名称、学生姓名、学生学号、缺课类型(迟到、请假及旷课)。系统具有以下功能:

1)、录入学生的缺课记录;

2)、修改某个学生的缺课记录;

3)、查询某个学生的缺课情况;

4)、统计 旷课学生姓名及旷课次数,按旷课次数由多到少排序;

5)、统计 有学生旷课的课程及旷课人次(每次课时累加),按旷课人次由多到少排序; 

重新修改了下,之前的4,5功能未实现。

?
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
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
#include<iostream>
#include<fstream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
#define N 999
int n;
class STU
{
public:
 STU() {}
 void input(char d[],int X,string n,string sn,int sd,int cl)
 {
  strcpy(date,d);
  ClassX=X;
  ClassN=n;
  stuN=sn;
  stuID=sd;
  ClassL=cl;
 }
 void print()
 {
  cout<<"缺课日期 课节 课程名称 学生姓名 学生学号 缺课类型\t"<<endl;
  cout<<date<<"\t"<<ClassX<<"\t"<<ClassN<<"\t"<<stuN<<"\t"<<stuID<<"\t"<<ClassL<<endl;
 }
 friend void Change(STU stu[]);
 friend void Find(STU stu[]);
 friend void chaxun1(STU stu[]);
 friend void chaxun2(STU stu[]);
private:
 string stuN;
 int stuID;
 char date[15];
 int ClassX;
 string ClassN;
 int ClassL;
};
 
//主菜单
void meau()
{
 cout<<endl;
 cout<<endl;
 cout<<"学生后勤管理系统"<<endl;
 cout<<"1-录入学生的缺课记录"<<endl;
 cout<<"2-修改某个学生的缺课记录"<<endl;
 cout<<"3-查询某个学生的缺课情况"<<endl;
 cout<<"4-统计旷课信息"<<endl;
 cout<<"5-退出系统"<<endl;
 cout<<endl;
 cout<<endl;
 
}
//输入学生的缺课记录
void Input(STU stu[])
{
 char date[15];
 string stuN, ClassN;
 int stuID,ClassX,ClassL;
 while(1)
 {
  cout<<"请输入记录情况个数"<<endl;
  cin>>n;
  for(int i=0; i<n; i++)
  {
   cout<<"请输入第"<<i+1<<"种情况"<<endl;
   cout<<"请输入缺课日期\n";
   cin>>date;
   cout<<"请输入第几节课\n";
   cin>>ClassX;
   cout<<"请输入课程名称\n";
   cin>>ClassN;
   cout<<"请输入学生姓名\n";
   cin>>stuN;
   cout<<"请输入学生学号\n";
   cin>>stuID;
   cout<<"请输入缺课类型,1代表请假,2代表旷课, 3代表迟到\n";
   cin>>ClassL;
   stu[i].input(date,ClassX,ClassN,stuN,stuID,ClassL);
  }
  cout<<"输入信息完毕!是否继续输入?y是继续,n是停止:"<<endl;
  char cc;
  getchar();
  cin>>cc;
  if(cc=='n')
   return ;
 }
}
//修改某个学生的缺课记录
void Change(STU stu[])
{
 cout<<"请输入将要修改的学生姓名或者学号,1代表姓名,2代表学号:"<<endl;
 int x;
 cin>>x;
 if(x==1)
 {
  cout<<"请输入将要修改的学生姓名:"<<endl;
  string name;
  cin>>name;
  for(int i=0; i<n; i++)
  {
   if(stu[i].stuN==name)
   {
    stu[i].print();
    cout<<"是否对该学生信息进行修改,y代表进行,n代表不进行:"<<endl;
    getchar();
    char cc;
    cin>>cc;
    if(cc=='n')
     continue;
    else if(cc='y')
    {
     cout<<"请选择修改内容:"<<endl;
     cout<<"修改日期请按1:\n修改课节请按2:\n修改课程名称请按3:\n修改缺课类型请按4:\n";
     cin>>x;
     switch(x)
     {
     case 1:
     {
      char date[20];
      cout<<"请输入正确日期"<<endl;
      cin>>date;
      strcpy(stu[i].date,date);
     }
     break;
     case 2:
     {
      cout<<"请输入正确课节"<<endl;
      cin>>x;
      stu[i].ClassX=x;
     }
     break;
     case 3:
     {
      cout<<"请输入正确课程名称"<<endl;
      cin>>name;
      stu[i].ClassN=name;
     }
     break;
     case 4:
     {
      cout<<"请输入正确缺课类型"<<endl;
      cin>>x;
      stu[i].ClassL=x;
     }
     break;
     default :
      cout<<"抱歉,没有该选项。"<<endl;
     }
     break;
     cout<<"输出修改后的学生信息:"<<endl;
     stu[i].print();
    }
    else cout<<"抱歉,没有该选项。"<<endl;
   }
  }
 }
 else if(x==2)
 {
  cout<<"请输入要修改的学号:"<<endl;
  cin>>x;
  for(int i=0; i<n; i++)
  {
   if(stu[i].stuID==x)
   {
    cout<<"是否对该学生信息进行修改,y代表进行,n代表不进行:"<<endl;
    stu[i].print();
    getchar();
    char cc;
    cin>>cc;
    if(cc=='n')
     continue;
    else if(cc='y')
    {
     cout<<"请选择修改内容:"<<endl;
     cout<<"修改日期请按1:\n修改课节请按2:\n修改课程名称请按3:\n修改缺课类型请按4:\n";
     cin>>x;
     switch(x)
     {
     case 1:
     {
      cout<<"请输入正确日期"<<endl;
      char name[20];
      cin>>name;
      strcpy(stu[i].date,name);
     }
     break;
     case 2:
     {
      cout<<"请输入正确课节"<<endl;
      cin>>x;
      stu[i].ClassX=x;
     }
     break;
     case 3:
     {
      cout<<"请输入正确课程名称"<<endl;
      string name;
      cin>>name;
      stu[i].ClassN=name;
     }
     break;
     case 4:
     {
      cout<<"请输入正确缺课类型"<<endl;
      cin>>x;
      stu[i].ClassL=x;
     }
     break;
     default :
      cout<<"抱歉,没有该选项。"<<endl;
     }
     break;
     cout<<"输出修改后的学生信息:"<<endl;
     stu[i].print();
    }
    else
     cout<<"抱歉,没有该选项。"<<endl;
   }
  }
 }
 else
  cout<<"抱歉,没有该选项。"<<endl;
}
//查询某个学生的缺课情况
void Find(STU stu[])
{
 cout<<"请输入将要查询的学生姓名(1)或者学号(2)"<<endl;
 int x;
 cin>>x;
 if(x==1)
 {
  cout<<"请输入将要查询的学生姓名"<<endl;
  string name;
  cin>>name;
  for(int i=0; i<n; i++)
  {
   if(stu[i].stuN==name)
    stu[i].print();
  }
 }
 else if(x==2)
 {
  cout<<"请输入将要查询的学生学号"<<endl;
  cin>>x;
  for(int i=0; i<n; i++)
  {
   if(stu[i].stuID==x)
    stu[i].print();
  }
 }
 else cout<<"抱歉,没有该选项。"<<endl;
}
 
//统计旷课学生信息
void chaxun1(STU stu[])
{
 map<string,int> A;
 A.clear();
 for(int s=0; s<n; s++)
 {
  if(stu[s].ClassL==2)
  {
   A[stu[s].stuN]++;
  }
 }
 map<string,int>::iterator it;
 int k=0,ant[N];
 string sn[N];
 for(it=A.begin(); it!=A.end(); it++)
 {
  sn[k]=(*it).first;
  ant[k]=(*it).second;
 
  k++;
 }
 for(int i=0; i<k-1; i++)
  for(int j=i+1; j<k; j++)
  {
   if(ant[i]<ant[j])
   {
    int temp;
    string ss;
    temp=ant[i];
    ant[i]=ant[j];
    ant[j]=temp;
    ss=sn[i];
    sn[i]=sn[j];
    sn[j]=ss;
   }
  }
 for(int m=0; m<k; m++)
 {
  cout<<"学生姓名 旷课次数"<<endl;
  cout<<sn[m]<<"\t"<<ant[m]<<endl;
 }
 
}
//统计旷课课程信息
void chaxun2(STU stu[])
{
 map<string,int> A;
 A.clear();
 for(int i=0; i<n; i++)
 {
  if(stu[i].ClassL==2)
  {
   A[stu[i].ClassN]++;
  }
 }
 map<string,int>::iterator it;
 for(it=A.begin(); it!=A.end(); it++)
 {
  cout<<"课程名称 旷课总人次"<<endl;
  cout<<(*it).first<<"\t"<<(*it).second<<endl;
 }
}
int main()
{
 
 STU stu[N];
 
 while(1)
 {
  meau();
  cout<<"请输入对应功能序号"<<endl;
  int x;
  cin>>x;
  switch(x)
  {
  case 1:
   Input(stu);
   break;
  case 2:
  {
   if(n==0)
    cout<<"错误,无信息!\n";
   else
    Change(stu);
  }
  break;
  case 3:
  {
   if(n==0)
    cout<<"错误,无信息!\n";
   else
    Find(stu);
  }
  break;
  case 4:
  {
   if(n==0)
    cout<<"错误,无信息!\n";
   else
   {
    cout<<"\n查看学生旷课信息请按1:\n";
    cout<<"\n查看课程旷课信息请按2:\n";
    cin>>x;
    if(x==1)
     chaxun1(stu);
    else if(x==2)
     chaxun2(stu);
    else
     cout<<"抱歉,没有该选项。"<<endl;
   }
 
  }
  break;
  case 5:
  {
   cout<<"退出该系统。"<<endl;
   return 0;
   break;
  }
  default:
   cout<<"对不起,该项功能不存在."<<endl;
 
  }
 
 }
 return 0;
}

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

原文链接:https://blog.csdn.net/lvhaoye/article/details/78974634