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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。