1 #include <cstdlib>
2 #include <iostream>
3 #include <string.h>
4 #include <stdio.h>
5 #include <conio.h>
6 using namespace std;
7 struct student
8 {
9 char num[20];//学号
10 char name[20];//姓名
11 int foxscore;//fox成绩
12 int cscore;//C语言成绩
13 int englishscore;//英语成绩
14 int sum;
15 struct student *next;
16 };
17 struct st{
18 student *head;
19 int length;
20 };
21
22 void output_worker(struct student *p)//输出一个学生信息
23 {int n;
24 printf("%-13s|",p->num);
25 printf("%-13s|",p->name);
26 printf("%-13d|",p->foxscore);
27 printf("%-13d|",p->cscore);
28 printf("%-11d|",p->englishscore);
29 printf("%d",p->sum);
30 cout<<endl;
31 for(n=1;n<=80;n++)
32 cout<<"-";
33 }
34
35 int Output_surface_two()//界面;
36 { system("cls");
37 printf("\n%15s","*");
38 cout<<"*************************************************";
39 printf("\n%15s","*");cout<<"***************学生成绩管理系统******************\n";
40 printf("\n%15s","(");cout<<"1) ";cout<<"信息输入(INPUT)\n";
41 printf("\n%15s","(");cout<<"2) ";cout<<"总分统计(COUNT)\n";
42 printf("\n%15s","(");cout<<"3) ";cout<<"总分排序(SORT)\n";
43 printf("\n%15s","(");cout<<"4) ";cout<<"查询(QUERY)\n";
44 printf("\n%15s","(");cout<<"5) ";cout<<"退出(EXIT)\n";
45 printf("\n%15s","*");
46 cout<<"请选择您要进行的操作并确认";
47 int n;
48 cin>>n;
49 while(n<1||n>5)
50 {printf("\n%15s","*");cout<<"输入错误,请重新输入";cin>>n;}
51 system("cls");//清屏函数;
52 return n;
53 }
54
55 int insert_info(struct st &STU)//插入新员工信息;
56 {printf("\n%15s","*");cout<<"请依次输入学生信息\n";
57 struct student *p,*p1;
58 p=(struct student *)malloc(sizeof(struct student));
59 printf("\n%15s","*");cout<<"学号:";
60 cin>>p->num;
61 p1=STU.head;
62 while(p1)
63 {if(strcmp(p1->num,p->num)==0)
64 {printf("\n%15s","*");cout<<"该学生已经存在";goto L;}
65 p1=p1->next;
66 }
67 printf("\n%15s","*");cout<<"姓名:";
68 cin>>p->name;
69 printf("\n%15s","*");cout<<"fox成绩:";
70 cin>>p->foxscore;
71 printf("\n%15s","*");cout<<"C语言成绩:";
72 cin>>p->cscore;
73 printf("\n%15s","*");cout<<"英语成绩:";
74 cin>>p->englishscore;
75 p->sum=0;
76 p->next=NULL;
77 p->next=STU.head;
78 STU.head=p;
79 system("cls");
80 printf("\n%15s","*");
81 cout<<"添加成功\n";
82
83 printf("\n%15s","*");
84 cout<<"您所添加的学生信息为:\n\n";
85 STU.length++;
86
87 cout<<"学号 |姓名 |fox成绩 |C语言成绩 |英语成绩 |总分\n";
88 int i;
89 for(i=1;i<=80;i++)
90 cout<<"-";
91 output_worker(p);
92 L:;
93 printf("\n\n%15s","*");cout<<"按1键并确认返回,按2键将退出";
94 int n;
95 cin>>n;
96 while(n<1||n>2)
97 {printf("\n%15s","*");cout<<"输入错误,请重新输入";cin>>n;}
98 int k;
99 if(n==1)
100 {k=Output_surface_two();
101 return k;
102 }
103 else
104 return 5;
105 }
106
107 int score_sum(struct st &STU)//sum
108 {
109 struct student *p;
110 p=STU.head;
111 while(p)
112 {
113 p->sum=p->foxscore+p->cscore+p->englishscore;
114 p=p->next;
115 }
116 printf("\n\n%15s","*");cout<<"总分统计完毕";
117 printf("\n\n%15s","*");cout<<"按1键并确认返回,按2键将退出";
118 int n;
119 cin>>n;
120 while(n<1||n>2)
121 {printf("\n%15s","*");cout<<"输入错误,请重新输入";cin>>n;}
122 int k;
123 if(n==1)
124 {k=Output_surface_two();
125 return k;
126 }
127 else
128 return 5;
129 }
130
131
132
133
134
135 int output_info(struct st STU)//输出所有员工信息;
136 {printf("\n%15s","*");cout<<"请选择每页要显示的信息数,最多15条";
137 int n;
138 cin>>n;
139 while(n<1||n>15)
140 {printf("\n%15s","*");cout<<"输入错误,请重新输入";cin>>n;}
141 system("cls");
142 if( STU.length==0)
143 {printf("\n%15s","*");cout<<"系统中没有信息";
144 printf("\n\n%15s","*");cout<<"按1键并确认返回,按2键将退出";
145 int nn;
146 cin>>nn;
147 while(nn<1||nn>2)
148 {printf("\n%15s","*");cout<<"输入错误,请重新输入";cin>>nn;}
149 int k;
150 if(nn==1)
151 {k=Output_surface_two();
152 return k;
153 }
154 else
155 return 5;
156 }
157
158 struct student *p1;//信息的输出
159 p1=STU.head;
160 int count;
161 int i;
162 while(p1)
163 {system("cls");
164 cout<<"学号 |姓名 |fox成绩 |C语言成绩 |英语成绩 |总分\n";
165 for(i=1;i<=80;i++)
166 cout<<"-";
167 count=n;
168 while((count--)&&(p1))
169 {output_worker(p1);p1=p1->next;}
170 printf("\n%15s","*");cout<<"按确认键翻页"; getch();
171 }
172 printf("\n\n%15s","*");cout<<"按1键并确认返回,按2键将退出";
173 int nn;
174 cin>>nn;
175 while(nn<1||nn>2)
176 {printf("\n%15s","*");cout<<"输入错误,请重新输入";cin>>nn;}
177 int k;
178 if(nn==1)
179 {k=Output_surface_two();
180 return k;
181 }
182 else
183 return 5;
184 }
185
186
187
188
189
190
191
192 int sort_info(struct st &STU)//对员工进行排序;
193 {system("cls");
194
195 struct student *p1,*p2,*p3;
196 int i,j;
197 struct student p;
198 p1=p2=p3=STU.head;
199 for(i=1;i<STU.length;i++,p1=p1->next)
200 {p3=p1;
201 for(j=i+1,p2=p1->next;j<=STU.length;j++,p2=p2->next)
202 {if(p3->sum<p2->sum)
203 p3=p2;
204 }
205 if(p3!=p1)
206 {strcpy(p.num,p3->num);strcpy(p3->num,p1->num);strcpy(p1->num,p.num);
207 strcpy(p.name,p3->name);strcpy(p3->name,p1->name);strcpy(p1->name,p.name);
208 p.foxscore=p3->foxscore;p3->foxscore=p1->foxscore;p1->foxscore=p.foxscore;
209 p.cscore=p3->cscore;p3->cscore=p1->cscore;p1->cscore=p.cscore;
210 p.englishscore=p3->englishscore;p3->englishscore=p1->englishscore;p1->englishscore=p.englishscore;
211 p.sum=p3->sum;p3->sum=p1->sum;p1->sum=p.sum;
212
213 }
214
215
216
217 }
218 system("cls");
219 printf("\n%15s","");cout<<"排序后输出\n";
220 return 6;
221 }
222
223 int find_info(struct st STU)// 查询员工信息;
224 {system("cls");
225 struct student *p1=(struct student *)malloc(sizeof(struct student));
226 struct student *p2=STU.head;
227 printf("\n%15s","*"); cout<<"请输入学号";
228
229 cin>>p1->num;
230 while(p2)
231 {if(strcmp(p1->num,p2->num)==0)
232 break;
233 p2=p2->next;
234 }
235
236
237 if(!p2)
238 {printf("\n%15s","*");cout<<"系统中没有员工信息";
239 printf("\n\n%15s","*");cout<<"按1键并确认返回,按2键将退出";
240 int n;
241 cin>>n;
242 while(n<1||n>2)
243 {printf("\n%15s","*");cout<<"输入错误,请重新输入";cin>>n;}
244 int k;
245 if(n==1)
246 {k=Output_surface_two();
247 return k;
248 }
249 else
250 return 5;
251 }
252 else
253 {system("cls");
254 printf("\n%15s","*");cout<<" 您所查询的员工信息 *\n\n";
255 cout<<"学号 |姓名 |fox成绩 |C语言成绩 |英语成绩 |总分\n";
256 int i;
257 for(i=1;i<=80;i++)
258 cout<<"-";
259 output_worker(p2);
260 printf("\n\n%15s","*");cout<<"按1键并确认返回,按2键将退出";
261 int n;
262 cin>>n;
263 while(n<1||n>2)
264 {printf("\n%15s","*");cout<<"输入错误,请重新输入";cin>>n;}
265 int k;
266 if(n==1)
267 {k=Output_surface_two();
268 return k;
269 }
270 else
271 return 5;
272 }
273 }
274
275
276
277
278
279
280 int main(int argc, char *argv[])
281 {struct st STU;
282 int n=Output_surface_two();
283 STU.head=NULL;
284 STU.length=0;
285 while(1)
286 {
287 switch(n)
288 {case 1:n=insert_info(STU);break;
289 case 2:n=score_sum(STU);break;
290 case 3:n=sort_info(STU);break;
291 case 4:n=find_info(STU);break;
292 case 5:exit(1);break;
293 case 6:n=output_info(STU);break;
294 }
295 }
296
297
298
299 return EXIT_SUCCESS;
300 }