|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我自己试着编写一个简单的学生成绩查询系统。
现在main()函数里面的判断进不去。
进去了,5、6、7、8进去也会闪退。
哪位有空能帮我找一下原因吗?
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /*定义学生结构*/
- struct Student
- {
- char ID[20]; //学号
- char NAME[20]; //姓名
- //语文、数学、英语 成绩
- float C_Score;
- float M_Score;
- float E_Score;
- float CME_Score; //总分数
- };
- /*声明学生数组和数量*/
- struct Student Students[1000];
- int num = 0;
- /*通过学号返回数组下标*/
- int Student_SearchByIndex(char id[])
- {
- int i , r ;
- r = -1 ;
- for (i = 0 ; i < num ; i ++) {
- if (! strcmp(Students[i].ID, id)) {
- r = i ;
- break ;
- }
- }
- return r ;
- }
- /*通过姓名返回数组下标*/
- int Student_SearchByName(char name[])
- {
- int j , r ;
- r = -1 ;
- for (j = 0 ; j < num ; j ++) {
- if (! strcmp(Students[j].NAME , name)) {
- r = j ;
- break ;
- }
- }
- return r ;
- }
- /*显示单条学生信息*/
- void Student_DisplaySingle_Score(int index)
- {
- if(num > 0) {
- if(index >= 0 && index <= num - 1) {
- printf("学号:%10s\n", Students[index].ID) ;
- printf("姓名:%10s\n", Students[index].NAME) ;
- printf("语文成绩:%4f\n", Students[index].C_Score) ;
- printf("数学成绩:%4f\n", Students[index].M_Score) ;
- printf("英语成绩:%4f\n", Students[index].E_Score) ;
- printf("成绩总和:%4f\n", Students[index].CME_Score) ;
- printf("-----------------------------------------\n") ;
- } else {
- printf("序号越界!\n") ;
- }
- } else {
- printf("空数据表!\n") ;
- }
- }
- /***新增学生记录***/
- void Student_Insert()
- {
- char c ;
- while (1) {
- printf("请输入该学生学号:") ;
- scanf("%s", &Students[num].ID) ;
- printf("请输入该学生姓名:") ;
- scanf("%s", &Students[num].NAME) ;
- printf("请输入该学生语文成绩:") ;
- scanf("%f", &Students[num].C_Score) ;
- printf("请输入该学生数学成绩:") ;
- scanf("%f", &Students[num].M_Score) ;
- printf("请输入该学生英语成绩:") ;
- scanf("%f", &Students[num].E_Score) ;
- printf("该学生总成绩为:") ;
- scanf("%f", &Students[num].CME_Score) ;
- fflush(stdin) ;
- num ++ ;
- printf("是否继续?(Y/N),继续请按任意键,否则输入N:") ;
- c = getchar() ;
- if (c == 'N' || c == 'n') break ;
- }
- }
- /***修改学生信息***/
- void Student_Modify()
- {
- char id[20] , c ;
- int index ;
- if(num > 0) {
- while (1) {
- printf("请输入学生学号:") ;
- scanf("%s" , & id) ;
- fflush(stdin) ;
- index = Student_SearchByIndex(id) ;
- if (index == -1) printf("该学生不存在!") ;
- else {
- printf("您要修改的学生信息为:") ;
- Student_DisplaySingle_Score(index) ;
- printf("---请输入新值---") ;
- printf("请输入该学生学号:") ;
- scanf("%s", Students[index].ID) ;
- printf("请输入该学生姓名:") ;
- scanf("%s", Students[index].NAME) ;
- printf("请输入该学生语文成绩:") ;
- scanf("%f", Students[index].C_Score) ;
- printf("请输入该学生数学成绩:") ;
- scanf("%f", Students[index].M_Score) ;
- printf("请输入该学生英语成绩:") ;
- scanf("%f", Students[index].E_Score) ;
- fflush(stdin) ;
- printf("是否继续?(Y/N),继续请按任意键,否则输入N:") ;
- c = getchar() ;
- if (c == 'N' || c == 'n') break ;
- }
- }
- } else {
- printf("空数据表!\n") ;
- }
- }
- /***del学生信息***/
- void Student_Delete()
- {
- int i , j , index ;
- char id[20] , name[20] , c ;
- if(num > 0) {
- while (1) {
- printf("请输入学生学号:") ;
- scanf("%s" , & id) ;
- fflush(stdin) ;
- index = Student_SearchByIndex(id) ;
- if (index == -1) printf("该学生不存在!") ;
- else {
- printf("您要删除的学生信息为:") ;
- Student_DisplaySingle_Score(index) ;
- printf("是否真的要删除?(Y/N)") ;
- c = getchar() ;
- if (c == 'Y' || c == 'y') {
- if (index < num - 1) {
- for (i = index ; i < num ; i ++) Students[i] = Students[i + 1] ;
- }
- num -- ;
- }
- printf("删除成功。") ;
- }
- printf("是否继续?(Y/N),继续请按任意键,否则输入 N:") ;
- c = getchar() ;
- if (c == 'N' || c == 'n') break ;
- }
- } else {
- printf("空数据表!\n") ;
- }
- }
- /***查询学生信息***/
- void Student_Select()
- {
- int index ;
- char id[20] , c ;
- if(num > 0) {
- while (1) {
- printf("请输入查询学生的学号:") ;
- scanf("%s", id) ;
- fflush(stdin) ;
- index = Student_SearchByIndex(id) ;
- if (index == -1) printf("该学生不存在!") ;
- else {
- printf("你需要查询的信息为:") ;
- Student_DisplaySingle_Score(index) ;
- }
- printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
- c = getchar() ;
- if (c == 'N' || c== 'n') break ;
- }
- } else {
- printf("空数据表!\n") ;
- }
- }
- /***单个成绩排序***/
- /**---C---**/
- void Student_Sort_C()
- {
- int i , j ;
- struct Student tmp ;
- for (i = 1 ; i < num ; i ++) {
- j = i ;
- while (j > 0) {
- if (Students[j - 1] . C_Score < Students[j] . C_Score) {
- tmp = Students[j - 1] ;
- Students[j - 1] = Students[j] ;
- Students[j] = tmp ;
- j -- ;
- } else break ;
- }
- }
- }
- /**---M---**/
- void Student_Sort_M()
- {
- int i , j ;
- struct Student tmp ;
- for (i = 1 ; i < num ; i ++) {
- j = i ;
- while(j > 0) {
- if (Students[j - 1] . M_Score < Students[j] . M_Score) {
- tmp = Students[j - 1] ;
- Students[j - 1] = Students[j] ;
- Students[j] = tmp ;
- j -- ;
- } else break ;
- }
- }
- }
- /**---E---**/
- void Student_Sort_E()
- {
- int i , j ;
- struct Student tmp ;
- for (i = 1 ; i < num ; i ++) {
- j = i ;
- while(j > 0) {
- if (Students[j - 1] . E_Score < Students[j] . E_Score) {
- tmp = Students[j - 1] ;
- Students[j - 1] = Students[j] ;
- Students[j] = tmp ;
- j -- ;
- } else break ;
- }
- }
- }
- /**总成绩排序**/
- void Student_Sort_CME()
- {
- int i , j ;
- struct Student tmp ;
- for (i = 1 ; i < num ; i ++) {
- j = i ;
- while (j > 0) {
- if (Students[j - 1] . CME_Score < Students[j] . CME_Score) {
- tmp = Students[j - 1] ;
- Students[j - 1] = Students[j] ;
- Students[j] = tmp ;
- j -- ;
- } else break ;
- }
- }
- }
- /***显示所有学生信息***/
- void Student_display()
- {
- int i ;
- for (i = 0 ; i < num ; i ++) {
- Student_DisplaySingle_Score(i) ;
- printf("-----------------------------------------\n") ;
- }
- }
- /***从文件Student_info.txt中读取学生信息***/
- Read_Student_info()
- {
- FILE * fp ;
- int i , r ;
- r = -1 ;
- if ((fp = fopen("Student_info.txt", "rb")) != NULL) {
- if (fread(& num , sizeof(int) , 1 , fp) == 1) {
- for (i = 0 ; i < num ; i ++) fread(& Students[i] , sizeof(struct Student) , 1 , fp) ;
- r = 0 ;
- } else fprintf(stderr , "文件读取错误!\n") ;
- fclose(fp) ;
- } else fprintf(stderr , "不能打开文件!\n") ;
- return r ;
- }
- /****将学生信息写入Student_info.txt文件中****/
- Write_Student_info()
- {
- FILE * fp ;
- int i , r ;
- r = -1 ;
- if ((fp = fopen("Student_info.txt", "wb")) != NULL) {
- if (fwrite(& num , sizeof(int) , 1 , fp) == 1) {
- for (i = 0; i < num; i ++) fwrite(&Students[i] , sizeof(struct Student) , 1 , fp) ;
- r = 0 ;
- } else fprintf(stderr , "文件写入错误!\n") ;
- fclose(fp) ;
- } else fprintf(stderr , "不能打开文件!\n") ;
- return r ;
- }
- main(void)
- {
- int chile ;
- float fute ;
- Read_Student_info() ;
- char c ;
- bool f ;
- f = true ;
- printf("请选择当前的职业(A:老师 B:学生):") ;
- c = getchar() ;
- if (c == 'A' || c == 'a') {
- while(f) {
- printf("*************学生成绩管理系统************\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("10.退出.\n") ;
- printf("请选择(1~10):") ;
- scanf("%d", & chile) ;
- fflush(stdin) ;
- switch (chile) {
- case 1:
- Student_Insert() ;
- break ;
- case 2:
- Student_Modify() ;
- break ;
- case 3:
- Student_Delete() ;
- break ;
- case 4:
- Student_Select() ;
- break ;
- case 5:
- Student_Sort_C() ;
- break ;
- case 6:
- Student_Sort_M() ;
- break ;
- case 7:
- Student_Sort_E() ;
- break ;
- case 8:
- Student_Sort_CME() ;
- break ;
- case 9:
- Student_display() ;
- break ;
- case 10:
- f = false ;
- break ;
- }
- Write_Student_info() ;
- }
- } else Student_Select() ;
- }
复制代码
|
|