广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言编写实现学生管理系统
  • 827
分享到

C语言编写实现学生管理系统

2024-04-02 19:04:59 827人浏览 泡泡鱼
摘要

本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 项目介绍 学生信息管理系统是一个基于C语言开发的系统,其中有用到冒泡排序、指针、结构体、二位数组等知识

本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下

项目介绍

学生信息管理系统是一个基于C语言开发的系统,其中有用到冒泡排序、指针、结构体、二位数组等知识。通过模块化的方法编写各个函数,其中在主界面函数调用各个模块的函数的实现以下具体功能:

1、学生信息的增删改查
2、学生成绩的排序
3、统计学生人数
4、显示所有学生的信息。
5、对学生信息存档

总体设计

本实验通过在main函数打开保存数据结果的文档和调用主界面函数;在主界面函数welcom()中实现边框的绘制,以及显示各个功能及各个功能对应的函数实现方法。

录入信息函数addInfo():此函数通过结构体student来保存录入的信息,其中为了确保数据的后续操作的准确性,通过学号的唯一性来标识每个学生的信息,通过编写及调用一个isIdSame()函数,该函数通过遍历所有学号确认学号来保障学号的唯一性,学号重复会提示用户需要重新输入函数。

查找学生信息函数:通过学号查找学生的信息,编写并调用一个findIndex()函数,该函数会遍历结构体的学号信息,查询到会返回该学号的坐标,没有找到该学号则返回-1;通过变量target来保存返回的结果。如果target不等于-1,则程序找到了该学号,通过编写并调用一个showInfo()函数来输出所有该学生的信息;否则输出查询此人,因为下标不可能为负数。

更新学生信息函数update():通过学号来找到该学生,调用findIndex()函数来确定该学生的位置,如果返回结果是小于0则函数结束,查无此人;若大于0则找到该学生,通过do…while函数switch选择语句的嵌套来进行用户需要求改某一项的内容。

删除函数del():查找学生的步骤跟更新学生信息函数的流程一样,如果findIndex()函数小于0则函数结束,否则通过一个for循环把结构体的数组从光标开始往前覆盖从而达到删除效果。

插入学生信息函数inserInfo():通过要求用户输入位置来定位插入到位置,输入用户输入的大于结构体数组的总数则插入到最后一个数组。否则通过一个for循环,把数组从最后开始往后移一位,把用户输入的位置的结果移到后一数组就编写并调用插入函数inserCurrentInfo()对当前位置数组进行覆盖插入。inserCurrentInfo()函数只负责对接收到的该位置的元素所有信息的写入。

排序函数sortTotal():创建一个临时变量提供元素与元素之间交换信息。通过双循环嵌套结构进行结构体的分数进行大小对比、交换位置来进行冒泡排序。最后排序完成之后输出分数由高到低排序的所有学生的信息。

显示学生信息函数showAllInfo():该函数通过全局变量count(该变量记录了所有添加、插入或删除过的学生信息,能准确记录学生的总人数)通过for循环去遍历student结构体,从而输出所有的所生信息。

学生数据存档函数writeData():该函数定义一个指针,以写入方式打开”stu.txt文本”,并把该文本的地址赋给指针fp。通过一个for循环遍历结构体里的元素,把结构体里的元素的属性输入到”stu.txt文本”。

