我的C程序,學生學籍管理系統


 

1、 系統概述

學生學籍管理系統從學生學籍管理的現狀出發,以實現學生學籍管理為設計目標

學生學籍管理系統:用數據文件存放學生的學籍,可對學生學籍進行注冊,登錄,修改,刪除,查找,統計,學籍變化等操作。

在界面友善方面,首先使用system函數使界面美觀,用制表符制作界面使界面簡潔易讀,其次將輸入數據的思路流程化,使用者可以從任意數據輸入過程開始,,各種各樣的數據產生過程。再者,考慮到了對非法輸入做了一定的處理,輸出提示語句與提示音,增加了程序的可操作性。

本系統使用結構體數組對學生學籍存儲,並使用文件指針及文件的讀寫函數將學生學籍保存於文件file.TXT中,使得數據長期存儲。

本系統以模塊化設計為主要思想,逐步細化,自頂向下,實現對學生的學籍管理

程序缺陷

部分變量命名不規范

未對用戶與管理員權限進行限制

未能使用鏈表進行數據結構設計

2、 數據結構設計

本程序所使用的數據類型

數據類型

字節

值的范圍

int

4

-2,147,483,648~ 2,147,483,647

char

1

-128~127

struct date

12

#

struct student

272

#

FILE*

4

#

 

變量數據類型及說明

變量

 

功能

數據類型

 

值的范圍

flag

 

標記是否登錄

int

 

0、1

stu[N]

 

學生學籍信息數組

struct student

 

N=100

w1

 

各函數w1為數據錯誤標志位

int

 

0,1

i,j

 

多在函數中被用於循環控制變量

int

 

0~ 2,147,483,647

birthday

 

出生年月

struct date

 

 

num[20]

 

學號數組

char

 

最多19字符

name[25]

 

姓名數組

char

 

最多24字符

age

 

年齡

int

 

 

addr[50]

 

籍貫

char

 

最多49字符

dept[50]

 

系別

char

 

最多49字符

classs[30]

 

班級

char

 

最多29字符

major[30]

 

專業

char

 

最多29字符

classes[30]

 

班級

char

 

最多29字符

status[20]

 

學籍狀態

char

 

最多19字符

password[20]

 

密碼

char

 

最多19字符

 

變量介紹:

其他變量為函數臨時變量

學生學籍結構體數組為方便各函數調用,使用全局變量存儲

Flag為登錄標志位,使用全局變量來進行存儲,從而判斷是否登錄

i、         j用於for循環的控制計數變量,控制循環的進行

w0、w1用於while循環的控制

 

輸出數據:

%d帶符號的十進制形式輸出整數。

用於數據個數的輸出

%s以字符串類型整體輸入字符數組,例如學生籍貫的輸出

以字符串輸出學生信息數據

使用清屏函數及時清除屏幕多余數據,使得界面美觀大方,易讀性強

 

3、 模塊設計

系統通過歡迎函數、菜單函數、查詢函數、刪除函數、查詢函數、修改函數、籍貫輸出函數來實現學生信息的查找刪除等功能,各功能通過主函數switch語句調用,各函數又互相調用

 

設計錯誤

開始對錯誤數據的處理不力,錯誤比較多,沒有按全局的思路完善程序所導致的

 

4.調試運行及操作說明

程序使用說明

  1. 1.  運行程序進入歡迎界面,按[enter]進入主菜單
  1. 1.  根據所需服務輸入對應數字

 

錯誤輸入:如果輸入錯誤數字9 系統會提示錯誤、發出提示音並提示重新輸入

 

3.鍵入1 進入登錄系統頁面

 

3.1 管理員登錄鍵入一並輸入密碼,密碼為123456

 

3.2用戶名為學生姓名密碼為學號

 

4.按任意鍵登錄成功會返回菜單頁 

錯誤提示:未登錄選擇進入插入、刪除頁面會提示登錄(查詢除外)並轉到登錄頁面

 

