C语言学生成绩管理系统(简易版)

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 
  5 int readstudents(struct students stu[]);        //读取学生信息
  6 int readsexcode(struct sexcode sex[]);          //读取性别代码
  7 int readcollegecode(struct collegecode colle[]);        //读取学院代码
  8 void transform(struct students stu[],struct sexcode sexy[],struct collegecode colle[],int a,int b,int c);               //录入
  9 void namesort(struct students stu[],int a);             //按照姓名排序
 10 void averagesort(struct students stu[],int a);          //平均分排序
 11 void searchcollege(struct students stu[],int a);        //按学院搜索学生
 12 void namesearch(struct students stu[],int a);           //按名字搜索
 13 void printstudent(struct students stu[],struct sexcode sex[],struct collegecode colle[],int a,int b,int c);         //输出
 14 void change(struct students stu[],int a);
 15 int passwordfun();
 16 void passwordchange();
 17 void averagefun(struct students stu[],int a);
 18 
 19 struct students{
 20     int num;
 21     char name[20];
 22     int sexnum;
 23     char sex[4];
 24     int collegenum;
 25     char college[20];
 26     int score[10];
 27     float average;
 28 };
 29 struct sexcode{
 30     int sexnum;
 31     char sex[4];
 32 };
 33 struct collegecode{
 34     int collegenum;
 35     char college[20];
 36 };
 37 
 38 
 39 int main()
 40 {
 41     int a,b,c;
 42     int choice;
 43     struct students stu[100];
 44     struct sexcode sexy[2];
 45     struct collegecode colle[10];
 46     int t = passwordfun();
 47     if(t == 0){
 48         printf("请使用正确密码重新登陆程序!\n");
 49         return 0;
 50     }
 51     while(1){
 52         system("cls");
 53         printf("***********学生成绩系统菜单************ \n*        1. 原始文件读取              *\n*        2. 按姓名排序,输出          *\n*        3. 按平均成绩排序,输出      *\n*        4. 输出给定学院学生          *\n*        5. 修改给定学生成绩信息      *\n*        6. 按姓名查询学生,输出      *\n*        7. 修改系统密码              *\n*        0. 返回上一级菜单            *\n***************************************\n");
 54         scanf("%d",&choice);
 55         switch(choice){
 56             case 1:    system("cls");
 57                 a = readstudents(stu);
 58                 b = readsexcode(sexy);
 59                 c = readcollegecode(colle);
 60                 transform(stu,sexy,colle,a,b,c);
 61                 averagefun(stu,a);
 62                 printf("原始文件读取完毕!\n0. 返回上一级菜单 \n");
 63                 scanf("%d",&choice);
 64                 if(choice == 0) break;
 65             case 2: system("cls");
 66                 namesort(stu,a);
 67                 printstudent(stu,sexy,colle,a,b,c);
 68                 printf("\n0. 返回上一级菜单 \n");
 69                 scanf("%d",&choice);
 70                 if(choice == 0) break;
 71             case 3: system("cls");
 72                 averagesort(stu,a);
 73                 printstudent(stu,sexy,colle,a,b,c);
 74                 printf("\n0. 返回上一级菜单 \n");
 75                 scanf("%d",&choice);
 76                 if(choice == 0) break;
 77             case 4: system("cls");
 78                 searchcollege(stu,a);
 79                 printf("\n0. 返回上一级菜单 \n");
 80                 scanf("%d",&choice);
 81                 if(choice == 0) break;
 82             case 5: system("cls");
 83                 change(stu,a);
 84                 printf("修改成功!\n");
 85                 printf("\n0. 返回上一级菜单 \n");
 86                 scanf("%d",&choice);
 87                 if(choice == 0) break;
 88             case 6: system("cls");
 89                 namesearch(stu,a);
 90                 printf("\n0. 返回上一级菜单 \n");
 91                 scanf("%d",&choice);
 92                 if(choice == 0) break;
 93             case 7: system("cls");
 94                 passwordchange();
 95                 printf("\n0. 返回上一级菜单 \n");
 96                 scanf("%d",&choice);
 97                 if(choice == 0) break;
 98             case 0: system("cls");
 99                 printf("欢迎使用,下次再见!\n");
100                 system("pause");
101                 exit(0);
102         }
103     }
104     return 0;
105 }
106 int readstudents(struct students stu[])     //读取学生信息
107 {
108     int i = 0;
109     FILE *fp;
110     fp = fopen("D:\\abc\\Student_Info.txt","r+");
111     if(fp == 0){
112         printf("can not open this file\n");
113         exit (0);
114     }
115     fscanf(fp,"%d",&stu[i].num);
116     while(!feof(fp)){
117         fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexnum,&stu[i].collegenum);
118         for(int j = 0 ;j < 10; j++ ){
119             fscanf(fp,"%d",&stu[i].score[j]);
120         }
121         i++;
122         fscanf(fp,"%d",&stu[i].num);
123     }
124     fclose(fp);
125     return i;
126 }
127 int readsexcode(struct sexcode sexy[])      //读取学生性别信息
128 {
129     int i = 0;
130     FILE *fp;
131     fp = fopen("D:\\abc\\S_Info.txt","r");
132     if(fp == 0){
133         printf("can not open this file\n");
134         exit (0);
135     }
136     fscanf(fp,"%d",&sexy[i].sexnum);
137     while(!feof(fp)){
138         fscanf(fp,"%s",sexy[i].sex);
139         i++;
140         fscanf(fp,"%d",&sexy[i].sexnum);
141     }
142     fclose(fp);
143     return i;
144 }
145 int readcollegecode(struct collegecode colle[])     //读取学生学院信息
146 {
147     int i = 0;
148     FILE *fp;
149     fp = fopen("D:\\abc\\C_Info.txt","r");
150     if(fp == 0){
151         printf("can not open this file\n");
152         exit (0);
153     }
154     fscanf(fp,"%d",&colle[i].collegenum);
155     while(!feof(fp)){
156         fscanf(fp,"%s",colle[i].college);
157         i++;
158         fscanf(fp,"%d",&colle[i].collegenum);
159     }
160     fclose(fp);
161     return i;
162 }
163 void averagefun(struct students stu[],int a)        //平均分
164 {
165     for(int i = 0; i < a; i++){
166         int sum = 0; 
167         for(int j = 0; j < 10; j++){
168             sum = sum + stu[i].score[j];
169         }
170         stu[i].average = 1.0 * sum / 10;
171     }
172     return ;
173 }
174 void namesort(struct students stu[],int a)          //按姓名排序 
175 {
176     for(int i = 0; i < a-1; i++){
177         for(int j = i+1; j < a ; j++){
178             if(strcmp(stu[i].name,stu[j].name) < 0){
179                 struct students temp = stu[i];
180                 stu[i] = stu[j];
181                 stu[j] = temp;
182             }
183         }
184     }
185     return ;
186 }
187 void averagesort(struct students stu[],int a)           //  按平均分排序
188 {
189     for(int i = 0; i < a-1; i++){
190         for(int j = i+1; j < a ; j++){
191             if(stu[i].average < stu[j].average){
192                 struct students temp = stu[i];
193                 stu[i] = stu[j];
194                 stu[j] = temp;
195             }
196         }
197     }
198     return ;
199 }
200 void printstudent(struct students stu[],struct sexcode sexy[],struct collegecode colle[],int a,int b,int c)         //输出信息
201 {
202     for(int i = 0;i < a; i++){
203         printf("%d%8s%4s%12s",stu[i].num,stu[i].name,stu[i].sex,stu[i].college);
204         for(int j = 0; j < c; j++){
205             printf("%4d",stu[i].score[j]);
206         }
207         printf("%7.2f\n",stu[i].average);
208     }
209     return ;
210 }
211 void transform(struct students stu[],struct sexcode sexy[],struct collegecode colle[],int a,int b,int c)        //修改信息
212 {
213     for(int i = 0; i < a; i++){
214         for(int j = 0; j < b; j++){
215             if(stu[i].sexnum == sexy[j].sexnum){
216                 strcpy(stu[i].sex,sexy[j].sex);
217                 break;
218             }
219         }
220         for(int j = 0; j < c; j++){
221             if(stu[i].collegenum == (colle[j].collegenum - 1)){
222                 strcpy(stu[i].college,colle[j].college);
223                 break;
224             }
225         }
226     }
227 }
228 
229 void searchcollege(struct students stu[],int a)         //查找学院并输出
230 {
231     char collegename[20];
232     printf("请输入需要查找的学院的名称:\n") ;
233     scanf("%s",collegename);
234     for(int i = 0;i < a; i++){
235         if(strcmp(stu[i].college,collegename) == 0){
236             printf("%d%8s%4s%12s",stu[i].num,stu[i].name,stu[i].sex,stu[i].college);
237             for(int j = 0; j < 10; j++){
238                 printf("%4d",stu[i].score[j]);
239             }
240             printf("%7.2f\n",stu[i].average);
241         }
242     }
243     return ;
244 }
245 void namesearch(struct students stu[],int a)        //按姓名查找
246 {
247     printf("请输入需要查找的学生的姓名:\n");
248     char name[20];
249     scanf("%s",name);
250     for(int i = 0;i < a; i++){
251         if(strcmp(stu[i].name,name) == 0){
252             printf("%d%8s%4s%12s",stu[i].num,stu[i].name,stu[i].sex,stu[i].college);
253             for(int j = 0; j < 10; j++){
254                 printf("%4d",stu[i].score[j]);
255             }
256             printf("%7.2f\n",stu[i].average);
257         }
258     }
259     return ;
260 }
261 void change(struct students stu[],int a)        //按名字搜索修改分数
262 {
263     char name[20];
264     printf("请输入需要修改成绩的学生的姓名:\n");
265     scanf("%s",name);
266     printf("请输入改学生各科成绩,不需要修改的按原样输入:\n");
267     for(int i = 0;i < a; i++){
268         if(strcmp(stu[i].name,name) == 0){
269             for(int j = 1; j <= 10; j++){
270                 printf("第%d门成绩:    ",j);
271                 scanf("%d",&stu[i].score[j-1]);
272                 printf("\n");
273             }
274         }
275     }
276     int i = 0;
277     FILE *fp;
278     fp = fopen("D:\\abc\\Student_Info.txt","w");
279     if(fp == 0){
280         printf("can not open this file\n");
281         exit (0);
282     }
283     while(i<100){
284         fprintf(fp,"%d %s %d %d",stu[i].num,stu[i].name,stu[i].sexnum,stu[i].collegenum);
285         for(int j = 0 ;j < 10; j++ ){
286             fprintf(fp," %d",stu[i].score[j]);
287             if(j == 9){
288                 fprintf(fp,"\n");
289             }
290         }
291         i++;
292     }
293     fclose(fp);
294     return ;
295 }
296 int passwordfun()           //密码
297 {
298     char password_1[20],password_2[20],password_3[20];
299     int i = 0;
300     FILE *fp;
301     fp = fopen("D:\\abc\\password.txt","r");
302     if(fp == 0){
303         printf("can not open this file\n");
304         exit (0);
305     }
306     fscanf(fp,"%s",password_2);
307     fclose(fp);
308     if(password_2[i] == '\0'){          //当检测到密码文本为空时
309         printf("欢迎使用学生成绩管理系统!\n首次使用系统,您可以直接进入主菜单,进入主菜单后请及时修改密码!\n");
310         system("pause");
311         return 1;
312     }
313     else
314         {
315         printf("请输入系统密码:\n");
316         
317                //保存输入的密码 
318            char s[20];
319            int t,n_,x;
320         for(x=0;x<20;x++){
321             s[x]=getch();
322             if(s[x]=='\r')    break;
323             printf("*");
324         }
325         s[x]='\0';          
326         for(t=0;t<20;t++){        //将输入的密码存放在password_1中
327             password_1[t]=s[t];
328         }               
329         for(i = 0; password_2[i] != '\0'; i++){
330             if(password_2[i] <= 127 && password_2[i] >= 4){                 //password_2为真实密码
331                 password_3[i] = password_2[i] - 3;      //密码密文加密(+3)
332             }else{
333                 password_3[i] = 127 - password_3[i];
334             }                                           //password_3为按算法处理后的真实密码
335         }
336         password_3[i] = '\0';
337         if(strcmp(password_1,password_3) == 0){
338             return 1;
339         }else{
340             printf("密码错误!\n程序结束!请使用正确密码重新登入程序!\n");
341             system("pause");
342             return 0;
343         }
344     }
345 }
346 void passwordchange()       //密码修改
347 {
348     FILE *fp;
349     char newpassword_1[20];
350     char newpassword_2[20];
351     int i = 0;
352     printf("请输入新的密码:\n");
353     scanf("%s",newpassword_1);
354     for(i = 0; newpassword_1[i] != '\0'; i++){
355         if(newpassword_1[i] + 3 <= 127){
356             newpassword_2[i] = newpassword_1[i] + 3;
357         }else{
358             newpassword_2[i] = newpassword_1[i] + 3 -127;
359         }
360     }
361     newpassword_2[i] = '\0';
362     fp = fopen("D:\\abc\\password.txt","w");
363     if(fp == 0){
364         printf("can not open this file\n");
365         exit (0);
366     }
367     fprintf(fp,"%s",newpassword_2);
368     fclose(fp);
369     printf("密码修改成功!\n");
370     return ;
371 }

 

转载于:https://www.cnblogs.com/liangjiahao713/p/6217088.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值