学生成绩管理

问题描述:

1. 从键盘输入包括学号、姓名、三门课程成绩(高数、大外、C语言),并计算三科总分;

2. 对输入的数据能够按照学号或者平均分排序;

3. 具有在文件中进行单项查询的功能(即能够按照给定的关键字,如姓名等找出满足条件的纪录);

4. 具有增加、删除、修改数据功能。

本程序包含注册(regist)、登录(login)、菜单(menu)、输入(input)、输出(display)、查找(find)、修改(change)、删除(del)基本功能。先分别定义各种全局函数和全局变量now和now2,同时定义结构体及结构体数组。其中now作为现有学生信息个数的一个标记,now2作为现有管理员个数的一个标记。每次执行完子函数就返回主菜单。共含有五个开关语句,依次在main,menu,display,find,change中,使界面更友好,用户操作更简单。

连接:c语言学生成绩管理系统-优快云社区

我的回复:

#include <stdio.h>
#include <string.h>
 
#define STUDENTS 5 // 宏定义学生的人数:5个
#define SUBJECTS 5 // 宏定义每个学生的科目:英语、数学、语文、体育、音乐
 
char Name[STUDENTS][11]; // 定义学生的姓名字符数组:Name[0]="小明",Name[1]="王一呜"
float Score[STUDENTS][SUBJECTS + 1]; // 总成绩=英语+数学+语文+体育+音乐
 
// 函数的声明
// 输入学生的姓名和它每科的成绩
void inputDate();
// 打印排序前的学生的姓名和成绩
void printData();
// 按学生的总成绩排序(从高到低:冒泡排序)
void sortData();
 
int main(int argc, char *argv[]) {
    // 1、输入学生的姓名和它每科的成绩
    inputDate();
    // 2、打印排序前的学生的姓名和成绩
    printf("排序前的学生的姓名和成绩:\n");
    printData();
    // 3、按学生的总成绩排序(从高到低)
    sortData();
    // 4、打印排序后的学生的姓名和成绩
    printf("排序后的学生的姓名和成绩:\n");
    printData();
    return 0;
}
 
// 函数的定义
// 输入学生的姓名和它每科的成绩
void inputDate() {
// 使用for循环,输入每个学生的姓名和他们每科的成绩
    for (int indexI = 0; indexI < STUDENTS; indexI++) {
        // 1、输入学生的姓名
        printf("请输入第%d个学生的姓名(一共%d个):", indexI + 1, STUDENTS);
        scanf("%s", Name[indexI]);
        // 2、输入这个学生的每科成绩
        printf("请输入%s的英语、数学、语文、体育、音乐成绩(使用逗号分隔它们):", Name[indexI]);
        scanf("%f,%f,%f,%f,%f", &Score[indexI][0], &Score[indexI][1], &Score[indexI][2], &Score[indexI][3], &Score[indexI][4]);
// 3、统计这个学生的总成绩
// Score[indexI][SUBJECTS] = Score[indexI][0] + Score[indexI][1] + Score[indexI][2] +Score[indexI][3] +Score[indexI][4];
        Score[indexI][SUBJECTS] = 0.00; // 初始化总成绩为0.00
        for (int indexJ = 0; indexJ < SUBJECTS; indexJ++) {
            Score[indexI][SUBJECTS] += Score[indexI][indexJ];
        }
// printf("%s的英语=%8.2f、数学=%8.2f、语文=%8.2f、体育=%8.2f、音乐=%8.2f、总成绩=%8.2f\n", Name[indexI], Score[indexI][0],
// Score[indexI][1], Score[indexI][2], Score[indexI][3], Score[indexI][4], Score[indexI][5]);
    }
}
 
// 打印排序前的学生的姓名和成绩
void printData() {
    // 1、打印标题
    printf("+----------+--------+--------+--------+--------+--------+--------+\n");
    printf("|   姓名   |  英语  |  数学  |  语文  |  体育  |  音乐  | 总成绩 |\n");
    printf("+----------+--------+--------+--------+--------+--------+--------+\n");
    // 2、使用for循环打印每个学生的姓名和成绩
    for (int indexI = 0; indexI < STUDENTS; indexI++) {
        printf("|%10s|", Name[indexI]); // 打印学生的姓名
        for (int indexJ = 0; indexJ < SUBJECTS + 1; indexJ++) {
            printf("%8.2f|", Score[indexI][indexJ]); // 打印学生每科的成绩(包括总成绩)
        }
        printf("\n" );
        printf("+----------+--------+--------+--------+--------+--------+--------+\n");
    }
}
 