5.進入菜單鍵入2進入插入頁面,按提示輸入學生信息

 

6.進入鍵入1進入瀏覽頁面,進入鍵入2返回菜單

 

7.菜單選擇4進入查詢界面,分為姓名與學號查詢

 

8.顯示結果,查詢結束可選擇繼續與返回菜單

錯誤提示:輸入錯誤姓名與學號會提示重新輸入

 

9.進入刪除界面,同理,按提示輸入將刪除所選項

 

10.進入修改界面,按提示輸入將修改所選項

 

11.進入籍貫界面,選擇專業與學號並按提示輸入將查看籍貫項

 

12.菜單狀態按8鍵,將退出系統

 

  1 /*
  2     C語言綜合設計
  3 
  4 題目:學生學籍管理系統
  5  
  6 管理員登錄密碼:123456
  7 用戶為輸入學生姓名,密碼為學號
  8 
  9 功能:
 10 (1) 系統以菜單方式工作。  
 11 (2) 登記學生的學號,姓名,性別,年齡,籍貫,系別,專業,班級;修改已知學號的學生信息; 
 12 (3) 刪除已知學號的學生信息; 
 13 (4) 查找已知學號的學生信息;  
 14 (5) 按學號,專業輸出學生籍貫表。  
 15 (6) 查詢學生學籍變化,比如入學,轉專業,退學,降級,休學,畢業。
 16 
 17 編譯平台:vc++6.0
 18 2018.6.12
 19 
 20 */
 21 
 22 #include<stdio.h>
 23 #include<string.h>
 24 #include<stdlib.h>
 25 #include<conio.h>
 26 #define N 100 /*存儲100個學生的學籍信息*/
 27 int flag; /*標記是否登錄*/
 28 struct date /*出生日期*/
 29 {
 30     int year;
 31     int month;
 32     int day;
 33 };
 34 struct student
 35 {
 36     char num[20];/*學號*/
 37     char name[25];/*姓名*/
 38     char sex[10];/*性別*/
 39     struct date birthday;/*出生年月*/
 40     int age;/*年齡*/
 41     char addr[50];/*籍貫*/
 42     char dept[50]; /*系別*/
 43     char major[30]; /*專業*/
 44     char classs[30]; /*班級*/
 45     char phone[20];/*電話*/
 46     char status[20];/*學籍狀態*/
 47 }stu[N];
 48 
 49 void login() /*登錄*/
 50 {
 51     void menu();
 52     int load();
 53     int n,i,m,w;
 54     FILE *fp;
 55     struct student s;
 56     char password[20];
 57     int d,q;    
 58     int j=0;
 59     system("cls");
 60     if(flag)
 61     {
 62         printf("  已經登錄!\n");
 63         printf("Press any key to continue…\n");
 64         getchar();
 65         getchar();
 66         system("cls");
 67         menu();
 68     }
 69  
 70     if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/
 71       n=load(); /*打開文件*/
 72     else
 73       n=0;
 74 
 75     
 76     printf("\n\t請選擇登錄身份:1.管理員      2.用戶     [ ]\b\b");
 77     scanf("%d",&d);
 78     if(d==1)
 79     {
 80         printf("\n\t\t\t請輸入密碼:");
 81         getchar();
 82     
 83         while(1)
 84         {
 85             password[j]=getch();
 86             if(password[j]=='\r')
 87               break;
 88             printf("*");
 89             j++;
 90         }
 91         password[j]='\0';
 92         if(!strcmp(password,"123456")) /*判斷密碼是否正確*/
 93         {
 94             flag=1;
 95             printf("\n\t登錄成功!\n");
 96             printf("\tPress [ Enter ] key to continue…");
 97             getchar();
 98             system("cls");
 99             menu();
100         }
101         if(!flag)
102         {
103            printf("\t\n密碼錯誤!\n\a");
104            printf("What do you want to do next? 1.繼續登錄  2.返回菜單   [ ]\b\b");
105            scanf("%d",&q);
106            if(q==1) /*繼續登錄*/
107            {
108                system("cls");
109                login();
110            }
111            else if(q==2) /*返回主菜單*/
112            {
113                system("cls");
114                menu();
115            }
116         }
117     }
118     else
119     {
120        printf("\n\t\t\t用戶名:");
121        scanf("%s",s.name);
122        printf("\t\t\t密碼:");
123        
124        while(1)
125         {
126             password[j]=getch();
127             if(password[j]=='\r')
128               break;
129             printf("*");
130             j++;
131         }
132        password[j]='\0';
133        flag=0; /*未登錄時flag=0*/
134        for(i=0;i<n;i++)
135          if(!strcmp(s.name,stu[i].name)&&!strcmp(stu[i].num,password))
136          {
137            flag=1; /*登錄成功flag=1*/
138            break;
139          }
140       if(flag)
141       {
142          printf("\n\t登錄成功!\n");
143          printf("\tPress any key to continue…\n");
144          getchar(); getchar();
145          system("cls");
146          menu(); /*登錄成功后返回主菜單*/
147       }
148       else
149       {
150         m=0; /*設置m是為了避免陷入 登錄失敗時 跳不出登錄界面*/
151         w=1; /*設置w是為了避免輸出多次 “用戶不存在”*/
152     
153         do
154         {
155             if(w>0)
156                printf("用戶名不存在或密碼錯誤!\n\a"); /*第一次登錄時輸入不存在的用戶時顯示*/
157             printf("What do you want to do next? 1.繼續登錄  2.返回菜單   [ ]\b\b");
158             scanf("%d",&q);
159             if(q==1) /*繼續登錄*/
160             {
161                 login();
162                 m=1;
163             }
164             else if(q==2) /*返回主菜單*/
165             {
166                 system("cls");
167                 menu();
168                 m=1;
169             }
170             else
171             {
172                 printf("選擇錯誤!請重新選擇:\n\a");
173                 w=0;
174             }
175         }while(m==0);
176       }
177     }
178 }
179 
180 void printf_one(int k) /*輸出一個學生的信息*/
181 {
182     system("color 4e");
183     printf("學號:%s\n",stu[k].num);
184     printf("姓名:%s\n",stu[k].name);
185     printf("性別:%s\n",stu[k].sex);
186     printf("出生年月:%d/%d/%d\n",stu[k].birthday.year,stu[k].birthday.month,stu[k].birthday.day);
187     printf("年齡:%d\n",stu[k].age);
188     printf("籍貫:%s\n",stu[k].addr);
189     printf("系別:%s\n",stu[k].dept);
190     printf("專業:%s\n",stu[k].major);
191     printf("班級:%s\n",stu[k].classs);
192     printf("電話:%s\n",stu[k].phone);
193     printf("學籍狀態:%s\n",stu[k].status);
194 }
195 
196 void printf_n(int n) /*瀏覽時輸出所有學生的信息*/
197 {
198     int j,i=1;
199     system("color 2e");
200     
201     for(j=0;j<n;j++)
202     {
203         printf("第%d個學生:\n",i++);
204         printf_one(j);
205          printf("\n");
206     }
207   getchar();
208 }
209 
210 void printf_addr() /* 按學號,專業輸出學生籍貫表*/
211 {
212    void menu();
213     int w0,k,i,n,w1,w2;
214     struct student s;
215     FILE *fp;
216     system("color 2e");    
217      if(!flag)
218     {
219         printf("\n\n\t請先登錄!\n\a");
220         printf("\n\t請按 Enter 鍵進入登錄界面!");
221         getchar();
222         getchar();
223         login();
224     }
225     else
226     {
227         if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/
228            n=load();
229         do
230         {
231             printf("請選擇學生籍貫的輸出類別:  1.專業  2.學號   [ ]\b\b");
232             scanf("%d",&w1);
233             if(w1<1||w1>2)
234             {
235                 printf("輸入錯誤!請重新輸入!\n\a");
236                 w2=1;
237             }
238             else
239                 w2=0; /*防止陷入死循環*/
240         }while(w2==1);
241         if(w1==1) /*按專業輸出*/
242         {
243             do
244             {
245                 k=-1;
246                 do
247                 {
248                     printf("\n請輸入專業!\nName:");
249                     scanf("%s",s.major);
250                     for(i=0;i<n;i++)
251                       if(strcmp(s.major,stu[i].major)==0)
252                       {
253                           k=i;
254                           printf("\n");    
255                           printf_one(i);
256                           printf("\n");
257                       }
258                       if(k==-1) /*沒有找到*/
259                       {
260                          int o;
261                          printf("\n\n沒有此專業的信息!\n!");
262                          printf("What do you want to do?\n\t1.繼續    2.返回菜單  [ ]\b\b");
263                          scanf("%d",&o);
264                          if(o==1)
265                          {
266                              system("cls");
267                              printf_addr; /*繼續輸出*/
268                          }
269                          else
270                          {
271                              system("cls");
272                              menu();
273                          }
274                       }
275                 }while(k==-1);
276               // system("cls");
277                printf("\nWhat do you want to do next?\n\t1).繼續    2).返回菜單   [ ]\b\b");
278                scanf("%d",&w0);
279             }while(w0==1);
280           system("cls");
281           menu(); /*不再查找時返回主菜單*/
282         }
283         else /*按學號輸出*/
284         {
285             do
286             {
287                k=-1;
288                do
289                {
290                    printf("\n請輸入要輸出的學號!\nNum:");
291                    scanf("%s",s.num);
292                    for(i=0;i<n;i++)
293                      if(strcmp(s.num,stu[i].num)==0) /*找到了*/
294                      {
295                         k=i;
296                         printf("籍貫:");   puts(stu[k].addr);
297                         break;
298                      }
299                    if(k==-1) /*沒有找到*/
300                    {
301                       int o;
302                       printf("\n\n沒有這個學生的信息!\n!");
303                       printf("What do you want to do?\n\t1.繼續    2.返回菜單  [ ]\b\b");
304                       scanf("%d",&o);
305                       if(o==1)
306                       {
307                           system("cls");
308                           printf_addr; /*繼續輸出*/
309                       }
310                       else
311                       {
312                           system("cls");
313                           menu();
314                       }
315                    }
316                }while(k==-1);
317                printf("\nWhat do you want to do?\n\t1).繼續   2).返回菜單   [ ]\b\b");
318                scanf("%d",&w0);
319                system("cls");
320             }while(w0==1);
321           system("cls");
322           menu();/*不再查找時返回主菜單*/
323  
324         }
325     }
326 }
327 
328 
329 
330 int load() /*打開文件,讀取里面的數據*/
331 {
332     FILE *fp;
333     int i;
334     if((fp=fopen("file.txt","rb"))==NULL) /*讀入空文件,rb表示打開一個二進制文件,只允許讀數據*/
335     {
336         printf("\n文件不存在!\n");
337         return 0;
338     }
339     for(i=0;!feof(fp);i++)  /*處理到文件結尾*/
340        fread(&stu[i],sizeof(struct student),1,fp);  /*fread(buffer,size,cout,fp)將磁盤文件中的一批數據作為一個整體一次性讀取出來,
341     buffer指定數據塊位置,sizeof數據塊字節數,count讀取次數,fp指向源磁盤文件*/
342     fclose(fp);
343     return(i-1);
344 }
345 
346 void input(int k) /*輸入學生信息*/
347 {
348     getchar();
349     printf("學號:");   gets(stu[k].num);
350     printf("姓名:");   gets(stu[k].name);
351     printf("性別:");   gets(stu[k].sex);
352     printf("出生年月:");  scanf("%d%d%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day);
353     printf("年齡:");   scanf("%d",&stu[k].age);  getchar();
354     printf("籍貫:");   gets(stu[k].addr);
355     printf("系別:");   gets(stu[k].dept);
356     printf("專業:");   gets(stu[k].major);
357     printf("班級:");   gets(stu[k].classs);
358     printf("電話:");   gets(stu[k].phone);
359     printf("學籍狀態:");gets(stu[k].status);
360 }
361 
362 void save(int n) /*保存學生信息*/
363 {
364     void exit();
365     FILE *fp;
366     int i;
367     if((fp=fopen("file.txt","wb"))==NULL) /*只打開或建立一個二進制文件,只允許寫數據*/
368     {
369         printf("\nCan not open file!\n");
370         exit(0);
371     }
372     for(i=0;i<n;i++)
373       if(stu[i].name[0]!='\0')
374          if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) /*將一批數據作為一個整體一次性寫入磁盤文件*/
375             printf("文件寫入錯誤!\n");
376     fclose(fp);
377 }
378 
379 void printf_back()/*添加學生信息后顯示的“是瀏覽還是返回”*/
380 {
381    int w,k=0;
382    void browse();
383    void menu();
384    printf("\n\n\t^_^.插入成功. ^_^\n\n");
385    do
386    {
387       printf("What do you want to do next?\n\n\t1).瀏覽所有\t2).返回:  [ ]\b\b");
388       scanf("%d",&w);
389       if(w==1)
390       {
391           system("cls");
392           browse();
393       }
394       else if(w==2)
395       {
396           system("cls");
397           menu();
398       }
399       else
400           printf("  選擇錯誤!請重新選擇!\n\a");
401    }while(k==0);
402 }
403 
404 void insert() /*添加學生信息*/
405 {
406     int i,n,k,t;
407     FILE *fp;
408     if(!flag)
409     {
410         printf("\n\n\t請先登錄!\n\a");
411         printf("\n\t請按 Enter 鍵進入登錄界面!");
412         getchar();
413         getchar();
414         login();
415     }
416     else
417     {
418         if((fp=fopen("file.txt","rb"))==NULL) /*讀入空文件,rb表示打開一個二進制文件,只允許讀數據*/
419         {
420             printf("How many people do you want to add(1-%d)?:",N-1);
421             n=0;
422         }
423         else
424         {
425           n=load();
426           printf("How many student do you want to insert (1-%d)?:",N-n-1);/*剩余可插入的個數*/
427         }
428         
429         scanf("%d",&t);
430         while(t>=(N-n-1)||t<1)
431         {
432             printf("輸入錯誤!請重新輸入!\n\a");    
433             scanf("%d",&t);
434         }
435         k=n+t;
436         for(i=n;i<k;i++)
437         {
438            printf("\n輸入第 %d 個學生學籍信息.\n",i-n+1);
439            input(i);
440         }
441         save(k); /*保存所有學生的信息*/
442         printf_back();
443     }
444 }
445 
446 void deleter() /*刪除*/
447 {
448     void menu();
449     if(!flag)
450     {
451         printf("\n\n\t請先登錄!\n\a");
452         printf("\n\t請按 Enter 鍵進入登錄界面!");
453         getchar();
454         getchar();
455         login();
456     }
457     else
458     {
459         struct student s;
460         int i,n,k,w0,w1;
461         n=load();
462         do
463         {
464             k=-1;
465             //printf_n(n); /*刪除之前先顯示所有學生的信息*/
466             do
467             {
468                  printf("\n\n請輸入您想要刪除的學生的姓名!\nName:");
469                  scanf("%s",s.name);
470                  for(i=0;i<n;i++)
471                    if(strcmp(s.name,stu[i].name)==0)
472                    {
473                       k=i;
474                       s=stu[i];
475                    }
476                  if(k==-1)
477                  {
478                      int m;
479                      printf("\n\n沒有這個學生的信息!\n");
480                      printf("What do you want to do next? 1.繼續輸入  2.返回主菜單    [ ]\b\b");
481                      scanf("%d",&m);
482                      if(m==1)
483                          deleter();
484                      else
485                      {
486                          k=0;
487                          system("cls");
488                          menu();
489                      }
490                  }
491             }while(k==-1);
492             printf_one(k);
493             printf("\n\t確定刪除?\n\t1).是   2).返回  [ ]\b\b");/*再次詢問是否刪除*/
494             scanf("%d",&w0);
495             if(w0==1)
496             {
497                stu[k].name[0]='\0';
498                save(n);
499             }
500             else
501                 break;
502             printf("\n\t^_^.成功刪除^_^.\n");
503             printf("What do you want to do?\n\t1).繼續   2).返回  [ ]\b\b");
504             scanf("%d",&w1);
505         }while(w1==1);
506       system("cls");
507       menu(); /*不再刪除時返回主菜單,w1!=1*/
508     }
509 }
510 
511 void search() /*查找*/
512 {
513     void menu();
514     int w0,k,i,n,w1,w2;
515     struct student s;
516     FILE *fp;
517     if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/
518        n=load();
519     do
520     {
521         printf("請選擇查找類別:  1.姓名  2.學號   [ ]\b\b");
522         scanf("%d",&w1);
523         if(w1<1||w1>2)
524         {
525             printf("輸入錯誤!請重新輸入!\n\a");
526             w2=1;
527         }
528         else
529             w2=0; /*防止陷入死循環*/
530     }while(w2==1);
531     if(w1==1) /*按姓名查找*/
532     {
533         do
534         {
535             k=-1;
536             do
537             {
538                 printf("\n請輸入您想要查找的學生的姓名!\nName:");
539                 scanf("%s",s.name);
540                 for(i=0;i<n;i++)
541                   if(strcmp(s.name,stu[i].name)==0)
542                   {
543                       k=i;
544                       s=stu[i];
545                   }
546                   if(k==-1) /*沒有找到*/
547                   {
548                      int o;
549                      printf("\n\n沒有這個學生的信息!\n!");
550                      printf("What do you want to do?\n\t1.繼續    2.返回菜單  [ ]\b\b");
551                      scanf("%d",&o);
552                      if(o==1)
553                      {
554                          system("cls");
555                          search(); /*繼續查找*/
556                      }
557                      else
558                      {
559                          system("cls");
560                          menu();
561                      }
562                   }
563             }while(k==-1);
564            system("cls");
565            printf_one(k); /*找到以后輸出這個學生的信息*/
566            printf("\nWhat do you want to do next?\n\t1).繼續    2).返回菜單   [ ]\b\b");
567            scanf("%d",&w0);
568         }while(w0==1);
569       system("cls");
570       menu(); /*不再查找時返回主菜單*/
571     }
572     else /*按學號查找*/
573     {
574         do
575         {
576            k=-1;
577            do
578            {
579                printf("\n請輸入您想要查找的學生的學號!\nNum:");
580                scanf("%s",s.num);
581                for(i=0;i<n;i++)
582                  if(strcmp(s.num,stu[i].num)==0) /*找到了*/
583                  {
584                    k=i;
585                    s=stu[i];
586                  }
587                if(k==-1) /*沒有找到*/
588                {
589                   int o;
590                   printf("\n\n沒有這個學生的信息!\n!");
591                   printf("What do you want to do?\n\t1.繼續    2.返回菜單  [ ]\b\b");
592                   scanf("%d",&o);
593                   if(o==1)
594                   {
595                       system("cls");
596                       search(); /*繼續查找*/
597                   }
598                   else
599                   {
600                       system("cls");
601                       menu();
602                   }
603                }
604            }while(k==-1);
605            system("cls");
606            printf_one(k); /*找到以后輸出這個學生的學籍信息*/
607            printf("\nWhat do you want to do?\n\t1).繼續   2).返回菜單   [ ]\b\b");
608            scanf("%d",&w0);
609         }while(w0==1);
610       system("cls");
611       menu();/*不再查找時返回主菜單*/
612  
613     }
614 }
615 
616 int modify_data(int i) /*修改信息函數*/
617 {
618     int c,w1;
619     void menu();
620     do
621     {
622         puts("\n請選擇要修改的選項:\n\n1.學號 2.姓名  3.性別  4.出生日期  5.年齡 6.籍貫 7.系別 8.專業 9.班級 10.電話  11.學籍狀態 12.所有信息 13.取消並返回");
623         printf("請選擇?: [  ]\b\b\b");
624         scanf("%d",&c);
625         if(c>13||c<1)
626         {
627             puts("\n選擇錯誤!請重新選擇!");
628             getchar();
629         }
630     }while(c>13||c<1);
631    do
632    {
633        switch(c)
634        {
635          case 1: printf("學號:");  scanf("%s",stu[i].num); break;
636          case 2: printf("姓名:");  scanf("%s",stu[i].name); break;
637          case 3: printf("性別:");  scanf("%s",stu[i].sex); break;
638          case 4: printf("出生年月:");  scanf("%d/%d/%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day); break;
639          case 5: printf("年齡:");  scanf("%d",&stu[i].age);break;
640          case 6: printf("籍貫:");  scanf("%s",stu[i].addr);break;
641          case 7: printf("系別:");  scanf("%s",stu[i].dept);break;
642          case 8: printf("專業:");  scanf("%s",stu[i].major);break;
643          case 9: printf("班級:");  scanf("%s",stu[i].classs);break;
644          case 10: printf("電話:");  scanf("%s",stu[i].phone);break;
645          case 11: printf("學籍狀態:");  scanf("%s",stu[i].status);break;
646          case 12: input(i); break;  /*修改這個學生的所有信息*/
647          case 13: menu();  /*返回主菜單*/
648          
649        }
650        puts("\nNow:\n");
651        printf_one(i); /*輸出 修改后 的這個學生的信息*/
652        printf("\n確定?\n\n\t1).是  2).不,重新修改  3).返回不保存 [ ]\b\b");
653        scanf("%d",&w1);
654    }while(w1==2);
655    return(w1); /*修改成功並選擇1后返回1*/
656 }
657 
658 void modify() /*修改*/
659 {
660     void menu();
661     if(!flag)
662     {
663         printf("\n\n\t請先登錄!\n");
664         printf("\n\t請按 Enter 鍵進入登錄界面!");
665         getchar();
666         getchar();
667         login();
668     }
669     else
670     {
671        struct student s;
672        int i,n,k,w0=1,w1,w2=0;
673        n=load();
674        do
675        {
676           k=-1;
677           //printf_n(n); /*刪除之前先顯示所有學生的信息*/
678           do
679           {
680              printf("\n請輸入您想要修改的學生的姓名!\nName:");
681              scanf("%s",s.name);
682              for(i=0;i<n;i++)
683                if(strcmp(s.name,stu[i].name)==0) /*與其中一個學生匹配*/
684                {
685                    k=i;
686                    s=stu[i];
687                }
688              if(k==-1) /*沒有找到輸入的學生*/
689              {
690                  int o;
691                  printf("\n\n沒有這個學生的信息!\n");
692                  printf("What do you want to do?\n\t1.繼續    2.返回菜單  [ ]\b\b");
693                  scanf("%d",&o);
694                  system("cls");
695                  if(o==1)
696                  {
697                      
698                      //modify(); /*繼續修改*/
699                  }
700                  else
701                  {
702                     //system("cls");
703                     menu();
704                  }
705              }
706           }while(k==-1);
707           system("cls");
708           printf_one(k); /*輸出這個學生的信息*/
709           w1=modify_data(k);
710           if(w1==1) /*判斷是否修改成功修改*/
711           {
712              printf("\n\t^_^.修改成功 ^_^.\n\n是否繼續?\n\n\t1).是 2).保存返回\t[ ]\b\b");
713              scanf("%d",&w0);
714              w2=1;
715           }
716           else
717           {
718              w0=0;
719              if(w2==0)
720                  stu[k]=s;
721           }
722           if((w0!=1)&&(w2==1)) /*修改成功保存*/
723              save(n);
724        }while(w0==1);
725        system("cls");
726      menu();/*不再修改返回主菜單*/
727     }
728 }
729 
730 void browse()/*瀏覽*/
731 {
732     void menu();
733     int n;
734     system("color 5f");
735     if(!flag)
736     {
737         printf("\n\n\t請先登錄!\n\a");
738         printf("\n\t請按 Enter 鍵進入登錄界面!");
739         getchar();
740         getchar();
741         login();
742     }
743     else
744     {
745     n=load();
746     printf_n(n);
747     printf("  共有 %d 個學生的記錄.\n",n);
748     printf("\nPress [ ENTER ] key to back...");
749     getchar();
750     system("cls");
751     menu(); /*返回主函數*/
752     }
753 }
754 
755 
756 void welcome()  /*歡迎頁面*/
757 {
758     system("color F0");
759     printf("\n\t    ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
760     puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※");
761     puts("\t    ※※                                              ※※");
762     puts("\t    ※※                                              ※※");
763     puts("\t    ※※           歡迎訪問學生學籍管理系統!          ※※");
764     puts("\t    ※※                                              ※※");
765     puts("\t    ※※                                              ※※");
766     puts("\t    ※※                                              ※※");
767     puts("\t    ※※                                              ※※");
768     puts("\t    ※※                              制作人:xxx     ※※");
769     puts("\t    ※※                                   2018.6     ※※");
770     puts("\t    ※※                                              ※※");
771     puts("\t    ※※※※※※※※※※※※※※※※※※※※※※※※※※※");
772     printf("\n\tPress [ Enter ] key to continue……\n");    
773     getchar();
774     system("cls");
775 }
776 
777 void menu() /*主菜單*/
778 {    
779     int n,w1;/*n為服務種類保存變量,w1為數據錯誤標志位*/
780     system("color 2e");    /*system函數改變背景色與前景色*/
781     printf("\n\t\t\t歡迎使用學生學籍管理系統!\n");
782     printf("\n");
783 
784     do
785     {
786        puts("\t\t★★★★★★★★    菜單   ★★★★★★★★");
787        puts("\t\t                 1.登  錄                 ");
788        puts("\t\t                 2.插  入                 ");
789        puts("\t\t                 3.刪  除                 ");
790        puts("\t\t                 4.查  詢                 ");
791        puts("\t\t                 5.修  改                 ");
792        puts("\t\t                 6.瀏  覽                 ");
793        puts("\t\t                 7.籍  貫                 ");
794        puts("\t\t                 8.退  出                 ");
795        puts("\t\t★★★★★★★★★★★★★★★★★★★★★");
796         printf("請選擇服務種類(1-8) : [ ]\b\b");
797        scanf("%d",&n);
798        if(n<1||n>8)
799        {
800            system("cls");
801            printf("選擇錯誤!  請重新選擇!\n\a");/*輸出錯誤提示語句並發出警告音*/
802            w1=1;
803        }
804        else
805            w1=0;
806     }while(w1==1);
807     switch(n)
808     {
809        case 1: login();  break; /*登錄*/
810        case 2: system("cls");  insert();   break; /*插入*/
811        case 3: system("cls");  deleter();  break; /*刪除*/
812        case 4: system("cls");  search();   break; /*查找*/
813        case 5: system("cls");  modify();   break; /*修改*/
814        case 6: system("cls");  browse();   break; /*瀏覽*/
815        case 7: system("cls"); printf_addr();   break; /*輸出籍貫*/
816        case 8: printf(" 歡迎再次使用!再見!\n"); exit(0);break; /*退出*/
817 
818     }
819 }
820 
821 int main()
822 {
823     welcome();
824     menu();
825     return 0;
826 }


 

效果圖

 

目錄菜單

 

刪除學生

 

插入學生學籍

 

根據自己需要可以改變功能!

學好C語言,為專業知識的學習有很大好處。努力多學,學好計算機技術 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM