我的第一个c项目

学习c已经两周了,这是我的第一个项目,以下是我的一些总结:
我们的项目名称是学生成绩管理系统,主要功能是:

  1. 学生能够登陆系统查询语数外三科成绩,及三科平均分、总分、排名。
  2. 教师能够管理学生、录入成绩。
  3. 管理员能够管理教师,超级管理员能够管理管理员。
  4. 超级管理员外,其他人输错密码3次账号即锁定,向上级请求才能解锁。
    5.除超级管理员外,每个用户第一次登陆必须修改密码。

在这个项目中我与其他两位同学合作,我负责的是登陆密码模块和主界面模块以及学生模块。主要实现方法是:首先判断输入的ID是否存在,存在且未锁定,则继续输入密码,否则显示账号不存在。判断密码是否正确,若正确则登陆,若不正确则减少登陆次数,直至次数为零。当再次登录时,若账号已被锁定,则显示账号被锁定,需要向上级请求解锁。

以下是代码部分:
密码模块:

 //教师登录
 15 void tea_username_and_password(void)
 16 {
 17     char id[20];
 18     int tea_cur = 0;
 19     char str[10];
 20     int n = 3;
 21     puts("请输入工号:");
 22     {
 23         int flag = 1;
 24         while(flag){
 25             scanf("%s",id);
 26             for(int i = 0;i < 50;i++ ){
 27                 //输入的id存在且该id在职
 28                 if(0 == strcmp(tea[i].tea_id,id) && tea[i].is_work == 1){
 29                     //若被锁定则显示
 30                     if(tea[i].is_lock == 1){
 31                         printf("该工号被锁定!请向上一级(管理员)申诉\n");
 32                         sleep(1);
 33                         return;
 34                     //否则,退出循环,记录是第a个人
 35                     }else{
 36                         flag = 0;
 37                         tea_cur = i;
 38                         break;
 39                     }
 40                 //输入id存在但离职或不存在,显示不存在
 41                 }else if((0 == strcmp(tea[i].tea_id,id) && tea[i].is_work == 2) || (i == 49)){
 42                     printf("该工号不存在\n");
 43                     sleep(1);
 44                     return;
 45                 }
 46             }
 47         }
 48     }
49     puts("请输入密码:");
 50     do{
 51         n--;
 52         scanf("%s",str);
 53         //输入的密码与该账号密码不相同,则进入
 54         if(0 != strcmp(tea[tea_cur].tea_pass_word,str)){
 55         //n记录剩余次数
 56             if(n > 0){
 57                 printf("密码错误,请重新输入(还有%d次)\n",n);
 58             }else{
 59                 printf("工号被锁定!请向上一级(管理员)申诉\n");
 60                 tea[tea_cur].is_lock=1;
 61                 sleep(1);
 62                 return;
 63             }
 64         }
 65         //如果相同则进入教师模块
 66         else{
 67             //传参内容:第a个教师
 68             teacher_func(tea_cur);
 69             n = 0;
 70         }
 71     }while(n);
 72 }

学生模块代码:

1 #include "student.h"
  2 #include "stu_tea_adm_struct.h"
  3 #include "get_cmd.h"
  4 #include "display.h"
  5 extern Student stu[500];
  6 extern Teacher tea[50];
  7 extern Administrator adm[10];
  8 
  9 
 10 //修改密码
 11 void stu_cha_pass(int i)
 12 {
 13     printf("请输入新的密码:");
 14     scanf("%s",stu[i].stu_pass_word);
 15     puts("修改成功!");
 16     sleep(1);
 17     stu[i].is_first=1;
 18 }
 19 //显示个人信息
 20 void inf_my(int i)
 21 {
 22     printf("姓名:%s  语文:%d  数学:%d  英语:%d  平均分:%.2lf  总分:%d\n",stu[i].name,stu[i].ach_chi,stu[i].ach_mat,stu[i].ach_eng,stu[i].ach_avg,stu[i].ach_sco);
 23     printf("请按任意键返回...");
 24     getch();
 25 }
 26 
 27 //总分排名
 28 void sco_rank(int i)
 29 {
 30     printf("您的总分排名是%d\n",stu[i].sco_rank);
 31     printf("按任意键返回...");
 32     getch();
 33 }
 34 //数学成绩排名
 35 void mat_rank(int i)
 36 {
 37     printf("您的数学排名是%d\n",stu[i].mat_rank);
 38     printf("按任意键返回...");
 39     getch();
 40 }
 41
 42 void eng_rank(int i)
 43 {
 44     printf("您的英语排名是%d\n",stu[i].eng_rank);
 45     printf("按任意键返回...");
 46     getch();
 47 }
 48 //语文成绩排名显示
 49 void chi_rank(int i)
 50 {
 51     printf("您的语文排名是%d\n",stu[i].chi_rank);
 52     printf("按任意键返回...");
 53     getch();
 54 }
 55 
 56 //在查询成绩排名时选择科目
 57 void switch_course(int i)
 58 {
 59     printf("请选择你要查询的项目:");
 60     printf("1.数学");
 61     printf("2.英语");
 62     printf("3.语文");
 63     printf("4.总分");
 64     printf("5.返回");
 65     switch(get_cmd('1','5'))
 66     {
 67         case '1':mat_rank(i);break;
 68         case '2':eng_rank(i);break;
 69         case '3':chi_rank(i);break;
 70         case '4':sco_rank(i);break;
 71         case '5':return;
 72     }
 73 }
 74 
 75 int student_use(int x)
 76 {
 77     //判断是否第一次登录,是则要求修改
 78     if(0==stu[x].is_first)
 79     {
 80         stu_display();
 81         puts("您使用的是默认密码,请修改密码:");
 82         scanf("%s",stu[x].stu_pass_word);
 83         puts("修改成功!");
 84         stu[x].is_first=1;
 85         sleep(1);
 86     }
 87     while(1)
 88     {
 89         stu_display();
 90         //根据输入1~4选择功能
 91         switch(get_cmd('1','4'))
 92         {
 93             case '1':stu_cha_pass(x);break;
 94             case '2':inf_my(x);break;
 95             case '3':switch_course(x);break;
 96             case '4':return 0;break;
 97         }
 98     }
 99 }

这次项目练习是我们的第一次练习,还有很多的不足:
1.首先代码不够规范,对于变量的命名不够准确,使得其他人在阅读代码时,可读性不高,理解起来有困难。
2.其次我们的代码有很多的重复,优化不够,会浪费很多的资源。
3.再者就是我们对于问题的思考不够缜密,导致了一些逻辑问题。
4.然后就是我们的小组开始前讨论不够充分,使工作的分配有一些问题。
5.最后就是我们的测试不够认真,致使一些bug未被发现,结果在演示时出错。

经过这次的经历,我总结了一些问题,在下一次做项目的时候希望可以避免这些问题。

猜你喜欢

转载自blog.csdn.net/weixin_44042660/article/details/84942734