如何制作学生成绩查询系统
制作查询系统步骤1:首先来看一下小编设计的查询界面如图所示。学生成绩表的原始数据在sheet2工作表中。小编这里就选了12名同学成绩作为示例。
制作查询系统步骤2:单击选中B9单元格,依次单击“插入”--“函数…”。
制作查询系统步骤3:在“全部”函数中找到“vlookup”,单击“确定”按钮。红圈中提示该函数的功能(对于该函数还不太了解的童鞋可以参看小编的有关vlookup函数的经验)。
制作查询系统步骤4:第一个参数“Lookup_value”处我们单击“B3”单元格,当然也可以直接输入“B3”。
制作查询系统步骤5:第二个参数“Table_array”,我们单击sheet2工作表,选中数据区域,如图所示。
制作查询系统步骤6:第三个参数“Col_index_num”,这是满足条件单元格的列序号,我们这里要查询考试名称,当然填“2”,即第二列。其它字段的列序号如图所示。
制作查询系统步骤7:第四个参数是“Range_lookup”,即要求精确匹配还是模糊匹配。这里我们填“0”,要求精确匹配。
制作查询系统步骤8:单击“确定”以后,我们对函数修改一下,如图中红框处所示。这样修改便于我们后面的函数填充。
制作查询系统步骤9:修改好了直接回车,然后用填充柄直接填充函数。后面我们做一些小的修改。比如,要查询“姓名”,当然是第三列,所以这里修改为3即可。
制作查询系统步骤10:以此类推,修改其它字段的函数。例如排名处我们修改函数如图中红框处所示即可。
制作查询系统步骤11:测试一下,输入学号1101,回车后,查询结果全部返回正确,即我们的函数使用正确。
制作查询系统步骤12:下面我们对输入的学号进行约束。单击B2单元格,依次单击“数据”--“有效性…”。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000
struct stu
{
char id[8]
char name[8]
扩展资料:
short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)
复杂类型关键字
struct:结构体声明。(K&R时期引入)
union:联合体声明。(K&R时期引入)
enum:枚举声明。(C89标准新增)
typedef:声明类型别名。(K&R时期引入)
sizeof:得到特定类型或特定类型变量的大小。(K&R时期引入)
inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)
参考资料来源:百度百科-c语言
struct Student
{
char ID[20]
char Name[20]
float Mark1
float Mark2
float Mark3
float Average
}
struct Student students[1000]
int num=0
float Avg(struct Student stu)
{
return (stu.Mark1+stu.Mark2+stu.Mark3)/3
}
int Student_SearchByIndex(char id[])
{
int i
for (i=0i<numi++)
{
if (strcmp(students[i].ID,id)==0)
{
return i
}
}
return -1
}
int Student_SearchByName(char name[])
{
int i
for (i=0i<numi++)
{
if (strcmp(students[i].Name,name)==0)
{
return i
}
}
return -1
}
void Student_DisplaySingle(int index)
{
printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩")
printf("-------------------------------------------------------------\n")
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,
students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average)
}
void Student_Insert()
{
while(1)
{
printf("请输入学号:")
scanf("%s",&students[num].ID)
getchar()
printf("请输入姓名:")
scanf("%s",&students[num].Name)
getchar()
printf("请输入成绩:")
scanf("%f",&students[num].Mark1)
getchar()
printf("请输入成绩:")
scanf("%f",&students[num].Mark2)
getchar()
printf("请输入成绩:")
scanf("%f",&students[num].Mark3)
getchar()
students[num].Average=Avg(students[num])
num++
printf("是否继续?(y/n)")
if (getchar()=='n')
{
break
}
}
}
void Student_Modify()
{
float mark1,mark2,mark3
while(1)
{
char id[20]
int index
printf("请输入要修改的学生的学号:")
scanf("%s",&id)
getchar()
index=Student_SearchByIndex(id)
if (index==-1)
{
printf("学生不存在!\n")
}
else
{
printf("你要修改的学生信息为:\n")
Student_DisplaySingle(index)
printf("-- 请输入新值--\n")
printf("请输入学号:")
scanf("%s",&students[index].ID)
getchar()
printf("请输入姓名:")
scanf("%s",&students[index].Name)
getchar()
printf("请输入成绩:")
scanf("%f",&students[index].Mark1)
getchar()
printf("请输入成绩:")
scanf("%f",&students[index].Mark2)
getchar()
printf("请输入成绩:")
scanf("%f",&students[index].Mark3)
getchar()
students[index].Average=Avg(students[index])
}
printf("是否继续?(y/n)")
if (getchar()=='n')
{
break
}
}
}
void Student_Delete()
{
int i
while(1)
{
char id[20]
int index
printf("请输入要删除的学生的学号:")
scanf("%s",&id)
getchar()
index=Student_SearchByIndex(id)
if (index==-1)
{
printf("学生不存在!\n")
}
else
{
printf("你要删除的学生信息为:\n")
Student_DisplaySingle(index)
printf("是否真的要删除?(y/n)")
if (getchar()=='y')
{
for (i=indexi<num-1i++)
{
students[i]=students[i+1]
}
num--
}
getchar()
}
printf("是否继续?(y/n)")
if (getchar()=='n')
{
break
}
}
}
void Student_Select()
{
while(1)
{
char name[20]
int index
printf("请输入要查询的学生的姓名:")
scanf("%s",&name)
getchar()
index=Student_SearchByName(name)
if (index==-1)
{
printf("学生不存在!\n")
}
else
{
printf("你要查询的学生信息为:\n")
Student_DisplaySingle(index)
}
printf("是否继续?(y/n)")
if (getchar()=='n')
{
break
}
}
}
void Student_SortByAverage()
{
int i,j
struct Student tmp
for (i=0i<numi++)
{
for (j=1j<num-ij++)
{
if (students[j-1].Average<students[j].Average)
{
tmp=students[j-1]
students[j-1]=students[j]
students[j]=tmp
}
}
}
}
void Student_Display()
{
int i
printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩")
printf("-------------------------------------------------------------\n")
for (i=0i<numi++)
{
printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,
students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average)
}
}
void IO_ReadInfo()
{
FILE *fp
int i
if ((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打开文件!\n")
return
}
if (fread(&num,sizeof(int),1,fp)!=1)
{
num=-1
}
else
{
for(i=0i<numi++)
{
fread(&students[i],sizeof(struct Student),1,fp)
}
}
fclose(fp)
}
void IO_WriteInfo()
{
FILE *fp
int i
if ((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打开文件!\n")
return
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("写入文件错误!\n")
}
for (i=0i<numi++)
{
if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
{
printf("写入文件错误!\n")
}
}
fclose(fp)
}
main()
{
int choice
IO_ReadInfo()
while(1)
{
printf("\n------ 学生成绩管理系统------\n")
printf("1. 增加学生记录\n")
printf("2. 修改学生记录\n")
printf("3. 删除学生记录\n")
printf("4. 按姓名查询学生记录\n")
printf("5. 按平均成绩排序\n")
printf("6. 退出\n")
printf("请选择(1-6):")
scanf("%d",&choice)
getchar()
switch(choice)
{
case 1:
Student_Insert()
break
case 2:
Student_Modify()
break
case 3:
Student_Delete()
break
case 4:
Student_Select()
break
case 5:
Student_SortByAverage()
Student_Display()
break
case 6:
exit()
break
}
IO_WriteInfo()
}
}
#include <iostream>
#include <string>
using namespace std
//N代表科目数,M代表人数
#define N 2
#define M 3
class student
{public:
float score[N]
string name
float average
float total
int rank
student()
void inscore()
void calav()
void caltt()
void show()
}
void student::inscore()
{
int i
cout<<"输入姓名:"
cin>>name
cout<<"输入成绩:"
for(i=0i<Ni++)
{
cin>>score[i]
}
caltt()
calav()
}
void student::calav()
{
average=total/N
}
void student::caltt()
{
int i
for(i=0i<Ni++)
total+=score[i]
}
void student::show()
{
int i
cout<<rank<<" "<<name<<" "
for(i=0i<Ni++)
cout<<score[i]<<" "
cout<<endl
}
void setrank(student sys[M])
{
int i,j
student tmp=sys[0]
for(i=0i<M-1i++)
{
for(j=i+1j<Mj++)
if(sys[j].average>sys[i].average)
{
tmp=sys[j]
sys[j]=sys[i]
sys[i]=tmp
}
sys[i].rank=i+1
}
sys[i].rank=i+1
}
void findsc(student sys[M])
{
string n
int i
cout<<"请输入查询的名字:"
cin>>n
cout<<"排名 "<<"姓名 "<<"--成绩--"<<endl
for(i=0i<Mi++)
if(sys[i].name==n)
{
sys[i].show()
}
}
void findrank(student sys[M])
{
string n
int i
cout<<"请输入查询的名字:"
cin>>n
for(i=0i<Mi++)
if(sys[i].name==n) cout<<sys[i].rank
}
void find10(student sys[M])
{
int j
cout<<"排名 "<<"姓名 "<<"--成绩--"<<endl
for(j=0j<10j++)
sys[j].show()
}
void findgrade(student sys[M])
{
int i,j
cout<<"1.>=85 2.>=753.>=604.<60"<<endl
cin>>i
switch(i)
{
case 1:
{
cout<<"排名 "<<"姓名 "<<"--成绩--"<<endl
for(j=0j<Mj++)
sys[j].show()
}
break
case 2:
{
cout<<"排名 "<<"姓名 "<<"--成绩--"<<endl
for(j=0j<Mj++)
if(sys[j].average>=75 &&sys[j].average<85) sys[j].show()
}
break
case 3:
{
cout<<"排名 "<<"姓名 "<<"--成绩--"<<endl
for(j=0j<Mj++)
sys[j].show()
}
break
case 4:
{
cout<<"排名 "<<"姓名 "<<"--成绩--"<<endl
for(j=0j<Mj++)
if(sys[j].average<60) sys[j].show()
}
break
}
}
void findbad(student sys[M])
{
int i,j,k
for(i=0i<Mi++)
{
k=0
cout<<"排名 "<<"姓名 "<<"--成绩--"<<endl
for(j=0j<Nj++)
{
if(sys[i].score[j]<60) k++
if(k==3)
}
}
}
void pub(student sys[M])
{
int i
cout<<"排名 "<<"姓名 "<<"--成绩--"<<endl
for(i=0i<Mi++)
sys[i].show()
}
int main()
{
student st[M]
int i,j
while(1)
{
cout<<
"-------------------------------\n"<<
"1.输入成绩\n"<<
"2.查询任一学生成绩\n"<<
"3.查询任一学生排名\n"<<
"4.查询前十的学生\n"<<
"5.查询成绩级别的情况\n"<<
"6.查询三门不及格的学生\n"<<
"7.按成绩高低,顺序输入所有学生\n"<<
"-------------------------------"<<endl
cin>>i
switch(i)
{
case 1:
for(j=0j<Mj++)
{
cout<<"输入第"<<j+1<<"个学生的成绩"<<endl
st[j].inscore()
}
setrank(st)
break
case 2:findsc(st)system("pause")break
case 3:findrank(st)system("pause")break
case 4:find10(st)system("pause")break
case 5:findgrade(st)system("pause")break
case 6:findbad(st)system("pause")break
case 7:pub(st)system("pause")break
}
}
return 0
}