• 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("请使用正确密码重新登陆程序!
    ");
     49         return 0;
     50     }
     51     while(1){
     52         system("cls");
     53         printf("***********学生成绩系统菜单************ 
    *        1. 原始文件读取              *
    *        2. 按姓名排序,输出          *
    *        3. 按平均成绩排序,输出      *
    *        4. 输出给定学院学生          *
    *        5. 修改给定学生成绩信息      *
    *        6. 按姓名查询学生,输出      *
    *        7. 修改系统密码              *
    *        0. 返回上一级菜单            *
    ***************************************
    ");
     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("原始文件读取完毕!
    0. 返回上一级菜单 
    ");
     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("
    0. 返回上一级菜单 
    ");
     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("
    0. 返回上一级菜单 
    ");
     75                 scanf("%d",&choice);
     76                 if(choice == 0) break;
     77             case 4: system("cls");
     78                 searchcollege(stu,a);
     79                 printf("
    0. 返回上一级菜单 
    ");
     80                 scanf("%d",&choice);
     81                 if(choice == 0) break;
     82             case 5: system("cls");
     83                 change(stu,a);
     84                 printf("修改成功!
    ");
     85                 printf("
    0. 返回上一级菜单 
    ");
     86                 scanf("%d",&choice);
     87                 if(choice == 0) break;
     88             case 6: system("cls");
     89                 namesearch(stu,a);
     90                 printf("
    0. 返回上一级菜单 
    ");
     91                 scanf("%d",&choice);
     92                 if(choice == 0) break;
     93             case 7: system("cls");
     94                 passwordchange();
     95                 printf("
    0. 返回上一级菜单 
    ");
     96                 scanf("%d",&choice);
     97                 if(choice == 0) break;
     98             case 0: system("cls");
     99                 printf("欢迎使用,下次再见!
    ");
    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
    ");
    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
    ");
    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
    ");
    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
    ",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("请输入需要查找的学院的名称:
    ") ;
    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
    ",stu[i].average);
    241         }
    242     }
    243     return ;
    244 }
    245 void namesearch(struct students stu[],int a)        //按姓名查找
    246 {
    247     printf("请输入需要查找的学生的姓名:
    ");
    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
    ",stu[i].average);
    257         }
    258     }
    259     return ;
    260 }
    261 void change(struct students stu[],int a)        //按名字搜索修改分数
    262 {
    263     char name[20];
    264     printf("请输入需要修改成绩的学生的姓名:
    ");
    265     scanf("%s",name);
    266     printf("请输入改学生各科成绩,不需要修改的按原样输入:
    ");
    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("
    ");
    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
    ");
    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,"
    ");
    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
    ");
    304         exit (0);
    305     }
    306     fscanf(fp,"%s",password_2);
    307     fclose(fp);
    308     if(password_2[i] == ''){          //当检测到密码文本为空时
    309         printf("欢迎使用学生成绩管理系统!
    首次使用系统,您可以直接进入主菜单,进入主菜单后请及时修改密码!
    ");
    310         system("pause");
    311         return 1;
    312     }
    313     else
    314         {
    315         printf("请输入系统密码:
    ");
    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]=='
    ')    break;
    323             printf("*");
    324         }
    325         s[x]='';          
    326         for(t=0;t<20;t++){        //将输入的密码存放在password_1中
    327             password_1[t]=s[t];
    328         }               
    329         for(i = 0; password_2[i] != ''; 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] = '';
    337         if(strcmp(password_1,password_3) == 0){
    338             return 1;
    339         }else{
    340             printf("密码错误!
    程序结束!请使用正确密码重新登入程序!
    ");
    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("请输入新的密码:
    ");
    353     scanf("%s",newpassword_1);
    354     for(i = 0; newpassword_1[i] != ''; 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] = '';
    362     fp = fopen("D:\abc\password.txt","w");
    363     if(fp == 0){
    364         printf("can not open this file
    ");
    365         exit (0);
    366     }
    367     fprintf(fp,"%s",newpassword_2);
    368     fclose(fp);
    369     printf("密码修改成功!
    ");
    370     return ;
    371 }
  • 相关阅读:
    StackStorm简介及其部署
    Nginx系列(十二)——性能调整
    Nginx系列(十一)——通过日志进行故障排查
    Nginx系列(十)——可用性监控进阶
    Nginx系列(九)——容器/微服务
    Nginx系列(八)——数字媒体流
    Nginx系列(七)——HTTP/2
    Nginx系列(六)——安全控制
    Nginx系列(五)——认证
    Nginx系列(四)——配置文件自动化管理
  • 原文地址:https://www.cnblogs.com/liangjiahao713/p/6217088.html
Copyright © 2020-2023  润新知