1. 程式人生 > >我的第一個c專案

我的第一個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未被發現,結果在演示時出錯。

經過這次的經歷,我總結了一些問題,在下一次做專案的時候希望可以避免這些問題。