C语言学生成绩管理系统
创始人
2024-05-07 08:23:39

 程序示例精选

C语言学生成绩管理系统

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

前言

这篇博客针对<>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

        一、所需工具软件

        二、使用步骤

                1. 引入库

                2. 创建结构体

                3. 创建元素操作函数

                4. 运行结果

         三、在线协助


一、所需工具软件

          1. Visual Studio

          2. C/C++

二、使用步骤

1.引入库

代码如下(示例):

#include
#include
#include
#include

2.创建结构体

代码如下(示例):

struct Student {   //每个学生对应一个结构体 char ID[20];//学号 char Name[10];//姓名 float Mark1;//语文成绩 float Mark2;//数学成绩 float Mark3;//英语成绩 float Mark4;//计算机成绩 float All; //总分 float Average;//平均成绩 
}students[1000];

该处使用的url网络请求的数据。

3.创建元素操作函数:

代码如下(示例):

int num = 0; //计数器
void Copy(struct Student* arr, int i, int j)
{strcpy(arr[i].ID, arr[j].ID);strcpy(arr[i].Name, arr[j].Name);arr[i].Mark1 = arr[j].Mark1;arr[i].Mark2 = arr[j].Mark2;arr[i].Mark3 = arr[j].Mark3;arr[i].Mark4 = arr[j].Mark4;arr[i].All = arr[j].All;arr[i].Average = arr[j].Average;
}
int Student_SearchByName(char name[])//通过姓名来检索学生
{int i;for (i = 0; i < num; i++){if (strcmp(students[i].Name, name) == 0)  //通过strcmp函数来对比学生姓名,找到返回在数组的位置 {return i;}}return -1;    //未找到返回 -1 
}
int Student_SearchByIndex(char id[])//通过学号来检索学生信息
{int i;for (i = 0; i < num; i++){if (strcmp(students[i].ID, id) == 0)  //通过strcmp函数来对比学生id,找到返回位置 {return i;}}return -1;   //未找到返回 -1 
}
void Student_DisplaySingle(int index)//输出表头
{printf("%10s%10s%8s%8s%8s%10s\n", "学号", "姓名", "语文", "数学", "英语", "计算机", "总成绩", "平均成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[index].ID, students[index].Name,students[index].Mark1, students[index].Mark2, students[index].Mark3, students[index].Mark4, students[index].All, students[index].Average);
}
void inputt()//利用循环录入学生信息
{while (1){printf("请输入学号:");scanf("%s", &students[num].ID);getchar();printf("请输入姓名:");scanf("%s", &students[num].Name);getchar();printf("请输入成绩:");scanf("%f", &students[num].Mark1);getchar();printf("请输入成绩:");scanf("%f", &students[num].Mark2);getchar();printf("请输入成绩:");scanf("%f", &students[num].Mark3);getchar();printf("请输入成绩:");scanf("%f", &students[num].Mark4);   //依次输入各项数据 getchar();students[num].All = students[num].Mark1 + students[num].Mark2 + students[num].Mark3 + students[num].Mark4;    //输完数据后自动计算总成绩与平均成绩 students[num].Average = (students[num].Mark1 + students[num].Mark2 + students[num].Mark3 + students[num].Mark4) / 4;if (Student_SearchByIndex(students[num].ID) == -1){num++;  //移向下一个位置 }else{printf("学号重复,输入数据无效 !!!\n");}printf("是否继续?(y/n)");if (getchar() == 'n'){break;}}
}
void modify()//修改成绩
{while (1){char id[20];int index;printf("请输入要修改的学生的学号:");scanf("%s", &id);getchar();index = Student_SearchByIndex(id);  //调用搜查id函数,根据其返回值确定位置 if (index == -1){printf("学生不存在!\n");}else{printf("你要修改的学生信息为:\n");Student_DisplaySingle(index);printf("-- 请输入新值--\n");printf("请输入学号:");scanf("%s", &students[index].ID);getchar();printf("请输入姓名:");scanf("%s", &students[index].Name);getchar();printf("请输入语文成绩:");scanf("%f", &students[index].Mark1);getchar();printf("请输入数学成绩:");scanf("%f", &students[index].Mark2);getchar();printf("请输入英语成绩:");scanf("%f", &students[index].Mark3);getchar();printf("请输入计算机成绩:");scanf("%f", &students[index].Mark4);  //重新录入一套新的数据替代 getchar();students[index].All = students[index].Mark1 + students[index].Mark2 + students[index].Mark3 + students[index].Mark4;students[index].Average = (students[index].Mark1 + students[index].Mark2 + students[index].Mark3 + students[index].Mark4) / 4;}printf("是否继续?(y/n)");if (getchar() == 'n'){break;}}
}
void deletee()//删除学生信息
{int i;while (1){char id[20];int index;printf("请输入要删除的学生的学号:");scanf("%s", &id);getchar();index = Student_SearchByIndex(id);   //调用搜查id函数,根据其返回值确定位置 if (index == -1){printf("学生不存在!\n");}else{printf("你要删除的学生信息为:\n");Student_DisplaySingle(index);printf("是否真的要删除?(y/n)");if (getchar() == 'y'){for (i = index; i < num - 1; i++){Copy(students, i, i + 1);//students[i]=students[i+1];    //把后边的对象都向前移动}num--;}getchar();}printf("是否继续?(y/n)");if (getchar() == 'n'){break;}}
}
void display()//打印已录入的学生信息
{int a;printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "语文", "数学", "英语", "计算机", "总成绩", "平均成绩");printf("-------------------------------------------------------------\n");for (a = 0; a < num; a++){printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,students[a].Mark1, students[a].Mark2, students[a].Mark3, students[a].Mark4, students[a].All, students[a].Average);}
}
void insert()//指定位置插入学生信息
{int a, b, c;printf("请输入你要插入的位置");scanf("%d", &a);if (a > num) {printf("输入的位置有误,请重新输入,当前共%d条数据\n", num);scanf("%d", &a);}b = num - 1;for (; b >= a - 1; b--){//strcpy(students[b+1].ID,students[b].ID);//strcpy(students[b+1].Name,students[b].Name);//students[b+1].Mark1=students[b].Mark1;//students[b+1].Mark2=students[b].Mark2;//students[b+1].Mark3=students[b].Mark3;//students[b+1].Mark4=students[b].Mark4;//students[b+1].All=students[b].All;//students[b+1].Average=students[b].Average;  Copy(students, b + 1, b); //根据其输入的位置,将其及以后的数据向后移动一个位置 }num++;printf("请输入学号:");scanf("%s", &students[a - 1].ID);getchar();printf("请输入姓名:");scanf("%s", &students[a - 1].Name);getchar();printf("请输入语文成绩:");scanf("%f", &students[a - 1].Mark1);getchar();printf("请输入数学成绩:");scanf("%f", &students[a - 1].Mark2);getchar();printf("请输入英语成绩:");scanf("%f", &students[a - 1].Mark3);getchar();printf("请输入计算机成绩:");scanf("%f", &students[a - 1].Mark4);  //输入新数据 getchar();students[a - 1].All = students[a - 1].Mark1 + students[a - 1].Mark2 + students[a - 1].Mark3 + students[a - 1].Mark4;students[a - 1].Average = (students[a - 1].Mark1 + students[a - 1].Mark2 + students[a - 1].Mark3 + students[a - 1].Mark4) / 4;}
void search()//查询学生信息
{while (1){char name[20];int index;printf("请输入要查询的学生的姓名:");scanf("%s", &name);getchar();index = Student_SearchByName(name);   //调用搜查name函数,根据其返回值确定位置 if (index == -1){printf("学生不存在!\n");}else{printf("你要查询的学生信息为:\n");Student_DisplaySingle(index);}printf("是否继续?(y/n)");if (getchar() == 'n'){break;}}
}
void sort()//根据平均分排序
{int i, j;//struct students tmp;for (i = 0; i < num; i++){students[i].Average = (students[i].Mark1 + students[i].Mark2 + students[i].Mark3 + students[i].Mark4) / 4;}for (i = 0; i < num; i++){for (j = 1; j < num - i; j++){if (students[j - 1].Average < students[j].Average){Copy(students, num, j - 1);Copy(students, j - 1, j);Copy(students, j, num);//tmp=students[j-1];//students[j-1]=students[j];//students[j]=tmp;      //冒泡排序 }}}int a;printf("%10s%10s%8s%8s%8s%10s\n", "学号", "姓名", "语文", "数学", "英语", "计算机", "总成绩", "平均成绩");printf("-------------------------------------------------------------\n");for (a = 0; a < num; a++){printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,students[a].Mark1, students[a].Mark2, students[a].Mark3, students[a].Mark4, students[a].All, students[a].Average);}
}void SearchLow()//搜索不及格的并输出 
{int a;printf("           语文不及格的有%10s%10s%8s\n", "学号", "姓名", "语文");for (a = 0; a < num; a++){if (students[a].Mark1 < 60)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark1);    //从头搜索到尾,若小于60就输出 }printf("           数学不及格的有%10s%10s%8s\n", "学号", "姓名", "数学");for (a = 0; a < num; a++){if (students[a].Mark2 < 60)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark2);}printf("           英语不及格的有%10s%10s%8s\n", "学号", "姓名", "英语");for (a = 0; a < num; a++){if (students[a].Mark3 < 60)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark3);}printf("           计算机不及格的有%10s%10s%8s\n", "学号", "姓名", "计算机");for (a = 0; a < num; a++){if (students[a].Mark4 < 60)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark4);}system("pause");
}void SearchHigh()//搜索成绩最高者输出 
{int a;int max;printf("           语文最高分为%10s%10s%8s\n", "学号", "姓名", "语文");max = students[0].Mark1;for (a = 1; a < num; a++){if (students[a].Mark1 > max)max = students[a].Mark1;}for (a = 0; a < num; a++){if (max == students[a].Mark1)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark1);}printf("           数学最高分为%10s%10s%8s\n", "学号", "姓名", "数学");max = students[0].Mark2;for (a = 1; a < num; a++){if (students[a].Mark2 > max)max = students[a].Mark2;}for (a = 0; a < num; a++){if (max == students[a].Mark2)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark2);}printf("           英语最高分为%10s%10s%8s\n", "学号", "姓名", "英语");max = students[0].Mark3;for (a = 1; a < num; a++){if (students[a].Mark3 > max)max = students[a].Mark3;}for (a = 0; a < num; a++){if (max == students[a].Mark3)printf("           %10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark3);}printf("           计算机最高分为%10s%10s%8s\n", "学号", "姓名", "计算机");max = students[0].Mark4;for (a = 1; a < num; a++){if (students[a].Mark4 > max)max = students[a].Mark4;}for (a = 0; a < num; a++){if (max == students[a].Mark4)printf("           %10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark4);}system("pause");
}
void Save()
{FILE* fp = fopen("temp.txt", "w+");fprintf(fp, "%d\n", num);for (int i = 0; i < num; i++){fprintf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, students[i].Mark1, students[i].Mark2, students[i].Mark3, students[i].Mark4, students[i].All, students[i].Average);}fclose(fp);
}
void Load()
{FILE* fp = fopen("temp.txt", "r");fscanf(fp, "%d", &num);for (int i = 0; i < num; i++){fscanf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, &students[i].Mark1, &students[i].Mark2, &students[i].Mark3, &students[i].Mark4, &students[i].All, &students[i].Average);}fclose(fp);
}int main() {int i;while (1) {Load();printf("\t\t\t\t\t-------- 学生成绩管理系统-------\n\n\n\n");     //菜单 printf("\t\t\t\t\t1. 增加学生记录\n\n");printf("\t\t\t\t\t2. 修改学生记录\n\n");printf("\t\t\t\t\t3. 删除学生记录\n\n");printf("\t\t\t\t\t4. 插入学生记录\n\n");printf("\t\t\t\t\t5. 显示所有记录\n\n");printf("\t\t\t\t\t6. 查询学生记录\n\n");printf("\t\t\t\t\t7. 按平均成绩排序\n\n");printf("\t\t\t\t\t8. 输出各科目不及格学生\n\n");printf("\t\t\t\t\t9. 输出各科目最高分\n\n");printf("\t\t\t\t\t0. 退出\n\n\n");printf("请选择(0-9):");scanf("%d", &i);switch (i) {case 1:inputt(); break;case 2:modify(); break;case 3:deletee(); break;case 4:insert(); break;case 5:display(); break;case 6:search(); break;case 7:sort(); break;case 8:SearchLow(); break;case 9:SearchHigh(); break;case 0:exit(0);default:;}Save();}return 0;
}

4.运行结果如下: 

 

三、在线协助: 

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

相关内容

热门资讯

应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...