学生管理系统c语言(C语言数组如何实现学生信息管理系统)

发布时间:2025-12-10 22:50:39 浏览次数:1

概述  

单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标。  

运行结果如下:   

输入数据:

  

打印数据:

  

根据学号对信息进行排序:

  

根据总成绩对信息进行排序:

  

根据学号删除某一信息:

代码如下:

#include<stdio.h>#include<stdlib.h>//exit函数头文件#include<string.h>//字符串相关操作头文件#defineMAX_STUDENT30//最大学生数//函数声明,本程序共10个子函数,每个函数对应一个操作voidstudent_scanf(intn);voidstudent_printf(intn);intstudent_find_name(intn);intstudent_find_num(intn);voidstudent_sort_num(intn);voidstudent_sort_sum(intn);intstudent_alter_num(intn);intstudent_alter_name(intn);intstudent_delete_num(intn);intstudent_delete_name(intn);//全局数组变量,用于存储学生信息charnames[MAX_STUDENT][50];intmath[MAX_STUDENT];intenglish[MAX_STUDENT];intcomputer[MAX_STUDENT];intsum[MAX_STUDENT];intnum[MAX_STUDENT];//以下变量用于学生信息数组排序,作为临时数组inttemp_num[MAX_STUDENT];chartemp_names[MAX_STUDENT][50];inttemp_math[MAX_STUDENT];inttemp_english[MAX_STUDENT];inttemp_computer[MAX_STUDENT];inttemp_sum[MAX_STUDENT];//sort数组存储排好序的学号或姓名下标intsort[MAX_STUDENT];//循环全局变量inti,j;//main主函数intmain(void){intchoice,n;while(1){printf("*************************************\n");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("[0]退出程序\n");printf("请输入您的选择(0-9):");scanf("%d",&choice);printf("**************************************)\n");switch(choice){case1://录入;printf("请输入录入的学生信息数:");scanf("%d",&n);student_scanf(n);break;case2://输出;student_printf(n);break;case3://根据学号查找student_find_num(n);break;case4://根据姓名查找student_find_name(n);break;case5://按学号排序student_sort_num(n);break;case6://按姓名排序student_sort_sum(n);break;case7://按学号修改student_alter_num(n);break;case8://按姓名修改student_alter_name(n);break;case9://按学号删除student_delete_num(n);n--;break;case10://按姓名删除student_delete_name(n);n--;break;case0://退出程序printf("退出程序\n");printf("程序结束,谢谢使用!\n");exit(0);default:printf("您输入的菜单有误。请重新输入!\n");}}return0;}//1.输入信息voidstudent_scanf(intn){for(i=0;i<n;++i){printf("\n请输入第%d个学生的信息:\n",i+1);printf("\n学号:");scanf("%d",&num[i]);printf("\n姓名:");scanf("%s",names[i]);printf("\n数学成绩:");scanf("%d",&math[i]);printf("\n英语成绩:");scanf("%d",&english[i]);printf("\n计算机成绩:");scanf("%d",&computer[i]);//计算总成绩sum[i]=math[i]+english[i]+computer[i];}}//2.打印信息voidstudent_printf(intn){printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");printf("----------------------------------------------------------\n");for(i=0;i<n;++i){printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n",num[i],names[i],math[i],english[i],computer[i],sum[i]);}printf("-------------------------------------------------------\n");}//3.按学号查找intstudent_find_num(intn){intnums;intresult;printf("请输入待查找的学生学号:");scanf("%d",&nums);result=-1;for(i=0;i<n;++i){if(nums==num[i]){result=i;break;}}//最后判断q值if(result==-1){printf("没有该学生信息!\n");return0;}else{//先打印表头printf("\n学号\t\t姓名\t\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");//再打印数据printf("%d\t\t%s\t\t%d\t\t%d\t\t%d\t%d\n",num[result],names[result],math[result],english[result],computer[result],sum[result]);printf("打印出查找结果!\n");}return1;}//4.用姓名查找成绩intstudent_find_name(intn){charname[200];intresult;printf("请输入待查找的学生姓名:");scanf("%s",name);result=-1;for(i=0;i<n;++i){if(strcmp(name,names[i])==0){result=i;break;}}if(result==-1){//未找到结果printf("没有该学生信息!\n");return0;}else//找到结果{printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n",num[result],names[result],math[result],english[result],computer[result],sum[result]);printf("已完成查找!\n");}return1;}//5.按学号排序voidstudent_sort_num(intn){intmin,max;for(i=0;i<n;++i)//复制临时数组{temp_num[i]=num[i];}max=0;//查找学号最大值,将其下标存至sort数组的最后一个值中for(j=1;j<n;j++){if(temp_num[max]<temp_num[j])max=j;}sort[n-1]=max;//sort数组的最后一个数for(i=0;i<n-1;++i){min=i;//查找学号最小值for(j=0;j<n;++j){if(temp_num[min]>temp_num[j])min=j;}//sort数组记录排序的学生信息的下标sort[i]=min;temp_num[min]=temp_num[max];//利用临时数组将查找过的学生信息的学号设为最大值,排除查找干扰}for(i=0;i<n;++i)//再复制一次临时数组{temp_num[i]=num[i];strcpy(temp_names[i],names[i]);temp_math[i]=math[i];temp_english[i]=english[i];temp_computer[i]=computer[i];temp_sum[i]=sum[i];}for(i=0;i<n;i++)//按照下标对原数组进行修改{num[i]=temp_num[sort[i]];strcpy(names[i],temp_names[sort[i]]);math[i]=temp_math[sort[i]];english[i]=temp_english[sort[i]];computer[i]=temp_computer[sort[i]];sum[i]=temp_sum[sort[i]];}printf("排序完毕,请按菜单键2查看排序结果!\n");return;}//6.按总成绩排序voidstudent_sort_sum(intn){intmin,max;for(i=0;i<n;++i)//复制临时数组{temp_sum[i]=sum[i];}max=0;//查找总成绩最大值,将其下标存至sort数组的最后一个值中for(j=1;j<n;j++){if(temp_sum[max]<temp_sum[j])max=j;}sort[n-1]=max;//sort数组的最后一个数for(i=0;i<n-1;++i){min=i;//查找总成绩最小值for(j=0;j<n;++j){if(temp_sum[min]>temp_sum[j])min=j;}//sort数组记录排序的学生信息的下标sort[i]=min;temp_sum[min]=temp_sum[max];//利用临时数组将查找过的学生信息的总成绩设为最大值,排除查找干扰}for(i=0;i<n;++i)//再复制一次临时数组{temp_num[i]=num[i];strcpy(temp_names[i],names[i]);temp_math[i]=math[i];temp_english[i]=english[i];temp_computer[i]=computer[i];temp_sum[i]=sum[i];}for(i=0;i<n;i++)//按照下标对原数组进行修改{num[i]=temp_num[sort[i]];strcpy(names[i],temp_names[sort[i]]);math[i]=temp_math[sort[i]];english[i]=temp_english[sort[i]];computer[i]=temp_computer[sort[i]];sum[i]=temp_sum[sort[i]];}printf("排序完毕,请按菜单键2查看排序结果!\n");return;}//7.按学号修改学生信息intstudent_alter_num(intn){intnums;intresult;printf("请输入待修改的学生学号:");scanf("%d",&nums);result=-1;for(i=0;i<n;++i){if(nums==num[i]){result=i;break;}}//最后判断q值if(result==-1){printf("没有该学生信息!\n");return0;}else//修改信息值{printf("请重新输入该学生信息:\n");printf("学号:\n");scanf("%d",&num[result]);printf("姓名:\n");scanf("%s",names[result]);printf("数学成绩:\n");scanf("%d",&math[result]);printf("英语成绩:\n");scanf("%d",&english[result]);printf("计算机成绩:\n");scanf("%d",&computer[result]);sum[result]=math[result]+english[result]+computer[result];}return1;}//8.按姓名修改学生信息intstudent_alter_name(intn){charname[50];intresult;printf("请输入待修改的学生姓名:");scanf("%s",name);result=-1;for(i=0;i<n;++i){if(strcmp(name,names[i])==0){result=i;break;}}//最后判断q值if(result==-1){printf("没有该学生信息!\n");return0;}else//修改信息值{printf("请重新输入该学生信息:\n");printf("学号:\n");scanf("%d",&num[result]);printf("姓名:\n");scanf("%s",names[result]);printf("数学成绩:\n");scanf("%d",&math[result]);printf("英语成绩:\n");scanf("%d",&english[result]);printf("计算机成绩:\n");scanf("%d",&computer[result]);sum[result]=math[result]+english[result]+computer[result];}return1;}//9.按学号删除学生信息intstudent_delete_num(intn){intnums;intresult;printf("请输入待删除的学生学号:");scanf("%d",&nums);result=-1;for(i=0;i<n;++i){if(nums==num[i]){result=i;break;}}//最后判断q值if(result==-1){printf("没有该学生信息!\n");return0;}else//删除当前学生信息即为将数组从result的位置依次前挪一个位置{for(i=result;i<n-1;++i)//最后在main函数中,要将n的值减1{num[i]=num[i+1];strcpy(names[i],names[i+1]);math[i]=math[i+1];english[i]=english[i+1];computer[i]=computer[i+1];sum[i]=sum[i+1];}}return1;}//10.按姓名删除学生信息intstudent_delete_name(intn){charname[50];intresult;printf("请输入待删除的学生姓名:");scanf("%s",name);result=-1;for(i=0;i<n;++i){if(strcmp(name,names[i])==0){result=i;break;}}//最后判断q值if(result==-1){printf("没有该学生信息!\n");return0;}else//删除当前学生信息即为将数组从result的位置依次前挪一个位置{for(i=result;i<n-1;++i)//最后在main函数中,要将n的值减1{num[i]=num[i+1];strcpy(names[i],names[i+1]);math[i]=math[i+1];english[i]=english[i+1];computer[i]=computer[i+1];sum[i]=sum[i+1];}}return1;}
学生管理系统c语言
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477