小成绩管理系统c语言,小成绩管理系统c语言报告

发布时间:2022-11-23

本文目录一览:

  1. C语言成绩管理系统
  2. 用C语言编程实现一个简单的学生成绩管理系统
  3. 用C语言编写一个学生成绩管理系统
  4. 用C语言编写一个简单的成绩管理系统
  5. c语言成绩管理系统
  6. C语言 学生成绩管理系统?

C语言成绩管理系统

#include "stdio.h"
struct stu{
    int sid, score;
    char g;
};
void scorein(struct stu *p, int n){
    int i, t;
    for(i = 0; i < n; i++){
        scanf("%d%d", &p[i].sid, &p[i].score);
        p[i].g = (t = p[i].score) > 89 && t < 101 ? 'A' : t > 79 && t < 90 ? 'B' : t > 69 && t < 80 ? 'C' : t > 59 && t < 70 ? 'D' : 'E';
    }
}
int sum(struct stu *p, int n){
    int s = 0;
    while(n--)
        s += p++->score;
    return s;
}
void dssort(struct stu *p, int n){
    int i, j, k;
    struct stu t;
    printf("\nSTUID\tSCORE\tCLASS\n=====================\n");
    for(i = 0; i < n; i++){
        for(k = i, j = k + 1; j < n; j++)
            if(p[k].score < p[j].score)
                k = j;
        if(k != i){
            t = p[k];
            p[k] = p[i];
            p[i] = t;
        }
        printf("%d\t%d\t%c\n", p[i].sid, p[i].score, p[i].g);
    }
}
void idsort(struct stu *p, int n){
    int i, j, k;
    struct stu t;
    printf("\nSTUID\tSCORE\tCLASS\n=====================\n");
    for(i = 0; i < n; i++){
        for(k = i, j = k + 1; j < n; j++)
            if(p[k].sid < p[j].sid)
                k = j;
        if(k != i){
            t = p[k];
            p[k] = p[i];
            p[i] = t;
        }
        printf("%d\t%d\t%c\n", p[i].sid, p[i].score, p[i].g);
    }
}
void query(struct stu *p, int n){
    int id;
    printf("\nPlease enter ID(int)...\n");
    scanf("%d", &id);
    while(id != p->sid && n--)
        p++;
    if(n >= 0){
        printf("STUID\tSCORE\tCLASS\n=====================\n");
        printf("%d\t%d\t%c\n\n", p->sid, p->score, p->g);
    } else
        printf("No find!\n\n");
}
void level(struct stu *p, int n){
    int d[5], i;
    char s[5][7] = {"优秀", "良好", "中等", "及格", "不及格"};
    printf("统计信息如下:\n");
    for(i = 0; i < 5; d[i++] = 0);
    for(i = 0; i < n; i++, d[p++->g - 'A']++);
    for(i = 0; i < 5; i++)
        printf("%6s:\t%d\t%.2f%%\n", s[i], d[i], d[i] / (n + 0.0) * 100);
}
void outinfo(struct stu *p, int n){
    int i;
    printf("\nSTUID\tSCORE\n=============\n");
    for(i = 0; i < n; i++)
        printf("%d\t%d\n", p[i].sid, p[i].score);
}
int main(int argc, char *argv[]){
    int n, s;
    struct stu a[30];
    printf("Please enter n(int 0 < n < 31)...\n");
    if(scanf("%d", &n) != 1 || n < 1 || n > 30){
        printf("Input error, exit...\n");
        return 0;
    }
    scorein(a, n); // 输入
    dssort(a, n); // 分数降序
    idsort(a, n); // 学号升序
    query(a, n); // 查询
    level(a, n); // 等级和百分比
    outinfo(a, n); // 输出各位学生信息
    printf("总分: %d", s = sum(a, n));
    printf("   平均分:   %.2f\n", s / (n + 0.0));
    return 0;
}

运行样例:

