某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入)。使用文件编程成实现如下菜单驱动的学生成绩管理系统。
1.从文件读入每个学生个人信息和成绩信息,可以由键盘输入文件名。读入成功提示读入学生记录的个数,不成功提示相应出错信息。
2.计算每门课程的总分和平均分;
3.计算每个学生的总分和平均分;
4.按每个学生的总分由高到低排出名次表;
5.按学号由小到大排出成绩表;
6.按姓名的字典顺序排出成绩表;
7.按学号查询学生排名及其考试成绩;
8.按姓名查询学生排名及其考试成绩;
9.按优秀(100-90)、良好(89-80)、中等(79-70)、及格(69-60)、不及格(59-0)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;并将计算结果输出到屏幕;
10.输出每个学生的学号、姓名、各科考试成绩、总分和平均分;
11.将每个学生的个人信息和成绩写入文件,可由键盘输入文件名;
要求程序运行后先显示如下菜单,并提示用户输入选项(菜单式循环显示,直到选择0.exit 整个程序退出):
1.Read from a file
2.Calculate total and average score of every course
3.Calculate total and average score of every student
4.Sort in descending order by total score of every student
5.Sort in ascending order by number
6.Sort in dictionary order by name
7.Search by number
8.Search by name
9.Statistic analysis for every course
10.List record
11.Write to file
0 . Exit
Please input your choice:
C++编程
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 10 /* 字符串最大长度 */
#define STU_NUM 30 /* 最多的学生人数 */
int Menu(void);
void ReadScore(long num[], char name[][MAX_LEN], float score[], int n);
void AverSumofScore(float score[], int n);
void SortbyScore(long num[], char name[][MAX_LEN], float score[], int n,
int (*compare)(float a, float b));
int Ascending(float a, float b);
int Descending(float a, float b);
void SwapFloat(float *x, float *y);
void SwapLong(long *x, long *y);
void SwapChar(char x[], char y[]);
void AsSortbyNum(long num[], char name[][MAX_LEN], float score[], int n);
void SortbyName(long num[], char name[][MAX_LEN], float score[], int n);
void SearchbyNum(long num[], char name[][MAX_LEN], float score[], int n);
void SearchbyName(long num[], char name[][MAX_LEN], float score[], int n);
void StatisticAnalysis(float score[], int n);
void PrintScore(long num[], char name[][MAX_LEN], float score[], int n) ;
int main()
{
char ch;
int n = 0;
float score[STU_NUM];
long num[STU_NUM];
char name[STU_NUM][MAX_LEN];
printf("Input student number(n<30):\n");
scanf("%d", &n);
while (1)
{
ch = Menu(); /* 显示菜单,并读取用户输入 */
switch (ch)
{
case 1:
ReadScore(num, name, score, n);
break;
case 2:
AverSumofScore(score, n);
break;
case 3:
SortbyScore(num, name, score, n, Descending);
printf("Sort in descending order by score:\n");
PrintScore(num, name, score, n);
break;
case 4:
SortbyScore(num, name, score, n, Ascending);
printf("Sort in ascending order by score:\n");
PrintScore(num, name, score, n);
break;
case 5:
AsSortbyNum(num, name, score, n);
printf("Sort in ascending order by number:\n");
PrintScore(num, name, score, n);
break;
case 6:
SortbyName(num, name, score, n);
printf("Sort in dictionary order by name:\n");
PrintScore(num, name, score, n);
break;
case 7:
SearchbyNum(num, name, score, n);
break;
case 8:
SearchbyName(num, name, score, n);
break;
case 9:
StatisticAnalysis(score, n);
break;
case 10:
PrintScore(num, name, score, n);
break;
case 0:
printf("End of program!");
exit(0);
default:
printf("Input error!\n");
}
}
return 0;
}
/* 函数功能:显示菜单并获得用户键盘输入的选项 */
int Menu(void)
{
int itemSelected;
printf("Management for Students' scores\n");
printf("1.Input record\n");
printf("2.Caculate total and average score of course\n");
printf("3.Sort in descending order by score\n");
printf("4.Sort in ascending order by score\n");
printf("5.Sort in ascending order by number\n");
printf("6.Sort in dictionary order by name\n");
printf("7.Search by number\n");
printf("8.Search by name\n");
printf("9.Statistic analysis\n");
printf("10.List record\n");
printf("0.Exit\n");
printf("Please Input your choice:\n");
scanf("%d", &itemSelected); /* 读入用户输入 */
return itemSelected;
}
/* 函数功能:输入n个学生的某门课成绩 */
void ReadScore(long num[], char name[][MAX_LEN], float score[], int n)
{
int i;
printf("Input student's ID, name and score:\n");
for (i = 0; i < n; i++)
{
scanf("%ld%s%f", &num[i], name[i], &score[i]);
}
}
/* 函数功能:计算全班总分和平均分 */
void AverSumofScore(float score[], int n)
{
int i;
float sum = 0;
for (i = 0; i < n; i++)
{
sum = sum + score[i];
}
printf("sum=%.0f,aver=%.2f\n", sum, n > 0 ? sum / n : 0);
}
/* 函数功能:按选择法将数组score的元素值排序 */
void SortbyScore(long num[], char name[][MAX_LEN], float score[], int n,
int (*compare)(float a, float b))
{
int i, j, k;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if ((*compare)(score[j], score[k])) k = j;
}
if (k != i)
{
SwapFloat(&score[k], &score[i]); /* 交换成绩 */
SwapLong(&num[k], &num[i]); /* 交换学号 */
SwapChar(name[k], name[i]); /* 交换姓名 */
}
}
}
/* 使数据按升序排序 */
int Ascending(float a, float b)
{
return a < b; /* 这样比较决定了按升序排序,如果a<b,则交换 */
}
/* 使数据按降序排序 */
int Descending(float a, float b)
{
return a > b; /* 这样比较决定了按降序排序,如果a>b,则交换 */
}
/* 交换两个单精度浮点型数据 */
void SwapFloat(float *x, float *y)
{
float temp;
temp = *x;
*x = *y;
*y = temp;
}
/* 交换两个长整型数据 */
void SwapLong(long *x, long *y)
{
long temp;
temp = *x;
*x = *y;
*y = temp;
}
/* 交换两个字符串 */
void SwapChar(char x[], char y[])
{
char temp[MAX_LEN];
strcpy(temp, x);
strcpy(x, y);
strcpy(y, temp);
}
/* 函数功能:按选择法将数组num的元素值按从低到高排序 */
void AsSortbyNum(long num[], char name[][MAX_LEN], float score[], int n)
{
int i, j, k;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if (num[j] < num[k]) k = j;
}
if (k != i)
{
SwapFloat(&score[k], &score[i]); /* 交换成绩 */
SwapLong(&num[k], &num[i]); /* 交换学号 */
SwapChar(name[k], name[i]); /* 交换姓名 */
}
}
}
/* 函数功能:交换法实现字符串按字典顺序排序 */
void SortbyName(long num[], char name[][MAX_LEN], float score[], int n)
{
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(name[j], name[i]) < 0)
{
SwapFloat(&score[i], &score[j]); /* 交换成绩 */
SwapLong(&num[i], &num[j]); /* 交换学号 */
SwapChar(name[i], name[j]); /* 交换姓名 */
}
}
}
}
/* 函数功能:按学号查找学生成绩并显示查找结果 */
void SearchbyNum(long num[], char name[][MAX_LEN], float score[], int n)
{
long number;
int i;
printf("Input the number you want to search:\n");
scanf("%ld", &number);
for (i = 0; i < n; i++)
{
if (num[i] == number)
{
printf("%ld\t%s\t%.0f\n", num[i], name[i], score[i]);
return;
}
}
printf("Not found!\n");
}
/* 函数功能:按姓名的字典顺序排出成绩表 */
void SearchbyName(long num[], char name[][MAX_LEN], float score[], int n)
{
char x[MAX_LEN];
int i;
printf("Input the name you want to search:\n");
scanf("%s", x);
for (i = 0; i < n; i++)
{
if (strcmp(name[i], x) == 0)
{
printf("%ld\t%s\t%.0f\n", num[i], name[i], score[i]);
return;
}
}
printf("Not found!\n");
}
/* 函数功能:统计各分数段的学生人数及所占的百分比 */
void StatisticAnalysis(float score[], int n)
{
int i, total, t[6] = {0, 0, 0, 0, 0, 0};
for (i = 0; i < n; i++)
{
if (score[i] >= 0 && score[i] < 60)t[0]++;
else if (score[i] < 70) t[1]++;
else if (score[i] < 80) t[2]++;
else if (score[i] < 90) t[3]++;
else if (score[i] < 100) t[4]++;
else if (score[i] == 100) t[5]++;
}
for (total = 0, i = 0; i <= 5; i++)
{
total = total + t[i];
}
for (i = 0; i <= 5; i++)
{
if (i == 0) printf("<60\t%d\t%.2f%%\n", t[i], (float)t[i] / n * 100);
else if (i == 5) printf("%d\t%d\t%.2f%%\n",
(i + 5) * 10, t[i], (float)t[i] / n * 100);
else printf("%d-%d\t%d\t%.2f%%\n",
(i + 5) * 10, (i + 5) * 10 + 9, t[i], (float)t[i] / n * 100);
}
}
/* 函数功能: 打印学生成绩 */
void PrintScore(long num[], char name[][MAX_LEN], float score[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%ld\t%s\t%.0f\n", num[i], name[i], score[i]);
}
}
某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6...
include <stdio.h> include <stdlib.h> include <string.h> define MAX_LEN 10 \/* 字符串最大长度 *\/ define STU_NUM 30 \/* 最多的学生人数 *\/ int Menu(void);void ReadScore(long num[], char name[][MAX_LEN], float score[], int n);void AverSumofSco...
某班有最多不超过30人(具体人数由键盘输入)参加某课程的考试,用二维...
6、我们将输入的值输出到屏幕上,以验证是否正确。7、我们动态创建了一个 2*3 的数组,数组的元素值依次是 1,2,3,4,5,6。
...的成绩(人数最多不超过40人,具体人数由键盘输入)编程序使按分数由...
include<math.h> include<stdio.h> include<conio.h> int main(){ int a[40];int num;scanf("%d",&num);int i;for(i=0;i<num;i++){ scanf("%d",&a[i]);} int j;int temp;for(i =0;i<num-1;i++){ for(j=i+1;j<num;j++){ if(a[i]<a[j]){ temp =a[i];a...
二(4)班学生人数不到30人,体育老师分组时发现,每4人一组多3人,每6人...
除去那三人的人数一定能背4和6整除,所以人数是四六二十四,加上一开始不算的那三人,该班有二十七人。
从键盘任意输入某班20个学生的成绩,输出最高分并统计出不及格人数?
,i+1);scanf("%d",&a[i]);} max=a[0];for(i=1;i<20;i++){ if(max<a[i])max=a[i];} printf("最高成绩是%d\\n",max);for(i=0;i<20;i++){ if(a[i]<60){ printf("该生不及格,其成绩是%d\\n",a[i]);n++;} } printf("不及格人数有%d个",n);} ...
舞蹈班多少人
舞蹈班人数多了,教学质量难保证,人数少了,比较浪费,这要看具体情况。芭蕾、中国舞的基训,受到把杆站位的限制,一般不能超过16人(按照中等大小,100平米教室算);民舞组合,也可以人多些,最多也是16人左右;国标移动性大,人多了教室的场地和老师关注能力有限,四对到六对一起上课比较好。另外...
某班有30人参加了考试,前十名的平均分是90分,其?
前十名的平均分比这个考场平均分高9分,共9x10=90分 那么其余30名同学比平均分一共低90分 90\/30=3分。点评:本题考查平均数问题.采用移多补少的方法.此题属于较难的平均数应用题,解答此题的关键是先求出前10名的总分比全班平均总分多的分数,进而根据其它同学比全班平均总分少的分数、其它...
参加数学兴趣小组的人数在30余40之间如果每组6人那么有两个组个多1个...
首先5x6=30(+2) 或者6x6=36(+2) 5x7=35(-4)或者6x7=42(-4) 所以取两组相同人数38人(括号内预算为实际人数)
数学问题
9. 梓涵参加了三次数学竞赛,平均分是84分,已知前两次平均分是82分,求他的三次得了多少分? 10. 梓涵期末考试时,数学成绩公布前他四门功课的平均分数是92分,数学成绩公布后,他的平均成绩下降了1分。 梓涵数学考了多少分? 11. 如果三个人的平均年龄是22岁,且没有小于18岁的,那么年龄最大的可能是多少岁? 12...
...人数不超过( )且每樘门的平均疏散人数不超过30人的房间,其疏散门的...
【答案】:C 除甲、乙类生产车间外,人数不超过60人且每樘门的平均疏散人数不超过30人的房间,其疏散门的开启方向不限。