(1)题目:学生成绩管理系统
(2)设计要求:
(2.1)输入一个班的学生的基本信息(包括学号,姓名,性别和五门课程成绩)。
(2.2)按姓名或者学号查找、修改、删除和保存各位同学的信息。
(2.3)计算每个学生各门功课总分和平均分,按学号或总分排序出每个学生的信息及总分和平均分和名次。
(2.4)计算全班各门功课的平均分,显示每门课程中低于平均分的每一个同学的信息。
(2.5)显示每门科目中,成绩在90分以上的学生信息,以及每门科目中不及格的学生信息。
(2.6)以菜单进行管理,正确输入密码后进入系统,将输入的信息保存到文件中以备后续使用。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define HEADER printf("姓名\t学号\t性别\t语文\t数学\t英语\t体育\t政治\n")
#define PRINT printf("%s\t%d\t%s\t%d\t%d\t%d\t%d\t%d\n",student[i].name, student[i].id, student[i].sex, student[i].Chinese, student[i].Maths, student[i].English, student[i].PE, student[i].Politics)
#define HEADER1 printf("姓名\t学号\t性别\t语文\t数学\t英语\t体育\t政治\t总分\t平均分\t名次\n")
#define PRINT1 printf("%s\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%.2f\t%.2f\t%d\n", student[i].name, student[i].id, student[i].sex, student[i].Chinese, student[i].Maths, student[i].English, student[i].PE, student[i].Politics, student[i].sum, student[i].average, i+1);
int N=0;
struct student{
int id;//学号
char name[30];//名字
char sex[20];//性别
int Chinese;//语文
int Maths;//数学
int English;//英语
int PE;//体育
int Politics;//政治
double sum;//总分
double average;//平均分
}student[10];
void check()
{
char userName[5];//用户名
char userPWD[5];//密码
int i;
for(i=1; i<4; i++){
/*用户名和密码均为123*/
printf("\n 请您输入您的用户名(123):");
scanf("%s", userName);
printf("\n 请您输入您的密码(123):");
scanf("%s", userPWD);
if(((strcmp(userName,"123"))==0)&&((strcmp(userPWD,"123"))==0))//验证用户名和密码
{
printf("密码正确!\n");
break;
}else{
if(i<3){
printf("用户名或密码错误,请重新输入!\n");
}else{
printf("您已连续3次将用户名或密码输入错误,系统将退出!\n");
exit(1);
}
}
}
system("cls");
}
int namesearch()//按姓名查询
{
int i, flag=0;
char name[30];
printf("请输入姓名:");
scanf("%s", name);
for(i=0; i<N; i++){
if((strcmp(name,student[i].name))==0){
flag=1;
break;
}
}
if(flag==0)
return -1;
else
return i;
}
int idsearch()//按学号查询
{
int i, flag=0, id;
printf("请输入学号:");
scanf("%d", &id);
for(i=0; i<N; i++){
if(id==student[i].id){
flag=1;break;
}
}
if(flag==0)
return -1;
else
return i;
}
void idline()//按学号排序
{
int i, j;
for(i=1; i<N; i++){
for(j=0; j<N-i; j++){
if(student[j].id<student[j+i].id){
student[N]=student[j];
student[j]=student[j+1];
student[j+1]=student[N];
}
}
}
}
void sumline()//按总分排序
{
int i, j;
for(i=1; i<N; i++){
for(j=0; j<N-i; j++){
if(student[j].sum<student[j+1].sum){
student[N]=student[j];
student[j]=student[j+1];
student[j+1]=student[N];
}
}
}
}
double Chinese()//语文平均分
{
int i, k;
double result;
for(i=0; i<N; i++){
k+=student[i].Chinese;
}
result=(double)k/N;
return result;
}
double Maths()//数学平均分
{
int i, k;
double result;
for(i=0; i<N; i++){
k+=student[i].Maths;
}
result=(double)k/N;
return result;
}
double English()//英语平均分
{
int i, k;
double result;
for(i=0; i<N; i++){
k+=student[i].English;
}
result=(double)k/N;
return result;
}
double PE()//体育平均分
{
int i, k;
double result;
for(i=0; i<N; i++){
k+=student[i].PE;
}
result=(double)k/N;
return result;
}
double Politics()//政治平均分
{
int i, k;
double result;
for(i=0; i<N; i++){
k+=student[i].Politics;
}
result=(double)k/N;
return result;
}
void shuru(int i)//输入学生信息
{
int a;
printf("请输入该生的姓名:\n");
scanf("%s", student[i].name);
printf("请输入该生的学号:\n");
scanf("%d", &student[i].id );
printf("请输入该生的性别:\n (1) 男\n (2) 女\n");
scanf("%d", &a);
switch(a){
case 1:strcpy(student[i].sex,"男"); break;
case 2:strcpy(student[i].sex,"女"); break;
default:printf("选择错误,请重新选择\n");break;
}
printf("请输入该生的语文成绩:\n");
scanf("%d", &student[i].Chinese);
printf("请输入该生的数学成绩:\n");
scanf("%d", &student[i].Maths );
printf("请输入该生的英语成绩:\n");
scanf("%d", &student[i].English);
printf("请输入该生的体育成绩:\n");
scanf("%d", &student[i].PE );
printf("请输入该生的政治成绩:\n");
scanf("%d", &student[i].Politics);
student[i].sum =(double)(student[i].Chinese +student[i].English +student[i].Maths +student[i].PE +student[i].Politics );
student[i].average =(double)student[i].sum /5;
printf("输入完毕!\n");
}
void first()//保存学生信息
{
int i, n;
printf("请输入你要输入的学生个数:");
scanf("%d", &n);
for(i=N;i<n+N;i++){
shuru(i);//输入数据
}
N=n+N;
system("pause");
}
void second()//修改学生成绩
{
char name[30], sex[20];
int i, choice;
if(N>0){
printf(" (1) 按姓名修改\n (2) 按学号修改\n 请选择:");
scanf("%d", &choice);
switch(choice){
case 1:i=namesearch();
if(i!=-1){
printf("找到了!\n");
HEADER;
PRINT;
shuru(i);
}else
printf("未找到该生数据!\n");break;
case 2:i=idsearch();
if(i!=-1){
printf("找到了!\n");
HEADER;
PRINT;
shuru(i);
}else
printf("未找到该生数据!\n");break;
default:printf("输入错误!\n");break;
}
}else
printf("没有学生数据!\n");
system("pause");
}
void third()//删除学生信息
{
char name[30], sex[20];
int i, choice, a, j;
if(N>0){
printf(" (1) 按姓名删除\n (2) 按学号删除\n 请选择:");
scanf("%d", &choice);
switch(choice){
case 1:i=namesearch();
if(i!=-1){
printf("找到了!\n");
HEADER;
PRINT;
for(j=i;j<N-1;j++){
student[j]=student[j+1];
}
N--;
printf("删除完毕!\n");
}else
printf("未找到该生数据!\n");break;
case 2:i=idsearch();
if(i!=-1){
printf("找到了!\n");
HEADER;
PRINT;
for(j=i; j<N-1; j++){
student[j]=student[j+1];
}
N--;
printf("删除完毕!\n");
}else
printf("未找到该生数据!\n");break;
default:printf("输入错误!\n");break;
}
}else
printf("没有学生数据!\n");
system("pause");
}
void fourth()//查找学生信息
{
int i, choice;
if(N>0){
printf(" (1) 按姓名查找\n (2)按学号查找\n 请选择:");
scanf("%d", &choice);
switch(choice){
case 1:i=namesearch();
if(i!=-1){
printf("找到了!\n");
HEADER;
PRINT;
}else
printf("未找到该生数据!\n");break;
case 2:i=idsearch();
if(i!=-1){
printf("找到了!\n");
HEADER;
PRINT;
}else
printf("未找到该生数据!\n");break;
default:printf("输入错误!\n");break;
}
}else
printf("没有学生数据!\n");
system("pause");
}
void fifth()//排序学生成绩
{
int i, choice;
if(N>0){
printf(" (1) 按学号排序\n (2)按总分排序\n 请选择:");
scanf("%d", &choice);
switch(choice){
case 1:
idline();
HEADER1;
for(i=0; i<N; i++){
PRINT1;
}
break;
case 2:
sumline();
HEADER1;
for(i=0; i<N; i++){
PRINT1;
}
break;
default:printf("输入错误!\n");break;
}
}else
printf("没有学生数据!\n");
system("pause");
}
void sixth()//查看各门功课的平均分
{
int i;
double result;
printf("语文:\n");
result=Chinese();//result等于语文平均分
HEADER;
for(i=0; i<N; i++){
if(result>(double)student[i].Chinese)
PRINT;
}
printf("数学:\n");
result=Maths();
HEADER;
for(i=0; i<N; i++){
if(result>student[i].Maths)
PRINT;
}
printf("英语:\n");
result=English();
HEADER;
for(i=0; i<N; i++){
if(result>student[i].English );
PRINT;
}
printf("体育:\n");
result=PE();
for(i=0; i<N;i++){
if(result>student[i].PE );
PRINT;
}
printf("政治:\n");
result=Politics();
for(i=0; i<N; i++){
if(result>student[i].Politics );
PRINT;
}
system("pause");
}
void seventh()//查看各门功课情况
{
int i;
printf("语文:\n成绩90分以上:\n");
HEADER;
for(i=0;i<N;i++){
if(90<=student[i].Chinese );
PRINT;
}
printf("不及格学生:\n");
HEADER;
for(i=0;i<N;i++){
if(60>student[i].Chinese)
PRINT;
}
printf("数学:\n成绩90分以上:\n");
HEADER;
for(i=0;i<N;i++){
if(90<=student[i].Maths );
PRINT;
}
printf("不及格学生:\n");
HEADER;
for(i=0;i<N;i++){
if(60>student[i].Maths)
PRINT;
}
printf("英语:\n成绩90分以上:\n");
HEADER;
for(i=0;i<N;i++){
if(90<=student[i].English );
PRINT;
}
printf("不及格学生:\n");
HEADER;
for(i=0;i<N;i++){
if(60>student[i].English)
PRINT;
}
printf("体育:\n成绩90分以上:\n");
HEADER;
for(i=0;i<N;i++){
if(90<=student[i].PE );
PRINT;
}
printf("不及格学生:\n");
HEADER;
for(i=0;i<N;i++){
if(60>student[i].PE)
PRINT;
}
printf("政治:\n成绩90分以上:\n");
HEADER;
for(i=0;i<N;i++){
if(90<=student[i].Politics );
PRINT;
}
printf("不及格学生:\n");
HEADER;
for(i=0;i<N;i++){
if(60>student[i].Politics)
PRINT;
}
system("pause");
}
void baocun()
{
FILE *fp1;
int i=0;
fp1=fopen("学生成绩管理一.txt","wb");
for(i=0;i<N;i++){
fprintf(fp1,"%s %d %s %d %d %d %d %d\n",student[i].name,student[i].id,student[i].sex,student[i].Chinese,student[i].Maths,student[i].English,student[i].PE,student[i].Politics);
}
fclose(fp1);
}
void menu()
{
int choice;
FILE *fp1;
int i=0;
fp1=fopen("学生成绩管理一.txt", "rb");
if(fp1==NULL){
fp1=fopen("学生成绩管理一.txt", "wb");
}
N=i;
while(1)
{
printf("-----------------------------------------------\n");
printf("\t\t欢迎使用学生成绩管理系统\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 (0) 退出系统\n");
printf("------------------------------------------------\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice){
case 1:
first();break;
case 2:
second();break;
case 3:
third();break;
case 4:
fourth();break;
case 5:
fifth();break;
case 6:
sixth();break;
case 7:
seventh();break;
case 0:
break;
default:
printf("输入错误!\n");break;
}
system("pause");
}
}
int main()
{
check();
menu();
}