用C语言编程实现一个简单的学生成绩管理系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
typedef struct student{
    char num[16];
    char name[20];
    float score[4];
    struct student *next;
} stu;
stu *head; // 链头指针
stu* create() // 创建链表,从文件读取信息
{
    printf("Reading student information:\n");
    stu *p = NULL; // 指针,指向个待插入的结点
    stu *q = NULL; // 指针,用于在其后插入结点
    head = NULL; // 一开始链表为空
    FILE *r = fopen("input.dat", "r");
    p = (stu*)malloc(sizeof(stu));
    while(fscanf(r, "%s%s%f%f%f", p->num, p->name, &p->score[0], &p->score[1], &p->score[2]) != EOF){
        p->score[3] = (p->score[0] + p->score[1] + p->score[2]) / 3.0;
        fprintf(stdout, "%s\t%s\t%g\t%g\t%g\t%.2f\n", p->num, p->name, p->score[0], p->score[1], p->score[2], p->score[3]);
        p->next = NULL;
        if(head == NULL){ // head为空,要插入第一个
            head = p;
        } else{ // 否则不是头结点,应将p结点插入到q结点的后面
            q->next = p;
        }
        q = p; // q指向当前最后一个结点
        p = (stu*)malloc(sizeof(stu));
    }
    fclose(r);
    if(head != NULL){
        q->next = NULL; // 让q所指的最后一个结点的指针域为空说明这已是链尾了
    }
    return head; // 返回头指针
}
void sort(stu **head, int n){
    FILE *w = NULL;
    if(n == 0){
        w = fopen("sortByMath.dat", "w");
    } else if(n == 1){
        w = fopen("sortByEnglish.dat", "w");
    } else if(n == 2){
        w = fopen("sortByComputer.dat", "w");
    } else if(n == 3){
        w = fopen("sortByAvg.dat", "w");
    }
    stu *q, *t, *p;
    stu *new_head = new stu;
    new_head->next = *head;
    p = new_head;
    t = NULL;
    while(t != new_head->next){
        p = new_head;
        q = p->next;
        while(q->next != t){
            if((p->next->score[n]) < (q->next->score[n])){
                p->next = q->next;
                q->next = q->next->next;
                p->next->next = q;
            }
            p = p->next;
            q = p->next;
        }
        t = q;
    }
    *head = new_head->next;
    p = *head;
    q = p->next;
    printf("学号\t姓名\t数学\t英语\t计算机\t平均成绩\n");
    int grade = 1;
    while(p != NULL){
        fprintf(w, "%s\t%s\t%g\t%g\t%g\t%.2f\t%d\n", p->num, p->name, p->score[0], p->score[1], p->score[2], p->score[3], grade);
        fprintf(stdout, "%s\t%s\t%g\t%g\t%g\t%.2f\t%d\n", p->num, p->name, p->score[0], p->score[1], p->score[2], p->score[3], grade);
        if(q != NULL && q->score[3] < p->score[3]) grade += 1;
        p = p->next;
        if(q != NULL) q = q->next;
    }
    printf("\n");
    fclose(w);
}
void count(stu* head){
    float cnt[4][8];
    int i, j;
    for(i = 0; i < 4; i++){
        for(j = 0; j < 8; j++){
            if(j != 2) cnt[i][j] = 0;
            else cnt[i][j] = 100;
        }
    }
    stu* r = head;
    while(r != NULL){
        r = r->next;
    }
}
int main(){
    head = create();
    printf("Sorting by average score:\n");
    sort(head, 3);
    system("pause");
    return 0;
}

用C语言编写一个学生成绩管理系统

