定义一个管理学生成绩的程序,学生信息用结构体(姓名、学号、年龄、三门课成绩),用结构体数组处理最多100个学生信息,要能添加和删除学生信息,要能分别按照学号、各科成绩和平均分排序。(身为初学者写的代码,仅供参考,写的不好请谅解)
#include<stdio.h>
#include<stdlib.h>
#define N 100
struct Student
{
int num;
char name[20];
char sex[6];
int year;
int math;
int chinese;
int english;
int zong;
}Stu[99];
int n;
int sum;
void Menu()
{
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("请输入你的选项: \n");
scanf_s("%d", &sum);
}
int Input() //输入学生信息
{
int d;
int i = 1;
while (i)
{
printf("\n请输入第%d个学生的信息:\n", i);
printf("学号: ");
scanf_s("%d", &Stu[i].num);
printf("姓名: ");
scanf_s("%s", Stu[i].name,100);
printf("性别: ");
scanf_s("%s", Stu[i].sex,100);
printf("年龄: ");
scanf_s("%d", &Stu[i].year);
printf("数学成绩: ");
scanf_s("%d", &Stu[i].math);
printf("语文成绩: ");
scanf_s("%d", &Stu[i].chinese);
printf("英语成绩: ");
scanf_s("%d", &Stu[i].english);
i++;
n++;
printf("是否继续输入?(1.继续 2.退出)\n");
scanf_s("%d", &d);
if (d == 2) {
system("cls");
return main();
}
}
}
void Print()
{
int i;
printf("\n学号\t姓名\t数学成绩\t语文成绩\t英语成绩\t总成绩\n\n\n");
for (i = 1; i <= n; i++) {
Stu[i].zong = Stu[i].chinese + Stu[i].english + Stu[i].math;
printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n", Stu[i].num, Stu[i].name, Stu[i].math, Stu[i].chinese, Stu[i].english, Stu[i].zong);
}
return main();
}
void Sortcode()
{
struct Student k;
int j;
int i;
printf("按学号从小到大排序为\n");
for (j = 0; j < n - 1; j++)
for (i = 1; i < n - j; i++) {
if (Stu[i].num > Stu[i + 1].num) {
k = Stu[i];
Stu[i] = Stu[i + 1];
Stu[i + 1] = k;
}
}
for (i = 1; i <= n; i++) {
Stu[i].zong = Stu[i].chinese + Stu[i].english + Stu[i].math;
printf("学号为:%d ", Stu[i].num);
printf("姓名为:%s ", Stu[i].name);
printf("数学成绩为:%d ", Stu[i].math);
printf("语文成绩为:%d ", Stu[i].chinese);
printf("英语成绩为:%d ", Stu[i].english);
printf("学生的总成绩为:%d\n\n", Stu[i].zong);
}
printf("\n");
return main();
}
void Find()
{
int xuehao;
int i, q;
system("cls");
printf("\n按学号进行查找\n");
printf("请输入要查找的学号: ");
scanf_s("%d", &xuehao);
for (i = 1; i <= n; i++) {
if (xuehao == Stu[i].num) {
Stu[i].zong = Stu[i].chinese + Stu[i].english + Stu[i].math;
printf("\n查找成功!\n\n\n");
printf("学生的学号为:%d\n", Stu[i].num);
printf("学生的姓名为:%s\n", Stu[i].name);
printf("数学成绩为:%d\n", Stu[i].math);
printf("语文成绩为:%d\n", Stu[i].chinese);
printf("英语成绩为:%d\n", Stu[i].english);
printf("学生总成绩为:%d\n", Stu[i].zong);
}
}
return main();
}
void Delete()
{
int nums;
int i, j, d;
printf("输入想要删除人的学号: ");
scanf_s("%d", &nums);
for (i = 1; i <= n; i++)
{
if (nums == Stu[i].num)
{
printf("学号\t姓名\t数学\t语文\t英语\t\n");
printf("%d\t%s\t%d\t%d\t%d\t\n", Stu[i].num, Stu[i].name, Stu[i].math, Stu[i].chinese, Stu[i].english);
printf("确认删除!(1.Y 2.N)\n");
scanf_s("%d", &d);
if (d == 1)
{
for (j = i; j <= n; j++)
{
Stu[j].num = Stu[j + 1].num;
strcpy(Stu[j].name, Stu[j + 1].name);
Stu[j].math = Stu[j + 1].math;
Stu[j].chinese = Stu[j + 1].chinese;
Stu[j].english = Stu[j + 1].english;
}
n--;
return main();
}
if (d == 2)
{
return main();
}
}
}
}
void Exit()
{
printf("\n\n\n\n\n");
printf("感谢使用\n");
}
void Sortsum()
{
struct Student t;
int j;
int i;
printf("按平均分从小到大排序为\n");
for (j = 0; j < n - 1; j++)
for (i = 1; i < n - j; i++) {
if (Stu[i].zong > Stu[i + 1].zong) {
t = Stu[i];
Stu[i] = Stu[i + 1];
Stu[i + 1] = t;
}
}
for (i = 1; i <= n; i++) {
Stu[i].zong = Stu[i].chinese + Stu[i].english + Stu[i].math;
printf("学号为:%d ", Stu[i].num);
printf("姓名为:%s ", Stu[i].name);
printf("数学成绩为:%d ", Stu[i].math);
printf("语文成绩为:%d ", Stu[i].chinese);
printf("英语成绩为:%d ", Stu[i].english);
printf("学生的总成绩为:%d\n\n", Stu[i].zong);
}
printf("\n");
return main();
}
void Sortchinese()
{
struct Student t;
int j;
int i;
printf("按平均分从小到大排序为\n");
for (j = 0; j < n - 1; j++)
for (i = 1; i < n - j; i++) {
if (Stu[i].chinese > Stu[i + 1].chinese) {
t = Stu[i];
Stu[i] = Stu[i + 1];
Stu[i + 1] = t;
}
}
for (i = 1; i <= n; i++) {
Stu[i].zong = Stu[i].chinese + Stu[i].english + Stu[i].math;
printf("学号为:%d ", Stu[i].num);
printf("姓名为:%s ", Stu[i].name);
printf("数学成绩为:%d ", Stu[i].math);
printf("语文成绩为:%d ", Stu[i].chinese);
printf("英语成绩为:%d ", Stu[i].english);
printf("学生的总成绩为:%d\n\n", Stu[i].zong);
}
printf("\n");
return main();
}
void Sortmath()
{
struct Student t;
int j;
int i;
printf("按平均分从小到大排序为\n");
for (j = 0; j < n - 1; j++)
for (i = 1; i < n - j; i++) {
if (Stu[i].math > Stu[i + 1].math) {
t = Stu[i];
Stu[i] = Stu[i + 1];
Stu[i + 1] = t;
}
}
for (i = 1; i <= n; i++) {
Stu[i].zong = Stu[i].chinese + Stu[i].english + Stu[i].math;
printf("学号为:%d ", Stu[i].num);
printf("姓名为:%s ", Stu[i].name);
printf("数学成绩为:%d ", Stu[i].math);
printf("语文成绩为:%d ", Stu[i].chinese);
printf("英语成绩为:%d ", Stu[i].english);
printf("学生的总成绩为:%d\n\n", Stu[i].zong);
}
printf("\n");
return main();
}
void Sortenglish()
{
struct Student t;
int j;
int i;
printf("按平均分从小到大排序为\n");
for (j = 0; j < n - 1; j++)
for (i = 1; i < n - j; i++) {
if (Stu[i].english > Stu[i + 1].english) {
t = Stu[i];
Stu[i] = Stu[i + 1];
Stu[i + 1] = t;
}
}
for (i = 1; i <= n; i++) {
Stu[i].zong = Stu[i].chinese + Stu[i].english + Stu[i].math;
printf("学号为:%d ", Stu[i].num);
printf("姓名为:%s ", Stu[i].name);
printf("数学成绩为:%d ", Stu[i].math);
printf("语文成绩为:%d ", Stu[i].chinese);
printf("英语成绩为:%d ", Stu[i].english);
printf("学生的总成绩为:%d\n\n", Stu[i].zong);
}
printf("\n");
return main();
}
int main()
{
Menu();
switch (sum) {
case 1:
Input(Stu, N);
break;
case 2:
Print(Stu, N);
break;
case 3:
Sortcode(Stu, N);
break;
case 4:
Find(Stu, N);
break;
case 5:
Delete(Stu, N);
break;
case 6:
Sortsum(Stu, N);
break;
case 7:
Sortchinese(Stu, N);
break;
case 8:
Sortmath(Stu, N);
break;
case 9:
Sortenglish(Stu, N);
break;
case 10:
Exit(Stu, N);
break;
}
}