1、 学生成绩管理系统实验报告 一、实验内容 实验名称:学生成绩管理系统 实验目的: 1)利用所学的三种程序基本结构以及数组、用户自定义函数进行一个简单管理系统的设计,进一步理解和掌握c语言的语法以及三种基本程序结构的综合应用。 2)通过程序中涉及的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧的理解与掌握,逐步培养学生的程序开发能力。 实验的基本要求:学号(字符串)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。
2、 二、算法说明 将数学成绩、程序设计成绩、姓名、学号分别设一个数组,其中姓名和学号是二维数组,其他是一维数组,并设为全局变量方便使用。 分别将各个功能以及菜单等功能设置为函数,介时调用。 主函数中运行菜单函数。菜单函数中提供选择用switch语句调用函数。 1、新建数据build()。用文档导入的方式导入数据。 2、添加数据add()。界面出现相应信息并提示输入。输入完成后用if语句选择是否再添加数据。如果选择是则继续调用add函数,否则调用print函数继续选择其他功能。用全局变量m来计算增加的次数。 3、删除数据rid()。用swith语句选择是按姓名删除还是按学号删
3、除或者返回主菜单。按姓名则输入想要删除的对象,用for语句找到对象后,再用stremp赋值的方法将下一个信息往上一个位置移动,达到覆盖要删除的信息的效果。最后用for循环输出。按学号删除也是同理。用全局变量m来计算删除的次数 4、排序arrange()。用swith语句选择是按数学成绩arr_math(),程序设计成绩arr_design()还是总分arr_total()。按数学成绩排序时用冒泡排序的方法排列数学成绩,同时其他的姓名、学号的信息的下标也随着数学成绩的下标变动,最后用for语句一起输出。按程序设计以及总分的具体算法也是同理。每个程序后调用arrange()返回上级子菜单以便继续
4、操作。
5、查询search()。也用switch语句选择是按学号s_code()、姓名s_name()、数学成绩s_math()、程序设计成绩s_design()、总分s_total()查找。
按学号则是输入学号,用if语句查找,输出该位置所对应的成绩以及姓名。按姓名、成绩查找也是同理。按成绩查找时用到flag=0标记,找到至少一个flag=1输出,否则flag=0时输出不存在。并重新调用search()函数返回上级子菜单。
6、退出。
三、程序清单
#include
5、choice; /*全局变量*/ int math[M]; int design[M]; char name[50][M]; char code[50][M]; int total[M]; void print() /*菜单函数*/ { void build(); void add(); void arrange(); void search(); void rid(); printf(" 欢迎使用学生成绩管理系统!\n");
6、 printf("1.新建数据\n2.添加数据\n3.删除数据\n4.排序\n5.查询\n6.退出\n请选择:"); scanf("%d",&choice); switch(choice) { case 1: build();break; case 2: add();break; case 3: rid();break; case 4: arrange();break; case 5: search();break; case 6:break;
7、}
}
void build() /*新建数据*/
{ FILE*cp;
FILE*np;
FILE*mp;
FILE*dp;
np=fopen("d:code.txt","r"); /*导入文件*/
for(i=0;i 8、ath.txt","r");
for(i=0;i 9、i++)
printf("%s %4s %4d %4d %4d\n",code[i],name[i],math[i],design[i],total[i]);
printf("成功!\n");
print();
}
void add() /*添加数据函数*/
{ char select;
m++;
printf("请输入信息");
printf("请输入学号:");
scanf("%s",code[m]);
printf("请输入姓名:");
10、 scanf("%s",name[m]);
printf("请输入数学成绩:");
scanf("%d",&math[m]);
printf("请输入程序设计成绩:");
scanf("%d",&design[m]);
total[m]=math[m]+design[m];
for(i=0;i<=m;i++)
printf("%s %s %d %d %d\n",code[i],name[i],math[i],design[i],total[i]);
printf("是否继续Y/N? 11、");
getchar();
scanf("%c",&select);
if(select=='y'||select=='Y') add();
else print();
}
void name_rid() /*按名字删除函数*/
{ void rid();
m--;
char name2[10],select;
printf("输入您要删除姓名:");
scanf("%s",name2);
for(i=0;i<=m+1;i++)
12、if(strcmp(name2,name[i])==0)
{ for(j=i;j<=m;j++)
{strcpy(code[j],code[j+1]);
strcpy(name[j],name[j+1]);
math[j]=math[j+1];
design[j]=design[j+1];}
}
for(i=0;i<=m;i++)
printf("%s %s %4d %4d %4d \n",code[i],name[i],math[i],desi 13、gn[i],total[i]);
printf("是否继续Y/N?");
getchar();
scanf("%c",&select);
if(select=='y'||select=='Y') name_rid();
else rid();
}
void code_rid() /*按学号删除函数*/
{ void rid();
m--;
char NO[10];
int select;
printf("输入您要删除的学号:");
14、 scanf("%s",&NO);
for(i=0;i<=m+1;i++)
if(strcmp(NO,code[i])==0)
{ for(j=i;j<=m;j++)
{ strcpy(code[j],code[j+1]);
strcpy(name[j],name[j+1]);
math[j]=math[j+1];
design[j]=design[j+1];}
}
for(i=0;i<=m;i++)
printf("%s %s %4d %4d %4d \n",co 15、de[i],name[i],math[i],design[i],total[i]);
printf("是否继续Y/N?");
getchar();
scanf("%c",&select);
if(select=='y'||select=='Y') code_rid();
else rid();}
void rid() /*删除数据总函数*/
{
int select;
printf("1.按姓名\n2.按学号\n3.返回主菜单\n请选择:");
scanf("%d" 16、select);
switch(select)
{case 1: name_rid();break;
case 2:code_rid();break;
case 3:print(); break;
default:break;}
}
void arr_math() /*按数学成绩排序函数*/
{ void arrange();
int temp1;
char str1[100],str2[100];
for(j=0;j<=m-1;j++)
for(i=0;i<=m 17、1-j;i++)
if(math[i]