// 按学生的总成绩排(从高到低:冒泡排序)
void sortData() {
    for (int indexI = 0; indexI < STUDENTS - 1; indexI++) {
        for (int indexJ = 0; indexJ < STUDENTS - 1 - indexI; indexJ++) {
            if (Score[indexJ][SUBJECTS] < Score[indexJ + 1][SUBJECTS]) {
                // 1、交换他们的姓名
                char tempName[11];
                strcpy(tempName, Name[indexJ]); // 把当前位置学生的姓名拷贝到临时变量中
                strcpy(Name[indexJ], Name[indexJ + 1]); // 把下一个位置的学生姓名拷贝到当前位置
                strcpy(Name[indexJ + 1], tempName); // 把临时变量拷贝到下一个位置的学生姓名中
                // 2、交换他们每一科的成绩
                for (int indexK = 0; indexK < SUBJECTS + 1; indexK++) {
                    float tempScore = Score[indexJ][indexK]; // 把当前位置学生的每一科成绩存放到临时变量中
                    Score[indexJ][indexK] = Score[indexJ + 1][indexK]; // 把下一个位置的学生成绩存放到当前位置上
                    Score[indexJ + 1][indexK] = tempScore; // 把临时变量存放到下一个位置的学生成绩中
                }
            }
        }
    }
}

#include <stdio.h> #include <stdlib.h> #include <string.h> #include<ctype.h> #define M 3 struct student {long num; char name[20]; char sex; int score[5]; int ave; }stu[M]; void init() { printf("\t\t********************************\n\n"); printf("\t\tStudent score management systerm \n"); printf("\n"); printf("\t\t Make by Maggiehe \n"); printf("\n"); printf("\t\t Student number is 3206***** \n\n"); printf("\t\t********************************\n\n"); } void input() { int i,j; printf("\nInput the student number name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) {scanf("%ld,%s,%c",&stu[i].num,stu[i].name,&stu[i].sex); for(j=0;j<5;j++) scanf("%d",&stu[i].score[j]); scanf("%d",&stu[i].ave); save(); } } void list() { int i,j; clrscr(); printf("\t**********************student****************************\n"); printf("num name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) { printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } if((i+1)%10==0) { printf("\npress any key continue.......\n"); getch(); } printf("\t*************************end*********************************\n"); } void average() { int i,j; float sum[M]; for(i=0;i<M;i++) for(j=0;j<5;j++) sum[i]+=stu[i].score[j]; stu[i].ave=sum[i]/5.0; } void search_num() { long num; int i,j; printf("\nplease enter number which you want to search:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) if(stu[i].num!=num) printf("The number is not exist\n"); else { printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } } void search_nam() { int i,j; char name[20]; printf("\nplease enter name which you want to search:"); scanf("%s",&name); printf("\n"); for(i=0;i<M;i++) if(strcmp(stu[i].name,name)==0) { printf("number name sex math English PE maolun majing average:\n"); printf("%ld%s%c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } else printf("\nThe name is not exist!!!\n"); } void search_ave() { int i,j,a=0; float k; printf("please enter average score which you want to search:"); scanf("%f",&k); printf("\n"); for(i=0;i<M;i++) if(stu[i].ave!=k) printf("The average score is not exist!!!\n"); else for(i=0;i<M;i++) { if(stu[i].ave<=k) printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); a++; } } void sort() { int i,j; struct student temp; for(i=0;i<M;i++) for(j=i+i;j<M;j++) if(stu[i].ave<stu[j].ave) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } void save() { int i; FILE *fp; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } for(i=0;i<M;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void delect() { int i,t; long num; printf("please enter number which you want to delect:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) { if(stu[i].num!=num) printf("The number is not exist!!!\n"); if(stu[i].num==num) t=i; } for(i=t;i<M;i++) stu[i]=stu[i+1]; save(); } void insert() {FILE *fp; int i,n,t; struct student s; printf("please input record\n"); printf("number name sex math English PE maolun majing average\n"); scanf("%ld,%s,%c,%d%d%d%d%d%d",&s.num,s.name,&s.sex,&s.score[0],&s.score[1],&s.score[2],&s.score[3],&s.score[4],&s.ave); s.ave=(s.score[0]+s.score[1]+s.score[2]+s.score[3]+s.score[4])/3.0; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } i=M; for(t=0;stu[i].ave>s.ave&&t<M;t++) if(fwrite(&s,sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void MainMenu() {clrscr(); printf("\t********************************************************************\n \n); Printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1. search record\n"); printf("\t 2. sort record\n"); printf("\t 3. insert record\n"); printf("\t 4. delect record\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t********************************************************************\n"); } void menu_select() {clrscr(); printf("\t******************************************************************\n\n"); printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1.1 search by number\n"); printf("\t 1.2 search by name\n"); printf("\t 1.3 search by average score\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t******************************************************************\n"); } void search() { char ch; clrscr(); menu_select(); ch=getch(); switch(ch) { case '1':search_num();break; case '2':search_nam();break; case '3':search_ave();break; } } main() { char ch; clrscr(); init(); input(); list(); average(); save(); MainMenu(); ch=getch(); switch(ch) { case '1':search();break; case '2':sort();break; case '3':insert();break; case '4':delect();break; } search_num(); search_nam(); search_ave(); sort(); delect(); insert; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值