学生信息管理系统

来源:互联网 发布:国内微电网数据统计 编辑:程序博客网 时间:2024/05/29 18:29

使用时需要用户自己在d盘根目录创建文件“学生信息.txt”

学生信息管理系统开发学生信息至少包括学号,姓名,性别,计算机分数,数学分数,英语分数等(学号不得相等)。该系统需要能够提供下列功能:(1)系统以菜单方式工作(必做)(2)学生信息录入功能(学生信息用文件保存)(必做)(3)学生信息浏览功能 (能查看所有同学的记录)(必做)(4)学生信息查询功能,查询方式:(至少完成一项)1)按学号查询2)按姓名查询(5)成绩排序统计功能:(至少完成一项)1)按照指定的要求对学生记录进行排序2)按照指定的学科对成绩进行统计,需要提供该门成绩的:最高分、最低分、平均分、及格率及在五个分数段的学生人数比率([0,59],[60,69],[70,79],[80,89],[90,100])(6)学生信息删除,修改功能(可选项)。其中:学号系统随机生成,范围在2016000—2016999内。

源代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#define MAX_SIZE 1000int Total = 0; // 记录当前学生人数struct Students{    int studentID;    char name[20];    char sex;    int computerScore, mathScore, englishScore;} info[MAX_SIZE];struct Students t; // 做临时变量// 退出void quit(){    system("cls");    printf("欢迎使用~再见~!\n");}// 导入文件void loadInformation(){    FILE *fp;    int i = 0;    fp = fopen("d:\\学生信息.txt", "r"); // r: 只读    if (fp == NULL)    {        printf("Can not open the file !\n");        exit(0);    }    while (!feof(fp))    {        fscanf(fp, "%d\t%s\t%c\t%d\t%d\t%d", &info[i].studentID, &info[i].name, &info[i].sex, &info[i].computerScore, &info[i].mathScore, &info[i].englishScore);        if (info[i].studentID >= 2016000)            i++;    }    fclose(fp);    Total = i;}// 保存到文件void saveInformation(){    FILE *fp;    fp = fopen("d:\\学生信息.txt", "wt"); // wt : 清空原有文本并写入    if (fp == NULL)    {        printf("Connot open file!\n");        exit(0);    }    for (int i = 0; i < Total; i++)    {        fprintf(fp, "%d\t%s\t%c\t%d\t%d\t%d\n", info[i].studentID, info[i].name, info[i].sex, info[i].computerScore, info[i].mathScore, info[i].englishScore);    }    fclose(fp);}// 浏览所有学生信息void displayAll(){    printf("\n学生信息:\n学号\t姓名\t性别\t计算机\t数学\t英语\n\n");    for (int i = 0; i < Total; i++)    {        printf("%d\t%s\t%c\t%d\t%d\t%d\n", info[i].studentID, info[i].name, info[i].sex, info[i].computerScore, info[i].mathScore, info[i].englishScore);    }}// 判断是否为空!bool isEmpty(){    if (Total != 0) return false;    return true;}// 判断学生信息是否存在int isExist(int studentID){    for (int i = 0; i < Total; i++)    {        if (studentID == info[i].studentID) return i;    }    return -1;}// 判断分数是否输入正确bool isRightScore(int score){    if ((score < 0) || (score > 100)) return false;    else return true;}// 产生随机数int random(){    srand((unsigned)time(NULL));    return rand() % 1000 + 2016000;}// 产生随机学号void getStudentID(int i){    int studentID = random();    while (isExist(studentID) != -1)        studentID = random();    info[i].studentID = studentID;}// 输入学生信息void inputInfomation(int i){    printf("请输入第 %d 位学生信息: \n", i+1);    printf("学      号: %d\n", info[i].studentID);    printf("姓      名: ");    scanf("%s", info[i].name);    printf("性      别: ");    getchar();    scanf("%c", &info[i].sex);    while (true)    {        printf("计算机分数: ");        scanf("%d", &info[i].computerScore);        if (!isRightScore(info[i].computerScore))            printf("请输入正确的分数,正确的分数范围:[0,100]\n");        else break;    }    while (true)    {        printf("数 学 分数: ");        scanf("%d", &info[i].mathScore);        if (!isRightScore(info[i].mathScore))            printf("请输入正确的分数,正确的分数范围:[0,100]\n");        else break;    }    while (true)    {        printf("英 语 分数: ");        scanf("%d", &info[i].englishScore);        if (!isRightScore(info[i].englishScore))            printf("请输入正确的分数,正确的分数范围:[0,100]\n");        else break;    }}// 做排序交换void doExchange(int i, int j){    t = info[i]; info[i] = info[j]; info[j] = t;}// 按姓名的首字母排序void sortInformationByName(){    int i, j;    for (i = 0; i < Total; i++)        for (j = 1; j < Total - i; j++)        {            if (strcmp(info[j].name, info[j - 1].name) < 0)                doExchange(j, j - 1);        }    displayAll();}// 删除学生信息void deleteInformationByID(){    int studentID, index;    printf("请输入您要删除学生的学号: ");    scanf("%d", &studentID);    if ((index = isExist(studentID)) != -1)    {        for (index; index < Total - 1; index++)        {            info[index] = info[index+1];        }        saveInformation();        printf("删除成功!");        --Total;    }    else        printf("该学生信息不存在!请检查是否输入正确!\n");}// 添加学生信息void addInformation(){    int add_num;    printf("请输入要添加信息的条数: ");    scanf("%d", &add_num);    for (int i = Total; i < Total+add_num; i++)    {        getStudentID(i);        inputInfomation(i);    }    Total += add_num;    saveInformation();    printf("添加成功!\n");}// 修改学生信息void modifyInfomationByID(){    int studentID, index;    printf("请输入被修改学生的学号或姓名: ");    scanf("%d", &studentID);    if ((index = isExist(studentID)) != -1)    {        printf("您将修改此学生的信息: %d(学号)\t%s(姓名)\n", info[index].studentID, info[index].name);        inputInfomation(index);        saveInformation();        printf("修改完成!");    }    else        printf("此学生信息不存在!请检查输入是否正确!");}// 每个分数段的人数比率void computerScore_EachRate(){    int number_60 = 0, number_70 = 0, number_80 = 0, number_90 = 0, number_100 = 0; // 低于各分值的人数    double rate;    for (int i = 0; i < Total; i++)    {        if ((info[i].computerScore >= 0) && info[i].computerScore < 60)            ++number_60;        else if (info[i].computerScore < 70)            ++number_70;        else if (info[i].computerScore < 80)            ++number_80;        else if (info[i].computerScore < 90)            ++number_90;        else if (info[i].computerScore <= 100)            ++number_100;    }    rate = (number_60*1.0) / Total;    printf("[0,60): %4lf\%\n", rate * 100);    rate = (number_70*1.0) / Total;    printf("[60,70): %4lf\%\n", rate * 100);    rate = (number_80*1.0) / Total;    printf("[70,80): %4lf\%\n", rate * 100);    rate = (number_90*1.0) / Total;    printf("[80,90): %4lf\%\n", rate * 100);    rate = (number_100*1.0) / Total;    printf("[90,100): %4lf\%\n", rate * 100);}// 计算机的及格率double computerScore_Rate(){    int number = 0; // 及格人数    double rate;    for (int i = 0; i < Total; i++)    {        if ( info[i].computerScore >= 60)        {            ++number;        }    }    rate = (number*1.0) / Total;    return rate;  // 用百分号(%)可以乘以一百再返回}// 计算机的平均分double computerScore_Average(){    int sum = 0;    double average;    for (int i = 0; i < Total; i++)        sum += info[i].computerScore;    average = (sum*1.0) / Total;    return average;}// 计算机的最低分int computerScore_MIN(){    int minComputerScore = 100;    for (int i = 0; i < Total; i++)    {        if (info[i].computerScore <= minComputerScore)            minComputerScore = info[i].computerScore;    }    return minComputerScore;}// 计算机的最高分int computerScore_MAX(){    int maxComputerScore = 0;    for (int i = 0; i < Total; i++)    {        if (info[i].computerScore >= maxComputerScore )            maxComputerScore = info[i].computerScore;    }    return maxComputerScore;}// 显示某学生的信息void displayOne(int i){    printf("\n学生信息:\n学号\t姓名\t性别\t计算机\t数学\t英语\n\n");    printf("%d\t%s\t%c\t%d\t%d\t%d\n", info[i].studentID, info[i].name, info[i].sex, info[i].computerScore, info[i].mathScore, info[i].englishScore);}// 查找学生信息(按学号查找)void searchInformationByID(){    int studentID;    int index;    printf("请输入学号: ");    scanf("%d", &studentID);    index = isExist(studentID);    if (index != -1)        displayOne(index);    else        printf("此学生信息不存在!请检查输入是否有误!\n");}// 录入学生信息void getInformation(){    int num;    char choose;    if ( !isEmpty() )    {        printf("是否清空所有信息重新录入:y 是\tn 否\n");        getchar();        choose = getchar();        if (choose == 'Y' || choose == 'y')        {            Total = 0;            printf("请输入您要录入的人数: ");            scanf("%d", &num);            for (int i = 0; i < num; i++)            {                getStudentID(i);                inputInfomation(i);            }            saveInformation();            Total += num;            printf("重新录入成功!\n");        }        else            printf("已取消重新录入!\n");    }    else    {        printf("请输入您要录入的人数: ");        scanf("%d", &num);        for (int i = 0; i < num; i++)        {            getStudentID(i);            inputInfomation(i);        }        saveInformation();        Total += num;        printf("录入成功!\n");    }}// 菜单int menu(){    int select = 0;    printf("_______________________________________________________________________________\n");    printf("*************************欢迎使用学生信息管理系统******************************\n");    printf("         \t╔════════════════════╗\n");    printf("         \t║1.学生信息录入  ");    printf("        2.学生信息添加  ║\n");    printf("         \t║3.学生信息浏览  ");    printf("        4.学生信息查询  ║\n");    printf("         \t║5.成绩排序统计  ");    printf("        6.删除学生信息  ║\n");    printf("         \t║7.修改信息      ");    printf("        0.退出系统      ║\n");    printf("         \t╚════════════════════╝\n");    printf("*******************************************************************************\n");    printf("_______________________________________________________________________________\n");    printf("请选择:");    scanf("%d", &select);    return select;}int main(){    loadInformation();    for (;;)    {        system("color a");        system("pause");        system("cls");        printf("_______________________________________________________________________________\n");        //printf("现有学生信息条数:%d\n",w);        switch (menu())        {        case 1:getInformation(); break;        case 2:addInformation(); break;        case 3:displayAll(); break;        case 4:searchInformationByID(); break;        case 5:sortInformationByName(); break;        case 6:deleteInformationByID(); break;        case 7:modifyInfomationByID(); break;        //case 8:rekey(); break;        case 0:quit(); exit(0);        default:            printf("您输入有误!\n");        }    }    return 0;}
0 0