学生成绩管理系统V3.0C
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h> #include<stdlib.h> /*分别定义分数,学号,学生个数为全局变量,便于在函数中使用*/ int score[100]; int number[100]; int num; void ChoseStep(int n); void Input(int score[],int number[]); int Calculate(int score[]); void SortByScore(int score[],int number[]); void SortByNum(int score[],int number[]); int Search(int a); int BinarySearch(int a[], int n, int key); int Static(int score[]); void OutPut(); void List(); void Modify(int num1); void Delete(int num1); int main() { int choice; printf(" 1. Input record\n 2. Calculate total and average score of course\n 3. Sort in decending order by score\n 4. Sort in decending order by number\n 5. Search by number\n 6. Static analysis\n 7. List record\n 8. Modify score by ID\n 9. Delete informatio in ID\n 0. Exit\n"); printf("\n"); while(1) { printf(" Please enter your choice:"); scanf("%d",&choice); ChoseStep(choice); } } /* 函数功能:读取输入指令执行相应步骤 函数入口参数:指令序号 函数返回值:无 */ void ChoseStep(int n) { int input; switch(n) {
int sco[100]; for (m = 0;m < num;m++) { sco[m] = score[m]; } for(m = 1;m < num;m++) { for(n = 0;n < num - m;n++) { if(sco[n] < sco[n + 1]) { t = sco[n]; sco[n] = sco[n + 1]; sco[n + 1] = t; } } } for(;number[i] != a && i != num;i++,j++); if(j == num) { printf(" ID of %d is not exist!\n",a); printf("\n"); return 0; } rank = BinarySearch(sco, num,score[j]) + 1; printf(" score of %d is: %d ,rank %d\n",a,score[j],rank); printf("\n"); } /* 函数功能:二分查找 函数入口参数:以排好序的数组、数组元素个数、待查找的值 函数返回值:待查找值的下标 */ int BinarySearch(int a[], int n, int key) { int low = 0; int high = n - 1; int mid,midVal; while(low <= high) { mid = (low + high)/2; midVal = a[mid]; if(midVal > key) low = mid + 1; else if(midVal < key)
case 0: exit(0); break; case 1: Input(score,number);break; case 2: Calculate(score);break; case 3: SortByScore(score,number); break; case 4: SortByNum(score,number); break; case 5: {printf(" Input ID of the student:");scanf("%d",&input);Search(input);} break; case 6: Static(score);break; case 7: List();break; case 8: {printf(" Input ID of the student to be modified:");scanf("%d",&input);Modify(input);} break; case 9: {printf(" Input ID of the student to be deleted:");scanf("%d",&input);Delete(input);} break; default: printf(" Input error!"); exit(0); break; } } /* 函数功能:录入每个学生的学号和考试成绩 函数入口参数:学号数组名和成绩数组名 函数返回值:无 */ void Input(int score[],int number[]) { int i; printf(" Input the number of students:"); scanf("%d",&num); printf(" Input student's ID and score:"); for( i = 0;i < num;i++) { scanf("%d%d",number + i,score + i); } printf("\n"); } /* 函数功能:计算并输出课程的总和和平均值 函数入口参数:成绩数组名 函数返回值:无 */ int Calculate(int score[]) { int sum = 0; float ave = 0; int i; for (i = 0;i < num;i++) { sum += *(score + i); } //利用指针间接访问数组内容 //利用指针实现输入数据
wenku.baidu.com
} printf("******************\n"); } /* 函数功能:按学号由小到大排出名次表并输出 函数入口参数:成绩数组名和学号数组名 函数返回值:无 */ void SortByNum(int score[],int number[]) { int i,j,t; int t1[30]; for (i = 0;i < num;i++) { *(t1+i) = i; } for(i = 1;i < num;i++) { for(j = 0;j < num - i;j++) { if(*(number+t1[j]) < *(number+t1[j + 1])) { t = *(t1+j); *(t1+j) = *(t1+j+1); *(t1+j+1) = t; } } } printf(" In decending order is:\n"); printf("******************\n"); printf("number score\n"); for(i = 0;i < num;i++) { printf(" %d %d\n",*(number+t1[i]),*(score+t1[i])); } printf("******************\n"); } /* 函数功能:用折半法按学号查询学生排名及其考试成绩 函数入口参数:待查学生学号 函数返回值:无 */ int Search(int a) { int i = 0,j = 0,m = 0,n = 0,t; int rank = 0;
high = mid - 1; else break; } return mid; } /* 函数功能:按优秀、良好、中等、及格、不及格五个类别,统计输出每个类别的人数及 所占的百分比 函数入口参数:成绩数组名 函数返回值:无 */ int Static(int score[]) { int n[10] = {0}; int i,mod; for(i = 0;i < num;i++) { mod = score[i] / 10; switch(mod) { case 9: (*(n+9))++; break; case 8: (*(n+8))++; break; case 7: (*(n+7))++; break; case 6: (*(n+6))++; break; default: (*(n+5))++; break; } } for (i = 9;i > 5;i--) { printf(" number between %d %d is %d,take %d%%\n",i*10,i*10+10,*(n+i),*(n+i)*100/num); } printf(" number between 0 - 59 is %d,take %d%%\n",*(n+5),*(n+i)*100/num); printf("\n"); } /* 函数功能:将成绩和学号的原始记录输出 函数入口参数:无 函数返回值:无 */ void OutPut() { int i; printf("******************\n"); printf("number score\n");
if(num != 0) { ave = sum * 1.0 / num; } else { printf("Error!\n"); return 0; } printf(" The sum of score is:%d\n",sum); printf(" The average of score is:%.2f\n",ave); printf("\n"); } /* 函数功能:按成绩由高到低排出名次表并输出 函数入口参数:成绩数组名和学号数组名 函数返回值:无 */ void SortByScore(int score[],int number[]) { int i,j,t; int t1[30]; //定义一个下标数组, 排序时不直接改变待排数组内数据顺序, 只改变本数组 内下标顺序 for (i = 0;i < num;i++) { *(t1 + i) = i; //利用指针赋值 } for(i = 1;i < num;i++) { for(j = 0;j < num - i;j++) { if(*(score+t1[j]) < *(score+t1[j + 1])) { t = *(t1+j); *(t1+j) = *(t1+j+1); *(t1+j+1) = t; } } } printf(" In decending order is:\n"); printf("******************\n"); printf("number score\n"); for(i = 0;i < num;i++) { printf(" %d %d\n",*(number+t1[i]),*(score+t1[i]));
for(i = 0;i < num;i++) { printf(" %d %d\n",*(number+i),*(score+i)); } printf("******************\n"); } /* 函数功能:将成绩和学号的原始记录及课程的总分和平均分输出 函数入口参数:无 函数返回值:无 */ void List() { OutPut(); Calculate(score); } /* 函数功能:按学号修改学生成绩 函数入口参数:学生学号 函数返回值:无 */ void Modify(int num1) { int chan; int i = 0,j = 0; printf(" input the new score:"); scanf("%d",&chan); for(;number[i] != num1;i++,j++); *(score+j) = chan; printf("\n"); } /* 函数功能:按学号删除学生成绩 函数入口参数:学生学号 函数返回值:无 */ void Delete(int num1) { int i = 0,j = 0; for(;*(number+i) != num1;i++,j++); if(j == num-1) { num -= 1; } else { for(i = j;i < num-1;i++)
int sco[100]; for (m = 0;m < num;m++) { sco[m] = score[m]; } for(m = 1;m < num;m++) { for(n = 0;n < num - m;n++) { if(sco[n] < sco[n + 1]) { t = sco[n]; sco[n] = sco[n + 1]; sco[n + 1] = t; } } } for(;number[i] != a && i != num;i++,j++); if(j == num) { printf(" ID of %d is not exist!\n",a); printf("\n"); return 0; } rank = BinarySearch(sco, num,score[j]) + 1; printf(" score of %d is: %d ,rank %d\n",a,score[j],rank); printf("\n"); } /* 函数功能:二分查找 函数入口参数:以排好序的数组、数组元素个数、待查找的值 函数返回值:待查找值的下标 */ int BinarySearch(int a[], int n, int key) { int low = 0; int high = n - 1; int mid,midVal; while(low <= high) { mid = (low + high)/2; midVal = a[mid]; if(midVal > key) low = mid + 1; else if(midVal < key)
case 0: exit(0); break; case 1: Input(score,number);break; case 2: Calculate(score);break; case 3: SortByScore(score,number); break; case 4: SortByNum(score,number); break; case 5: {printf(" Input ID of the student:");scanf("%d",&input);Search(input);} break; case 6: Static(score);break; case 7: List();break; case 8: {printf(" Input ID of the student to be modified:");scanf("%d",&input);Modify(input);} break; case 9: {printf(" Input ID of the student to be deleted:");scanf("%d",&input);Delete(input);} break; default: printf(" Input error!"); exit(0); break; } } /* 函数功能:录入每个学生的学号和考试成绩 函数入口参数:学号数组名和成绩数组名 函数返回值:无 */ void Input(int score[],int number[]) { int i; printf(" Input the number of students:"); scanf("%d",&num); printf(" Input student's ID and score:"); for( i = 0;i < num;i++) { scanf("%d%d",number + i,score + i); } printf("\n"); } /* 函数功能:计算并输出课程的总和和平均值 函数入口参数:成绩数组名 函数返回值:无 */ int Calculate(int score[]) { int sum = 0; float ave = 0; int i; for (i = 0;i < num;i++) { sum += *(score + i); } //利用指针间接访问数组内容 //利用指针实现输入数据
wenku.baidu.com
} printf("******************\n"); } /* 函数功能:按学号由小到大排出名次表并输出 函数入口参数:成绩数组名和学号数组名 函数返回值:无 */ void SortByNum(int score[],int number[]) { int i,j,t; int t1[30]; for (i = 0;i < num;i++) { *(t1+i) = i; } for(i = 1;i < num;i++) { for(j = 0;j < num - i;j++) { if(*(number+t1[j]) < *(number+t1[j + 1])) { t = *(t1+j); *(t1+j) = *(t1+j+1); *(t1+j+1) = t; } } } printf(" In decending order is:\n"); printf("******************\n"); printf("number score\n"); for(i = 0;i < num;i++) { printf(" %d %d\n",*(number+t1[i]),*(score+t1[i])); } printf("******************\n"); } /* 函数功能:用折半法按学号查询学生排名及其考试成绩 函数入口参数:待查学生学号 函数返回值:无 */ int Search(int a) { int i = 0,j = 0,m = 0,n = 0,t; int rank = 0;
high = mid - 1; else break; } return mid; } /* 函数功能:按优秀、良好、中等、及格、不及格五个类别,统计输出每个类别的人数及 所占的百分比 函数入口参数:成绩数组名 函数返回值:无 */ int Static(int score[]) { int n[10] = {0}; int i,mod; for(i = 0;i < num;i++) { mod = score[i] / 10; switch(mod) { case 9: (*(n+9))++; break; case 8: (*(n+8))++; break; case 7: (*(n+7))++; break; case 6: (*(n+6))++; break; default: (*(n+5))++; break; } } for (i = 9;i > 5;i--) { printf(" number between %d %d is %d,take %d%%\n",i*10,i*10+10,*(n+i),*(n+i)*100/num); } printf(" number between 0 - 59 is %d,take %d%%\n",*(n+5),*(n+i)*100/num); printf("\n"); } /* 函数功能:将成绩和学号的原始记录输出 函数入口参数:无 函数返回值:无 */ void OutPut() { int i; printf("******************\n"); printf("number score\n");
if(num != 0) { ave = sum * 1.0 / num; } else { printf("Error!\n"); return 0; } printf(" The sum of score is:%d\n",sum); printf(" The average of score is:%.2f\n",ave); printf("\n"); } /* 函数功能:按成绩由高到低排出名次表并输出 函数入口参数:成绩数组名和学号数组名 函数返回值:无 */ void SortByScore(int score[],int number[]) { int i,j,t; int t1[30]; //定义一个下标数组, 排序时不直接改变待排数组内数据顺序, 只改变本数组 内下标顺序 for (i = 0;i < num;i++) { *(t1 + i) = i; //利用指针赋值 } for(i = 1;i < num;i++) { for(j = 0;j < num - i;j++) { if(*(score+t1[j]) < *(score+t1[j + 1])) { t = *(t1+j); *(t1+j) = *(t1+j+1); *(t1+j+1) = t; } } } printf(" In decending order is:\n"); printf("******************\n"); printf("number score\n"); for(i = 0;i < num;i++) { printf(" %d %d\n",*(number+t1[i]),*(score+t1[i]));
for(i = 0;i < num;i++) { printf(" %d %d\n",*(number+i),*(score+i)); } printf("******************\n"); } /* 函数功能:将成绩和学号的原始记录及课程的总分和平均分输出 函数入口参数:无 函数返回值:无 */ void List() { OutPut(); Calculate(score); } /* 函数功能:按学号修改学生成绩 函数入口参数:学生学号 函数返回值:无 */ void Modify(int num1) { int chan; int i = 0,j = 0; printf(" input the new score:"); scanf("%d",&chan); for(;number[i] != num1;i++,j++); *(score+j) = chan; printf("\n"); } /* 函数功能:按学号删除学生成绩 函数入口参数:学生学号 函数返回值:无 */ void Delete(int num1) { int i = 0,j = 0; for(;*(number+i) != num1;i++,j++); if(j == num-1) { num -= 1; } else { for(i = j;i < num-1;i++)