详细代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <coNIO.h>
#include <windows.h>
void addInfo();// 添加
void welcom(); //主界面 
void showAllInfo();//展示所有信息 
void showInfo(struct Student student);//展示学生信息 
int findIndex(struct Student student[],int id);// 根据学号 返回对应下标 
void del(); //删除 
void search();// 查找学生信息 
void updata();//更新 
void sortTotal();//按总分排序 
void writeData();//数据写入文件中 
void initData();//初始化数据 从文件中读取数据,初始化数组
void showCount(); // 展示存储学生个数 
void inserInfo();//插入学生信息 
void inserCurrentInfo(int site); //当前位置插入 
void con();//按任意键继续 
int find1(struct Student student[],int id); //判断学号是否有重复 重复返回1 不重复返回0 
void isIdSame(int x); //校验所输入学号是否重复 
void Gotoxy(int x,int y);//光标定位
int color(int c); //设置颜色输出 
struct Student{
    int id;
    char name[20];
    int _math;
    int _chinese;
    int _english;
    int total;// 总分 
} student[500]; 
int count=0;// 记录当前数组中存储学生个数 
//主函数 
int main(){
    initData(); 
    welcom(); 
    return 0;
}
// 光标定位 
void gotoxy(int x, int y)
{
    COORD pos;
     pos.X = x;      //横坐标
     pos.Y = y;      //纵坐标
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
//设置颜色输出 
int color(int c)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);        //更改文字颜色
    return 0;
}; 
// 主界面 
void welcom()
{
    while(1){
        system("cls");
            int n;
            int i,j = 1;
            color(10);                                          //淡绿色边框
            for (i = 5; i <= 35; i++)                               //循环y轴坐标,打印输出上下边框===
            {
                for (j = 10; j <= 57; j++)                      //循环x轴坐标,打印输出左右边框||
                {
                    gotoxy(j, i);
                    if (i == 5 || i == 35) printf("=");            //输出上下边框===
                    else if (j == 10 || j == 56) printf("||");    //输出左右边框||
                }
            }
             color(15);//白色 
             gotoxy(25,8);
             printf("学生信息管理系统");
            color(14);                //设置字体颜色为黄色
            gotoxy(15, 12);
            printf("1:录入学生信息");
            gotoxy(35, 12);
            printf("2.查找学生信息");
            gotoxy(15, 16);
            printf("3.删除学生信息");
            gotoxy(35,16);
            printf("4.修改学生信息");
            gotoxy(15, 20);
            printf("5.插入学生信息");
            gotoxy(35,20);
            printf("6.按照学生成绩排序");     
            gotoxy(15, 24);
            printf("7.统计学生总数");
            gotoxy(35,24);
            printf("8.显示所有学生信息");
            gotoxy(15, 28);
            printf("9.学生数据存档并退出");
            gotoxy(25,32); 
            int choose;
            printf("请选择:[ ]\b\b"); //\b 光标回退一格  
            color(15); //  颜色变回白色 
             scanf("%d", &choose);
                 switch (choose){
                      case 1:addInfo(); break;
                      case 2:search(); break;
                      case 3:del(); break;
                      case 4:updata(); break;
                      case 5:inserInfo();break; 
                      case 6:sortTotal(); break;
                      case 7:showCount(); break;
                      case 8:showAllInfo(); break;
                      case 9:writeData();exit(0);
                      } 
    }                
}
// 添加 
void addInfo(){
    system("cls");
    printf("\t添加学生信息\n");
    printf("请输入学号\n");
    isIdSame(count);
    printf("请输入姓名\n");
    scanf("%s",&student[count].name);
    printf("请输入语文成绩\n");
    scanf("%d",&student[count]._chinese);
    printf("请输入数学成绩\n");
    scanf("%d",&student[count]._math);
    printf("请输入英语成绩\n");
    scanf("%d",&student[count]._english);
    student[count].total=student[count]._chinese+student[count]._english+student[count]._math;
    printf("%s的信息录入成功\n\n",student[count].name);
    int choose;
    printf("1继续 2返回主界面\n"); 
    count++;  
    scanf("%d",&choose);
    if(choose==1){
        addInfo();
    } 
    system("cls"); 
 
} 
 