// testzhidao4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct Student // 学生结构体
{
    char name[20]; // 名字
    char sex[10]; // 性别
    char zuanye[20]; // 专业
    char code[13]; // 学号
    char department[20]; // 学院
    char degree[20]; // 学历
};
struct node
{
    struct Student data;
    struct node *next;
};
//---------------------------------------------------------------------------------
void print_menu(void) // 打印总菜单
{
    printf(" |--------------------------------------------------|\n");
    printf(" | 总 菜 单 : |\n");
    printf(" |--------------------------------------------------|\n");
    printf(" | 1--增加一个学生信息 | 5--删除一个学生信息 |\n");
    printf(" | 2--显示一个学生信息 | 6--统计功能 |\n");
    printf(" | 3--显示一个班级信息 | 7--结束 |\n");
    printf(" | 4--修改一个学生信息 | \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
    printf(" |--------------------------------------------------|\n");
}
void print_menu4(void ) // 打印修改功能
{
    printf(" |--------------------------------------------------|\n");
    printf(" | 修 改 功 能 : |\n");
    printf(" |--------------------------------------------------|\n");
    printf(" | 1--修改名字 | 5--修改学院 |\n");
    printf(" | 2--修改性别 | 6--修改专业 |\n");
    printf(" | 3--修改学号 | 7--不作修改 |\n");
    printf(" | 4--修改学历 | \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
    printf(" |--------------------------------------------------|\n");
    printf("再次选择选项 :");
}
void print_static_function_menu(void) // 打印统计功能
{
    printf(" |--------------------------------------------------|\n");
    printf(" | 统 计 功 能 : |\n");
    printf(" |--------------------------------------------------|\n");
    printf(" | 1.男/女人数 | 3.一个专业人数 |\n");
    printf(" | 2.一个班级人数 | 4.结束 |\n");
    printf(" |--------------------------------------------------|\n");
    printf("请选择选项:\n");
}
int compareCode(char a[], char b[]) // 比较 判断是否是同一个班级
{
    for(int i = 0; i < 9; i++)
        if(a[i] != b[i]) break;
    if(i == 9) return 1;
    else return 0;
}
//-------------------------------------------------------------------------------------
void main() // 主函数从这里开始
{
    system("color 3");
    printf("\n\n\n");
    printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
    printf(" \3\3\3\3\3\3\3\3\3\3 学 生 证 管 理 程 序 \3\3\3\3\3\3\3\3\n");
    printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
    printf(" \3\3\3\3\3\3 作者: \3\3\3\3\3\3\3\n");
    printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
    int choice;
    struct node *studentlist = (struct node*)malloc(sizeof(struct node)); // 学生链表头
    studentlist->next = NULL;
    struct node *temp = NULL;
    struct node *p = (struct node*)malloc(sizeof(struct node));
    char tempcode[13]; // 临时学号
    char tempclass[11]; // 临时班级
    char tempzuanye[20]; // 临时专业
    int count = 0;
    int choice6, count_male, count_female;
    const int sizeStu = sizeof(struct Student);
    struct Student data;
    FILE *fp;
    if((fp = fopen("d:\\学生证管理程序.dat", "rb")) == NULL){
        fp = fopen("d:\\学生证管理程序.dat", "wb");
    }
    fclose(fp);
    fp = fopen("d:\\学生证管理程序.dat", "rb");
    while(fread(&data, sizeStu, 1, fp) == 1){
        p->data = data;
        p->next = NULL;
        if(studentlist == NULL)
            studentlist = p;
        else{
            temp = studentlist;
            while(temp->next != NULL){ temp = temp->next; }
            temp->next = p;
        }
        p = (struct node*)malloc(sizeof(struct node));
    }
    fclose(fp);
    print_menu(); // 打印菜单
    scanf("%d", &choice); // 读进选项
    while(choice != 7) // 未遇到结束键
    {
        switch(choice){
            //----------------------------------------------------------------
            // 选项1,增加学生学生证信息
            case 1: // 输入一个学生信息
                p = (node*) malloc(sizeof(node));
                printf("\n请输入姓名:");
                scanf("%s", p->data.name);
                printf("\n请输入性别(男/女):");
                scanf("%s", p->data.sex);
                printf("\n请输入学号(12位):");
                scanf("%s", p->data.code);
                printf("\n请输入学制(本科生/研究生):");
                scanf("%s", p->data.degree);
                printf("\n请输入学院:");
                scanf("%s", p->data.department);
                printf("\n请输入专业:");
                scanf("%s", p->data.zuanye);
                p->next = NULL;
                //----------------------------------------------------------链表连接
                if(studentlist == NULL) { studentlist = p; studentlist->next = NULL; }
                else {
                    temp = studentlist;
                    while(temp->next != NULL) ////////////////////
                    {
                        temp = temp->next;
                    }
                    temp->next = p;
                    p->next = NULL;
                }
                break;
            //---------------------------------------------------------------------
            // 选项2,显示给定学生学生证信息
            case 2:
                printf("\n请输入学生学号(12位数):");
                scanf("%s", tempcode);
                temp = studentlist;
                while(temp != NULL) // 寻找响应的学生
                {
                    if(strcmp(tempcode, temp->data.code) == 0) break;
                    temp = temp->next;
                }
                if(temp == NULL) printf("\n不能找到该学生信息.\n");
                else {
                    printf("------------------------------------------------\n");
                    printf("姓名: %s\n", temp->data.name);
                    printf("性别: %s\n", temp->data.sex);
                    printf("学号: %s\n", temp->data.code);
                    printf("学历: %s\n", temp->data.degree);
                    printf("学院: %s\n", temp->data.department);
                    printf("专业: %s\n", temp->data.zuanye);
                    printf("------------------------------------------------\n\n");
                }
                break;
            //-----------------------------------------------------------------
            // 选项3,显示给定班级的学生信息
            case 3:
                printf("\n请输入班级号 :"); // 输入班级号
                scanf("%s", tempclass);
                while(strlen(tempclass) < 10) // 班级号位数小于10时,重新输入
                {
                    printf("错误的班级号,请重新输入:");
                    scanf("%s", tempclass);
                }
                count = 0; // 班级学生数
                temp = studentlist;
                while(temp != NULL) // 检索链表,并打印相应学生的学生证信息
                {
                    if(compareCode(tempclass, temp->data.code)) { // 打印属于这个班级的学生
                        printf("-----------------------------------------------\n");
                        printf("姓名: %s\n", temp->data.name);
                        printf("性别: %s\n", temp->data.sex);
                        printf("学号: %s\n", temp->data.code);
                        printf("学历: %s\n", temp->data.degree);
                        printf("学院: %s\n", temp->data.department);
                        printf("专业: %s\n", temp->data.zuanye);
                        printf("-----------------------------------------------\n");
                        count++;
                    }
                    temp = temp->next;
                }
                if(count == 0) printf("该班级还未有成员.\n");
                break;
            //-------------------------------------------------------------------
            // 选项4,修改给定学生的信息
            case 4:
                printf("请输入要作修改的学生证号:");
                scanf("%s", tempcode);
                temp = studentlist;
                while(temp != NULL) // 寻找响应的学生
                {
                    if(strcmp(tempcode, temp->data.code) == 0) break;
                    temp = temp->next;
                }
                if(temp == NULL) printf("\n找不到相应学生的信息.\n"); // 找不到相应的学生
                else {
                    int choice2;
                    print_menu4();
                    scanf("%d", &choice2);
                    while(choice2 != 7)
                    {
                        switch(choice2)
                        {
                            case 1:
                                printf("修改名字:"); // 修改名字
                                scanf("%s", temp->data.name);
                                break;
                            case 2:
                                printf("修改性别:"); // 修改性别
                                scanf("%s", temp->data.sex);
                                break;
                            case 3:
                                printf("修改学号:"); // 修改学号
                                scanf("%s", temp->data.code);
                                break;
                            case 4:
                                printf("修改学历 :"); // 修改学历
                                scanf("%s", temp->data.degree);
                                break;
                            case 5:
                                printf("修改学院:"); // 修改学院
                                scanf("%s", temp->data.department);
                                break;
                            case 6:
                                printf("修改专业:"); // 修改专业
                                scanf("%s", temp->data.zuanye);
                                break;
                            default:
                                break;
                        }
                        printf("请选择选项:");
                        scanf("%d", &choice2); // 再次选择菜单选项
                    }
                }
                break;
            //----------------------------------------------------------------
            // 选项5,删除给定学号的学生
            case 5:
                printf("\n输入学号 :"); // 输入学号
                scanf("%s", tempcode);
                temp = studentlist;
                p = temp;
                while(temp != NULL) // 寻找相应的学生
                {
                    if(strcmp(tempcode, temp->data.code) == 0) break;
                    p = temp;
                    temp = temp->next;
                }
                if(temp == NULL) printf("\n找不到该学生信息.\n"); // 找不到
                else if(temp == studentlist) { studentlist = temp->next; free(temp); }
                else {
                    p->next = temp->next; // 找到时删除
                    free(temp);
                }
                break;
            //------------------------------------------------------------------
            // 选项6,统计功能
            case 6:
                print_static_function_menu();
                scanf("%d", &choice6); // 选择菜单选项
                while(choice6 != 4)
                {
                    switch(choice6)
                    {
                        // 选项1,统计男女个数
                        case 1:
                            temp = studentlist;
                            count_male = 0; // 男生数
                            count_female = 0; // 女生数
                            while(temp != NULL) // 检索链表查找
                            {
                                if(strcmp(temp->data.sex, "男") == 0) count_male++;
                                if(strcmp(temp->data.sex, "女") == 0) count_female++;
                                temp = temp->next;
                            }
                            printf("男: %d\n", count_male);
                            printf("女: %d\n", count_female);
                            break;
                        // 选项2,统计给定班级的人数
                        case 2:
                            printf("请输入班级号:"); // 给定班级
                            scanf("%s", tempclass);
                            temp = studentlist;
                            count = 0;
                            while(temp != NULL) // 检索链表查找
                            {
                                if(compareCode(temp->data.code, tempclass) == 1) count++;
                                temp = temp->next;
                            }
                            printf("%s班级总人数为: %d\n", tempclass, count);
                            break;
                        case 3:
                            printf("请输入专业:"); // 给定专业
                            scanf("%s", tempzuanye);
                            temp = studentlist;
                            count = 0;
                            while(temp != NULL) // 检索链表查找
                            {
                                if(strcmp(temp->data.zuanye, tempzuanye) == 0) count++;
                                temp = temp->next;
                            }
                            printf("%s专业总人数为: %d\n", tempzuanye, count);
                            break;
                        // 缺省项
                        default:
                            break;
                    }
                    printf("请选择选项:");
                    scanf("%d", &choice6);
                }
                break;
            //-----------------------------------------------------------------
            default:
                free(p);
                break;
        }
        if((fp = fopen("d:\\学生证管理程序.dat", "wb")) == NULL)
        {
            printf("文件无法打开!");
            return;
        }
        p = studentlist;
        while(p)
        {
            fwrite(&p->data, sizeStu, 1, fp);
            p = p->next;
        }
        fclose(fp);
        print_menu(); // 打印菜单 进入循环
        scanf("%d", &choice);
    }
}

用C语言编写一个简单的成绩管理系统

// ps: 没有自己编译过
// 我写 C++比较多
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define TOTAL_STUD 1000
typedef struct stud {
    char name[20];
    int score;
} students[TOTAL_STUD], sorted[TOTAL_STUD];
void delstud (int i) {
    students[i].name = "无效学生";
    students[i].score = -999;
    return;
}
#define show(listname, i) printf("%04d    %s    %d\n", i, listname[i].name, listname[i].score);
int cmpfunc (const void * a, const void * b)
{
    return ( (*(struct stud*)a).score - (*(struct stud*)b).score );
} // 本段代码修改自此处
void run(int menu) {
    switch (menu) {
        case 1:
            char uname[20];
            int uid, uscore;
            printf("请输入学生姓名:");
            scanf("%s", uname);
            printf("\n 请输入学生学号:");
            scanf("%d", &uid);
            printf("\n 请输入学生成绩:");
            scanf("%d", &uscore);
            students[uid].name = uname;
            students[uid].score = uscore;
            printf("\n\n插入成功!\n\n");
            break;
        case 2:
            int delid;
            printf("要删除谁?学号?");
            scanf("%d", &delid);
            delstud(delid);
            break;
        case 3:
            for (int i = 0; i < TOTAL_STUD; i++) {
                strcpy(sorted[i].name, students[i].name);
                sorted[i].score = students[i].score;
            }
            qsort(sorted, TOTAL_STUD, sizeof(struct stud), cmpfunc);
            printf("学号 姓名 分数\n");
            for (int i = 0; i < TOTAL_STUD; i++) {
                if (sorted[i].score > -900) show(sorted, i);
            }
            break;
        case 4:
            for (int i = 0; i < TOTAL_STUD; i++) {
                if (students[i].score > -900) show(students, i);
            }
            break;
        case 5:
            int delid;
            printf("要查询谁?学号?");
            scanf("%d", &delid);
            show(students, delid);
            break;
        default:
            printf("-- %d 无此功能。请重试。--", menu);
    }
    return;
}
int main() {
    int key = -1;
    for (int i = 0; i < TOTAL_STUD; i++) {
        delstud(i);
    }
    while (key != 0) {
        printf("---成绩管理系统 V0.9 ---\n 请选择:\n1 -- 录入\n2 -- 删除\n3 -- 排序输出\n4 -- 不排序输出\n5 -- 查询\n0 -- 退出");
        key = getch() - 48;
        if (key > 0) run(key);
        else {
            printf("谢谢使用!再见!");
            return 0;
        }
    }
    return 0;
}

c语言成绩管理系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
struct student
{
    char num[5];
    char name[20];
    int score;
};
struct student stu[N] = { {"1", "张三", 90}, {"2", "李四", 87}, {"3", "王五", 76}, {"4", "赵六", 67}, {"5", "刘七", 56} };
int count = 5;
void insert(int i) // 输入学生具体信息的函数
{
    printf("第%d个学生的姓名:", i + 1);
    scanf("%s", stu[i].name);
    printf("\n");
    printf("第%d个学生的分数:", i + 1);
    scanf("%d", &stu[i].score);
    printf("\n");
    count++;
    sprintf(stu[i].num, "%d", count);
}
void input() // 输入数据的函数
{
    system("color 3e");
    void menu();
    void insert(int i);
    int i, j, k, l, r;
    printf("您想输入几个学生的信息? (1-%d) [ ]\b\b", N - 5);
    scanf("%d", &j);
    r = 5 + j;
    for (i = 5; i < r; i++)
    {
        printf("\n输入第%d个学生的信息。\n", i + 1);
        insert(i);
    }
    do
    {
        printf("返回菜单请按1! [ ]\b\b");
        scanf("%d", &k);
        if (k == 1)
        {
            system("cls");
            menu();
        }
        else
            l = 0;
    } while (l == 0);
}
void search() // 查询成绩的函数
{
    void menu();
    void printf_one(int k);
    struct student s;
    int i, k, w0, w1, w2;
    do
    {
        printf("请选择查找的类别: 1.姓名   2.学号   [ ]\b\b");
        scanf("%d", &w1);
        if (w1 < 1 || w1 > 2)
        {
            printf("输入错误!请重新输入!\n");
            w2 = 1;
        }
        else
            w2 = 0;
    } while (w2 == 1);
    if (w1 == 1) // 按姓名查找
    {
        do
        {
            k = -1;
            do
            {
                printf("\n请输入您想查找的学生的姓名!\nName:");
                scanf("%s", s.name);
                for (i = 0; i < 5; i++)
                    if (strcmp(s.name, stu[i].name) == 0)
                    {
                        k = i;
                        s = stu[i];
                    }
                if (k == -1) // 没有找到
                {
                    int o;
                    printf("\n\n没有这个学生的信息!\n");
                    printf("What do you want to do?\n\t1.继续   2.返回菜单   [ ]\b\b");
                    scanf("%d", &o);
                    if (o == 1)
                    {
                        system("cls");
                        search(); // 继续查找
                    }
                    else
                    {
                        system("cls");
                        menu(); // 返回菜单
                    }
                }
            } while (k == -1);
            system("cls");
            printf_one(k); // 查找到以后输出这个学生的信息
            printf("\nWhat do you want to do?\n\t1.继续   2.返回菜单   [ ]\b\b");
            scanf("%d", &w0);
        } while (w0 == 1);
        system("cls");
        menu(); // 不在查找时返回菜单
    }
    else // 按学号查找
    {
        do
        {
            k = -1;
            do
            {
                printf("\n请输入您想查找的学生的学号!\nNum:");
                scanf("%s", s.num);
                for (i = 0; i < 5; i++)
                    if (strcmp(s.num, stu[i].num) == 0) // 找到了
                    {
                        k = i;
                        s = stu[i];
                    }
                if (k == -1) // 没有找到
                {
                    int o;
                    printf("\n\n没有这个学生的信息!\n");
                    printf("What do you want to do?\n\t1.继续   2.返回菜单   [ ]\b\b");
                    scanf("%d", &o);
                    if (o == 1)
                    {
                        system("cls");
                        search(); // 继续查找
                    }
                    else
                    {
                        system("cls");
                        menu(); // 返回菜单
                    }
                }
            } while (k == -1);
            system("cls");
            printf_one(k); // 找到后输出这个学生的信息
            printf("\nWhat do you want to do?\n\t1.继续 2.返回菜单   [ ]\b\b");
            scanf("%d", &w0);
        } while (w0 == 1);
        system("cls");
        menu(); // 不在查找时返回菜单
    }
}
void xiugai() // 修改学生信息的函数
{
    void menu();
    void printf_one(int k);
    void xiugai_2();
    struct student s;
    int i, n, k, w0 = 1, w1, w2 = 0, o;
    do
    {
        k = -1;
        do
        {
            printf("\n请输入您想要修改的学生的姓名!Name:");
            scanf("%s", s.name);
            for(i = 0; i < 5; i++)
                if(strcmp(s.name, stu[i].name) == 0) // 与其中一个学生匹配
                {
                    k = i;
                    s = stu[i];
                }
            if(k == -1) // 没有找到输入的学生
            {
                printf("\n\n没有这个学生的信息!\n");
                printf("What do you want to do?\n\t1.继续 2.返回菜单   [ ]\b\b");
                scanf("%d", &o);
                if(o == 1)
                {
                    system("cls");
                    // xiugai(); // 继续修改
                }
                else
                {
                    system("cls");
                    menu(); // 返回菜单
                }
            }
        } while(k == -1);
        system("cls");
        printf("修改这个学生的分数:");
        scanf("%d", &stu[k].score);
        printf("\n");
        printf_one(k); // 输出这个学生的信息
        printf("\nWhat do you want to do?\n\t1.继续 2.返回菜单   [ ]\b\b");
        scanf("%d", &o);
        if (o != 1)
        {
            system("cls");
            menu(); // 返回菜单
        }
    } while(1);
}
void printf_all() // 输出所有学生成绩的函数
{
    void menu();
    system("color 4e");
    int i, j, k;
    for (i = 0; i < N; i++)
    {
        printf("学号:%s   姓名:%s   分数:%d\n", stu[i].num, stu[i].name, stu[i].score);
    }
    do
    {
        printf("返回菜单请按1   [ ]\b\b");
        scanf("%d", &j);
        if (j == 1)
        {
            system("cls");
            menu();
        }
        else
        {
            k = 0;
        }
    } while (k == 0);
}
void printf_one(int k) // 输出某一个学生的信息的函数
{
    printf("学号: %s   姓名: %s 分数: %d", stu[k].num, stu[k].name, stu[k].score);
}
void Exit() // 退出系统的函数
{
    exit(0);
}
void menu() // 菜单函数
{
    system("color 2e");
    printf("\n\t\t\t欢迎使用学生学籍管理系统!\n");
    printf("\n");
    int n, m;
    do
    {
        puts("\t\t********************菜单*********************");
        puts("\t\t*********************************************");
        puts("\t\t**************学生学籍管理系统***************");
        puts("\t\t*********************************************");
        puts("\t\t*********************************************");
        puts("\t\t*******     1--输入数据         ********");
        puts("\t\t*******     2--查询成绩         ********");
        puts("\t\t*******     3--修改成绩         ********");
        puts("\t\t*******     4--输出所有学生成绩 ********");
        puts("\t\t*******     5--统计及格和优秀的人数 ********");
        puts("\t\t*******     6--输出所有不及格学生的成绩 **");
        puts("\t\t*******     7--输出所有优秀学生姓名和成绩*");
        puts("\t\t*******     8--退出系统         ********");
        puts("\t\t*********************************************");
        printf("请选择服务种类(1~8): [ ]\b\b");
        scanf("%d", &n);
        if (n < 1 || n > 8)
        {
            system("cls");
            printf("选择错误! 请重新选择!\n");
            m = 1;
        }
        else
        {
            m = 0;
        }
    } while (m == 1);
    switch (n)
    {
        case 1: system("cls"); input(); break;
        case 2: system("cls"); search(); break;
        case 3: system("cls"); xiugai(); break;
        case 4: system("cls"); printf_all(); break;
        case 8: Exit(); break;
    }
}
int main()
{
    menu();
    return 0;
}

C语言 学生成绩管理系统?

附录* 综合实例——学生成绩查询系统 这是一个用C语言编写的小软件——学生成绩查询系统,同学们可以将其作为一个综合实例,对其进行仔细的阅读和研究,体验编程处理问题的过程,加深对编程语言的理解,提高处理问题的综合能力。

1、程序的功能:

  1. 可以根据用户输入的输入、输出文件名,读入学生成绩,完成数据的初始化。
  2. 可以查询指定学生的成绩,可以是指定科目的成绩,也可以是全部科目的成绩。
  3. 友好退出。

2、使用说明:

  1. 将输入文件放到指定的目录下(即 ../student/
  2. 启动管理程序 student.exe
  3. 在程序的使用界面,首先输入输入文件名和输出文件名,完成程序的初始化。
  4. 输入代码“q”退出程序。

3、程序代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *f1, *f2;
char file1[20], file2[20], name[200][20], name1[15];
int n, m, data[200][10];
void init(){
    int i, j;
    char ch = ' ';
    printf("%20c欢迎使用班级成绩管理系统\n\n", ch);
    printf("请输入输入和输出文件名(中间用一个空格隔开):\n");
    scanf("%s %s", file1, file2); // 1)该条语句的功能是什么?
    f1 = fopen(file1, "r");
    f2 = fopen(file2, "w");
    fscanf(f1, "%d%d", &n, &m); // 2)该条语句的功能是什么?
    for(i = 1; i <= n; i++){
        fscanf(f1, "%s", name[i]); // 3)该条语句的功能是什么?
        data[i][0] = 0; // 4)该条语句的功能是什么?没有这条语句可不可以?
        for(j = 1; j <= m; j++){
            fscanf(f1, "%d", &data[i][j]);
            data[i][0] += data[i][j]; // 5)该条语句的功能是什么?
        }
    }
    fprintf(f2, "name\tyuwen\tshuxue\tyingyu\twuli\thuaxue\tzongfen\n ");
    for(i = 1; i <= n; i++){
        fprintf(f2, "%s\t", name[i]);
        for(j = 1; j <= m; j++)
            fprintf(f2, "%d\t", data[i][j]);
        fprintf(f2, "%d\n", data[i][0]);
    }
    fclose(f1); // 6)问什么可以在这关闭输入文件?
    fclose(f2);
}
void search(char na[], char num){
    int i = 1, j;
    while((i <= n) && (strcmp(na, name[i]) != 0)) i++;
    if(i <= n){
        switch(num){
            case '1': printf("%s的语文成绩为%d!\n", na, data[i][1]); break;
            case '2': printf("%s的数学成绩为%d!\n", na, data[i][2]); break;
            case '3': printf("%s的英语成绩为%d!\n", na, data[i][3]); break;
            case '4': printf("%s的物理成绩为%d!\n", na, data[i][4]); break;
            case '5': printf("%s的化学成绩为%d!\n", na, data[i][5]); break;
            case 'a':
                printf("%s的各科成绩为:\n", name[i]);
                printf("语文\t数学\t英语\t物理\t化学\t总成绩\n");
                for(j = 1; j <= m; j++)
                    printf("%d\t", data[i][j]);
                printf("%d\n", data[i][0]);
                break;
            default: printf("没有这种查询方式,请确认后再次输入!\n");
        }
    }
    else printf("查无此人,请确认后再次查询!\n");
    printf("\n\n");
}
main(){
    init(); // 数据初始化
    printf("数据初始化结束!\n\n");
    printf("------------------------------------------------\n\n");
    char na[20];
    char num;
    while(1){ // 7)该条语句的功能是什么?
        printf("请输入学生的姓名和要查询成绩的科目代码(中间用一个空格隔开):\n(1 语文 2 数学 3 英语 4 物理 5 化学 a 所有科目成绩 q 退出)\n");
        scanf("%s", na);
        if(strcmp(na, "q") == 0) break; // 9)问什么要用这条语句strcmp(na,"q")==0?
        scanf("%c%c", &num, &num); // 10)为什么用了两次num?
        search(na, num);
        printf("------------------------------------------------\n\n");
        printf("\n请输入新的查询:\n\n");
    }
    system("pause");
}

这是我以前的一个程序,你改改吧,应该很好改。