头文件
1 #ifndef __SIMS__
2 #define __SIMS__
3 #include<stdio.h>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<ctype.h>
7 #include<conio.h>
8 #include<Windows.h>
9 #define PWD_LEN 10
10 #define NAME_LEN 20
11 #define GENDER_LEN 5
12 #define LINE_LEN 512
13 #define CONFIRM_CNT 3
14 #define M1 "1.search stu"
15 #define M2 "2.update stu"
16 #define M3 "3.delete stu"
17 #define M4 "4.add stu"
18 #define M5 "5.search acc"
19 #define M6 "6.update acc"
20 #define M7 "7.delete acc"
21 #define M8 "8.add acc"
22 #define M9 "9.exit"
23
24
25 struct stu_accout
26 {
27 char passwd[PWD_LEN];
28 char name[NAME_LEN];
29 int role ;
30 stu_accout* next ;
31 };
32
33 struct student //定义一个结构体作为全局变量,用于存储学生信息,和作为结点
34 {
35 long int num; //学号
36 char name[NAME_LEN]; //姓名
37 char gender [GENDER_LEN];
38 int age; //年龄
39 float math; //数学
40 float phy;
41 float eng;
42 float cpu;
43 float sum;
44 student *next; //下一个结点地址
45 };
46
47
48 //登入函数
49 int login(int,int&,stu_accout*);
50
51
52 //主目录函数
53 int menu(int role);
54
55 //3.查询信息菜单
56 student *menu1(student*);
57
58
59 //7.排序信息菜单
60 student *menu7(student*);
61
62
63 //交换两个结点信息的函数,用于排序函数调用
64 void swap(student *, student *);
65
66
67 //输出信息的函数
68 void print(student *);
69 void Account_print(stu_accout *head);
70
71 //添加学生信息
72 student *add(student *, student *);
73
74 //读取学生文件
75 student *Student_File_Load(student* head);
76 student *Other_Student_File_Load( student *head);
77
78 //读取账户文件
79 stu_accout *Acount_Load(stu_accout* head); //定义函数
80
81 int Save_Stu(student *p1);
82 int Other_Save_Stu(student *p1);
83 int Save_Account(student *p1);
84
85 //查询模块
86 //1.按学号查询
87 student *search1(student *head);
88
89 //2.按姓名查询
90 student *search2(student *head);
91
92 student *search_By_Gender(student *head);
93
94 //3.按年龄查询
95 student *search3(student *head);
96
97 //4.按数学成绩查询
98 student *search4(student *head);
99
100 //5.按物理成绩查询
101 student *search5(student *head);
102
103 //6.按英语成绩查询
104 student *search6(student *head);
105
106 //7.按计算机成绩查询
107 student *search7(student *head);
108
109 //8.按总分成绩查询
110 student *search8(student *head);
111
112
113 //删除模块
114 student *del(student *head);
115
116 //修改
117 student *cha(student *head);
118 stu_accout *Password_cha(stu_accout *head);
119
120 //排序模块
121 //1.按学号排序
122 student *sort1(student *head);
123
124 //2.按年龄排序
125 student *sort2(student *head);
126
127 //3.按数学成绩排序
128 student *sort3(student *head);
129
130 //4.按物理成绩排序
131 student *sort4(student *head);
132
133 //5.按英语成绩排序
134 student *sort5(student *head);
135
136 //6.按计算机成绩排序
137 student *sort6(student *head);
138
139 //7.按总分成绩排序
140 student *sort7(student *head);
141
142 #endif
View Code
实现文件
1 #include "My_header.h"
2
3 int n; //定义一个整形变量计数学生人数
4 int x; //定义一个整形变量计数账户人数
5 char UserName[NAME_LEN];
6
7
8 //***************************************************读取文件模块
9
10 //读取学生文件
11 student *Student_File_Load(student* head) //定义函数
12 {
13 student *p1, *p2 ;
14 int m=0;
15 FILE *fp;
16
17 if((fp=fopen("F:\\Student.txt", "rb"))==NULL) //地址为空,则输出提示
18 {
19 printf("不能打开文件");
20 return 0;
21 }
22 head=NULL;
23 do
24 {
25 p1=(student *)malloc(sizeof(student));//每读取一次创建一个新的结点
26 fscanf(fp, "%ld\t%s\t%s\t%d\t%f\t%f\t%f\t%f\t%f\n", &p1->num, p1->name,p1->gender, &p1->age, &p1->math, &p1->phy, &p1->eng, &p1->cpu, &p1->sum); //读入内存
27 m=m+1;
28 if(m==1)
29 head=p2=p1; //判断结点个数以添加首地址
30 else
31 {
32 p2->next=p1;
33 p2=p1;
34 }
35 }while(!feof(fp));
36
37 p2->next=NULL;
38 fclose(fp);
39 n=m;
40 return(head); //返回读取信息的首地址供其他函数使用
41 }
42
43 //另外读取学生文件
44 student *Other_Student_File_Load( student *head) //定义函数
45 {
46 struct student *p1, *p2;
47 int m=0;
48 char fileopen[10];
49 FILE *fp;
50 printf("请输入文件路径及文件名:"); //输入读取文件的路径和文件名
51 scanf("%s", fileopen);
52 if((fp=fopen(fileopen, "rb"))==NULL) //地址为空,则输出提示
53 {
54 printf("不能打开文件");
55 return 0;
56 }
57 head=NULL;
58 do
59 {
60 p1=(struct student *)malloc(sizeof(struct student));//每读取一次创建一个新的结点
61 fscanf(fp, "%ld\t%s\t%s\t%d\t%f\t%f\t%f\t%f\t%f\n", &p1->num, p1->name,p1->gender, &p1->age, &p1->math, &p1->phy, &p1->eng, &p1->cpu, &p1->sum); //读入内存
62 m=m+1;
63 if(m==1)
64 head=p2=p1; //判断结点个数以添加首地址
65 else
66 {
67 p2->next=p1;
68 p2=p1;
69 }
70 }while(!feof(fp));
71 p2->next=NULL;
72 fclose(fp);
73 n=m;
74 return(head); //返回读取信息的首地址供其他函数使用
75 }
76
77 //读取账户文件
78 stu_accout *Acount_Load(stu_accout* head) //定义函数
79 {
80 stu_accout *p1, *p2 ;
81 int m=0;
82 FILE *fp;
83
84 if((fp=fopen("F:\\Account.txt", "rb"))==NULL) //地址为空,则输出提示
85 {
86 printf("不能打开文件");
87 return 0;
88 }
89 head=NULL;
90 do
91 {
92 p1=(stu_accout *)malloc(sizeof(stu_accout));//每读取一次创建一个新的结点
93 fscanf(fp, "%s\t%s\t%d\n", p1->name, p1->passwd,&p1->role); //读入内存
94 m=m+1;
95 if(m==1)
96 head=p2=p1; //判断结点个数以添加首地址
97 else
98 {
99 p2->next=p1;
100 p2=p1;
101 }
102 }while(!feof(fp));
103 x=m;
104 p2->next=NULL;
105 fclose(fp);
106 return(head); //返回读取信息的首地址供其他函数使用
107 }
108
109
110
111 //******************************************************读取文件模块
112
113
114
115
116 //******************************************************保存文件模块
117 //存 学生
118 int Save_Stu(student *p1) //定义保存函数
119 {
120 FILE *fp; //定义fp指针
121 if((fp=fopen("F:\\Student.txt", "wb"))==NULL)
122 {
123 printf("不能打开文件\n");
124 return 0;
125 }
126 while(p1!=NULL)
127 {
128 fprintf(fp, "%ld\t%s\t%s\t%d\t%f\t%f\t%f\t%f\t%f\n",p1->num, p1->name,p1->gender, p1->age, p1->math, p1->phy, p1->eng, p1->cpu, p1->sum);//把内存中的文件输入到硬盘中
129 p1=p1->next;
130 }
131 fclose(fp); //关闭文件
132 printf("文件已保存\n"); //成功保存,显示提示
133 return 1;
134 }
135
136
137 //另存为 学生
138 int Other_Save_Stu(student *p1) //定义保存函数
139 {
140 FILE *fp; //定义fp指针
141 char fileopen[20];
142 printf("请输入保存的文件路径及文件名:"); //输入文件名和路径
143 scanf("%s", fileopen);
144 if((fp=fopen(fileopen, "wb"))==NULL)
145 {
146 printf("不能打开文件\n");
147 return 0;
148 }
149 while(p1!=NULL)
150 {
151 fprintf(fp, "%ld\t%s\t%s\t%d\t%f\t%f\t%f\t%f\t%f\n",p1->num, p1->name,p1->gender, p1->age, p1->math, p1->phy, p1->eng, p1->cpu, p1->sum);//把内存中的文件输入到硬盘中
152 p1=p1->next;
153 }
154 fclose(fp); //关闭文件
155 printf("文件已保存\n"); //成功保存,显示提示
156 return 1;
157 }
158
159
160 //保存账户
161 int Save_Account(stu_accout *p1) //定义保存函数
162 {
163 FILE *fp; //定义fp指针
164 if((fp=fopen("F:\\Account.txt", "wb"))==NULL)
165 {
166 printf("不能打开文件\n");
167 return 0;
168 }
169 while(p1!=NULL)
170 {
171 fprintf(fp, "%s\t%s\t%d\n",p1->name, p1->passwd, p1->role);//把内存中的文件输入到硬盘中
172 p1=p1->next;
173 }
174 fclose(fp); //关闭文件
175 printf("文件已保存\n"); //成功保存,显示提示
176 return 1;
177 }
178
179
180
181 //******************************************************保存文件模块
182
183
184
185
186
187
188
189
190 //***************************************************登入模块
191 //登入函数
192 int login(int Login_Change,int& type,stu_accout* Account)
193 {
194
195 system("cls");
196
197 stu_accout *p=Account;
198 printf("\n\n\n");
199 printf("请输入用户名:");
200
201 scanf("%s",UserName);
202
203 while(p!=NULL)
204 {
205 if(strcmp(p->name,UserName)==0)
206 break;
207 p=p->next;
208 }
209
210
211 if(p==NULL)
212 {
213 printf("无该用户名!!\n");
214 printf("您还有%d次机会\n",Login_Change);
215 getchar();
216 getchar();
217 return 0;
218 }
219 else
220 {
221 printf("请输入密码:");
222 char c=0;
223 int i=0;
224 char password[PWD_LEN];
225 while(i<PWD_LEN-1&&c!='\r')
226 { c=getch();
227
228 if(c!='\r')
229 {
230 putchar('*');
231 password[i]=c;
232 ++i;
233 }
234 }
235 if(i==PWD_LEN-1&&c!='\n')
236 {
237 printf("\n密码错误!!\n");
238 printf("您还有%d次机会\n",Login_Change);
239 getchar();
240 getchar();
241 return 0;
242 }
243 password[i]='\0';
244 if(strcmp(password,p->passwd)!=0)
245 {
246 printf("\n密码错误!!\n");
247 printf("您还有%d次机会\n",Login_Change);
248 getchar();
249 getchar();
250 return 0;
251 }
252 }
253 system("cls");
254 printf("登入成功\n");
255 type=p->role;
256 int tem=2;
257 while(tem--)
258 {
259 system("cls");
260
261 printf(" i8S, \n");
262 printf(" S&X 5#@9 \n");
263 printf(" :@@B; .:53sr: \n");
264 printf(" :8BMh i&&XG91. \n");
265 printf(" ;M@#; ;;, 13S5,.hGHAHMHs \n");
266 printf(" X@@r.G3HA9. S#Xh3Mh,:S#@@@@s \n");
267 printf(" H@A.&MsSG@,.rH&XB@@M1:S@@@@#.\n");
268 printf(" X@X8@@@@@1 . ,3H#@@M1,;@@@@@s\n");
269 printf(" s@@AHMBGr .;iri, ,8@@@@@S\n");
270 printf(" A@#Gh;,.,:.;:.,.,:s8M@@@@@@1\n");
271 printf(" :#@@@B&85SS959XAB@@@@@@@@@@r\n");
272 printf(" rsiiirri:iih9XAM@@@@@@@@@@;\n");
273 printf(" ,hs:,.... ,rSXM@@@@# \n");
274 printf(" ;AHr;;:::,,,,,,,, ,iri:..;h&@@3 \n");
275 printf(" .,.3@Miii;;;::::::,,9BBHA&Gh:,;SG \n");
276 printf(" 1&&&A@@9,iiiiii;;;;,3@@@@@@@@9GAX8i \n");
277 printf(".GB95SGM#8;;iiiiiiii;9@@@@@@@@@GSSHA \n");
278 printf(" :993398&H,.,::;;;;;;;8#@@@@@#X533Xs \n");
279 printf(" ... ,;;,:GXS5s: \n");
280 printf("载入中\n");
281 Sleep(500);
282 system("cls");
283 printf(" i8S, \n");
284 printf(" S&X 5#@9 \n");
285 printf(" :@@B; .:53sr: \n");
286 printf(" :8BMh i&&XG91. \n");
287 printf(" ;M@#; ;;, 13S5,.hGHAHMHs \n");
288 printf(" X@@r.G3HA9. S#Xh3Mh,:S#@@@@s \n");
289 printf(" H@A.&MsSG@,.rH&XB@@M1:S@@@@#.\n");
290 printf(" X@X8@@@@@1 . ,3H#@@M1,;@@@@@s\n");
291 printf(" s@@AHMBGr .;iri, ,8@@@@@S\n");
292 printf(" A@#Gh;,.,:.;:.,.,:s8M@@@@@@1\n");
293 printf(" :#@@@B&85SS959XAB@@@@@@@@@@r\n");
294 printf(" rsiiirri:iih9XAM@@@@@@@@@@;\n");
295 printf(" ,hs:,.... ,rSXM@@@@# \n");
296 printf(" ;AHr;;:::,,,,,,,, ,iri:..;h&@@3 \n");
297 printf(" .,.3@Miii;;;::::::,,9BBHA&Gh:,;SG \n");
298 printf(" 1&&&A@@9,iiiiii;;;;,3@@@@@@@@9GAX8i \n");
299 printf(" .GB95SGM#8;;iiiiiiii;9@@@@@@@@@GSSHA \n");
300 printf(" :993398&H,.,::;;;;;;;8#@@@@@#X533Xs \n");
301 printf(" ... ,;;,:GXS5s: \n");
302 printf("载入中…\n");
303 Sleep(500);
304 system("cls");
305 printf(" i8S, \n");
306 printf(" S&X 5#@9 \n");
307 printf(" :@@B; .:53sr: \n");
308 printf(" :8BMh i&&XG91. \n");
309 printf(" ;M@#; ;;, 13S5,.hGHAHMHs \n");
310 printf(" X@@r.G3HA9. S#Xh3Mh,:S#@@@@s \n");
311 printf(" H@A.&MsSG@,.rH&XB@@M1:S@@@@#.\n");
312 printf(" X@X8@@@@@1 . ,3H#@@M1,;@@@@@s\n");
313 printf(" s@@AHMBGr .;iri, ,8@@@@@S\n");
314 printf(" A@#Gh;,.,:.;:.,.,:s8M@@@@@@1\n");
315 printf(" :#@@@B&85SS959XAB@@@@@@@@@@r\n");
316 printf(" rsiiirri:iih9XAM@@@@@@@@@@;\n");
317 printf(" ,hs:,.... ,rSXM@@@@# \n");
318 printf(" ;AHr;;:::,,,,,,,, ,iri:..;h&@@3 \n");
319 printf(" .,.3@Miii;;;::::::,,9BBHA&Gh:,;SG \n");
320 printf(" 1&&&A@@9,iiiiii;;;;,3@@@@@@@@9GAX8i \n");
321 printf(".GB95SGM#8;;iiiiiiii;9@@@@@@@@@GSSHA \n");
322 printf(" :993398&H,.,::;;;;;;;8#@@@@@#X533Xs \n");
323 printf(" ... ,;;,:GXS5s: \n");
324 printf("载入中……\n");
325 Sleep(500);
326 system("cls");
327 printf(" i8S, \n");
328 printf(" S&X 5#@9 \n");
329 printf(" :@@B; .:53sr: \n");
330 printf(" :8BMh i&&XG91. \n");
331 printf(" ;M@#; ;;, 13S5,.hGHAHMHs \n");
332 printf(" X@@r.G3HA9. S#Xh3Mh,:S#@@@@s \n");
333 printf(" H@A.&MsSG@,.rH&XB@@M1:S@@@@#.\n");
334 printf(" X@X8@@@@@1 . ,3H#@@M1,;@@@@@s\n");
335 printf(" s@@AHMBGr .;iri, ,8@@@@@S\n");
336 printf(" A@#Gh;,.,:.;:.,.,:s8M@@@@@@1\n");
337 printf(" :#@@@B&85SS959XAB@@@@@@@@@@r\n");
338 printf(" rsiiirri:iih9XAM@@@@@@@@@@;\n");
339 printf(" ,hs:,.... ,rSXM@@@@# \n");
340 printf(" ;AHr;;:::,,,,,,,, ,iri:..;h&@@3 \n");
341 printf(" .,.3@Miii;;;::::::,,9BBHA&Gh:,;SG \n");
342 printf(" 1&&&A@@9,iiiiii;;;;,3@@@@@@@@9GAX8i \n");
343 printf(" .GB95SGM#8;;iiiiiiii;9@@@@@@@@@GSSHA \n");
344 printf(" :993398&H,.,::;;;;;;;8#@@@@@#X533Xs \n");
345 printf(" ... ,;;,:GXS5s: \n");
346 printf("载入中………\n");
347 }
348
349
350 return 1;
351 }
352 //***************************************************登入模块
353
354
355
356
357
358
359
360
361
362 //*****************************************************主目录模块
363 //主目录函数
364 int menu(int role)
365 {
366 system("cls");
367 int k;//定义一个整形变量用于输入选择
368
369
370
371 printf("\n");
372 printf("****************************************************************\n");
373 printf("* *\n");
374 printf("* 1.查询学生的信息 *\n");
375 printf("* 2.阅读学生的信息 *\n");
376 printf("* 3.排序学生的信息 *\n");
377 printf("* 4.查询本账户的信息 *\n");
378 printf("* 5.修改密码 *\n");
379 printf("* 6.退出 *\n");
380 printf("* *\n");
381 if(role)
382 {
383 printf("* ***** ******** ***** ******* *** *** *\n");
384 printf("* *\n");
385 printf("* sS8Si r9G1 1SS89SS S88SSS31 *\n");
386 printf("* #G G5 #8 MX i83 *\n");
387 printf("* 3@ rG @9 #G r@ *\n");
388 printf("* #X Gs @8 #G iisXG *\n");
389 printf("* h@ir8 M9 #Xrs11r *\n");
390 printf("* HA8i #9 @3 *\n");
391 printf("* @S 1SS89SS @3 *\n");
392 printf("* *\n");
393 printf("* 7.输入学生的信息 *\n");
394 printf("* 8.删除学生的信息 *\n");
395 printf("* 9.修改学生的信息 *\n");
396 printf("* 10.打开新文件… *\n");
397 printf("* 11.文件另存为… *\n");
398 }
399 printf("****************************************************************\n\n");
400 printf("我的选择:"); //在显示器上显示菜单页面
401 scanf("%d", &k); //输入选择
402 getchar();
403 return(k); //返回值进入switch函数判断,以调用不同功能的函数
404 }
405 //*****************************************************主目录模块
406
407
408
409
410
411
412 //******************************************************查询模块
413
414 //3.查询信息菜单
415 student *menu1(student *head)
416 {
417 while(1)
418 {
419 system("cls");
420 int k; //定义一个整形变量输入switch进行判断
421
422 printf("\n\n\n");
423 printf("*****************************************************************\n");
424 printf("* 查询学生信息目录 *\n");
425 printf("* 1.按学生学号查询 *\n");
426 printf("* 2.按学生姓名查询 *\n");
427 printf("* 3.按学生性别查询 *\n");
428 printf("* 4.按学生年龄查询 *\n");
429 printf("* 5.按数学成绩查询 *\n");
430 printf("* 6.按物理成绩查询 *\n");
431 printf("* 7.按英语成绩查询 *\n");
432 printf("* 8.按计算机成绩查询 *\n");
433 printf("* 9.按总分成绩查询 *\n");
434 printf("* 10.返回主菜单 *\n");
435 printf("******************************************************** ********\n\n");
436 printf("我的选择:"); //输出菜单界面
437
438 scanf("%d", &k); //输入选择
439 switch(k)
440 {
441 case 1: //调用学号查询函数
442 {
443 head=search1(head); //返回首地址head用于其他函数的处理
444 break; //处理完毕,结束语句
445 }
446 case 2: //调用姓名查询函数
447 {
448 head=search2(head); //返回首地址head用于其他函数的处理
449 break; //处理完毕,结束语句
450 }
451 case 3: //调用年龄查询函数
452 {
453 head=search_By_Gender(head);
454 break;
455 }
456 case 4: //调用数学成绩查询函数
457 {
458 head=search3(head); //返回首地址head用于其他函数的处理
459 break; //处理完毕,结束语句
460
461 }
462 case 5: //调用物理成绩查询函数
463 {
464 head=search4(head); //返回首地址head用于其他函数的处理
465 break; //处理完毕,结束语句
466
467 }
468 case 6: //调用英语成绩查询函数
469 {
470 head=search5(head); //返回首地址head用于其他函数的处理
471 break; //处理完毕,结束语句
472
473 }
474 case 7: //调用计算机成绩查询函数
475 {
476 head=search6(head);
477 break;
478
479 }
480 case 8: //调用总分成绩查询函数
481 {
482 head=search7(head);
483 break;
484
485 }
486 case 9:{ head=search8(head);
487 break;
488
489 }
490 case 10: break;//退出查询功能,返回主菜单
491 default:printf("输入错误请重试\n");
492 }
493 if(k==10)break;
494 }
495 return head;
496 }
497
498 //1.按学号查询
499 student *search1(student *head)//定义一个函数,赋给他查找链表的首地址
500 {
501
502 system("cls");
503 int num;
504 student *p1;
505 printf("请输入要查询学生的学号(输入0退出):");
506 scanf("%ld",&num); //输入查找学号
507 while(num!=0)
508 {
509 system("cls");
510 if(head==NULL)
511 {
512 printf("\n没有任何学生的资料,请输入\n");
513 return(head);
514 }
515 printf("******************************************************************\n");
516 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
517 printf("__________________________________________________________________\n");
518 p1=head;
519 while (num!=p1->num&&p1->next!=NULL) //开始扫描每个结点以查找与要求吻合的结点
520 p1=p1->next;//如果不相同就扫描下一个
521 if(num==p1->num)//查找到相同的信息开始输出
522 {
523 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
524 }
525 else printf("不存在学号为%ld的学生\n", num); //没有查找到满足要求的结点
526 printf("输入要查询学生的学号(输入0退出):");
527 scanf("%ld", &num);
528 }
529 return(head);
530 }
531
532 //2.按姓名查询
533 student *search2(student *head) //定义一个函数,赋给他查找链表的首地址
534 {
535 system("cls");
536 char name[NAME_LEN];
537 student *p1;
538 printf("请输入要查询学生的姓名:"); //输入查找姓名
539 scanf("%s",&name);
540 printf("******************************************************************\n");
541 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
542 printf("__________________________________________________________________\n");
543 p1=head;
544 while (strcmp(name, p1->name)!=0&&p1->next!=NULL) //开始扫描每个结点以查找与要求吻合的结点
545 p1=p1->next; //如果不相同就扫描下一个
546 if(strcmp(name, p1->name)==0) //查找到相同的信息开始输出
547 {
548 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
549 getchar();
550 getchar();
551 }
552 else
553 printf("不存在姓名为%s学生\n", name);//没有查找到满足要求的结点
554 return(head);
555 }
556
557
558 //2.按性别查询
559 student *search_By_Gender(student *head) //定义一个函数,赋给他查找链表的首地址
560 {
561 system("cls");
562 char gender[GENDER_LEN];
563 student *p1;
564 printf("请输入要查询学生的性别:"); //输入查找性别
565 scanf("%s",&gender);
566 printf("******************************************************************\n");
567 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
568 printf("__________________________________________________________________\n");
569 p1=head;
570 while (strcmp(gender, p1->gender)!=0&&p1->next!=NULL) //开始扫描每个结点以查找与要求吻合的结点
571 p1=p1->next; //如果不相同就扫描下一个
572 if(strcmp(gender, p1->gender)==0) //查找到相同的信息开始输出
573 {
574 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
575 getchar();
576 getchar();
577 }
578 else
579 printf("不存在姓名为%s学生\n", gender);//没有查找到满足要求的结点
580 return(head);
581 }
582
583 //3.按年龄查询
584 student *search3(student *head) //同以上查找函数
585 {
586 system("cls");
587 int age;
588 student *p1;
589 printf("请输入要查询学生的年龄(输入0退出):");
590 scanf("%d",&age);
591 while(age!=0)
592 {
593 system("cls");
594 if(head==NULL)
595 {
596 printf("\n没有任何学生的信息,请输入\n");
597 return(head);
598 }
599 printf("******************************************************************\n");
600 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
601 printf("__________________________________________________________________\n");
602 p1=head;
603 while (age!=p1->age&&p1->next!=NULL)
604 p1=p1->next;
605 if(age==p1->age)
606 {
607 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
608
609 }
610 else
611 printf("不存在年龄为%d学生\n", age);
612 printf("输入要查询学生的年龄(输入0退出):");
613 scanf("%d", &age);
614 }
615 printf("退出查询\n");
616 return(head);
617 }
618
619 //4.按数学成绩查询
620 student *search4(student *head) //同以上查找函数
621 {
622 system("cls");
623 float math;
624 student *p1;
625 printf("请输入要查询学生的数学成绩(输入0退出):");
626 scanf("%f",&math);
627 while(math!=0)
628 {
629 system("cls");
630 if(head==NULL)
631 {
632 printf("\n没有任何学生的资料,请输入\n");
633 return(head);
634 }
635 printf("******************************************************************\n");
636 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
637 printf("__________________________________________________________________\n");
638 p1=head;
639 while (math!=p1->math&&p1->next!=NULL)
640 p1=p1->next;
641 if(math==p1->math)
642 {
643 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
644
645 }
646 else
647 printf("不存在数学成绩为%.2f学生\n", math);
648 printf("输入要查询学生的数学成绩(输入0退出):");
649 scanf("%f", &math);
650 }
651 printf("退出查询\n");
652 return(head);
653 }
654
655 //5.按物理成绩查询
656 student *search5(student *head) //同以上查找函数
657 {
658 system("cls");
659 float phy;
660 student *p1;
661 printf("请输入要查询学生的物理成绩(输入0退出):");
662 scanf("%f",&phy);
663
664 while(phy!=0)
665 {
666 system("cls");
667 if(head==NULL)
668 {
669 printf("\n没有任何学生的资料,请输入\n");
670 return(head);
671 }
672 printf("******************************************************************\n");
673 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
674 printf("__________________________________________________________________\n");
675 p1=head;
676 while (phy!=p1->phy&&p1->next!=NULL)
677 p1=p1->next;
678 if(phy==p1->phy)
679 {
680 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
681
682 }
683 else
684 printf("不存在物理成绩为%.2f学生\n", phy);
685 printf("输入要查询学生的物理成绩(输入0退出):");
686 scanf("%f", &phy);
687 }
688 printf("退出查询\n");
689 return(head);
690 }
691
692 //6.按英语成绩查询
693 student *search6(student *head) //同以上查找函数
694 {
695 system("cls");
696 float eng;
697 student *p1;
698 printf("请输入要查询学生的英语成绩(输入0退出):");
699 scanf("%f",&eng);
700 while(eng!=0)
701 {
702 system("cls");
703 if(head==NULL)
704 {
705 printf("\n没有任何学生的资料,请输入\n");
706 return(head);
707 }
708 printf("******************************************************************\n");
709 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
710 printf("__________________________________________________________________\n");
711 p1=head;
712 while (eng!=p1->eng&&p1->next!=NULL)
713 p1=p1->next;
714 if(eng==p1->eng)
715 {
716 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
717
718 }
719 else
720 printf("不存在英语成绩为%.2f学生\n", eng);
721 printf("输入要查询学生的英语成绩(输入0退出):");
722 scanf("%f", &eng);
723 }
724 printf("退出查询\n");
725 return(head);
726 }
727
728 //7.按计算机成绩查询
729 student *search7(student *head) //同以上查找函数
730 {
731 system("cls");
732 system("cls");
733 float cpu;
734 student *p1;
735 printf("请输入要查询学生的计算机成绩(输入0退出):");
736 scanf("%f",&cpu);
737 while(cpu!=0)
738 {
739 if(head==NULL)
740 {
741 printf("\n没有任何学生的资料,请输入\n");
742 return(head);
743 }
744 printf("******************************************************************\n");
745 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
746 printf("__________________________________________________________________\n");
747 p1=head;
748 while (cpu!=p1->cpu&&p1->next!=NULL)
749 p1=p1->next;
750 if(cpu==p1->cpu)
751 {
752 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
753 }
754 else
755 printf("不存在计算机成绩为%.2f学生\n", cpu);
756 printf("输入要查询学生的计算机成绩(输入0退出):");
757 scanf("%f", &cpu);
758 }
759 printf("退出查询\n");
760 return(head);
761 }
762
763 //8.按总分成绩查询
764 student *search8(student *head) //同以上查找函数
765 {
766 system("cls");
767 float sum;
768 student *p1;
769 printf("请输入要查询学生的总分(输入0退出):");
770 scanf("%f",&sum);
771 while(sum!=0)
772 {
773 system("cls");
774 if(head==NULL)
775 {
776 printf("\n没有任何学生的资料,请输入\n");
777 return(head);
778 }
779 printf("******************************************************************\n");
780 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
781 printf("__________________________________________________________________\n");
782 p1=head;
783 while (sum!=p1->sum&&p1->next!=NULL)
784 p1=p1->next;
785 if(sum==p1->sum)
786 {
787 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p1->num, p1->name,p1->gender, p1->age,p1->math, p1->phy,p1->eng, p1->cpu, p1->sum);
788
789 }
790 else
791 printf("不存在总分成绩为%.2f学生\n", sum);
792 printf("输入要查询学生的总分成绩(输入0退出):");
793 scanf("%f", &sum);
794 }
795 printf("退出查询\n");
796 return(head);
797 }
798
799 //******************************************************查询模块
800
801
802
803
804
805
806 //********************************************** 阅读模块
807
808 //输出
809 void print(student *head) //赋给函数首地址,根据地址输出链表
810 {
811 system("cls");
812 student *p;
813 printf("已录入%d个学生的记录是:\n", n);
814 printf("******************************************************************************\n");
815 printf("学号\t姓名\t性别\t年龄\t数学\t物理\t英语\t计算机\t总分\n");
816 printf("______________________________________________________________________________\n"); //输出格式
817 p=head;
818 if(head!=NULL)
819 do //输出信息
820 {
821 printf("%ld\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", p->num, p->name,p->gender, p->age,p->math, p->phy,p->eng, p->cpu, p->sum);
822 p=p->next;
823 printf("______________________________________________________________________________\n");
824 }while(p!=NULL); //当到达最后一个结点停止
825 else
826 printf("\n没有任何学生的信息\n"); //链表为空输出
827 getchar();
828 }
829
830
831 void Account_print(stu_accout *head) //赋给函数首地址,根据地址输出链表
832 {
833 system("cls");
834 stu_accout *p;
835 printf("******************************************************************************\n");
836 printf("账户名\t密码\t权限\n");
837 printf("______________________________________________________________________________\n"); //输出格式
838 p=head;
839 if(head!=NULL)
840 do //输出信息
841 {
842 if(strcmp(p->name,UserName)==0)
843 {
844 printf("%s\t%s\t%d\n",p->name,p->passwd,p->role);
845 printf("______________________________________________________________________________\n");
846 break;
847 }
848 p=p->next;
849 }while(p!=NULL); //当到达最后一个结点停止
850 else
851 printf("\n没有任何学生的信息\n"); //链表为空输出
852 getchar();
853 }
854
855 //********************************************** 阅读模块
856
857
858
859
860
861
862 //******************************************************排序模块
863
864
865 //7.排序信息菜单
866 student *menu7(student *head)
867 {
868 while(1)
869 {
870 system("cls");
871 int k; //定义一个整形变量输入switch进行判断
872 student *stu=0;
873 printf("\n\n\n");
874 printf("******************************************************************\n");
875 printf("* 排序学生信息目录 *\n");
876 printf("* 1.按学生学号排序 *\n");
877 printf("* 2.按学生年龄排序 *\n");
878 printf("* 3.按数学成绩排序 *\n");
879 printf("* 4.按物理成绩排序 *\n");
880 printf("* 5.按英语成绩排序 *\n");
881 printf("* 6.按计算机成绩排序 *\n");
882 printf("* 7.按总分成绩排序 *\n");
883 printf("* 8.返回主菜单 *\n");
884 printf("******************************************************************\n\n");
885 printf("我的选择:"); //输出菜单界面
886
887 scanf("%d", &k);//输入选择
888 getchar();
889 switch(k) //判断
890 {
891 case 1:
892 {
893 head=sort1(head); //按学号排序,调用学号排序函数
894 break; //跳出
895 }
896 case 2:
897 {
898 head=sort2(head); //按年龄排序,调用年龄排序函数
899 break;
900 }
901 case 3:
902 {
903 head=sort3(head); //按数学成绩排序,调用数学成绩排序函数
904 break;
905 }
906 case 4:
907 {
908 head=sort4(head); //按物理成绩排序,调用物理成绩排序函数
909 break;
910 }
911 case 5:
912 {
913 head=sort5(head);
914 break;
915 }
916 case 6:
917 {
918 head=sort6(head);
919 break;
920 }
921 case 7:
922 {
923 head=sort7(head);
924 break;
925 }
926 case 8:break; //返回主菜单
927 default:printf("输入错误请重试\n");
928 }
929 if(k==8) break;
930 }
931 return head;
932 }
933
934 //交换
935 void swap(student *p1, student *p2) //交换函数,用于冒泡法的排序函数中
936 {
937 int k, d; //定义各种交换的中间变量
938 char a[10];
939 float temp;
940 k=p1->num; //把新定义的num变量作为中间变量交换swap函数中的前后两个变量的学号信息
941 p1->num=p2->num;
942 p2->num=k;
943
944 strcpy(a, p1->name); //交换姓名信息,采用一个同类型中间变量,过程同上
945 strcpy(p1->name, p2->name);
946 strcpy(p2->name,a);
947
948 strcpy(a, p1->gender); //交换性别信息,采用一个同类型中间变量,过程同上
949 strcpy(p1->gender, p2->gender);
950 strcpy(p2->gender,a);
951
952 d=p1->age; //交换年龄信息,采用一个同类型中间变量,过程同上
953 p1->age=p2->age;
954 p2->age=d;
955
956 temp=p1->math; //交换成绩信息,采用一个同类型中间变量,过程同上
957 p1->math=p2->math;
958 p2->math=temp;
959
960 temp=p1->phy; //交换成绩信息,采用一个同类型中间变量,过程同上
961 p1->phy=p2->phy;
962 p2->phy=temp;
963
964 temp=p1->eng; //交换成绩信息,采用一个同类型中间变量,过程同上
965 p1->eng=p1->eng;
966 p2->eng=temp;
967
968 temp=p1->cpu; //交换成绩信息,采用一个同类型中间变量,过程同上
969 p1->cpu=p2->cpu;
970 p2->cpu=temp;
971
972 temp=p1->sum; //交换成绩信息,采用一个同类型中间变量,过程同上
973 p1->sum=p2->sum;
974 p2->sum=temp;
975 }
976
977 //1.按学号排序
978 student *sort1(student *head) //定义排序函数,赋值给所需删除操作链表的首地址
979 {
980 system("cls");
981 student *p1, *p2;
982 int i, j;
983 p2=head;
984 p1=head;
985 if(head==NULL) //进行一次判断,链表为空时,提示
986 {
987 printf("没有任何学生的信息,请先输入\n");
988 }
989 for(i=1; i<n; i++)
990 {
991 for(j=i+1;j<=n; j++)
992 {
993 p2=p1;
994 p1=p1->next;
995 if(p2->num<p1->num) //按冒泡法如果相邻两个结点不符合顺序要求,交换其值
996 swap(p2,p1); //因为是结构体,有多个元素,因此先前定义了一个swap函数,此时调用
997 }
998 p2=head; //第一次排序完成,令其返回首结点进行循环
999 p1=head;
1000 }
1001 print(head);//调用print函数输出排序结果
1002 return head; //返回首地址,供其他函数处理该链表
1003 }
1004
1005 //2.按年龄排序
1006 student *sort2(student *head) //同以上排序函数
1007 {
1008 system("cls");
1009 student *p1, *p2;
1010 int i, j;
1011 p2=head;
1012 p1=head;
1013 if(head==NULL)
1014 {
1015 printf("没有任何学生的信息,请先输入\n");
1016 }
1017 for(i=1; i<n; i++)
1018 {
1019 for(j=i+1;j<=n; j++)
1020 {
1021 p2=p1;
1022 p1=p1->next;
1023 if(p2->age<p1->age)
1024 swap(p2,p1);
1025 }
1026 p2=head;
1027 p1=head;
1028 }
1029 print(head);
1030 return head;
1031 }
1032
1033 //3.按数学成绩排序
1034 student *sort3(student *head) //同以上排序函数
1035 {
1036 system("cls");
1037 student *p1, *p2;
1038 int i, j;
1039 p2=head;
1040 p1=head;
1041 if(head==NULL)
1042 {
1043 printf("没有任何学生的信息,请先输入\n");
1044 }
1045 for(i=1; i<n; i++)
1046 {
1047 for(j=i+1;j<=n; j++)
1048 {
1049 p2=p1;
1050 p1=p1->next;
1051 if(p2->math<p1->math)
1052 swap(p2,p1);
1053 }
1054 p2=head;
1055 p1=head;
1056 }
1057 print(head);
1058 return head;
1059 }
1060
1061 //4.按物理成绩排序
1062 student *sort4(student *head) //同以上排序函数
1063 {
1064 system("cls");
1065 student *p1, *p2;
1066 int i, j;
1067 p2=head;
1068 p1=head;
1069 if(head==NULL)
1070 {
1071 printf("没有任何学生的信息,请先输入\n");
1072 }
1073 for(i=1; i<n; i++)
1074 {
1075 for(j=i+1;j<=n; j++)
1076 {
1077 p2=p1;
1078 p1=p1->next;
1079 if(p2->phy<p1->phy)
1080 swap(p2,p1);
1081 }
1082 p2=head;
1083 p1=head;
1084 }
1085 print(head);
1086 return head;
1087 }
1088
1089 //5.按英语成绩排序
1090 student *sort5(student *head) //同以上排序函数
1091 {
1092 system("cls");
1093 student *p1, *p2;
1094 int i, j;
1095 p2=head;
1096 p1=head;
1097 if(head==NULL)
1098 {
1099 printf("没有任何学生的信息,请先输入\n");
1100 }
1101 for(i=1; i<n; i++)
1102 {
1103 for(j=i+1;j<=n; j++)
1104 {
1105 p2=p1;
1106 p1=p1->next;
1107 if(p2->eng<p1->eng)
1108 swap(p2,p1);
1109 }
1110 p2=head;
1111 p1=head;
1112 }
1113 print(head);
1114 return head;
1115 }
1116
1117 //6.按计算机成绩排序
1118 student *sort6(student *head) //同以上排序函数
1119 {
1120 system("cls");
1121 student *p1, *p2;
1122 int i, j;
1123 p2=head;
1124 p1=head;
1125 if(head==NULL)
1126 {
1127 printf("没有任何学生的信息,请先输入\n");
1128 }
1129 for(i=1; i<n; i++)
1130 {
1131 for(j=i+1;j<=n; j++)
1132 {
1133 p2=p1;
1134 p1=p1->next;
1135 if(p2->cpu<p1->cpu)
1136 swap(p2,p1);
1137 }
1138 p2=head;
1139 p1=head;
1140 }
1141 print(head);
1142 return head;
1143 }
1144
1145 //7.按总分成绩排序
1146 student *sort7(student *head) //同以上排序函数
1147 {
1148 system("cls");
1149 student *p1, *p2;
1150 int i, j;
1151 p2=head;
1152 p1=head;
1153 if(head==NULL)
1154 {
1155 printf("没有任何学生的信息,请先输入\n");
1156 }
1157 for(i=1; i<n; i++)
1158 {
1159 for(j=i+1;j<=n; j++)
1160 {
1161 p2=p1;
1162 p1=p1->next;
1163 if(p2->sum<p1->sum)
1164 swap(p2,p1);
1165 }
1166 p2=head;
1167 p1=head;
1168 }
1169 print(head);
1170 return head;
1171 }
1172
1173 //******************************************************排序模块
1174
1175
1176
1177
1178
1179
1180 //******************************************************增删修模块
1181
1182 //添加学生信息
1183 student *add(student *head, student *stu) //定义学生函数和首地址及添加信息地址
1184 {
1185 student *p0, *p1, *p3;
1186 int i;
1187 p3=stu=(student *)malloc(sizeof(student)); //把新建节点的地址赋给指针
1188 printf("\n请输入要增加的学生的信息:");
1189 printf("请输入学生学号(学号大于0):");
1190 scanf("%ld", &stu->num);
1191 //getchar();
1192 p3=head;
1193 if(n>0)
1194 {
1195 for(i=0; i<n; i++) //循环,让指针指向最后一个结点
1196 {
1197 p3=p3->next;
1198 }
1199 }
1200 printf("请输入学生姓名:"); //输入插入学生的
1201 scanf("%s", stu->name);
1202 //getchar();
1203 printf("请输入学生性别:"); //输入插入学生的
1204 scanf("%s", stu->gender);
1205 //getchar();
1206 printf("请输入年龄、数学、物理、英语、计算机成绩并以空格隔开(0-100):");
1207 scanf("%d%f%f%f%f", &stu->age, &stu->math, &stu->phy, &stu->eng, &stu->cpu);
1208 getchar();
1209 stu->sum=stu->math+stu->phy+stu->eng+stu->cpu;
1210 p1=head;
1211 p0=stu;
1212 if(head!=NULL)
1213 {
1214 while(p1->next!=NULL)
1215 {
1216 p1=p1->next;
1217 }
1218 p1->next=p0; //把保存有添加学生信息的结点连接到链表最后
1219 p0->next=NULL;
1220 }
1221 else
1222 {
1223 head=p0;
1224 p0->next=NULL;
1225 }
1226
1227 int Save=Save_Stu(head);
1228 if(Save)
1229 n=n+1; //插入一个学生,n自增一次
1230 printf("现在的学生数为:%d\n", n);
1231 getchar();
1232 return(head); //返回改变链表的首地址
1233 }
1234
1235 //删除学生信息
1236 student *del(student *head) //定义删除函数,赋值给所需删除操作链表的首地址
1237 {
1238 student *p1, *p2;
1239 long int num; //定义一个与结构体重学号元素同类型的变量输入所需删除的学号
1240 printf("输入要删除的学生的学号(输入0时退出):");
1241 scanf("%ld", &num);
1242 getchar();
1243 p1=head;
1244 while(num!=p1->num&&p1->next!=NULL) //在连表中查找满足要求的结点
1245 {
1246 p2=p1;
1247 p1=p1->next;
1248 }
1249 if(num==p1->num)
1250 {
1251 if(p1!=head)
1252 {
1253 p2->next=p1->next; //让该结点的上下两个结点相连,即可“删除”该结点
1254
1255 }
1256 else
1257 {
1258 head=p1->next;
1259
1260 }
1261 printf("成功删除%d\n", num);
1262
1263 int Save=Save_Stu(head);
1264 if(Save)
1265 n=n-1; //插入一个学生,n自增一次
1266 printf("现在的学生数为:%d\n", n);
1267 }
1268 else
1269 printf("没有检索到%ld学生\n", num); //没有扫描到符合要求的结点,提示
1270 getchar();
1271 return(head); //返回修改过的链表的首地址以供其他函数使用
1272 }
1273
1274
1275 //修改学生信息
1276 student *cha(student *head)
1277 {
1278 while(1)
1279 {
1280 student *p1;
1281 long int num;
1282 int k;
1283 printf("输入要修改的学生的学号(输入0时退出):");
1284 scanf("%ld", &num);
1285 if(num==0) break;
1286 getchar();
1287 p1=head;
1288 while(num!=p1->num&&p1->next!=NULL) //在连表中查找满足要求的结点
1289 p1=p1->next;
1290 if(p1!=NULL)
1291 {
1292 printf("请选择你要修改的内容:\n 姓名:1 性别:2 年龄:3 数学成绩:4 \n 物理成绩:5 英语成绩:6 计算机成绩:7\n");
1293
1294 scanf("%d",&k);
1295 getchar();
1296 switch (k)
1297 {
1298 case 1:
1299 {
1300 printf("请输入姓名:");
1301 scanf("%s",p1->name);
1302 break;
1303 }
1304 case 2:
1305 {
1306 printf("请输入性别:");
1307 scanf("%s",p1->gender);
1308 break;
1309 }
1310 case 3:
1311 {
1312 printf("请输入年龄:");
1313 scanf("%d",&p1->age);
1314 break;
1315 }
1316 case 4:
1317 {
1318 printf("请输入数学成绩:");
1319 scanf("%f",&p1->math);
1320 p1->sum=p1->math+p1->phy+p1->eng+p1->cpu;
1321 break;
1322 }
1323 case 5:
1324 {
1325 printf("请输入物理成绩:");
1326 scanf("%f",&p1->phy);
1327 p1->sum=p1->math+p1->phy+p1->eng+p1->cpu;
1328 break;
1329 }
1330 case 6:
1331 {
1332 printf("请输入英语成绩:");
1333 scanf("%f",&p1->eng);
1334 p1->sum=p1->math+p1->phy+p1->eng+p1->cpu;
1335 break;
1336 }
1337 case 7:
1338 {
1339 printf("请输入计算机成绩:");
1340 scanf("%f",&p1->cpu);
1341 p1->sum=p1->math+p1->phy+p1->eng+p1->cpu;
1342 break;
1343 }
1344 default:printf("输入错误请重试\n");
1345 break;
1346 }
1347 printf("成功修改%d\n", num);
1348 int Save=Save_Stu(head);
1349
1350 }
1351 else
1352 printf("没有检索到%ld学生\n", num); //没有扫描到符合要求的结点,提示
1353 getchar();
1354 getchar(); //返回修改过的链表的首地址以供其他函数使用
1355 }
1356 return(head);
1357 }
1358
1359 //修改学生信息
1360 stu_accout *Password_cha(stu_accout *head)
1361 {
1362
1363 stu_accout *p1;
1364 int k;
1365 p1=head;
1366 while(strcmp(UserName,p1->name)!=0&&p1->next!=NULL) //在连表中查找满足要求的结点
1367 p1=p1->next;
1368 printf("请原来的密码\n");
1369 char OrPassword[PWD_LEN];
1370 scanf("%s",OrPassword);
1371 if(strcmp(OrPassword,p1->passwd)!=0)
1372 printf("密码错误!!\n");
1373 else
1374 {
1375 char NewPass1[PWD_LEN];
1376 char NewPass2[PWD_LEN];
1377 printf("请输入新密码:");
1378 scanf("%s",NewPass1);
1379 getchar();
1380 printf("请确认新密码:");
1381 scanf("%s",NewPass2);
1382 if(strcmp(NewPass1,NewPass2)!=0)
1383 printf("密码不一致!!!");
1384 else
1385 {
1386 strcpy(p1->passwd,NewPass1);
1387 int Save=Save_Account(head);
1388 printf("成功修改\n");
1389
1390 }
1391
1392 }
1393
1394
1395
1396 getchar();
1397 getchar(); //返回修改过的链表的首地址以供其他函数使用
1398
1399 return(head);
1400 }
1401
1402 //******************************************************增删修模块
View Code
主函数
1 #include "My_header.h"
2
3 //主函数
4 int main()
5 {
6 student *Student_head=0, *stu=0;
7 stu_accout *Account_Head=0;
8 int k, a; //定义录入选择的整形变量
9 while(1)
10 {
11 system("cls");
12
13 printf(",.,,..... ...:,,,:,... ....,,,. ,,,,,,:. ..:,,,..... ....\n");
14 printf(": ,s1hhhhiii ... :111h55h11s...sh51...... rhhhi . r1hhhhs:i \n");
15 printf(",.9Ahrrrs5&@A.,,,,;rr;3@#riri,,:;9@@s.:,,,:#@@1;,.1H9srir19M@r\n");
16 printf(".8@; ,,,,..3M:,,,:,,,.1@H.,,,::,.hM@X.:,:.3M@#:,,s@8 ,,,,..iM5\n");
17 printf(".A@i..,,,:,.i:,,,,,,,.1@H,,,,,,,.S8A@i,,,:H5@#:,.5@8...,,::.;;\n");
18 printf(".rM@X5r,..,,,,:,,,,,,.1@H,,,,,,:.S9h@9.:.3Xi@#:,,:X@B9s:...,, \n");
19 printf(": :h9B#MA9s,.,:,,,,,,.1@B,,,,,::.S8.##:,,Bri@#:,:,.i9H##H81,..\n");
20 printf(",.,..,ih8B@MS,,:,,,,,.1@B,,,,,,:.S8 9@5 S& s@#:,,,,,..;19H@#3.\n");
21 printf(": ,:,,,...i&@G,,,,,,,.1@B,,,,,,:.S8 i@H.H1 s@M:,:,,::,,...iX@8\n");
22 printf(",9s.::,,:,..#@:,,,,,,.1@B,,,,,,,.S8..X@X&..s@M:,,Gh ,:,,:,..B@\n");
23 printf(" 9#r..,,,. s@G,,,:,,, s@B..,,,:, S8 .s@@s..r@M,,.8@1..,,,. r@G\n");
24 printf(".,@B31riir5&5 ....,rriS@Msrri...;G&i. A& .iS@M1: i#H31riir5&S \n\n\n");
25 printf(" 开发人员:卓寿杰 \n");
26 printf(" \n");
27 printf(" 1.进入 \n");
28 printf(" 2.退出 \n");
29 printf("*****************************************************************\n\n");
30 printf("我的选择:");
31 scanf("%d", &a); //输入选择
32 if(a==1) //进入系统
33 {
34 stu_accout *Account=NULL;
35 Account=Acount_Load(Account);
36 int Login_Change=3; //三次登入机会
37 int tem;
38 int type;
39 while(Login_Change--)
40 {
41 tem=login(Login_Change,type,Account);
42 if(tem) break;
43 }
44 if(!tem) break;
45 while(1) //使用循环,在完成一个
46 {
47
48 Student_head= Student_File_Load(Student_head);
49 k=menu(type); //调用主目录函数
50 switch(k)
51 {
52 case 1:// 1.查询学生的信息
53 {
54 Student_head=menu1(Student_head);
55 break;
56 }
57 case 2:print(Student_head);break; //输出函数,显示学生信息
58 case 3:
59 { //调用信息排序菜单函数,并进一步调用各种排序函数
60 Student_head=menu7(Student_head);
61 break;
62 }
63 case 7:
64 { student* tem=NULL;
65 Student_head=add(Student_head, tem);
66 break;
67 }
68 case 8:
69 {
70 print(Student_head);
71 Student_head=del(Student_head); //调用删除函数返回首地址
72 print(Student_head); //根据删除函数返回的地址输出结果
73 break;
74 }
75 case 9:
76 {
77 print(Student_head);
78 Student_head=cha(Student_head);
79 getchar();
80 print(Student_head);
81 break;
82 }
83 case 4:
84 {
85 Account_print(Account);
86 break;
87 }
88 case 5:
89 {
90 Account=Password_cha(Account);
91 break;
92 }
93 case 6:break; //返回登录界面
94 case 10:
95 {
96 Student_head=Other_Student_File_Load(Student_head);
97 break;
98 }
99 case 11:
100 {
101 Other_Save_Stu(Student_head);
102 break;
103 }
104 case 0:exit(0); //退出
105 default:printf("输入错误请重试\n");
106
107 }
108 if(k==6)break;
109 }
110 }
111 else
112 {
113 printf("您是否确认退出?(y/n)"); //确认退出程序
114 getchar();
115 if(getchar()=='y')
116 break;
117 }
118 }
119 }
View Code