// 查找 展示结果 
void search(){
    system("cls");
    int id;
    printf("请输入你想查找学生的学号\n");
    scanf("%d",&id);
    int target = findIndex(student,id);  //目标下表
    int flag=1;//是否存在要查询的学号 
    
    //for循环对比 
    if(target != -1) 
    {
        printf("\n\t查询结果\n\n");
        showInfo(student[target]);
        con();  
        
    }
 
    else{ // 输出查询结果 
            printf("\n查无此人\n"); 
                con();
    } 
}
 
 
// 更新 
void updata(){
    system("cls");
    int id;
    printf("请输入你要修改学生的学号\n");
    scanf("%d",&id);
    int    target = findIndex(student,id);
 
    if(target<0){
        printf("查无此人");
        con(); 
    }else{
        int flag=1;    
    do{
        int choose=0;
        printf("请输入需要修改的选项\t(1.学号\t2.姓名\t3.语文\t4.数学\t5.英语):\n");
        scanf("%d",&choose); 
            switch (choose) {
                case 1:
                    printf("请输入学号\n");
//                    scanf("%d",&student[target].id);
                    isIdSame(target);            
                    break;
                case 2:
                    printf("请输入姓名\n");
                    scanf("%s",&student[target].name);
                    break;
                case 3:
                    printf("请输入语文成绩\n");
                    scanf("%d",&student[target]._chinese);
                    break; 
                case 4:
                    printf("请输入数学成绩\n");
                    scanf("%d",&student[target]._math);
                    break;    
                case 5:
                    printf("请输入英语成绩\n");
                    scanf("%d",&student[target]._english);
                    break;        
 
            } 
            student[target].total=student[target]._chinese+student[target]._english+student[target]._math;
            printf("%s的信息修改成功\n",student[target].name);
            printf("\n按1继续 按2退出修改\n");
            int choose2; 
            scanf("%d",&choose2);
            if(choose2==1){
                flag=1;
            }else{
                flag=0;
            } 
            
    }while(flag);
 
    }    
} 
//删除
void del(){
    system("cls");    
    int id;
    int target;//目标元素的下标 
    printf("\n请输入你想删除学生的学号\n");
    scanf("%d",&id);
    target=findIndex(student, id);
    if(target<0){
        printf("\n查无此人\n");
        con();
        
    } else{
         for(int i=target;i<count;i++){
             student[i]=student[i+1]; //删除操作 后一位元素覆盖前一位元素 
         }
        printf("删除成功\n");
        con();
    count--; 
    } 
}
 
//插入学生信息
void inserInfo(){
    system("cls");
    int site; //位置 
    printf("请输入你要插入学生信息的位置(从0开始):\n");
    scanf("%d",&site);
    //插入位置大于总数,则插入在数组最后一位
    if ( site > count){
        inserCurrentInfo(count); 
        printf("%s的信息插入成功\n", student[count].name);
        
    }else{
        //不是最后一位 从当前位置 数组全部后移一位 
        for (int i = count; i >= site; i--){
                student[i + 1] = student[i];
            }
        //在当前位置添加学员
        inserCurrentInfo(site);
        printf("%s同学的信息插入成功\n", student[site].name);
        con(); 
        }
 
} 
//当前位置插入
void inserCurrentInfo(int site){
     printf("请输入学号\n");
     isIdSame(site);
     printf("请输入姓名\n");
     scanf("%s", student[site].name);
     printf("请输入语文成绩\n");
     scanf("%d", &student[site]._chinese);
     printf("请输入数学成绩\n");
     scanf("%d", &student[site]._math);
     printf("请输入英语成绩\n");
     scanf("%d", &student[site]._english);
    student[site].total= student[site]._chinese+student[site]._english+student[site]._math;
     count++;
     con();
 }
// 判断学号是否重复 重复返回1 否则返回0 
int find1(struct Student student[],int id)
{
 int temp = 0;
 for(int i=0;i<count;i++)
  {
   if(student[i].id==id)
    {
     temp=1;
     break;
    }
  } 
 return temp;
} 
//校验所添加学号是否重复
void isIdSame(int x){
 
    int inputId;    
    scanf("%d",&inputId);
     do{
       if(find1(student,inputId)){
         printf("学号有重复,请重新输入\n");
         scanf("%d",&inputId);
        }
       else
        {
         student[x].id=inputId;
         break;
        }
      }while(1);
}
 
