实验十一 学生成绩管理系统(用函数实现)
实验类型:验证性 要求:必做 学时:2
实验目的:
1.掌握函数的定义方法
2.掌握函数的调用及函数声明
3.掌握函数实参与形参的对应关系及“值传递”的方式
4.掌握函数的嵌套调用和递归调用方法
5.掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法
6.掌握在实际项目中模块化设计与编码
实验内容:
1.编写一个小型学生成绩管理系统,系统操作通过菜单(文本或图形菜单均可)的形式完成。包括:数据输入,数据输出,数据添加,数据删除,数据查找,数据排序等, 各功能模块要求用独立的函数来表示,通过主函数直接或间接调用。
源程序:
#include \"stdio.h\"
#include #include typedef struct { int number; char name[30]; int chinese; int math; int english; int avg_grade; }STU; STU student[100]; int length; bool search_exist(int number); void menu() { printf(\"\\n请输入选项1——6\\n\"); printf(\"1——数据输入\\n\"); printf(\"2——数据输出\\n\"); printf(\"3——数据添加\\n\"); printf(\"4——数据删除\\n\"); printf(\"5——数据查找\\n\"); printf(\"6——数据排序\\n\"); } void input() { int n; printf(\"请输入学生的人数:\"); scanf(\"%d\ length=n; printf(\"请输入N个学生的学号,姓名,以及3门成绩:\"); for(int i=0;i scanf(\"%d%s%d%d%d\hinese,&student[i].math,&student[i].english); student[i].avg_grade=(student[i].chinese+student[i].math+student[i].english)/3; } } void output() { printf(\"学号 姓名 语文 数学 英语 平均成绩 \\n\"); for(int i=0;i } void add() { printf(\"请输入待添加的学生的学号,姓名,以及3门成绩:\\n\"); scanf(\"%d%s%d%d%d\student[length].chinese,&student[length].math,&student[length].english); student[length].avg_grade=(student[length].chinese+student[length].math+student[length].english)/3; while(1) { if(search_exist(student[length].number)) { printf(\"温馨提示:-------------该学号已经存在,请换一个学号!-------------\\n\"); printf(\"请输入待添加的学生的学号,姓名,以及3门成绩:\\n\"); scanf(\"%d%s%d%d%d\student[length].chinese,&student[length].math,&student[length].english); student[length].avg_grade=(student[length].chinese+student[length].math+student[length].english)/3; } else break; } length=length+1; } void del() { int del_num; printf(\"请输入被删除学生的学号:\"); scanf(\"%d\ for(int i=0;i if(student[i].number==del_num) break; } if(i==length) { printf(\"没有用该学生的记录!\"); } else { for(int k=i;k length=length-1; } } void search() { int search_num; printf(\"请输入待查找学生的学号:\"); scanf(\"%d\ for(int i=0;i if(student[i].number==search_num) break; } if(i==length) { printf(\"没有该学生的记录!\"); } else { printf(\"该学生的记录如下:\\n\"); printf(\"学号 姓名 语文 数学 英语 平均成绩 \\n\"); printf(\"%3d%10s%8d%8d%8d%8d\\nudent[i].chinese,student[i].math,student[i].english,student[i].avg_grade); } } bool search_exist(int number) { for(int i=0;i if(student[i].number==number) break; } if(i==length) return false; else return true; } void sort() { int k2,k1,index; STU temp; for(k1=0;k1 index=k1; for(k2=k1+1;k2 if(student[k2].avg_grade } temp=student[index]; student[index]=student[k1]; student[k1]=temp; } printf(\"按照平均成绩排序后的记录如下:\\n\"); output(); } void main() { system(\"color 3a\"); for(int m=0;m<30;m++) { printf(\"■\"); Sleep(150); } system(\"cls\"); int choice; char yesorno; do { menu(); scanf(\"%d\ switch(choice) { case 1:input(); break; case 2:output(); break; case 3:add(); break; case 4:del(); break; case 5:search(); break; case 6:sort(); break; default:printf(\"%d为非法选项\\n\ } printf(\"\\n要继续选择吗?(Y/N)\\n\"); getchar(); yesorno=getchar(); if(yesorno=='n'||yesorno=='N') break; }while(yesorno=='y'||yesorno=='Y'); } 运行结果 : 因篇幅问题不能全部显示,请点此查看更多更全内容