一 实验内容:
1.实验名称:学生成绩管理。
2.试验目的:
1)利用所学的三种程序基本结构以及数组、用户自定义函数进行一个简单管理系统的设计,进一步理解和掌握C语言的语法以及三种基本程序结构的综合应用。
2)通过程序中涉及到的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧的理解与掌握,逐步培养学生的程序开发能力。
3.试验要求:设某班有n位同学,每位同学的数据包括以下内容:
学号(字符串)姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下五项功能:新建数据档案、添加数据、删除数据、对输入的数据进行排序和查询。
注意:
1)输入数据时,要求学号不能相同,姓名可以相同。
2)在学习“结构体”和“文件”之前也可进行本项程序设计,采用多个数组存储数据,同一学生信息对应的数组元素应下标相同。
实验具体设计要求
(一)程序运行时,首先显示主菜单如下:
1.新建数据
2.添加数据
3.删除数据
4.排序
5.查询
6.退出
屏幕提示:请输入序号选择相应操作。
要求当用户输入任一序号后,程序都能进行相应操作。
(二)在主菜单中选择序号4,弹出子菜单选择排序方式,子菜单如下:
1.数学成绩排序
2.程序设计成绩排序
3.总分排序。
4.返回主菜单
请按序号选择相应操作。
选择子菜单的序号后,程序能正确运行并在屏幕上显示按要求排序后的相关信息。
(三)在主菜单中选择序号5,弹出子菜单选择查询方式,子菜单如下:
1.学号查询
2.姓名查询
3.数学成绩查询
4.程序设计成绩查询
5.总分查询
6.返回主菜单
请按序号选择相应操作。
在子菜单中选择序号后,程序按以下方式工作:
1)学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:查询到满足条件的结果后,查询即可结束)
2)姓名查询:输入姓名后,若该姓名存在则显示与其相关的所有信息,否则显示找不到的提示信息;(提示:使用字符串比较函数进行比较)
3)按科目查询:输入指定分数,程序运行后显示该科目中考试成绩大于等于指定分数的同学的学号、姓名以及该科成绩并统计满足条件的人数;
4)总分查询:输入指定分数,程序运行后显示总分成绩大于等于指定分数的同学的学号、姓名以及各科成绩并统计满足条件的人数。
二.算法说明
选择你想要做的操作序号。1.新建数据2.添加数据3.删除数据
4.排序5.查询6.退出
1.选1为新建数据:信息会提示你需要输入的学生的相关信息,包括你需要输入的学生的个数,学生的学号,姓名,数学成绩,程序设计成绩。之后程序会返回主菜单。
2.选2为添加数:如果在之前你有创建新的数据,则你添加的数据会在原有的数据基础上加入,如果没有新建,则程序相当于创建新的数据,同样的程序会提示你要输入的信息,在输入完一个学生的信息后程序提示是否继续,跟据需要选择。添加完后自动输出全部学生信息并返回主菜单。
3.选3为删除数:信息提示需要输入想要删除的学生的学号,系统自动输出删除该生后的其他学生的信息。系统自动返回主菜单。
4.选4为排序:系统出现子菜单(1.数学成绩排序,2.程序设计程序排序,3.总分排序,4.返回主菜单)选择1或2或3后,系统输出排序后的学生信息并返回主菜单,选四则返回主菜单。
5.选5为查询:系统出现子菜单(1.学号查询,2.姓名查询,3.数学成绩查询,4.程序设计成绩查询,5.总分查询,6.返回主菜单)选择1或2或3,输入相关信息后输出你所查找的学生的信息并返回主菜单,注意的是数学成绩和程序设计成绩查询还有总分查询输入分数后输出的是大于该分数的学生和人数。
6.选6为退出系统。
三.程序清单
#include<stdio.h>
#include<string.h>
struct student
{
char num[10];
char name[10];
int math;
int proj;
int sum;
}stu[60];
int t;//全局变量
void main()
{
int n;
void creat_data();
void add();
void delet();
void sort_stu();
void search();
do{
printf("ttt主菜单n");
printf("t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n");
printf("ttt1.新建数据n") ;
printf("ttt2.添加数据n");
printf("ttt3.删除数据n");
printf("ttt4.排序n");
printf("ttt5.查询n");
printf("ttt6.退出n");
printf("t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n");
printf("请输入序号选择相应操作:");
scanf("%d",&n);
switch(n)
{
case 1:creat_data();break;
case 2:add();break;
case 3:delet();break;
case 4:sort_stu();break;
case 5:search();break;
case 6:printf("欢迎使用n");break;
default: printf("输入错误");
}
}while(n!=6);
}
void sum_stu() //分数总和
{
int i;
for(i=1;i<=t;i++)
stu[i].sum=stu[i].math+stu[i].proj;
}
void print()
{
int i;
printf("tt学号姓名数学成绩程序设计成绩 总分n");
printf("tt---------------------------------------------------n");
for(i=1;i<=t;i++)
printf("tt%s%s%d%d%dn",stu[i].num,stu[i].name,stu[i].math,stu[i].proj,stu[i].sum);
printf("tt---------------------------------------------------nn");
}
void creat_data() //新建数据
{
int i;
printf("The number of students you want to creat: ");
scanf("%d",&t);
for(i=1;i<=t;i++)
{
printf("n请输入学生学号:");
scanf("%s",stu[i].num); printf("n");
printf("请输入学生姓名:");
scanf("%s",stu[i].name); printf("n");
printf("请输入学生数学成绩:");
scanf("%d",&stu[i].math); printf("n");
printf("请输入学生程序设计成绩:");
scanf("%d",&stu[i].proj); printf("n");
}
sum_stu();
print();
}
void add() //添加数据
{
charch;
do
{
printf("n请输入学生学号:");
scanf("%s",stu[t+1].num); printf("n");
printf("请输入学生姓名:");
scanf("%s",stu[t+1].name); printf("n");
printf("请输入学生数学成绩:");
scanf("%d",&stu[t+1].math); printf("n");
printf("请输入学生程序设计成绩:");
scanf("%d",&stu[t+1].proj); printf("n");
t++;
printf("是否继续添加y/n:");
getchar();
ch=getchar();
printf("n");
}while(ch=='y');
sum_stu();
print();
}
void delet()//删除数据
{
char num1[10];
int i,j,count=0;
printf("输入想要删除的学生的学号");
scanf("%s",num1);
for (i=1;i<=t;i++)
if(strcmp(num1,stu[i].num)==0)
{
for(j=i;j<t+1;j++)
stu[j]=stu[j+1];
count++;
t--;
}
if(count==0)printf("没有该生信息!");
elseprint();
}
void sort_stu() //排序
{
intk,j,i;
structstudent temp;
printf("tt----------------------------------n");
printf("ttt1.数学成绩排序n");
printf("ttt2.程序设计成绩排序n");
printf("ttt3.总分排序n");
printf("ttt4.返回主菜单n");
printf("tt----------------------------------n");
printf("请按序号选择相应操作:");
scanf("%d",&k);
if(k==1)
{
for(i=1;i<t;i++)
for(j=i+1;j<=t;j++)
if(stu[i].math<stu[j].math)
{temp=stu[i];stu[i]=stu[j];stu[j]=temp;}
print();
}
else if(k==2)
{
for(i=1;i<t;i++)
for(j=i+1;j<=t;j++)
if(stu[i].proj<stu[j].proj)
{temp=stu[i];stu[i]=stu[j];stu[j]=temp;}
print();
}
else if(k==3)
{
for(i=1;i<t;i++)
for(j=i+1;j<=t;j++)
if(stu[i].sum<stu[j].sum)
{temp=stu[i];stu[i]=stu[j];stu[j]=temp;}
print();
}
else main();
}
void search_num()
{
charm[10];int i, count=0;
printf("输入学号:");
scanf("%s",m);
for(i=1;i<=t;i++)
if(strcmp(m,stu[i].num)==0){printf("%s%s%d%d%dn",stu[i].num,stu[i].name,stu[i].math,stu[i].proj,stu[i].sum);count++;}
if (count==0) printf("没有相关信息!n");
}
void search_name()
{
charm[10];int i,count=0;
printf("输入姓名:");
scanf("%s",m);
for(i=1;i<=t;i++)
if(strcmp(m,stu[i].name)==0){printf("%s%s%d%d%dn",stu[i].num,stu[i].name,stu[i].math,stu[i].proj,stu[i].sum);count++;}
if (count==0)printf("没有相关信息!n");
}
void search_math()
{
intm,i,count=0;
printf("输入数学成绩:") ;
scanf("%d",&m);
for(i=1;i<=t;i++)
if(m<=stu[i].math){printf("%s%s%d%d%dn",stu[i].num,stu[i].name,stu[i].math,stu[i].proj,stu[i].sum);count++;}
printf("人数:%dn",count);
if(count=0)printf("没有大于该分数的同学!n");
}
void search_proj()
{
intm,i,count=0;
printf("输入程序设计成绩:");
scanf("%d",&m);
for(i=1;i<=t;i++)
if(m<=stu[i].proj){printf("%s%s%d%d%dn",stu[i].num,stu[i].name,stu[i].math,stu[i].proj,stu[i].sum);count++;}
printf("人数:%dn",count);
if(count==0)printf("没有大于该分数的同学!n");
}
void search_sum()
{
intm,i,count=0;
printf("输入分数:");
scanf("%d",&m);
for(i=1;i<=t;i++)
if(m<=stu[i].sum){printf("%s%s%d%d%dn",stu[i].num,stu[i].name,stu[i].math,stu[i].proj,stu[i].sum);count++;}
printf("人数:%dn",count);
if(count==0)printf("没有大于该分数的同学!n");
}
void search() //查询
{
int k;
printf("tt--------------------------------------------n");
printf("ttt1.学号查询n");
printf("ttt2.姓名查询n");
printf("ttt3.数学成绩查询n");
printf("ttt4.程序设计成绩查询n");
printf("ttt5.总分查询n");
printf("ttt6.返回主菜单n");
printf("tt---------------------------------------------n");
printf("请按序号选择相应操作:");
scanf("%d",&k);
if(k!=6)
{
switch(k)
{
case 1:search_num();break;
case 2:search_name();break;
case 3:search_math();break;
case 4:search_proj();break;
case 5:search_sum();break;
case 6:main();break;
default: printf("输入错误");
}
}
}