// 根据学号 返回下标 
int findIndex (struct Student student[],int id){
    int temp;
    for(int i=0;i<count;i++){
        if(student[i].id==id){
            temp=i;
            break; 
        } else {
            temp = -1; 
        } 
    }
    
    return temp;
}
//按总分排序
 void sortTotal(){
     //冒泡排序 
    struct Student temp;// 元素与元素交换的临时容器 
    for (int i = 0; i < count - 1; i++){
        for (int j = 0; j < count - 1 - i; j++){
            if (student[j].total<student[j+1].total){
                temp = student[j + 1];
                student[j + 1] = student[j];
                student[j]= temp;
            }
        }
    }
    printf("排序完成");
    showAllInfo();     
 }
 //按任意键继续 
 void con(){
     printf("\n按任意键继续\n"); 
     getch();
 }; 
 //展示学生总个数 
 void showCount(){
     system("cls"); 
     printf("\n\t学生总个数为:%d个\n",count); 
    con(); 
 } 
 //初始化数据 
 void initData(){
     FILE * fp = NULL;
     fp = fopen("stu.txt", "r");
     if (!fp){
         printf("文件打开失败\n");
         exit(0);// 退出程序 
     }
     while (1){    //读取数据 赋值给数组 
         fscanf(fp, "%d%s%d%d%d%d", &student[count].id, student[count].name, &student[count]._chinese, &student[count]._math, &student[count]._english, &student[count].total);
         if (feof(fp)){ //文件末尾 跳出循环 
             break;
         }
         count++;
     }
 }
 //数据写入文件中 
 void writeData(){
    FILE * fp = NULL;
    fp = fopen("stu.txt", "w");
    for (int i = 0; i < count; i++){
        fprintf(fp, "%d\t%s\t%d\t%d\t%d\t%d\n", student[i].id, student[i].name, student[i]._chinese, student[i]._math, student[i]._english,student[i].total);
    }
    printf("数据保存成功\n");     
 }
 
 
// 展示所有信息
void showAllInfo(){
    system("cls");//清屏 
    for(int i=0;i<count;i++){
        showInfo(student[i]);     
    } 
    con(); 
} 
// 展示学生信息
void showInfo(struct Student stu){//传入数组里的元素 
    printf("学号:%d\t姓名:%s\t语文:%d\t数学:%d\t英语:%d\t总分:%d",stu.id,stu.name,stu._chinese,stu._math,stu._english,stu.total);
    printf("\n-----------------分割线-----------------------\n"); 
} 

主界面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言编写实现学生管理系统

