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

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

可以参考我这个稍加改动就行
https://blog.csdn.net/weixin_64811333/article/details/125333242

采纳后私信帮你改好

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;
}

图示效果:

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;
}

https://blog.csdn.net/weixin_52062043/article/details/115278862

https://blog.csdn.net/weixin_52062043/article/details/115278862