(1)这个要求最简单,用prinf语句直接输出相关信息即可。
(2)这个要求也容易,用for语句实现循环,循环体用sanf语句,加system("pause")语句,就可以实现键盘输入回车确定。接受键盘数据的变量要用数组,这个关系到后面的统计排序。用if(a【i】==0) break即输入0回车就退出循环。
(3)通过for语句对数组a进行遍历,统计之前输入序号的个数(其实在(2)中就可以统计)保存另一个数组b中。然后对这个数组b的数据进行降序排列。
(4)这个要求只是考查C语言创建、读取和写入文件操作的要求而已,熟悉一下相关代码使用方法即可,分别写入数组a、数组b就行了。
#include<stdio.h>#include <stdlib.h>
#include <string.h>
typedef struct
{
long class_1//班级
long number//学号
char name[20]//姓名
float math//数学
float c_program//C语言
float physics//大学物理
float english//大学英语
float polity//政治
float sport//体育
float summary//总分
float average//平均分
}Student
Student stud[100]//定义结构体数组变量的大小
int i=0//i用于记录输入的学生的个数
int menu() //菜单函数
{
int a
printf("***********************学生信息管理系统*************************\n")
//菜单选择
printf("\t\t【1】输入学生信息\n")
printf("\t\t【2】显示所有学生的信息\n")
printf("\t\t【3】按平均分升降排序\n")
printf("\t\t【4】根据学生的学号查找学生的信息\n")
printf("\t\t【5】插入学生的信息\n")
printf("\t\t【6】删除学生的信息\n")
printf("\t\t【7】修改学生的信息\n")
printf("\t\t【8】从文件中读入数据\n")
printf("\t\t【9】将所有记录写入文件\n")
printf("\t\t【0】退出本系统\n")
printf("***********************学生信息管理系统*************************\n")
printf("请选择你要的操作【0-9】:")
scanf("%d",&a)//读入一个数
while(a<0 || a>9)
{
printf("输入错误!请重新输入。\n")
scanf("%d",&a)//输入错误就一直循环!^_^
}
system("cls")//清屏
return(a)//返回a的值
}
int input(Student stud[]) //输入学生信息
{
char flag='Y'
while(flag=='y' || flag=='Y') //判断
{
printf("请输入该学生的班别:")//交互输入学生信息
scanf("%ld",&stud[i].class_1)
printf("请输入该学生的学号:")
scanf("%ld",&stud[i].number)
printf("请输入该学生的姓名:")
scanf("%s",&stud[i].name)
printf("请输入该学生的“数学”分数:")
scanf("%f",&stud[i].math)
printf("请输入该学生的“C程序设计语言”分数:")
scanf("%f",&stud[i].c_program)
printf("请输入该学生的“大学物理”分数:")
scanf("%f",&stud[i].physics)
printf("请输入该学生的“大学英语”分数:")
scanf("%f",&stud[i].english)
printf("请输入该学生的“体育”分数:")
scanf("%f",&stud[i].sport)
printf("请输入该学生的“政治”分数:")
scanf("%f",&stud[i].polity)
getchar()//用于消除回车键
stud[i].summary=stud[i].math+stud[i].c_program+stud[i]. physics
+stud[i].english+stud[i].sport+stud[i].polity
stud[i].average=stud[i].summary/6
printf("该学生的总分为:%6.2f\t平均分为:%6.2f\n",stud[i].summary,stud[i].average)
i++
printf("继续输入学生信息请按:Y or y,退出请按:N or n.\n")
scanf("%c",&flag)//判断是否继续输入
}
printf("按任意键回主菜单\n")
getchar()
system("cls")
return(i)
}
void Display(Student stud[],int n) //显示所有记录
{
int k
if(n==0)
printf("暂无学生记录!\n")
else
{
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n")
for(k=0k<nk++) //循环输出
{
printf("%7ld",stud[k].class_1)
printf("%7ld",stud[k].number)
printf("%9s",stud[k].name)
printf("%7.2f",stud[k].math)
printf("%7.2f",stud[k].c_program)
printf("%7.2f",stud[k].physics)
printf("%7.2f",stud[k].english)
printf("%7.2f",stud[k].sport)
printf("%7.2f",stud[k].polity)
printf("%7.2f",stud[k].summary)
printf("%8.2f\n",stud[k].average)
}
}
system("pause")
system("cls")
}
void Sort(Student stud[],int i) //按平均分排序
{
int m,n,k//m,n为循环变量
Student t
for(m=0m<i-1m++) //排序
for(n=m+1n<in++)
if(stud[m].average<stud[n].average)
{
t=stud[m]
stud[m]=stud[n]
stud[n]=t
}
printf("排序后的顺序为:\n")
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n")
for(k=0k<ik++) //循环输出
{
printf("%7ld",stud[k].class_1)
printf("%7d",stud[k].number)
printf("%9s",stud[k].name)
printf("%7.2f",stud[k].math)
printf("%7.2f",stud[k].c_program)
printf("%7.2f",stud[k].physics)
printf("%7.2f",stud[k].english)
printf("%7.2f",stud[k].sport)
printf("%7.2f",stud[k].polity)
printf("%7.2f",stud[k].summary)
printf("%8.2f\n",stud[k].average)
}
system("pause")
system("cls")
}
void Search(Student stud[],int i) //查找并显示一个记录
{
int p,k//p为要查找的学生学号,t为循环节,s用来判断循环是否结束
char flag='y'
while(flag=='y' || flag=='Y')
{
printf("请输入要查找的学生学号:")
scanf("%d",&p)
getchar()
for(k=0p!=stud[k].number &&k<ik++)
if(k==i)printf("该学号不存在!\n")
else {
printf("该学生的信息为:\n")
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n")
printf("%7ld",stud[k].class_1)
printf("%7ld",stud[k].number)
printf("%9s",stud[k].name)
printf("%7.2f",stud[k].math)
printf("%7.2f",stud[k].c_program)
printf("%7.2f",stud[k].physics)
printf("%7.2f",stud[k].english)
printf("%7.2f",stud[k].sport)
printf("%7.2f",stud[k].polity)
printf("%7.2f",stud[k].summary)
printf("%8.2f\n",stud[k].average)
}
printf("继续查找学生信息请输入:Y or y,退出输入:N or n\n")
scanf("%c",&flag)//判断是否继续输入
}
system("cls")
}
int Insert(Student stud[],int i) //插入学生的信息
{
char flag='Y'
while(flag=='y' || flag=='Y')
{
printf("请输入要插入学生的班别:")//交互输入学生信息
scanf("%ld",&stud[i].class_1)
printf("请输入要插入学生的学号:")
scanf("%ld",&stud[i].number)
printf("请输入要插入学生的姓名:")
scanf("%s",&stud[i].name)
printf("请输入要插入学生的“数学”分数:")
scanf("%f",&stud[i].math)
printf("请输入要插入学生的“C程序设计语言”分数:")
scanf("%f",&stud[i].c_program)
printf("请输入要插入学生的“大学物理”分数:")
scanf("%f",&stud[i].physics)
printf("请输入要插入学生的“大学英语”分数:")
scanf("%f",&stud[i].english)
printf("请输入要插入学生的“体育”分数:")
scanf("%f",&stud[i].sport)
printf("请输入要插入学生的“政治”分数:")
scanf("%f",&stud[i].polity)
getchar()
stud[i].summary=stud[i].math+stud[i].c_program+stud[i]. physics
+stud[i].english+stud[i].sport+stud[i].polity
stud[i].average=stud[i].summary/6
printf("该学生的总分为:%6.2f\n",stud[i].summary)
printf("该学生的平均分为:%6.2f\n",stud[i].average)
i++
printf("继续输入学生信息请输入:Y or y,退出输入:N or n\n")
scanf("%c",&flag)//判断是否继续输入
}
getchar()
printf("是否需要排序,需要请按‘Y’或‘y’;不需要请按‘N’或‘n’.\n")
flag=getchar()
if(flag=='y' || flag=='Y')Sort(stud,i)
system("cls")
return(i)
}
int Delete(Student stud[],int i) //根据输入的学号删除学生的信息
{
long s
int t,p
char a='Y'//判断循环是否继续
while(a=='y' || a=='Y')
{
printf("请输入需要删除学生的学号:\n")//采用交互式删除
scanf("%ld",&s)
getchar()//消除回车键的影响
for(t=0t<i &&s!=stud[t].numbert++)
if(s==stud[t].number)
{
for(p=tp<ip++)
stud[p]=stud[p+1]
i=i-1
printf("删除成功!\n")
}
else printf("没有找到要删除的学号!\n")
printf("是否继续删除,继续请按'Y'或'y',退出请按'N'或'n'.\n")
a=getchar()//判断是否继续
getchar()//消除回车键的影响
}
system("cls")
return(i)
}
void change(Student stud[],int i) //修改学生的信息
{
long p=0//p用来表示要删除的学生的学号
int k//k为循环变量
char a='y'
while(a=='y' || a=='Y')
{
printf("\t\t学生信息修改:\n")
printf("请输入要修改的学生的学号:\n")
scanf("%ld",&p)
for(k=0p!=stud[k].number &&k<ik++)
if(k==i)printf("无法找到该学生的信息\n")
else {
printf("该学生的信息为:\n")
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n")
printf("%7ld",stud[k].class_1)
printf("%7ld",stud[k].number)
printf("%9s",stud[k].name)
printf("%7.2f",stud[k].math)
printf("%7.2f",stud[k].c_program)
printf("%7.2f",stud[k].physics)
printf("%7.2f",stud[k].english)
printf("%7.2f",stud[k].sport)
printf("%7.2f",stud[k].polity)
printf("%7.2f",stud[k].summary)
printf("%8.2f\n",stud[k].average)
printf("请输入该学生的新信息:\n")
printf("请输入该学生的班级:")//交互输入学生信息
scanf("%d",&stud[k].class_1)
printf("请输入该学生的学号:")
scanf("%d",&stud[k].number)
printf("请输入该学生的姓名:")
scanf("%s",&stud[k].name)
printf("请输入该学生的“数学”分数:")
scanf("%f",&stud[k].math)
printf("请输入该学生的“C程序设计语言”分数:")
scanf("%f",&stud[k].c_program)
printf("请输入该学生的“大学物理”分数:")
scanf("%f",&stud[k].physics)
printf("请输入该学生的“大学英语”分数:")
scanf("%f",&stud[k].english)
printf("请输入该学生的“体育”分数:")
scanf("%f",&stud[k].sport)
printf("请输入该学生的“政治”分数:")
scanf("%f",&stud[k].polity)
getchar()
stud[k].summary=stud[k].math+stud[k].c_program+stud[k]. physics
+stud[k].english+stud[k].sport+stud[k].polity
stud[k].average=stud[k].summary/6
printf("修改成功!\n")
}
printf("是否继续修改,继续请按'Y'或'y',退出请按'N'或'n'.\n")
a=getchar()//判断是否继续
}
system("pause")
system("cls")
}
int Read(Student stud[],int i) //从文件中读入学生信息
{
int k=i
FILE *fp//定义一个文件类型的指针
char filename[20]//定义文件名
printf("请输入文件名:\n")
scanf("%s",&filename)//输入文件名
if((fp=fopen(filename,"rb"))==NULL) //打开文件
{
printf("无法打开该文件!\n")//打开失败信息
return 0
}
printf("从文件%s中读入的数据为:\n",filename)
printf(" 班别 学号 姓名 数学 C语言 物理 英语 体育 政治 总分 平均分\n")
while(!feof(fp))
{
fread(&stud[k],sizeof(Student),1,fp)
printf("%7ld",stud[k].class_1)
printf("%7ld",stud[k].number)
printf("%9s",stud[k].name)
printf("%7.2f",stud[k].math)
printf("%7.2f",stud[k].c_program)
printf("%7.2f",stud[k].physics)
printf("%7.2f",stud[k].english)
printf("%7.2f",stud[k].sport)
printf("%7.2f",stud[k].polity)
printf("%7.2f",stud[k].summary)
printf("%8.2f\n",stud[k].average)
k++
}
fclose(fp)
printf("读入成功,\n")
system("pause")
system("cls")
return(k)
}
void Save(Student stud[],int i) //将所有记录写入文件
{
int k=0
FILE *fp//定义文件指针
char filename[20]//定义文件名
printf("请输入你要存储学生信息的文件名:")//输入文件名
scanf("%s",&filename)
if((fp=fopen(filename,"wb"))==NULL) //打开文件
{
printf("无法打开该文件!\n")//打开失败信息
return
}
printf("保存到文件%s里的信息为:\n",filename)
while(k<i)
{
fwrite(&stud[k],sizeof(Student),1,fp)
printf("%7ld",stud[k].class_1)
printf("%7d",stud[k].number)
printf("%9s",stud[k].name)
printf("%7.2f",stud[k].math)
printf("%7.2f",stud[k].c_program)
printf("%7.2f",stud[k].physics)
printf("%7.2f",stud[k].english)
printf("%7.2f",stud[k].sport)
printf("%7.2f",stud[k].polity)
printf("%7.2f",stud[k].summary)
printf("%8.2f\n",stud[k].average)
k++
}
fclose(fp)
printf("信息保存成功,")
system("pause")
system("cls")
}
int main() //主函数
{
int n=0
while(1)
{
switch(menu()) //选择判断要执行的语句
{
case 1:
printf("\n*******输入学生信息*******\n")
//输入学生信息
n=input(stud)break
case 2:
printf("\n*******显示所有学生的信息*******\n")
//显示所有学生的信息
Display(stud,n)break
case 3:
printf("\n*******按平均分升降排序*******\n")
//给学生成绩排序
Sort(stud,n)break
case 4:
printf("\n*******根据学生的学号查找学生的信息*******\n")
//根据输入的学号查找学生的信息
Search(stud,n)break
case 5:
printf("\n*******插入学生的信息*******\n")
//插入学生的信息
n=Insert(stud,n)break
case 6:
printf("\n*******删除学生的信息*******\n")
//删除学生的信息
n=Delete(stud,n)break
case 7:
printf("\n*******修改学生的信息*******\n")
//修改学生的信息
change(stud,n)break
case 8:
printf("\n*******从文件中读入数据*******\n")
//从文件中读入数据
n=Read(stud,n)break
case 9:
printf("\n*******将所有记录写入文件*******\n")
//将所有记录写入文件
Save(stud,n)break
case 0:
printf("\n*******感谢您的使用*******\n")
//结束程序
exit(0)
}
}
return 0
}