本文链接: https://www.lsjlt.com/news/164903.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言编写实现学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 项目介绍 学生信息管理系统是一个基于C语言开发的系统,其中有用到冒泡排序、指针、结构体、二位数组等知识...
    99+
    2022-11-13
  • C语言实现学生宿舍管理系统
    本文实例为大家分享了C语言实现学生宿舍管理系统的具体代码,供大家参考,具体内容如下 实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳人数、已入住人数等,系...
    99+
    2022-11-13
  • C语言实现简易学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,如:简单的增,删,改,查,即:录入成绩...
    99+
    2022-11-13
  • C语言实现学生档案管理系统
    本文实例为大家分享了C语言实现学生档案管理系统的具体代码,供大家参考,具体内容如下     #include<stdio.h&...
    99+
    2022-11-13
  • C语言实现班级学生管理系统
    本文实例为大家分享了C语言实现班级学生管理系统的具体代码,供大家参考,具体内容如下 下面是根据班级,这个人数较少的单位设计的学籍管理系统,录入时,要求班内序号由1开始  按顺序录入,...
    99+
    2022-11-12
  • c语言实现学生管理系统详解
    目录infor.htest.cinfor.c总结 该学生管理系统的实现是通过分文件的方式来写的,infor.h 文件为头文件,源文件infor.c实现源文件tes...
    99+
    2022-11-12
  • C语言实现学生管理系统总结
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 前言 本周完成了学生管理系统,在完成的过程中遇见了许多问题,今天来总结上周写管理系统一些比较困难的模块...
    99+
    2022-11-13
  • C语言实现学生消费管理系统
    本文实例为大家分享了C语言实现学生消费管理系统的具体代码,供大家参考,具体内容如下 代码可以实现的功能: (1)直接从终端键盘输入信息(2)从磁盘文件录入学生信息(3)可以查询学生消...
    99+
    2022-11-13
    C语言学生消费系统 C语言消费管理系统 C语言学生管理系统
  • C语言实现学生信息管理系统
    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 #define _CRT_SECURE_NO_WARNINGS #include <stdi...
    99+
    2022-11-13
  • 基于C语言实现学生管理系统
    本文实例为大家分享了C语言实现学生管理系统的具体代码,供大家参考,具体内容如下 1.目标要求: 1.学生成绩管理系统2.可增、删、改、查、浏览3.数据保存在文件中 2.C语言代码: ...
    99+
    2022-11-13
  • C语言模拟实现学生学籍管理系统
    学生学籍管理系统的C语言模拟实现是对链表、指针、结构体、文件操作等知识点的综合运用,需要实现的功能主要包含:输入学生信息、显示学生信息、查询学生信息、新增学生信息、删除学生信息、修改...
    99+
    2022-11-13
  • C语言实现简单的学生学籍管理系统
    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 一 .课题设计内容与主要功能 1.1问题描述: 通过该系统实现对学生学籍信息进行录入、显示、修改、...
    99+
    2022-11-13
  • C语言实现学生信息管理系统(链表)
    目录1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1).定义提示菜单2).增加学生记录3).输入学号接口·4).遍历表...
    99+
    2022-11-13
  • C语言如何实现简易学生管理系统
    本篇内容主要讲解“C语言如何实现简易学生管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现简易学生管理系统”吧!首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,...
    99+
    2023-07-02
  • C语言实现学生成绩管理系统项目
    本文实例为大家分享了C语言实现学生成绩管理系统项目,供大家参考,具体内容如下 1、数据结构:学生信息:学号、姓名、年龄、性别、3课成绩 2、功能: (1)  增加学生记录(...
    99+
    2022-11-13
  • C语言实现学生宿舍信息管理系统
    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 功能描述 该学生宿舍信息管理系统主要实现的功能有:创建学生宿舍信息,显示学生宿舍信息,查询学生...
    99+
    2022-11-13
  • C语言代码实现学生成绩管理系统
    某班有最多不超过 30 人(具体人数由键盘输人)参加期未考试,考试科目 最多不超过 6 门(具体门数由键盘输入,但不少于 3 门),学生成绩管理系统是一 个非常实用的程序,如果能够把...
    99+
    2022-11-13
  • C语言实现简单学生信息管理系统
    学生信息管理系统的功能有,也可以自己增加或者改进一些函数功能。 在main函数里调用这8个函数 学生信息包含姓名、年龄、学号、成绩,需要定义一个结构体(结构体是全局变量,所以需要全...
    99+
    2022-11-13
  • C语言链表实现学生成绩管理系统
    目录一、课程设计题目及内容二、主要设计思路三、程序源码及具体注释(1)预处理指令(2)类型定义(3)函数原型(4)main函数定义(5)其他函数定义 四、运行示例五、注意事...
    99+
    2022-11-13
  • C语言实现学生个人消费管理系统
    本文实例为大家分享了C语言实现学生个人消费管理系统的具体代码,供大家参考,具体内容如下 程序介绍 运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图...
    99+
    2022-11-13
    C语言学生消费管理系统 C语言个人消费管理系统 C语言消费管理系统
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作