执手メ逐づ梦心 2022-08-26 14:16 采纳率: 100%
浏览 213
已结题

c语言学生管理系统(输入信息,查找学生)

输入n,进入添加学生信息界面
输入m,进入查找学生界面(通过名字查找)
输入x,进入查找学生界面(通过学号查找)
输入b,进入查找学生界面(通过班级查找)
输入q,退出程序
一.添加学生信息界面下:
依次输入学生姓名、学号、班级等信息
输入完成后返回功能选择界面
二.
查找学生界面(通过名字查找)下:输入学生姓名,显示对应的学号、班级等信息,如果查不到,显示对应的提示信息,查找完成后返回功能选择界面
查找学生界面(通过学号查找)下:输入学生学号,显示对应的姓名、班级等信息,如果查不到,显示对应的提示信息,查找完成后返回功能选择界面
查找学生界面(通过班级查找)下:输入学生班级,显示该班级中所有学生的姓名、学号等信息,如果查不到,显示对应的提示信息,查找完成后返回功能选择界面

  • 写回答

5条回答 默认 最新

  • .魚肉 2022-08-26 15:17
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • fuill 2022-08-26 16:28
    关注

    采纳后私信帮你改好

    img

    #include<stdio.h>
    #include<windows.h>
    #define Max 25
    #define obj_num 5
    struct Stu
    {
        char Name[25];     //姓名
        int Number;        //学号
        int Language_score;//语文成绩
        int Math_score;    //数学成绩
        int English_score; //英语成绩
        int PE_score;      //体育成绩
        int C_score;       //C语言成绩
        int Sum_score;     //总成绩
    };
    void input(struct Stu Class[],int j)
    {
        printf("输入第%d位同学姓名:",j+1);
        scanf("%s",Class[j].Name);
        getchar();
        printf("输入第%d位同学学号:",j+1);
        scanf("%d",&Class[j].Number);
        printf("输入第%d位同学语文成绩:",j+1);
        scanf("%d",&Class[j].Language_score);
        printf("输入第%d位同学数学成绩:",j+1);
        scanf("%d",&Class[j].Math_score);
        printf("输入第%d位同学英语成绩:",j+1);
        scanf("%d",&Class[j].English_score);
        printf("输入第%d位同学体育成绩:",j+1);
        scanf("%d",&Class[j].PE_score);
        printf("输入第%d位同学C语言成绩:",j+1);
        scanf("%d",&Class[j].C_score);
        Class[j].Sum_score=Class[j].Language_score+Class[j].Math_score+Class[j].English_score+Class[j].PE_score+Class[j].C_score;
    }
    void output(struct Stu Class[],int n)
    {
        printf("---------------------------------------------\n");
        printf("姓名  学号  语文  数学  英语  体育  C语言  总分");
        printf("\n");
        int j;
        for(j=0; j<n; j++)
        {
            printf("%5s",Class[j].Name);
            printf("%5d",Class[j].Number);
            printf("%6d",Class[j].Language_score);
            printf("%6d",Class[j].Math_score);
            printf("%6d",Class[j].English_score);
            printf("%6d",Class[j].PE_score);
            printf("%6d",Class[j].C_score);
            printf("%7d",Class[j].Sum_score);
            printf("\n");
        }
        printf("---------------------------------------------\n");
    }
    void outputOne(struct Stu Class[],int j)
    {
        printf("姓名  学号  语文  数学  英语  体育  C语言  总分");
        printf("\n");
        printf("%5s",Class[j].Name);
        printf("%5d",Class[j].Number);
        printf("%6d",Class[j].Language_score);
        printf("%6d",Class[j].Math_score);
        printf("%6d",Class[j].English_score);
        printf("%6d",Class[j].PE_score);
        printf("%6d",Class[j].C_score);
        printf("%7d",Class[j].Sum_score);
        printf("\n");
    }
    void Sort(struct Stu Class[],int n)
    {
        int j,k;
        struct Stu t;
        for(j=0; j<n-1; j++)
        {
            for(k=0; k<n-j-1; k++)
            {
                if(Class[k].Sum_score<Class[k+1].Sum_score)
                {
                    t=Class[k];
                    Class[k]=Class[k+1];
                    Class[k+1]=t;
                }
            }
        }
    }
    int search(int number,int n,struct Stu Class[])
    {
        int i,p=0;
        for(i=0; i<n; i++)
        {
            if(Class[i].Number==number)
            {
                p=i;
                return p;
            }
        }
        return -1;
    }
    void modify(int number,int n,struct Stu Class[])
    {
        int index=search(number,n,Class);
        if(index==-1)
        {
            printf("找不到该学号\n");
        }
        else
        {
            printf("学号%d的学生是第%d位\n",number,index+1);
            input(Class,index);
            printf("修改成功\n");
            output(Class,n);
        }
    }
    void del(int number,int n,struct Stu Class[])
    {
        int index=search(number,n,Class);
        if(index==-1)
        {
            printf("找不到该学号\n");
        }
        else
        {
            printf("学号%d的学生是第%d位\n",number,index);
            int i;
            for(i=index; i<n-1; i++)
            {
                Class[i]= Class[i+1];
            }
            printf("删除成功\n");
            output(Class,n-1);
        }
    }
    double calave(int n,struct Stu Class[],double ave[])
    {
        int Language_score_sum=0;
        int Math_score_sum=0;
        int English_score_sum=0;
        int PE_score_sum=0;
        int C_score_sum=0;
        for(int i=0; i<n; i++)
        {
            Language_score_sum+=Class[i].Language_score;
            Math_score_sum+=Class[i].Math_score;
            English_score_sum+=Class[i].English_score;
            PE_score_sum+=Class[i].PE_score;
            C_score_sum+=Class[i].C_score;
        }
        ave[0]=(double)Language_score_sum/n;
        ave[1]=(double)Math_score_sum/n;
        ave[2]=(double)English_score_sum/n;
        ave[3]=(double)PE_score_sum/n;
        ave[4]=(double)C_score_sum/n;
    }
    void save(int n,struct Stu Class[])
    {
        FILE *fp;
        fp = fopen("score_data.txt","w");
        if(fp == NULL)
        {
            printf("error!");
            return;
        }
        else
        {
            for(int j=0; j<n; j++)
            {
                fprintf(fp,"%s %d %d %d %d %d %d %d\n",Class[j].Name,Class[j].Number,Class[j].Language_score,Class[j].Math_score,Class[j].English_score,Class[j].PE_score,Class[j].C_score,Class[j].Sum_score);
            }
            printf("文件写入成功\n");
        }
        fclose(fp);
    }
    int read(int n,struct Stu Class[])
    {
        FILE *fp;
        fp = fopen("score_data.txt","r");
        int count=0;
        if(fp == NULL)
        {
            printf("error!");
            return 0;
        }
        else
        {
            for(int j=0; j<n; j++)
            {
                int flag=fscanf(fp,"%s %d %d %d %d %d %d %d\n",Class[j].Name,&Class[j].Number,&Class[j].Language_score,&Class[j].Math_score,&Class[j].English_score,&Class[j].PE_score,&Class[j].C_score,&Class[j].Sum_score);
                if(flag!=-1) count++;
            }
            printf("文件读取成功\n");
        }
        fclose(fp);
        return count;
    }
    void menu(struct Stu Class[])
    {
        int n=0,count;
        int option=1;
        while(option<=9&&option>=1)
        {
            printf("------------------------\n");
            printf("------学生成绩管理------\n");
            printf("------1.输入成绩  ------\n");
            printf("------2.输出成绩  ------\n");
            printf("------3.按总成绩排序----\n");
            printf("------4.按学号查询成绩--\n");
            printf("------5.修改信息  ------\n");
            printf("------6.删除学生  ------\n");
            printf("------7.计算各科平均分--\n");
            printf("------8.文件读入  ------\n");
            printf("------9.保存至文件------\n");
            printf("------other.退出  ------\n");
            printf("------------------------\n");
            printf("输入选项:");
            scanf("%d",&option);
            switch(option)
            {
                case 1:
                {
                    system("cls");
                    printf("输入学生的个数(不大于%d):",Max-n);
                    scanf("%d",&count);
                    while(count--)
                    {
                        input(Class,n++);
                    }
                    output(Class,n);
                    break;
                }
                case 2:
                {
                    system("cls");
                    output(Class,n);
                    break;
                }
                case 3:
                {
                    system("cls");
                    Sort(Class,n);
                    output(Class,n);
                    break;
                }
                case 4:
                {
                    system("cls");
                    int number;
                    printf("输入要查找的学号:");
                    scanf("%d",&number);
                    int index=search(number,n,Class);
                    if(index==-1)
                    {
                        printf("查找失败\n");
                    }
                    else
                    {
                        printf("查找成功\n");
                        outputOne(Class,index);
                    }
                    break;
                }
                case 5:
                {
                    system("cls");
                    output(Class,n);
                    int number;
                    printf("输入要修改成绩的学生对应的学号:");
                    scanf("%d",&number);
                    modify(number,n,Class);
                    output(Class,n);
                    break;
                }
                case 6:
                {
                    system("cls");
                    output(Class,n);
                    int number;
                    printf("输入要删除的学号:");
                    scanf("%d",&number);
                    del(number,n,Class);
                    n--;
                    system("cls");
                    output(Class,n);
                    break;
                }
                case 7:
                {
                    system("cls");
                    output(Class,n);
                    double ave[obj_num];
                    calave(n,Class,ave);
                    char str[]="平均分";
                    printf("\n");
                    printf("%5s",str);
                    printf("     ");
                    printf("%5.2lf",ave[0]);
                    printf("%6.2lf",ave[1]);
                    printf("%6.2lf",ave[2]);
                    printf("%6.2lf",ave[3]);
                    printf("%6.2lf",ave[4]);
                    printf("\n");
                    break;
                }
                case 8:
                {
                    system("cls");
                    n-=n; 
                    n+=read(Max,Class);
                    break;
                }
                case 9:
                {
                    system("cls");
                    save(n,Class);
                    break;
                }
                default :
                {
                    break;
                }
            }
        }
    }
    int main()
    {
        struct Stu Class [Max];
        menu(Class);
        return 0;
    }
    
    评论 编辑记录
  • rucoding 2022-08-26 17:29
    关注

    图示效果:

    img

    代码示例:

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    //宏定义变量
    #define N 1024
    #define MAXSIZE 32
    #define WIDESIZE 65
    typedef struct Student {
        /*学生基本信息*/
        int code;
        //学号
        char name[MAXSIZE];
        //姓名,采用字符数组
        int age;
        //年龄
        char sex[MAXSIZE];
        //性别
        /*学生成绩信息*/
        int math;
        //数学成绩
        int chinese;
        //语文成绩
        int english;
        //英语成绩
        struct Student *next;
        //指向下一个学生的指针
    }
    Student;
    /*
    *创建学生链表
    */
    Student * createList() {
        //申请一个Student【学生结构体】大小的控件
        Student * studentList = (Student*)malloc(sizeof(Student));
        return studentList;
    }
    /*
    *创建学生节点
    */
    Student * createNode() {
        Student * newStu = (Student*)malloc(sizeof(Student));
        printf("学号:");
        scanf("%d",&newStu->code);
        printf("姓名:");
        scanf("%s",newStu->name);
        printf("年龄:");
        scanf("%d",&newStu->age);
        printf("性别:");
        scanf("%s",newStu->sex);
        printf("数学:");
        scanf("%d",&newStu->math);
        printf("语文:");
        scanf("%d",&newStu->chinese);
        printf("英语:");
        scanf("%d",&newStu->english);
        newStu->next=NULL;
        return newStu;
    }
    //显示学生信息
    void showMsg(Student *stu) {
        printf("%d\t%s\t%d\t%s\t%d\t%d\t%d\t\n",stu->code,stu->name,stu->age,stu->sex,
                    stu->math,stu->chinese,stu->english);
    }
    /*
    *添加学生信息
    */
    Student * insertStudent(Student * head) {
        int i,count;
        printf("请输入录入的学生人数\n");
        scanf("%d",&count);
        //获得学生链表的头节点
        Student *tail= head;
        //初始批量录入学生信息
        if(head) {
            for (i = 0;i<count;i++) {
                printf("==============输入第%d个学生信息==============》\n",i+1);
                Student * newNode = createNode();
                tail->next = newNode;
                //tail永远指向最后一位学生,即尾节点
                tail = tail->next;
            }
        } else {
            //批量添加学生信息
            while(tail) {
                tail = tail->next;
            }
            for (i = 0;i<count;i++) {
                printf("==============输入第%d个学生信息==============》\n",i+1);
                Student * newNode = createNode();
                //创建存储学生信息的节点
                tail->next = newNode;
                //添加学生
                tail = tail->next;
                //尾节点后移
            }
        }
        return head;
        //返回头节点
    }
    /*
    *删除学生信息
    */
    void deleteStudent(Student *studentList) {
        printf("请输入学号:");
        int ditCode;
        scanf("%d",&ditCode);
        //获取链表头节点
        Student *preStudent = studentList;
        //获取链表第一个节点
        Student *afterStudent = studentList->next;
        if(afterStudent) {
            while(afterStudent) {
                if(afterStudent->code==ditCode)//学号相等,则说明已找到要删除的学生 {
                preStudent->next=afterStudent->next;
                //进行删除操作
                free(afterStudent);
                //释放节点控件
                break;
            }
            //学生编号不相等,则继续向后移动,进行遍历
            preStudent = afterStudent;
            afterStudent = afterStudent->next;
        } else {
            printf("没有这名学生的信息!");
        }
    }
    /*
    *根据学号修改学生信息
    */
    //1.修改姓名
    void changeName(Student *stu) {
        char newName[MAXSIZE];
        printf("请输入新的名字:");
        scanf("%s",newName);
        strcpy(stu->name,newName);
        showMsg(stu);
    }
    //2.修改年龄
    void changeAge(Student *stu) {
        int newAge;
        printf("请输入新的年龄:");
        scanf("%d",&newAge);
        stu->age=newAge;
        showMsg(stu);
    }
    //3.修改数学成绩
    void changeMathScore(Student *stu) {
        int newSocre;
        printf("请输入新的数学成绩:");
        scanf("%d",&newSocre);
        stu->math=newSocre;
        showMsg(stu);
    }
    //4.修改语文成绩
    void changeChineseScore(Student *stu) {
        int newSocre;
        printf("请输入新的语文成绩:");
        scanf("%d",&newSocre);
        stu->chinese=newSocre;
        showMsg(stu);
    }
    //5.修改英语成绩
    void changeEnglishScore(Student *stu) {
        int newSocre;
        printf("请输入新的英语成绩:");
        scanf("%d",&newSocre);
        stu->chinese=newSocre;
        showMsg(stu);
    }
    /*
    *
    *1、采用多分支选择结构,实现学生信息的修改
    *2、编辑学生信息输入对应的编号,进行对应的修改,例:1,则进行姓名修改
    */
    void editStudent(Student *studentList) {
        printf("请输入学号:");
        int ditCode;
        scanf("%d",&ditCode);
        Student *ditStu = studentList->next;
        if(ditStu!=NULL) {
            while(ditStu!=NULL) {
                if(ditStu->code==ditCode) {
                    printf("请输入修改信息编号:\n1.姓名\n2.年龄\n3.数学\n4.语文\n5.英语\n");
                    int number;
                    scanf("%d",&number);
                    switch(number) {
                        case 1: changeName(ditStu);
                        break;
                        case 2: changeAge(ditStu);
                        break;
                        case 3: changeMathScore(ditStu);
                        break;
                        case 4: changeChineseScore(ditStu);
                        break;
                        case 5: changeEnglishScore(ditStu);
                        break;
                        default:
                                                                                    printf("输入内容无效!");
                    }
                }
                ditStu = ditStu->next;
            }
        } else {
            printf("抱歉,你还未录入学生信息,请先录入学生信息!\n");
        }
    }
    //根据学生编号查找学生信息
    void findStudent(Student *studentList) {
        printf("请输入学号:");
        int code;
        scanf("%d",&code);
        //指向第一个学生节点
        Student *ditStu = studentList->next;
        //如果学生链表不为空,则进行查询
        if(ditStu!=NULL) {
            while(ditStu!=NULL) {
                if(ditStu->code!=code)    //学生学号不相等,则继续下一个比对查找 {
                ditStu=ditStu->next;
                //找到后则进行学生信息的输出
                showMsg(ditStu);
                printf("这里:");
                break;
            }
        } else {
            printf("没有这名学生的信息!");
        }
    }
    /*
    *显示学生列表
    */
    void showStudent(Student * studentList) {
        Student *temp = studentList->next;
        printf("学号\t姓名\t年龄\t性别\t数学\t语文\t英语\n");
        //如果学生链表不为空,则进行输出
        while(temp != NULL) {
            showMsg(temp);
            temp=temp->next;
        }
        printf("\n");
    }
    /*
    *保存学生信息到文件中
    */
    void saveStudent(Student *studentList) {
        //创建文件指针
        FILE *fp = NULL;
        //存放在D【C盘需要事先创建文件夹】盘根目录下,自动【有就不创建。否则创建文件】
        //创建studentMsg.txt
        fp = fopen("D:\\studentMsg.txt","a+");
        //fp = fopen("C:\\Users\\SherryHan\\Desktop\\学习文件\\political\\studentMsg.txt","a+");
        //“a+”采用追加的形式保存到文件中
        Student *stu = studentList->next;
        //指针指向第一个学生
        char title[N] = "学号\t姓名\t年龄\t性别\t数学\t语文\t英语\n";
        //将标题【学生属性列】写入文件中
        fprintf(fp,"%s",title);
        //遍历学生链表,并将学生信息写入文件,直到最后一个学生的下一个节点为空
        while(stu!=NULL) {
            fprintf(fp,"%d\t%s\t%d\t%s\t%d\t%d\t%d\n",stu->code,stu->name,stu->age,stu->sex
                            ,stu->math,stu->chinese,stu->english);
            stu=stu->next;
        }
        fclose(fp);
    }
    void showHelp() {
        printf("1、此系统可以对学生信息进行管理。\n");
        printf("2、输入对应功能项的编号即可进行不同功能的系统操作。\n");
    }
    /*
    *显示菜单
    */
    void showMenu() {
        int i;
        printf("------------------------");
        printf("\t欢迎使用学生管理系统\t");
        printf("------------------------\n");
        printf("\t");
        for (i=0;i<WIDESIZE;i++) {
            printf("*");
        }
        printf("\n");
        printf("\t*\t0.系统帮助及说明\t**");
        printf("\t1.刷新学生信息\t\t*\n");
        printf("\t*\t2.查询学生信息\t\t");
        printf("**\t3.修改学生信息\t\t*\n");
        printf("\t*\t4.增加学生信息\t\t**");
        printf("\t5.按学号删除信息\t*\n");
        printf("\t*\t6.显示所有学生信息\t**");
        printf("\t7.保存当前信息\t\t*\n");
        printf("\t*\t8.退出学生管理系统\t**");
        for (i=0;i<4;i++) {
            printf("\t");
        }
        printf("*\n");
        printf("\t");
        for (i=0;i<WIDESIZE;i++) {
            printf("*");
        }
        printf("\n");
        printf("------------------------");
        printf("\t2022计算机科学与技术\t");
        printf("------------------------\n");
        printf("请按所需输入菜单编号:");
    }
    /*
    *
    *采用带头结点的链表来存储学生信息    
    *
    */
    int main(int argc, char const *argv[]) {
        int choice;
        Student * studentList =  createList();
        do {
            showMenu();
            scanf("%d",&choice);
            switch(choice) {
                case 0: showHelp();
                break;
                case 1: printf("刷新完成!\n");
                break;
                case 2: findStudent(studentList);
                break;
                case 3: editStudent(studentList);
                break;
                case 4: insertStudent(studentList);
                break;
                case 5: deleteStudent(studentList);
                break;
                case 6: showStudent(studentList);
                break;
                case 7: saveStudent(studentList);
                break;
                default:
                                            exit(1);
            }
        }
        while(1);
        return 0;
    }
    
    评论
  • 一个普通の学生 2022-08-28 11:29
    关注
    评论
  • m0_72938729 2022-08-26 14:32
    关注
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 Qt 不小心删除了自带的类,该怎么办
  • ¥15 我需要在PC端 开两个抖店工作台客户端.(语言-java)
  • ¥15 有没有哪位厉害的人可以用C#可视化呀
  • ¥15 可以帮我看看代码哪里错了吗
  • ¥15 设计一个成绩管理系统
  • ¥15 PCL注册的选点等函数如何取消注册
  • ¥15 问一下各位,为什么我用蓝牙直接发送模拟输入的数据,接收端显示乱码呢,米思齐软件上usb串口显示正常的字符串呢?
  • ¥15 Python爬虫程序
  • ¥15 crypto 这种的应该怎么找flag?
  • ¥15 代码已写好,求帮我指出错误,有偿!