北京信息科技大學 課程設(shè)計報告
課程名稱 C程序設(shè)計課程實踐
題 目 學生考試成績統(tǒng)計分析
指導(dǎo)教師
設(shè)計起止日期
設(shè)計地點
系 別 信息管理學院
專 業(yè) __信息管理與信息系統(tǒng)_
姓名/學號
1. 課程實踐目的: 通過本實踐使學生對函數(shù)、數(shù)組、結(jié)構(gòu)體、指針有更深入的了解,在實際應(yīng)用中學會使用C語言編寫程序解決具體問題。
| 2. 課程實踐內(nèi)容:
編寫一程序,能實現(xiàn)對某班學生三門課程考試成績(高數(shù)、英語、體育)的統(tǒng)計與分析,具體功能如下:
a) 能進行學生信息(學號、姓名)和三門課程成績的錄入; b) 能計算出總成績的最高分、最低分、平均分; c) 能統(tǒng)計總成績在各分值段的成績比例及及格率,如下表所示: | | 270~300 | | 240~269 | | | | 210~239 | | 180~209 | | | 150~179 | | 149以下 | 及格率 | 成績 | | 7 | 人 | | 16 | 人 | | | | 16 | 人 | | 19 | 人 | | | 12 | 人 | | 12 | 人 | 70.73% | 分布 | | 8.54% | 19.51% | 19.51% | 23.17% | 14.63% | 14.63% |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d) 可按總評成績排序(降序),并在屏幕顯示;
e) 能按學號或姓名查詢某個學生的成績信息; 要求:學生個人信息和成績用結(jié)構(gòu)體數(shù)組(學號、姓名、高數(shù)、英語、體育、總成績)表示;每個功能都獨立編寫一個函數(shù)實現(xiàn)。
| 3. 實踐步驟:
| 4. 實踐總結(jié):
|
-
- #include "conio.h"
- #include "stdio.h"
- #include "string.h"
- struct stu{
- char name[20];
- char xh[20];
- float score[20],zf,pj;}student[60];
- int clen=0;
- char course[10][20];
- FILE *fp;
- FILE *f;
- int len;
- main()
- {int i=0,j;
- textcolor(YELLOW);
- textbackground(10);
- zhuzuo();
- clrscr();
- if((fp=fopen("course.txt","r"))!=NULL)
- {while(!feof(fp))
- fgets(course[clen++],20,fp);
- for(i=0;course[i][0]!='\0';i++)
- {for(j=0;course[i][j]!='\0';j++)
- if(course[i][j]=='\n')course[i][j]='\0';} }
- else {printf(" 文件不存在,請創(chuàng)建course.txt文件!\n");
- printf("注意事項請參看readme.txt\n");
- delay(100000);
- delay(100000);
- exit(0);}
- chushihua();
- clen--;
- if(len>0)len--;
- while(1)
- {clrscr();
- printf(" --------成績管理系統(tǒng)--------\n");
- printf(" -----1.輸入--\n");
- printf(" -----2.輸出--\n");
- printf(" -----3.查詢--\n");
- printf(" -----4.求平均--\n");
- printf(" -----5.求總成績--\n");
- printf(" -----6.排序--\n");
- printf(" -----7.刪除--\n");
- printf(" -----8.插入--\n");
- printf(" -----9.修改--\n");
- printf(" -----0.退出--\n");
- printf(" -----------------------------\n");
- switch(getche())
- {case '1':shuru();break;
- case '2':shuchu();break;
- case '3':chaxun();break;
- case '4':qiuping();break;
- case '5':qiuzong();break;
- case '6':paixu();break;
- case '7':shanchu();break;
- case '8':charu();break;
- case '9':xiugai();break;
- case '0':chuwen();
- printf("\n\n 正在退出.....");delay(10000);
- exit(0);break;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;
- }
- }
- fcloseall();}
- shuru()
- {
- while(1)
- {clrscr();
- printf("--1.從屏幕輸入--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getche())
- {case '1':pinru();break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}
-
- }}
- pinru()
- {char yn;
- int i,j;char name1[20],xh1[20];float p[15];
- while(1){
- q:clrscr();
- fflush(stdin);
- printf("請輸入姓名:");
- gets(name1);
- printf("請輸入學號:");
- gets(xh1);
- fflush(stdin);
- for(i=0;i<clen;i++)
- {printf("請輸入%s成績:",course[i]);
- scanf("%f",&p[i]);fflush(stdin);}
- if(name1[0]=='\0'||name1[0]=='\n'||xh1[0]=='\0'||xh1[0]=='\n')
- {printf("\n\n 輸入錯誤,請按任意鍵重輸!\n");getch();goto q;}
- printf("\n\n 確認要讀入這些數(shù)據(jù)嗎(Y/N)");
- yn=getche();
- if(yn=='y'||yn=='Y')
- {strcpy(student[len].name,name1);
- strcpy(student[len].xh,xh1);
- for(i=clen-1;i>=0;i--)
- student[len].score[i]=p[i];
- len++;}
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- shuchu()
- {
- while(1)
- {clrscr();
- printf("--1.輸出到屏幕--\n");
- printf("--2.輸出到文件--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getche())
- {case '1':chupin();break;
- case '2':chuwen();break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}
- }
- }
- chupin()
- {char yn;
- int i,j,k=0,m=1;
- while(1)
- {clrscr();
- if(len==0)
- {printf("\n\n 無記錄!\n");
- printf("按任意鍵返回...\n");
- getch();
- break;}
- a: printf("\nNO. 姓名 學號 ");
- for(i=0;i<clen;i++)
- printf("%s ",course[i]);
- printf("總成績 平均分 \n");
- for(;k<len;k++)
- {printf("%-4d%-18s%-18s",m++,student[k].name,student[k].xh);
- for(j=0;j<clen;j++)
- printf("%-10.2f",student[k].score[j]);
- printf("%-10.2f%-10.2f",student[k].zf,student[k].pj);
- printf("\n\n");
- if(k%6==0&&k!=0){
- printf("按任意鍵繼續(xù)....");
- getch();
- clrscr();
- k++;
- goto a;}}
- printf("\n\n\n 還想在瀏覽一遍嗎(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;
- else {i=k=0;m=1;}
- }
- }
- chuwen()
- {char yn;
- int k;
- f=fopen("chengji.dat","wb+");
- for(k=0;k<len;k++)
- fwrite(&student[k],sizeof(struct stu),1,f);
- printf("\n\n\n 按任意鍵結(jié)束 ......");
- getch();
- fclose(f);}
- chaxun()
- {
- while(1)
- {clrscr();
- printf("--1.按學號查詢--\n");
- printf("--2.按姓名查詢--\n");
- printf("--3.按成績查詢--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getche())
- {case '1':chaxue();break;
- case '2':chaxing(); break;
- case '3':chacheng(); break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}
- }}
- chaxue()
- {
- while(1){clrscr();
- printf(" ----1.精確查詢----\n");
- printf(" ----2.模糊查詢----\n");
- printf(" ----0.返回上一級菜單----\n");
- switch(getch())
- {case '1':jingxue();break;
- case '2':moxue();break;
- case '0':return;}}}
- jingxue()
- {int i,p=0;
- char xh1[20],yn;
- while(1)
- {clrscr();
- printf("\n 請輸入要查詢的學號:");
- gets(xh1);
- fflush(stdin);
- clrscr();
- printf(" 查詢結(jié)果如下:\n");
- for(i=0;i<len;i++)
- if(strcmp(xh1,student[i].xh)==0)
- {p++; chashu(i,p); }
- if(p==0) printf("\n\n 無此記錄!\n");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- moxue()
- {int i,j=0,k,p=0,flag,m=0;
- char xh1[20],yn;
- while(1)
- {clrscr();
- printf("\n 請輸入要查詢的學號或?qū)W號的子串:");
- gets(xh1);
- fflush(stdin);
- clrscr();
- printf(" 查詢結(jié)果如下:\n");
- for(i=0;i<len;i++)
- {m=0;flag=0;
- while(student[i].xh[m]!='\0')
- {j=m;k=0;
- while(student[i].xh[j]==xh1[k])
- {j++;k++;
- if(xh1[k]=='\0') {flag=1;break;}}
- if(flag) {p++; chashu(i,p);break; }
- m++;}}
- if(p==0) printf("\n\n 無此記錄!\n");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- chaxing()
- {
- while(1){clrscr();
- printf(" ----1.精確查詢----\n");
- printf(" ----2.模糊查詢----\n");
- printf(" ----0.返回上一級菜單----\n");
- switch(getch())
- {case '1':jingxing();break;
- case '2':moxing();break;
- case '0':return;}}}
- jingxing()
- {int i,p=0;
- char xm1[20],yn;
- while(1)
- {clrscr();
- printf("\n 請輸入要查詢的姓名:");
- gets(xm1);
- fflush(stdin);
- clrscr();
- printf(" 查詢結(jié)果如下:\n");
- for(i=0;i<len;i++)
- if(strcmp(xm1,student[i].name)==0)
- {p++; chashu(i,p); }
- if(p==0) printf("\n\n 無此記錄!\n");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- moxing()
- {int i,j=0,k,p=0,flag,m=0;
- char xm1[20],yn;
- while(1)
- {clrscr();
- printf("\n 請輸入要查詢的姓名或姓名的子串:");
- gets(xm1);
- fflush(stdin);
- clrscr();
- printf(" 查詢結(jié)果如下:\n");
- for(i=0;i<len;i++)
- {m=0;flag=0;
- while(student[i].name[m]!='\0')
- {j=m;k=0;
- while(student[i].name[j]==xm1[k])
- {j++;k++;
- if(xm1[k]=='\0') {flag=1;break;}}
- if(flag) {p++; chashu(i,p);break; }
- m++;}}
- if(p==0) printf("\n\n 無此記錄!\n");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- chacheng()
- {
- while(1){clrscr();
- printf(" ----1.查詢平均分----\n");
- printf(" ----2.查詢總成績----\n");
- printf(" ---3.查詢某門課成績----\n");
- printf(" ----0.返回上一級菜單----\n");
- switch(getch())
- {case '1':chaping();break;
- case '2':chazong();break;
- case '3':chakecheng();break;
- case '0':return;}}}
- chaping()
- {
- clrscr();
- printf(" 總成績查詢\n");
- printf("\n 請選擇以下操作功能\n");
- printf("1. > \n");
- printf("2. >= \n");
- printf("3. < \n");
- printf("4. <= \n");
- printf("5. != \n");
- printf("6. == \n");
- printf("7. between(成績1,成績2) \n");
- s: switch(getch())
- {case '1':dayu(-1,1);break;
- case '2':dadeng(-1,1);break;
- case '3':xiaoyu(-1,1);break;
- case '4':xiaodeng(-1,1);break;
- case '5':budeng(-1,1);break;
- case '6':deng(-1,1);break;
- case '7':between(-1,1);break;
- default:printf("按鍵錯誤,請按任意鍵返回重選擇功能!");
- getch();goto s;}
- }
- chazong()
- {
- clrscr();
- printf(" 平均分查詢\n");
- printf("\n 請選擇以下操作功能\n");
- printf("1. > \n");
- printf("2. >= \n");
- printf("3. < \n");
- printf("4. <= \n");
- printf("5. != \n");
- printf("6. == \n");
- printf("7. between(成績1,成績2) \n");
- s: switch(getch())
- {case '1':dayu(-1,2);break;
- case '2':dadeng(-1,2);break;
- case '3':xiaoyu(-1,2);break;
- case '4':xiaodeng(-1,2);break;
- case '5':budeng(-1,2);break;
- case '6':deng(-1,2);break;
- case '7':between(-1,2);break;
- default:printf("按鍵錯誤,請按任意鍵返回重選擇功能!");
- getch();
- goto s;}}
- chakecheng()
- {int i=0,d,k=1;
- clrscr();
- printf(" 課程如下:\n");
- A: for(;i<clen;i++)
- {printf("%d. %s\n",k++,course[i]);
- if((i+1)%10==0)
- {printf(" 按任意鍵繼續(xù)...");getch();i++;goto A;}}
- printf(" 請選擇要求平均分的的課程編號");
- printf("(1--%d):",clen);
- scanf("%d",&d);
- if(d>clen||d<1)
- {printf("\n\n課程編號錯誤,請按任意鍵重輸\n\n");
- getch();
- clrscr();
- goto A;}
- S: clrscr();
- printf("\n 請選擇以下操作功能\n");
- printf("1. > \n");
- printf("2. >= \n");
- printf("3. < \n");
- printf("4. <= \n");
- printf("5. != \n");
- printf("6. == \n");
- printf("7. between(成績1,成績2) \n");
- switch(getch())
- {case '1':dayu(d-1,3);break;
- case '2':dadeng(d-1,3);break;
- case '3':xiaoyu(d-1,3);break;
- case '4':xiaodeng(d-1,3);break;
- case '5':budeng(d-1,3);break;
- case '6':deng(d-1,3);break;
- case '7':between(d-1,3);break;
- default:printf("按鍵錯誤,請按任意鍵返回重選擇功能!");
- getch();
- goto S;}}
- dayu(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("請輸入要查詢的%s成績:",course[i]);
- else if(flag==2)printf("請輸入要查詢的總成績:");
- else if(flag==1)printf("請輸入要查詢的平均成績:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]>cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf>cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj>cj)
- {p++;chashu(k,p);}}
- if(p==0) printf("無符合條件的記錄!");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- dadeng(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("請輸入要查詢的%s成績:",course[i]);
- else if(flag==2)printf("請輸入要查詢的總成績:");
- else if(flag==1)printf("請輸入要查詢的平均成績:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]>=cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf>=cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj>=cj)
- {p++;chashu(k,p);}}
- if(p==0)printf("無符合條件的記錄!");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiaoyu(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("請輸入要查詢的%s成績:",course[i]);
- else if(flag==2)printf("請輸入要查詢的總成績:");
- else if(flag==1)printf("請輸入要查詢的平均成績:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]<cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf<cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj<cj)
- {p++;chashu(k,p);}}
- if(p==0)printf("無符合條件的記錄!");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiaodeng(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("請輸入要查詢的%s成績:",course[i]);
- else if(flag==2)printf("請輸入要查詢的總成績:");
- else if(flag==1)printf("請輸入要查詢的平均成績:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]<=cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf<=cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj<=cj)
- {p++;chashu(i,p);}}
- if(p==0)printf("無符合條件的記錄!");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- budeng(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("請輸入要查詢的%s成績:",course[i]);
- else if(flag==2)printf("請輸入要查詢的總成績:");
- else if(flag==1)printf("請輸入要查詢的平均成績:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]!=cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf!=cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj!=cj)
- {p++;chashu(k,p);}}
- if(p==0)printf("無符合條件的記錄!");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- deng(int i,int flag)
- {int k,p=0;
- char yn;
- float cj;
- while(1)
- {clrscr();p=0;
- if(flag==3)printf("請輸入要查詢的%s成績:",course[i]);
- else if(flag==2)printf("請輸入要查詢的總成績:");
- else if(flag==1)printf("請輸入要查詢的平均成績:");
- scanf("%f",&cj);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]==cj)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf==cj)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj==cj)
- {p++;chashu(k,p);}}
- if(p==0)printf("無符合條件的記錄!");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- between(int i,int flag)
- {int k,p=0;
- char yn;
- float cj1,cj2;
- while(1)
- {clrscr();p=0;
- printf("輸入的 ”成績1“ 一定要小于 “成績2“\n");
- printf("請輸入要查詢的%s成績1:",course[i]);
- scanf("%f",&cj1);
- printf("請輸入要查詢的%s成績2:",course[i]);
- scanf("%f",&cj2);
- for(k=0;k<len;k++)
- { if(flag==3)
- if(student[k].score[i]>=cj1&&student[k].score[i]<=cj1)
- {p++;chashu(k,p);}
- if(flag==2)
- if(student[k].zf>=cj1&&student[k].zf<=cj1)
- {p++;chashu(k,p);}
- if(flag==1)
- if(student[k].pj>=cj1&&student[k].pj<=cj1)
- {p++;chashu(k,p);}}
- if(p==0)printf("無符合條件的記錄!");
- printf("\n\n 還繼續(xù)嗎(Y/N).....");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- chashu(int i,int p)
- {int k;
- if(p%5==0){printf("按任意鍵繼續(xù).....");getch();clrscr();}
- printf("\nNO. 姓名 學號 ");
- for(k=0;k<clen;k++)
- printf("%s ",course[k]);
- printf("總成績 平均分 \n");
- printf("%-4d%-18s%-18s",i+1,student[i].name,student[i].xh);
- for(k=0;k<clen;k++)
- printf("%-10.2f",student[i].score[k]);
- printf("%-10.2f%-10.2f",student[i].zf,student[i].pj);
- printf("\n\n");
- }
- qiuping()
- {
- while(1)
- {clrscr();
- printf("--1.求個人平均--\n");
- printf("--2.求集體平均--\n");
- printf("--3.某門課的平均--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getche())
- {case '1':pingge();break;
- case '2':pingji();break;
- case '3':pingmen();break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}}}
- pingmen()
- {int i=0,j,k=1,d;
- char yn;
- double zf1=0;
- while(1){
- clrscr();
- printf(" 課程如下:\n");
- A:for(;i<clen;i++)
- {printf("%d. %s\n",k++,course[i]);
- if((i+1)%10==0)
- {printf(" 按任意鍵繼續(xù)...");getch();i++;goto A;}}
- f:printf(" 請選擇要求平均分的的課程編號");
- printf("(1--%d):",clen);
- scanf("%d",&d);
- if(d>clen||d<1)
- {printf("\n課程編號錯誤,請按任意鍵重輸\n");getch(); clrscr(); goto f;}
- for(i=0;i<len;i++)
- zf1+=student[i].score[d-1];
- printf("\n班級的%s平均分為:\n",course[d-1]);
- printf(" %-10.2f",zf1/len);
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}
- printf("\n\n按任意鍵返回菜單....");
- getch();
- }
-
- pingge()
- {int i,j,k=0,m=1;char yn;
- clrscr();
- for(i=0;i<len;i++)
- {student[i].zf=0;
- for(j=0;j<clen;j++)
- student[i].zf+=student[i].score[i];
- student[i].pj=student[i].zf/(clen-1);}
- printf("\n\n 計算完畢,輸出嗎(Y/N)");
- yn=getch();
- a:if(!(yn=='y'||yn=='Y'))
- return;
- else
- {printf("\nNO. 姓名 學號 平均分\n");
- for(;k<len;k++)
- {printf("%-4d%-18s%-18s",m++,student[k].name,student[k].xh);
- printf("%-10.2f",student[k].pj);
- printf("\n\n");
- if(k%8==0&&k!=0){
- printf("按任意鍵繼續(xù)....");
- getch();
- clrscr();
- k++;
- goto a;}}
- printf("\n\n\n 還想在瀏覽一遍嗎(Y/N)");
- yn=getche();
- if(yn=='y'||yn=='Y')
- {k=0;m=1;clrscr();goto a;}}}
- pingji()
- {double zf1=0;
- int i,j;
- clrscr();
- for(i=0;i<len;i++)
- {student[i].zf=0;
- for(j=0;j<clen;j++)
- student[i].zf+=student[i].score[i];}
- for(i=0;i<len;i++)
- zf1+=student[i].zf;
- zf1/=(clen-1);
- printf("\n 正在計算,請稍后.......\n");
- delay(100000);
- delay(100000);
- printf("\n\n 班級平均分為:\n");
- printf(" %.4f",zf1);
- printf("\n\n按任意鍵返回菜單....");
- getch();}
-
-
- qiuzong()
- {while(1)
- {clrscr();
- printf("--1.求個人總成績--\n");
- printf("--2.求集體總成績--\n");
- printf("--3.某門課的總成績--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getche())
- {case '1':zongge();break;
- case '2':zongji();break;
- case '3':menzong();break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}}}
- menzong()
- {int i=0,j,k=1,d;
- char yn;
- double zf1=0;
- while(1){
- clrscr();
- printf(" 課程如下:\n");
- A:for(;i<clen;i++)
- {printf("%d. %s\n",k++,course[i]);
- if((i+1)%10==0)
- {printf(" 按任意鍵繼續(xù)...");getch();i++;goto A;}}
- f:printf(" 請選擇要匯總的的課程編號");
- printf("(1--%d):",clen);
- scanf("%d",&d);
- if(d>clen||d<1)
- {printf("\n課程編號錯誤,請按任意鍵重輸\n");getch(); clrscr(); goto f;}
- for(i=0;i<len;i++)
- zf1+=student[i].score[d-1];
- printf("\n班級的%s總成績?yōu)椋篭n",course[d-1]);
- printf(" %-10.2f",zf1);
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}
- printf("\n\n按任意鍵返回菜單....");
- getch();
- }
-
-
- zongge()
- {int i,j,k=0,m=1;char yn;
- clrscr();
- for(i=0;i<len;i++)
- {student[i].zf=0;
- for(j=0;j<clen;j++)
- student[i].zf+=student[i].score[i];
- printf("\n\n 計算完畢,輸出嗎(Y/N)");
- yn=getch();
- a: if(!(yn=='y'||yn=='Y'))
- return;
- else
- {printf("\nNO. 姓名 學號 總成績\n");
- for(;k<len;k++)
- {printf("%-4d%-18s%-18s",m++,student[k].name,student[k].xh);
- printf("%-10.2f",student[k].zf);
- printf("\n\n");
- if(k%8==0&&k!=0)
- {
- printf("按任意鍵繼續(xù)....");
- getch();
- clrscr();
- k++;
- goto a;}}
-
- printf("\n\n\n 還想在瀏覽一遍嗎(Y/N)");
- yn=getche();
- if(yn=='y'||yn=='Y')
- {k=0;m=1;clrscr();goto a;}}}}
- zongji()
- {int i,j;char yn;
- double zf1=0;
- clrscr();
- for(i=0;i<len;i++)
- {student[i].zf=0;
- for(j=0;j<clen;j++)
- student[i].zf+=student[i].score[i];
- zf1+=student[i].zf;}
- printf("\n 正在計算,請稍后.......\n");
- delay(100000);
- delay(100000);
- printf("\n\n 班級總成績?yōu)椋篭n");
- printf(" %.4f",zf1);
- printf("\n\n按任意鍵返回菜單....");
- getch();}
-
- shanchu()
- {
- while(1)
- {clrscr();
- printf("--1.刪除整條記錄--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getche())
- {case '1':shanquan();break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}}}
- shanquan()
- {int i,m,j;
- char yn;
- while(1)
- {clrscr();
- if(len==0){printf("\n 無記錄! 按任意鍵結(jié)束..");getch();break;}
- printf("請輸入要刪除的記錄號");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("\n\n 記錄號錯誤,請按任意鍵重輸");getch();continue;}
- printf("\n");
- printf("\n\n 確認要刪出該記錄嗎(Y/N)\n");
- yn=getch();
- if(yn=='y'||yn=='Y')
- for(i=m-1;i<len;i++)
- {strcpy(student[i].name,student[i+1].name);
- strcpy(student[i].xh,student[i+1].xh);
- for(j=0;j<clen;j++)
- {student[i].score[j]=student[i+1].score[j];}
- student[i].pj=student[i+1].pj;
- student[i].zf=student[i+1].zf;
- printf("\n 正在刪除.......\n");
- delay(100000);
- delay(100000);
- printf("\n\n 已刪除!\n");
- len--;}
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- charu()
- {
- while(1)
- {clrscr();
- printf("\n-- 1.插入記錄--\n");
- printf("-- 0.返回上一級菜單--\n");
- switch(getche())
- {case '1':cha();break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}}}
- cha()
- {int i,m=0,j,flag;
- char yn;
- while(1)
- {clrscr();flag=0;
- if(len==0){printf("\n 無記錄! 只能插在一號記錄上\n");
- printf("\n\n 插入嗎?(Y/N)\n");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))break;
- else
- {flag=1;}}
- else{
- A: printf("請輸入要插入的記錄號位置");
- printf("(1--%d):",len+1);
- scanf("%d",&m);fflush(stdin);
- printf("\n確定嗎(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- flag=1;}
- if(flag==1)
- if(m==0&&len==0)
- {len=1;
- printf("是否輸入數(shù)據(jù)?(Y/N)");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))break;
- else charushu(0);}
- else
- {if(m>len+1||m<1)
- {printf("\n\n 記錄號錯誤,請按任意鍵重輸!");getch();continue;}
- yidong(m-1);
- printf("是否輸入數(shù)據(jù)?(Y/N)");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))break;
- else charushu(m-1);}
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;
- }}
- yidong(int i)
- {int j,k;
- for(j=len;j>i;j--)
- {strcpy(student[j].name,student[j-1].name);
- strcpy(student[j].xh,student[j-1].xh);
- for(k=0;k<clen;k++)
- student[j].score[k]=student[j-1].score[k];
- student[j].zf=student[j-1].zf;
- student[j].pj=student[j].pj;}
- {strcpy(student[i].name,"");
- strcpy(student[i].xh,"");
- for(k=0;k<clen;k++)
- student[i].score[k]=0;
- student[i].zf=0;
- student[i].pj=0;}
- }
- charushu(int j)
- {int i;
- char name[20],xh[20];
- float score[20];
- char yn;
- while(1){clrscr();
- printf(" 請輸入姓名:");
- gets(name);
- printf(" 請輸入學號:");
- gets(xh);
- for(i=0;i<clen;i++)
- {printf(" 請輸入%s成績:",course[i]);
- scanf("%f",&score[i]);}
- printf("\n對輸入的數(shù)據(jù)確定嗎(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- {strcpy(student[j].name,name);
- strcpy(student[j].xh,xh);
- for(i=0;i<clen;i++)
- student[j].score[i]=score[i];
- break;}
- else
- {printf("\n 重新輸入?(Y/N)\n");
- yn=getch();
- if(!(yn=='y'||yn=='Y'))
- break;}
- }}
- paixu()
- {while(1)
- {clrscr();
- printf("--1.按學號排序--\n");
- printf("--2.按姓名排序--\n");
- printf("--3.按成績排序--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getche())
- {case '1':xuepai();break;
- case '2':nmpai(); break;
- case '3':cjpai();break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}}}
- xuepai()
- {int i,j,flag;
- char yn;
- a: clrscr();
- printf("-------按學號排序--------\n");
- printf("--1.按學號升序--\n");
- printf("--2.按學號降序--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getch())
- {case '1':flag=1;break;
- case '2':flag=2;break;
- case '0':return;
- default:printf("按鍵錯誤,請按任意鍵返回重選功能.");
- getch();goto a;}
- for(i=0;i<len;i++)
- for(j=len-1;j>=i+1;j--)
- if(flag==1)
- { if(strcmp(student[j-1].name,student[j].name)>0)
- jiaohuan(j);}
- else
- if(strcmp(student[j-1].name,student[j].name)<0)
- jiaohuan(j);
- printf("\n\n 想看一下排序結(jié)果嗎(Y/N)?");
- yn=getch();
- if(yn=='y'||yn=='Y')
- chupin();}
- nmpai()
- {int i,j,flag;char yn;
- a: clrscr();
- printf("-------按姓名排序--------\n");
- printf("--1.按姓名升序--\n");
- printf("--2.按姓名降序--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getch())
- {case '1':flag=1;break;
- case '2':flag=2;break;
- case '0':return;
- default:printf("按鍵錯誤,請按任意鍵返回重選功能.");
- getch();goto a;}
- for(i=0;i<len;i++)
- for(j=len-1;j>=i+1;j--)
- if(flag==1)
- {if(strcmp(student[j-1].name,student[j].name)>0)
- jiaohuan(j);}
- else
- if(strcmp(student[j-1].name,student[j].name)<0)
- jiaohuan(j);
- printf("\n\n 想看一下排序結(jié)果嗎(Y/N)?");
- yn=getch();
- if(yn=='y'||yn=='Y')
- chupin();}
- cjpai()
- {int k=1,d,i,m=0,j,flag;
- char yn;
- a: clrscr();
- printf("-------按成績排序--------\n");
- printf("--1.按成績升序--\n");
- printf("--2.按成績降序--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getch())
- {case '1':flag=1;break;
- case '2':flag=2;break;
- case '0':return;
- default:printf("按鍵錯誤,請按任意鍵返回重選功能.");
- getch();goto a;}
- printf("\n 課程如下:\n");
- A:for(;m<clen;m++)
- {printf("%d. %s\n",k++,course[m]);
- if((m+1)%10==0)
- {printf("\n 按任意鍵繼續(xù)...");getch();m++;goto A;}}
- if((m+2)%10==0)
- {printf("\n 按任意鍵繼續(xù)...");getch();goto A;}
- printf("%d. 平均分\n%d 總成績\n",m+1,m+2);
- f:printf("\n\n 請選擇要排序的的課程編號");
- printf("(1--%d):",clen+2);
- scanf("%d",&d);
- if(d>clen+2||d<1)
- {printf("\n課程編號錯誤,請按任意鍵重輸\n");getch(); clrscr(); goto f;}
- for(i=0;i<len;i++)
- for(j=len-1;j>=i+1;j--)
- if(d==(clen+1))
- {if(flag==1)
- {if(student[j-1].pj>student[j].pj)
- jiaohuan(j);}
- else
- if(student[j-1].pj<student[j].pj)
- jiaohuan(j);}
- else if(d==(clen+2))
- {if(flag==1)
- {if(student[j-1].zf>student[j].zf)
- jiaohuan(j);}
- else
- if(student[j-1].zf<student[j].zf)
- jiaohuan(j);}
- else
- { if(flag==1)
- {if(student[j-1].score[d]>student[j].score[d])
- jiaohuan(j);}
- else
- if(student[j-1].score[d]<student[j].score[d])
- jiaohuan(j);}
- printf("\n\n 想看一下排序結(jié)果嗎(Y/N)?");
- yn=getch();
- if(yn=='y'||yn=='Y')
- chupin();}
- jiaohuan(int j)
- {char p[20];
- int i;
- float f;
- strcpy(p,student[j].name);
- strcpy(student[j].name,student[j-1].name);
- strcpy(student[j-1].name,p);
- strcpy(p,student[j].xh);
- strcpy(student[j].xh,student[j-1].xh);
- strcpy(student[j-1].xh,p);
- for(i=0;i<clen;i++)
- {f=student[j].score[i];
- student[j].score[i]=student[j-1].score[i];
- student[j-1].score[i]=f;}
- f=student[j].pj;
- student[j].pj=student[j-1].pj;
- student[j-1].pj=f;
- f=student[j].zf;
- student[j].zf=student[j-1].zf;
- student[j-1].zf=f;
- }
- chushihua()
- {if((f=fopen("chengji.dat","rb"))!=NULL)
- {while(!feof(f))
- fread(&student[len++],sizeof(struct stu),1,f);
- fclose(f);
- }
- else {printf(" 文件不存在,請創(chuàng)建chengji.dat文件!\n");
- printf("注意事項請參看readme.txt\n");
- delay(100000);
- delay(100000);
- exit(0);}
- }
- xiugai()
- {while(1)
- {clrscr();
- printf("--1.修改學號--\n");
- printf("--2.修改姓名--\n");
- printf("--3.修改成績--\n");
- printf("--4.全部修改--\n");
- printf("--0.返回上一級菜單--\n");
- switch(getche())
- {case '1':xiuxue();break;
- case '2':xiuxing(); break;
- case '3':xiucheng();break;
- case '4':xiuquan();break;
- case '0':return;
- default:printf("輸入錯誤!\n");
- printf("請重選按鍵選擇菜單.\n按任意鍵返回!\n");
- getche();
- continue;}}}
- xiuquan()
- {int i,m;
- char name[20],xh[20];
- float score[20];
- char yn;
- while(1){
- if(len==0){printf("無記錄! 按任意鍵結(jié)束..");getch();break;}
- printf("請輸入要修改的記錄號");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("記錄號錯誤,請按任意鍵重輸");getch();continue;}
- printf("\n");
- printf("\n 姓名現(xiàn)有值為: %s\n",student[m-1].name);
- printf(" 請輸入修改值:");
- gets(name);
- printf("\n 學號現(xiàn)有值為: %s\n",student[m-1].name);
- printf(" 請輸入修改值:");
- gets(xh);
- for(i=0;i<clen;i++)
- {printf("\n %s現(xiàn)有值為: %f\n",course[i],student[m-1].score[i]);
- printf(" 請輸入修改值:");
- scanf("%f",&score[i]);}
- printf("\n對輸入的數(shù)據(jù)確定嗎(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- {strcpy(student[m-1].name,name);
- strcpy(student[m-1].xh,xh);
- for(i=0;i<clen;i++)
- student[m-1].score[i]=score[i];}
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiucheng()
- {int i,m,d,k=1;
- float f;char yn;
- while(1)
- {clrscr();
- if(len==0){printf("無記錄! 按任意鍵結(jié)束..");getch();break;}
- printf("請輸入要修改的記錄號");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("記錄號錯誤,請按任意鍵重輸");getch();continue;}
- printf("\n");
- A:for(i=0;i<clen;i++)
- {printf("%d. %s\n",k++,course[i]);
- if((i+1)%10==0)
- {printf(" 按任意鍵繼續(xù)...");getch();k++;goto A;}}
- printf(" 請選擇要修改的課程編號");
- printf("(1--%d):",clen);
- scanf("%d",&d);
- if(d>clen||d<1){printf("課程編號錯誤,請按任意鍵重輸");getch();continue;}
- printf("\n 現(xiàn)有值為:%.2f\n\n",student[m-1].score[d-1]);
- printf(" 請輸入修改值:");
- scanf("%f",&f);
- printf("\n確定嗎(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- student[m-1].score[d-1]=f;
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiuxue()
- {int i,m,d;
- char xue[20];char yn;
- while(1)
- {clrscr();
- if(len==0){printf("無記錄! 按任意鍵結(jié)束..");getch();break;}
- printf("請輸入要修改的記錄號");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("記錄號錯誤,請按任意鍵重輸");getch();continue;}
- printf("\n");
- printf("\n 學號現(xiàn)有值為:%s\n\n",student[m-1].xh);
- printf(" 請輸入修改值:");
- gets(xue);
- printf("\n確定嗎(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- strcpy(student[m-1].xh,xue);
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- xiuxing()
- {int i,m,d;
- char nm[20];char yn;
- while(1)
- {clrscr();
- if(len==0){printf("無記錄! 按任意鍵結(jié)束..");getch();break;}
- if(len==0){printf("無記錄! 按任意鍵結(jié)束..");getch();break;}
- printf("請輸入要修改的記錄號");
- printf("(1--%d):",len);
- scanf("%d",&m);fflush(stdin);
- if(m>len||m<1){printf("記錄號錯誤,請按任意鍵重輸");getch();continue;}
- printf("\n");
- printf("\n 姓名現(xiàn)有值為:%s\n\n",student[m-1].name);
- printf(" 請輸入修改值:");
- gets(nm);
- printf("\n確定嗎(Y/N)");
- yn=getch();
- if(yn=='y'||yn=='Y')
- strcpy(student[m-1].name,nm);
- printf("\n\n 還繼續(xù)嗎?(Y/N)");
- yn=getche();
- if(!(yn=='y'||yn=='Y'))
- break;}}
- zhuzuo()
- {clrscr();
- printf("\n\n\n\n\n ------------------------------------------\n");
- printf(" -----歡迎使用學生成績管理系統(tǒng)-----\n");
- printf(" 版本:v1.0\n");
- printf(" 著作時間:2006.11.20\n");
- printf(" 作者:馬萬里\n");
- printf(" 地址:算計科學與工程學院\n");
- printf(" ------------------------------------------\n");
- printf(" 按任意鍵繼續(xù).....\n");
- getche();
- }
-
復(fù)制代碼
完整的Word格式文檔51黑下載地址:
C程序設(shè)計課程實踐.doc
(43 KB, 下載次數(shù): 13)
2017-12-28 09:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|