1 要求
建立一个4个学生的信息登记表,每个学生的信息包括:学号、姓名和3门课程的成绩(math、c、english)程序运行时显示一个简单的菜单。
例如:
-
a) 信息输入
(input)
-
b) 总分统计
(count)
-
c) 总分排序
(sort)
-
d) 查询
(query)
其中:
-
(1) 对四个学生的信息进行输入
-
(2) 对每个学生的3门课程统计总分
-
(3) 对四个学生的总分按降序排列并显示出来
-
(4) 查询输入一个学号后,显示出该学生的有关信息。
2 代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student
{
char Name[20];
char ID[20];
float Math;
float English;
float C;
}
stu[1000];
void Menu()
{
printf("\t\t======================================================\n");
printf("\t\t|| 学生成绩管理系统 ||\n");
printf("\t\t|| ********************************* ||\n");
printf("\t\t|| * 功能菜单 * ||\n");
printf("\t\t|| ********************************* ||\n");
printf("\t\t|| 1.添加学生成绩 ||\n");//4
printf("\t\t|| 2.输出学生成绩 ||\n");
printf("\t\t|| 3.查询学生成绩 ||\n");
printf("\t\t|| 4.学生数据排序 ||\n");//按平均成绩和计算机成绩
printf("\t\t|| 5.退出学生成绩管理系统 ||\n");
printf("\t\t======================================================\n");
}
void Input()//1.添加学生成绩
{
printf("\t\t请按顺序输入学生姓名,学号,学科成绩,不同项之间用Tab隔开:\n");
printf("\t\t姓名 学号 Math English C\n");
for(int i=0;i<4;i++)
{
printf("\t\t");
scanf("%s%s%f%f%f", stu[i].Name, stu[i].ID,&stu[i].Math, &stu[i].English, &stu[i].C);
}
printf("\t\t提示:成绩存入完毕!\n\n");
printf("\t\t\------请继续--------n\n");
}
void Output()//2.输出全班学生信息
{
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
}
}
void Find()//3.查询学生成绩
{
int a, i;
float sum, ave;
printf("\t\t======================================================\n");
printf("\t\t|| ※欢迎进入学生信息查询系统※ ||\n");
printf("\t\t|| 1.按学生姓名查找 ||\n");
printf("\t\t|| 2.按学生学号查找 ||\n");
printf("\t\t======================================================\n");
printf("\t\t>>>请选择1--2:");
scanf("%d", &a);
switch (a)
{
case 1://1.按学生的姓名查找
{
char Name[20];
printf("\t\t>>>请输入要查找的学生的姓名:");
scanf("%s", Name);
printf("\t\t>>>以下是%s同学的信息:\n\n",Name);
for ( i = 0; i< 4; i++)
{
if (strcmp(Name, stu[i].Name) == 0)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
printf("\t\t姓名\t学号\tMath\tEnglish\tC\t平均成绩\t总成绩\n");
printf("\t\t%s\t %s\t %.2f\t\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C, ave, sum);
}
}
}
break;
case 2://2.按学生学号查找
{
char Num[20];
printf("\t\t>>>请输入要查找的学生的学号:");
scanf("%s", Num);
printf("\t\t>>>以下是%s号同学的信息:\n\n",Num);
for ( i = 0; i < 4; i++)
{
if (0 == strcmp(Num, stu[i].ID))
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
printf("\t\t姓名\t学号\tMath\tEhglish\tC\t平均成绩\t总成绩\n");
printf("\t\t%s\t %s\t %.2f\t\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C, ave,sum);
}
}
}
break;
default:
printf("\n\t\t>>>输入有误,请重新输入!\n\n");
}
}
void Order()//4.学生数据排序
{
int a;
float ave,sum;
printf("\t\t======================================================\n");
printf("\t\t|| ※欢迎进入学生成绩排序系统※ ||\n");
printf("\t\t|| 1.按学生总成绩排序 ||\n");
printf("\t\t|| 2.按学生C成绩排序 ||\n");
printf("\t\t|| 3.按学生数学成绩排序 ||\n");
printf("\t\t|| 4.按学生英语成绩排序 ||\n");
printf("\t\t|| 5.按学生学号排序成绩 ||\n");
printf("\t\t======================================================\n");
printf("\t\t>>>请选择1--5:");
scanf("%d", &a);
printf("\t\t>>>排序如下:\n\n");
printf("\t\t姓名\t学号\tMath\tEnglish\tC\t平均成绩\t总成绩\n");
switch (a)
{
case 1://1.按学生总成绩排序 起泡法
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3-m; n++)
{
if ((stu[n].Math+stu[n].English+stu[n].C) < (stu[n+1].Math+stu[n+1].English+stu[n+1].C))
{
tmp = stu[n+1];
stu[n+1] = stu[n];
stu[n] = tmp;
}
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
}break;
case 2://2.按学生C成绩排序
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3 - m; n++)
{
if (stu[n].C < stu[n+1].C)
{
tmp = stu[n+1];
stu[n+1] = stu[n];
stu[n] = tmp;
}
// printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Math, stu[n].English, stu[n].C, (stu[n].Math + stu[n].English + stu[n].C) / 3, stu[n].Math + stu[n].English + stu[n].C);
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
} break;
case 3://3.按学生Math成绩排序
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3 - m; n++)
{
if (stu[n ].Math < stu[n+1].Math)
{
tmp = stu[n+1];
stu[n + 1] = stu[n];
stu[n] = tmp;
}
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Math, stu[n].English, stu[n].C, (stu[n].Math + stu[n].English + stu[n].C) / 3, stu[n].Math + stu[n].English + stu[n].C);
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
}
break;
case 4://4.按学生English成绩排序
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3 - m; n++)
{
if (stu[n+1].English > stu[n].English)
{
tmp = stu[n+1];
stu[n+1] = stu[n];
stu[n] = tmp;
}
// printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Math, stu[n].English, stu[n].C, (stu[n].Math + stu[n].English + stu[n].C) / 3, stu[n].Math + stu[n].English + stu[n].C);
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
}
break;
case 5://5.按学生学号排序成绩
{
int m, n;
struct student tmp;
for (m = 0; m < 4; m++)
{
for (n = 0; n < 3 - m; n++)
{
if (stu[n+1].ID > stu[n].ID)
{
tmp = stu[n+1];
stu[n+1] = stu[n];
stu[n] = tmp;
}
// printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[n].Name, stu[n].ID, stu[n].Math, stu[n].English, stu[n].C, (stu[n].Math + stu[n].English + stu[n].C) / 3, stu[n].Math + stu[n].English + stu[n].C);
}
}
printf("\t\t姓名\t学号\t\tMath\t\tEnglish\t\tC\n");
for (int i = 0; i < 4; i++)
{
sum = stu[i].Math + stu[i].English + stu[i].C;
ave = (stu[i].Math + stu[i].English + stu[i].C) / 3;
//printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t %.2f\n\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[i].C);
printf("\t\t%s\t%s\t %.2f\t\t %.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].Name, stu[i].ID, stu[i].Math, stu[i].English, stu[n].C,ave, sum);
}
}
break;
default:
printf("\n\t\t>>>输入有误,请重新输入!\n\n");
}
}
int main()
{
int selection;
while (true)
{
Menu();
printf("\t\t>>>请选择1--5:");
scanf("%d", &selection);
printf("\n");
switch (selection)
{
case 1: Input(); break; //1.添加学生成绩
case 2: Output(); break; //2.输出全班学生信息
case 3: Find(); break; //3.查询学生成绩
case 4: Order(); break; //4.学生数据排序
case 5:
printf("\n\t\t>>>您已成功退出学生成绩管理系统,感谢使用!\n\n");
exit(0);
break;
default:
printf("\n\t\t>>>输入有误,请重新输入!\n\n");
}
}
return 0;
}
3 报告总结
4 总结
这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。
刚开始学的时候确实有很多地方我很不理解,每次上上机课时老师都会给我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。TC里检查错误都是用英文来显示出来的,经过了这次课程设计,现在已经可以了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。此次的程序设计能够成功,是我和我的同学三个人共同努力作用的结果。在这一段努力学习的过程中,我们的编程设计有了明显的提高。
其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。现在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。只要努力去学习,就会灵活的去应用它。