我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言如何实现新生入学登记系统

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言如何实现新生入学登记系统

今天小编给大家分享一下C语言如何实现新生入学登记系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

项目所用数据结构:链表
算法:对链表数据的增删改查操作,冒泡排序
系统架构图:

C语言如何实现新生入学登记系统

项目文件结构:

C语言如何实现新生入学登记系统

(1)system.h

#ifndef SYSTEM_H_INCLUDED#define SYSTEM_H_INCLUDED//宏定义学生信息的一种表示形式#define STUDENT_DATA  pMove->studentData.studentId,pMove->studentData.name,pMove->studentData.sex,pMove->studentData.age,pMove->studentData.className,pMove->studentData.major,pMove->studentData.tel,pMove->studentData.score#define STUDENT_RANKING stuRanking[j].studentId, stuRanking[j].name, stuRanking[j].className, stuRanking[j].score,stuRanking[j].rankingstruct student{      char studentId[15];  //学号      char name[10];      char sex[4];      int  age;      char className[20];  //班级      char major[20];  //专业      char tel[15];      int  score;    //入学成绩};struct Node{      struct student studentData;      struct Node* next;};struct studentRanking{     char studentId[15];     char name[10];     char className[20];     int  score;     int  ranking;};extern struct Node* studentList;  //链表的头指针#endif // SYSTEM_H_INCLUDED

(2)main.h

#ifndef MAIN_H_INCLUDED#define MAIN_H_INCLUDED#include "AddStudent.h"#include "BeginingAndEnding.h"#include "DeleteStudent.h"#include "ModifyStudent.h"#include "SearchStudent.h"#include "ShowStudent.h"#include "ShowStudentRanking.h"#include "MyList.h"#include "system.h"void showMenu();#endif // MAIN_H_INCLUDED

(3)main.c
 

#include <stdio.h>#include <stdlib.h>#include <conio.h>   //getc函数使用的头文件#include "main.h"//主函数int main(){int selection;Int ret;    Begining();    showMenu();      //展示界面    ret = scanf("%d", &selection); //读入用户输入数字getchar();While(ret != 1){     printf(“输入错误,请选择(0-6):”);     ret = scanf("%d", &selection); //读入用户输入数字}    while (selection)    {        switch (selection)        {        case 1:            AddStudent();  //录入学生信息            break;        case 2:            ShowStudent();  //浏览学生信息            break;        case 3:            SearchStudent(); //查找学生信息            break;        case 4:            DeleteStudent(); //删除学生信息            break;        case 5:            ModifyStudent();//修改学生信息            break;        case 6:            ShowRanking(); //显示学生排名            break;        default:            printf("\t\t请输入正确的数字!\n");        }        Ending(); //将链表数据写入文件        printf("|按任意键返回系统菜单|");        getch(); //接收用户输入的任意字符        system("cls");        showMenu();        ret = scanf("%d", &selection); //提示用户输入数字        getchar();    While(ret != 1){        printf(“输入错误,请选择(0-6):”);        ret = scanf("%d", &selection); //读入用户输入数字}    }    return 0;}void showMenu(){    printf("\n\n\n\n\n");    printf("\t|--------------- 欢迎进入 ----------------|\n");    printf("\t|             新生入学登记系统            |\n");    printf("\t|                 主菜单                  |\n");    printf("\t|            1. 录入学生信息              |\n");    printf("\t|            2. 浏览学生信息              |\n");    printf("\t|            3. 查找学生信息              |\n");    printf("\t|            4. 删除学生信息              |\n");    printf("\t|            5. 修改学生信息              |\n");    printf("\t|            6. 新生入学排名              |\n");    printf("\t|            0. 退出系统                  |\n");    printf("\t|-----------------------------------------|\n");    printf("\n");    printf("\t\t请选择(0-6):");}

(4)BeginingAndEnding.h

#ifndef BEGININGANDENDING_H_INCLUDED#define BEGININGANDENDING_H_INCLUDED//关于启动函数和结束函数void Begining();void Ending();#endif // BEGININGANDENDING_H_INCLUDED

(5)BeginingAndEnding.c

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include "system.h"#include "AboutFiles.h"#include "BeginingAndEnding.h"#include "MyList.h"void Begining(){      readInfoFromFile("studentList.txt");}void Ending(){      writeInfoToFile("studentList.txt");}

(6)MyList.h

#ifndef MYLIST_H_INCLUDED#define MYLIST_H_INCLUDED//关于链表的函数声明//创建节点struct Node* createNode(struct student data);//插入节点void insertNodeByHead(struct student data);//指定位置删除节点void deleteAppointNode(char* studentId);//查找功能struct Node* searchInfoByData(char* studentId);//打印链表void printList();#endif // MYLIST_H_INCLUDED

(7)MyList.c
 

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include <windows.h> //Sleep函数使用的头文件#include <string.h>//strcmp函数使用的头文#include "system.h"#include "MyList.h"struct Node* studentList = NULL;  //链表的头指针//创建节点struct Node* createNode(struct student studentData){      struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));      if(newNode != NULL)      {            newNode->studentData = studentData;            newNode->next = NULL;      }      return newNode;}//插入节点void insertNodeByHead(struct student data){      struct Node* newNode = createNode(data);      //表头法插入,每次插入都将数据插入到头节点的下一个,先判断头节点是否为空,为空则新节点就是头节点,不为空,则插入在头节点的下一个位置      if(studentList == NULL)      {            studentList = newNode;      }      else//不改变头节点      {            newNode->next = studentList->next;            studentList->next = newNode;      }}//指定位置删除节点(知道这个节点的前驱和后续,然后进行删除)void deleteAppointNode( char* studentId){    //将链表头部设为指定位置,先判断头节点是否为空,为空则链表没有数据,无法删除    //如果头节点不为空,则设头结点为指定位置,如果头结点是所找的节点,则删除,如果不是,设头结点的下一个为指定节点,头结点为指定节点的前驱节点,一直向下查询    //指定位置    struct Node* posNode = studentList;    //指定位置的前面    struct Node* posFrontNode = NULL;    //查找指定节点    if(posNode == NULL)    {       printf("数据为空无法删除!\n");        return;    }    else    {          //姓名是字符串,不能直接比较, strcmp(), 相等返回值为0,相同返回值为负数或者正数        if(strcmp(posNode->studentData.studentId, studentId) ==0)        {            studentList = studentList->next;            free(posNode);            return;        }        else        {            posFrontNode = posNode;            posNode = posNode->next;            //posFrontNode = posNode; //!!            while(strcmp(posNode->studentData.studentId, studentId))            {                //继续向下一个节点移动                posFrontNode = posNode;                posNode = posFrontNode->next;                if(posNode == NULL) //找到了链表尾部,没有找到数据                {                    printf("未找到指定位置,无法删除!");                    return;                }            }            //查到到对应数据后,进行删除,将该节点架空,然后释放该节点的存储单元            posFrontNode->next = posNode->next;            free(posNode);            return;        }    }}//查找功能struct Node* searchInfoByData(char* studentId){      struct Node* pMove;      pMove = studentList;      if(pMove == NULL) //头节点为空,链表为空      {            //printf("学生链表为空!\n");            return pMove;      }      else      {            // 查找到或者查找到链表最后,则结束循环,返回查询结果,结果为空,有两种可能,一种是链表中没有数据,另一种是没有查询到            while(pMove != NULL)            {                  if(strcmp(pMove->studentData.studentId, studentId)==0)//找见                  {                        //printf("已查找到!\n");                        return pMove;                  }                  else                  {                        pMove = pMove->next;                  }            }            //printf("未找到!\n");            return pMove;      }}//打印链表void printList(){      struct Node* pMove = studentList;      //涉及到展示数据      //表头      if(pMove == NULL)      {            printf("No student record! Please add.\n");            return;      }      else      {             printf("\t-------------------------------------------------------------------------------------\n");printf("\t|%-10s |%-7s |%-4s |%-4s |%-12s |%-12s |%-12s |%-5s|\n","学号","姓名","性别","年龄","班级","专业","电话","入学成绩");             printf("\t-------------------------------------------------------------------------------------\n");while(pMove)   {      printf("\t|%-10s |%-7s |%-4s |%-4d |%-12s |%-12s |%-12s |%-8d|\n", STUDENT_DATA);                  printf("\t-------------------------------------------------------------------------------------\n");    pMove = pMove->next;            }      }      printf("\n");}

(8)AddStudent.h

#ifndef ADDSTUDENT_H_INCLUDED#define ADDSTUDENT_H_INCLUDEDvoid AddStudent();  //录入学生信息#endif // ADDSTUDENT_H_INCLUDED

(9)AddStudent.c
 

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include <windows.h> //Sleep函数使用的头文件#include <string.h>//strcmp函数使用的头文#include "AddStudent.h"#include "system.h"#include  "MyList.h"//录入学生信息void AddStudent(){    struct student studentData;    struct Node* isNull = NULL;  //接收查询的返回值    int iFlagExist;  //保证不重复输入    char cFlag;    int ret;  //用来接收scanf的返回值,判断输入数据是否正确    system("cls");    printf("===================================【录入学生信息】===============================\n");    printf("\n请选择是否输入学生信息(y/n):");    cFlag = getchar();    getchar();    while(cFlag != 'n' && cFlag!='y')    {          printf("输入有误,请输入‘y'或者‘n'!");          printf("\n请选择是否输入学生信息(y/n):");          cFlag = getchar();          getchar();    }    if (cFlag == 'n')        return;    //循环输入学生信息可输入一条也可多条输入    while (cFlag == 'y')    {        printf("请输入学生学号:");        do        {            iFlagExist = 0;            gets(studentData.studentId);            //对学生编号在链表中进行查询,对查询结果进行判断,如果存在则重新输入,不存在则继续            isNull = searchInfoByData(studentData.studentId);            if(isNull!= NULL) //可以查询到            {                  printf("该学生已经存在请重新输入!\n");                  printf("请输入学生学号:");                  iFlagExist = 1;            }        } while (iFlagExist == 1);        //添加学生信息        printf("请输入学生姓名:");        ret = scanf("%s",studentData.name);        while(ret!=1)        {              printf("输入学生姓名有误,请重新输入!\n");              printf("请输入学生姓名:");              ret = scanf("%s",studentData.name);        }        getchar();        printf("请输入学生性别(男-M,女-F):"); //这里采用防御式编程,如果不是M,F或者没有输入该项则重新输入        while (gets(studentData.sex) != NULL)        {            if (strcmp(studentData.sex, "F")==0 || strcmp(studentData.sex, "M")==0)                break;            printf("错误,只能输入'F'或者'M',请重新输入\n");            printf("请输入学生性别(男-M,女-F):");        }        printf("请输入学生年龄(15-25):");        ret = scanf("%d", &studentData.age);        while((ret != 1) || studentData.age<15 || studentData.age>25)        {              printf("输入年龄错误,请重新输入学生年龄(15-25):");              ret = scanf("%d", &studentData.age);        }        getchar();        printf("请输入学生班级(eg: B电子191):");        gets(studentData.className);        printf("请输入学生专业:");        gets(studentData.major);        printf("请输入学生电话:");        gets(studentData.tel);        printf("请输入学生入学成绩(200-750):");        ret = scanf("%d", &studentData.score);        while((ret != 1) || studentData.score<200 || studentData.score>750)        {              printf("输入成绩信息错误,请重新输入学生入学成绩(200-750):");              ret = scanf("%d", &studentData.score);        }        getchar();        insertNodeByHead(studentData);        fflush(stdin);        printf("继续输入信息吗(y/n):");        cFlag = getchar();        getchar();        while(cFlag != 'n' && cFlag!='y')        {            printf("输入有误,请输入‘y'或者‘n'!");            printf("\n请选择是否输入学生信息(y/n):");            cFlag = getchar();            getchar();        }    }    printf("添加学生信息执行完毕!\n");}

(10)ShowStudent.h

#ifndef SHOWSTUDENT_H_INCLUDED#define SHOWSTUDENT_H_INCLUDEDvoid ShowStudent(); //查找学生信息#endif // SHOWSTUDENT_H_INCLUDED

(11)ShowStudent.c
 

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include <windows.h> //Sleep函数使用的头文件#include <string.h>//strcmp函数使用的头文#include "ShowStudent.h"#include "system.h"#include  "MyList.h"//浏览学生信息void ShowStudent(){      system("cls");      printf("\n");      printf("\t====================================【浏览学生信息】================================\n");      printf("\n\n");      printList();}

(12)SearchStudent.h

#ifndef SEARCHSTUDENT_H_INCLUDED#define SEARCHSTUDENT_H_INCLUDEDvoid SearchStudent(); //查找学生信息#endif // SEARCHSTUDENT_H_INCLUDED

(13)SearchStudent.c

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include <windows.h> //Sleep函数使用的头文件#include <string.h>//strcmp函数使用的头文#include "SearchStudent.h"#include "system.h"#include  "MyList.h"//查找学生信息void SearchStudent(){      //查询成功,则返回该学生信息,查询失败则输出提示信息,可重新输入,也可退出      struct student studentData;      struct Node* pMove = NULL; //用来接收查询返回的结果      char cFlag;  //接收用户的选择      system("cls");      printf("\n");      printf("\t==================================【查找学生信息】==============================\n");      printf("\t是否进行学生查询(y/n):");      cFlag = getchar();      getchar(); //接收回车键      while(cFlag != 'n' && cFlag!='y')      {            printf("输入有误,请输入‘y'或者‘n'!");            printf("\n请选择是否查询学生信息(y/n):");            cFlag = getchar();            getchar();      }      if (cFlag == 'n')        return;      while(cFlag == 'y')      {        printf("\t请输入需要查找的学生的学号:");        //这里通过学号进行查询,学号是唯一的,姓名有重名现象        gets(studentData.studentId);        pMove = searchInfoByData(studentData.studentId);        if(pMove)  //pMove 为真时,表示查询到        {            printf("\t查询成功,以下为该学生信息:\n");            printf("\t-------------------------------------------------------------------------------------\n");            printf("\t|%-10s |%-7s |%-4s |%-4s |%-12s |%-12s |%-12s |%-5s|\n","学号","姓名","性别","年龄","班级","专业","电话","入学成绩");            printf("\t-------------------------------------------------------------------------------------\n");            printf("\t|%-10s |%-7s |%-4s |%-4d |%-12s |%-12s |%-12s |%-8d|\n", STUDENT_DATA);            printf("\t-------------------------------------------------------------------------------------\n");        }        else //pMove 为空时,未查询到,这里为空有两种情况,一种为学生名单为空,一种是没有查询到        {            printf("\t查询失败,该学生不存在或学生列表为空!\n");            printf("\t是否重新查询(y/n):");            cFlag = getchar();            getchar();            while(cFlag != 'n' && cFlag!='y')            {                printf("输入有误,请输入‘y'或者‘n'!");                printf("\n是否重新查询学生信息(y/n):");                cFlag = getchar();                getchar();            }        }      }      printf("\t学生信息查询结束!\n");}

(14)DeleteStudent.h

#ifndef DELETESTUDENT_H_INCLUDED#define DELETESTUDENT_H_INCLUDEDvoid DeleteStudent(); //删除学生信息#endif // DELETESTUDENT_H_INCLUDED

(15)DeleteStudent.c
 

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include <windows.h> //Sleep函数使用的头文件#include <string.h>//strcmp函数使用的头文#include "DeleteStudent.h"#include "system.h"#include  "MyList.h"//删除学生信息void DeleteStudent(){      //先根据学号对该学生进行查找,查找到则删除,没有查找到则输出提示信息      struct student studentData;      struct Node* pMove = NULL; //用来接收查询返回的结果      char cFlag;      system("cls");      printf("\n");      printf("\t==================================【删除学生信息】==============================\n");      printf("\t请输入需要删除的学生的学号:");      gets(studentData.studentId);      pMove = searchInfoByData(studentData.studentId);      if(pMove)  //该学生存在,进行删除      {        //先对学生信息进行展示        printf("\t-------------------------------------------------------------------------------------\n");        printf("\t|%-10s |%-7s |%-4s |%-4s |%-12s |%-12s |%-12s |%-5s|\n","学号","姓名","性别","年龄","班级","专业","电话","入学成绩");        printf("\t-------------------------------------------------------------------------------------\n");        printf("\t|%-10s |%-7s |%-4s |%-4d |%-12s |%-12s |%-12s |%-8d|\n", STUDENT_DATA);        printf("\t-------------------------------------------------------------------------------------\n");        printf("\t已查找到该学生信息,是否删除?(y/n)");        cFlag = getchar();        getchar(); //吃掉缓冲区的空格        while(cFlag != 'n' && cFlag!='y')        {            printf("输入有误,请输入‘y'或者‘n'!");            printf("\n请选择是否输入学生信息(y/n):");            cFlag = getchar();            getchar();        }        if(cFlag == 'n')            return;        else if(cFlag == 'y')        {              deleteAppointNode(studentData.studentId);              printf("\t已删除该学生信息!\n");              printf("\t删除操作执行结束!\n");        }      }      else //找到了链表的末尾,或者链表为空      {        printf("\t该学生不存在!无法执行删除操作\n");      }}

(16)ModifyStudent.h

#ifndef MODIFYSTUDENT_H_INCLUDED#define MODIFYSTUDENT_H_INCLUDED#include "system.h"void ModifyStudent();//修改学生信息void ShowModifyMenu();//展示修改选项菜单void dealSelection(struct student studentData, int selection, struct Node *pMove); //处理用户选择的修改项#endif // MODIFYSTUDENT_H_INCLUDED

(17)ModifyStudent.c
 

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include <windows.h> //Sleep函数使用的头文件#include <string.h>//strcmp函数使用的头文#include "ModifyStudent.h"#include "system.h"#include "MyList.h"//修改学生信息void ModifyStudent(){      struct student studentData;      struct Node* pMove = NULL; //对学生信息查询结果进行保存      int selection;  //保存选择信息      char isContinue = 'n';  //是否继续进行修改      system("cls");      printf("\n");      printf("\t==================================【修改学生信息】==============================\n");      printf("\t请输入需要修改信息的学生的学号:");      gets(studentData.studentId);      pMove = searchInfoByData(studentData.studentId);      if(pMove == NULL)      {            printf("\t该学生信息不存在,无法进行信息修改\n");            return;      }      else  //可修改多条学生信息,也可以只修改一条学生信息      {            printf("\t-------------------------------------------------------------------------------------\n");            printf("\t|%-10s |%-7s |%-4s |%-4s |%-12s |%-12s |%-12s |%-5s|\n","学号","姓名","性别","年龄","班级","专业","电话","入学成绩");            printf("\t-------------------------------------------------------------------------------------\n");            printf("\t|%-10s |%-7s |%-4s |%-4d |%-12s |%-12s |%-12s |%-8d|\n", STUDENT_DATA);            printf("\t-------------------------------------------------------------------------------------\n");            printf("\t是否进行学生信息的修改?(y/n)");            scanf("%c", &isContinue);            getchar();            while(isContinue != 'n' && isContinue !='y')            {                  printf("\t输入有误,请输入‘y'或者‘n'!");                  printf("\t请选择是否修改学生信息(y/n):");                  isContinue = getchar();                  getchar();            }            if(isContinue == 'n')                  return;            else            {                  while(isContinue == 'y')                  {                        //system('cls');                        ShowModifyMenu();                        //printf("\t请选择修改项: ");                        scanf("%d", &selection);                        getchar();                        //对用户的操作选择进行处理                        dealSelection(studentData,selection,pMove);                        fflush(stdin);                        printf("\t是否继续修改学生信息(y/n)?");                        isContinue = getchar();                        getchar();                        while(isContinue != 'n' && isContinue!='y')                        {                              printf("\n输入有误,请输入‘y'或者‘n'!");                              printf("\n请选择是否继续修改学生信息(y/n):");                              isContinue = getchar();                              getchar();                        }                  }                  printf("\t学生信息修改完毕!\n");           }      }}//学生信息修改菜单void ShowModifyMenu(){    printf("\n");    //printf("\t|              1.学号              |\n");    printf("\t|              1.姓名              |\n");    printf("\t|              2.性别              |\n");    printf("\t|              3.年龄              |\n");    printf("\t|              4.班级              |\n");    printf("\t|              5.专业              |\n");    printf("\t|              6.电话              |\n");    printf("\t|              7.入学成绩          |\n");    printf("\n");    printf("请输入所要修改的信息(键入相应的数字:1-7):");}//处理用户选择的修改项void dealSelection(struct student studentData, int selection, struct Node* pMove){    int ret; //用来接收scanf的返回值    switch (selection)    {    case 1:        printf("\t请输入输入学生姓名:");        gets(studentData.name);        strcpy(pMove->studentData.name, studentData.name);        break;    case 2:        printf("\t请输入学生性别(男-M,女-F):");        while (gets(studentData.sex) != NULL)        {            if (strcmp(studentData.sex, "F") == 0 || strcmp(studentData.sex, "M") == 0)                break;            printf("\t错误,只能输入'F'或者'M',请重新输入\n");            printf("\t请输入学生性别(男-M,女-F):");        }        strcpy(pMove->studentData.sex,studentData.sex);        break;    case 3:        printf("\t请输入学生年龄(15-25):");        ret = scanf("%d", &studentData.age);        while((ret != 1) || studentData.age<15 || studentData.age>25)        {              printf("\t输入年龄错误,请重新输入学生年龄(15-25):");              ret = scanf("%d", &studentData.age);        }        pMove->studentData.age = studentData.age;        break;    case 4:        printf("\t请输入学生班级(eg:B电子191):");        gets(studentData.className);        strcpy(pMove->studentData.className, studentData.className);        break;    case 5:        printf("\t请输入学生专业:");        gets(studentData.major);        strcpy(pMove->studentData.major, studentData.major);        break;    case 6:        printf("\t请输入学生电话:");        gets(studentData.tel);        strcpy(pMove->studentData.tel, studentData.tel);        break;    case 7:        printf("\t请输入学生入学成绩(100-750):");        ret = scanf("%d", &studentData.score);        while((ret != 1) || studentData.score<200 || studentData.score>750)        {              printf("\t输入成绩信息错误,请重新输入学生入学成绩(200-750):");              ret = scanf("%d", &studentData.score);        }        pMove->studentData.score = studentData.score;        break;    default:        printf("\t\t请输入正确的数字!");        break;    }}

(18)ShowStudentRanking.h

#ifndef SHOWSTUDENTRANKING_H_INCLUDED#define SHOWSTUDENTRANKING_H_INCLUDED#include "system.h"void ShowRanking(); //显示学生排名void sortByScore(struct studentRanking * stuRanking, int length);void Ranking(struct studentRanking * stuRanking, int length);#endif // SHOWSTUDENTRANKING_H_INCLUDED

(19)ShowStudentRanking.c
 

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include <windows.h> //Sleep函数使用的头文件#include <string.h>//strcmp函数使用的头文#include "ShowStudentRanking.h"#include "system.h"void ShowRanking(){      //*对链表中学生的成绩进行排名,并显示排名结果,排名结果括学号姓名班级专业入学成绩排名      //*排名是struct studentRanking 的一个结构体成员,在得出排名后,再进行展示      //*1.对链表中所有学生的成员进行排序,排序结果保存在student.ranking中      //重新定义一个结构体,保存排名信息并输出      //定义一个结构体数组      struct Node *pMove = NULL;      struct studentRanking *stuRanking;      int i, j;      int length = 0; //用来保存链表的长度      system("cls");      printf("\n");      printf("\t==================================【学生排名信息】==============================\n");      if(studentList == NULL)      {          printf("学生登记为空,无法进行成绩排名\n");          return;      }      else //学生链表头指针不为空,代表学生链表中存有学生信息      {          pMove = studentList;  //pMove指向链表的头          //通过遍历得到链表有多少个存储单元          for(i=0; pMove != NULL; i++)          {             pMove = pMove->next;          }          length = i;          printf("现有学生总人数为%d\n", length);          //动态数组          stuRanking = (struct studentRanking *)malloc(length * sizeof(struct studentRanking));          if(stuRanking == NULL)            return;          //将需要输出的学生信息复制到结构体数组当中          pMove = studentList;          for(j=0; j<length; j++)          {                    strcpy(stuRanking[j].studentId, pMove->studentData.studentId);                    strcpy(stuRanking[j].name , pMove->studentData.name);                    strcpy(stuRanking[j].className , pMove->studentData.className);                    stuRanking[j].score = pMove->studentData.score;                    pMove = pMove->next;          }          //复制完成后,根据成绩对学生进行排序          sortByScore(stuRanking, length);          //根据排序结果,为每名同学添加排名信息          Ranking(stuRanking, length);          //展示排名          printf("排名结果如下:\n");          printf("\t-------------------------------------------------------\n");          printf("\t|%-10s |%-7s |%-12s |%-5s |%-5s|\n","学号","姓名","班级","入学成绩","全级排名");          printf("\t-------------------------------------------------------\n");           for(j=0; j<length; j++)          {              printf("\t|%-10s |%-7s |%-12s |%-8d |%-8d|\n", STUDENT_RANKING);              printf("\t-------------------------------------------------------\n");          }      }      printf("输出排名信息完毕!\n");      system("pause");}//通过成绩对链表中的数据进行排序void sortByScore(struct studentRanking *stuRanking, int length){    //进行冒泡排序,从大到小排序    int i, j;    struct studentRanking temp;    for(i=0; i<length-1; i++)    {        for(j=0; j<(length-i-1); j++)        {            if(stuRanking[j].score < stuRanking[j+1].score)//后一项比前一项大,则交换两个存储单元中的数据,一轮排序下来,最小项就位,在列表的最末尾            {                temp = *(stuRanking+j);                *(stuRanking+j) = *(stuRanking+j+1);                *(stuRanking+j+1) =temp;            }        }    }}void Ranking(struct studentRanking * stuRanking, int length){      int i;      for(i=1; i<=length; i++)      {            stuRanking[i-1].ranking = i;      }}

(20)AboutFiles.h

#ifndef ABOUTFILES_H_INCLUDED#define ABOUTFILES_H_INCLUDED//链表的读取--文件读操作void readInfoFromFile(char* fileName);//链表的存储--文件写操作void writeInfoToFile(char* fileName);#endif // ABOUTFILES_H_INCLUDED

(21)ShowStudentRanking.c
 

#include <stdio.h>#include <conio.h>   //getc函数使用的头文件#include <windows.h> //Sleep函数使用的头文件#include <string.h>//strcmp函数使用的头文#include "system.h"#include "AboutFiles.h"#include  "MyList.h"//链表的读取--文件读操作void readInfoFromFile(char* fileName){      //步骤:先将信息读到data里面,再将信息读到文件里面      //1.打开文件      FILE *fp;      struct student data;      fp = fopen(fileName, "r");      if(fp == NULL)      {              fclose(fp);              return NULL;      }      //2.读文件      //格式化读取文件,没有读到文件结束标志,则一直读下去,读到的数据插入到链表里面      else      {            while(fscanf(fp, "%s\t%s\t%s\t%d\t%s\t%s\t%s\t%d\n", data.studentId,data.name,data.sex,&data.age,data.className,data.major,data.tel,&data.score) != EOF)            {            //将文件中原来的数据插入到链表当中                  insertNodeByHead(data);            }           //3.关闭文件,           fclose(fp);      }}//链表的存储--文件写操作void writeInfoToFile(char* fileName){      //1.打开文件D:\CodeBlocks\codeblocks C project\StudentSystemDemo02\studentList      FILE *fp;      struct Node* pMove = studentList;      fp = fopen(fileName, "w");      if(fp == NULL)      {            //w+具有创建的功能,建立一个新文件可读可写            fp = fopen(fileName, "w+");            //可以给文件写入一个表头信息      }      //2.写文件, 按格式写入操作      while(pMove != NULL)      {            fprintf(fp,"%s\t%s\t%s\t%d\t%s\t%s\t%s\t%d\n", STUDENT_DATA);            pMove = pMove->next;      }      //3.关闭文件      fclose(fp);}

以上就是“C语言如何实现新生入学登记系统”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言如何实现新生入学登记系统

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

下载Word文档

猜你喜欢

C语言如何实现新生入学登记系统

今天小编给大家分享一下C语言如何实现新生入学登记系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。项目所用数据结构:链表算法
2023-06-30

C语言如何实现简易学生管理系统

本篇内容主要讲解“C语言如何实现简易学生管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现简易学生管理系统”吧!首先我们在做一个管理系统之前要了解这个学生管理系统需要哪些功能,
2023-07-02

C语言如何实现班级学生管理系统

这篇文章将为大家详细讲解有关C语言如何实现班级学生管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下面是根据班级,这个人数较少的单位设计的学籍管理系统,录入时,要求班内序号由1开始 按顺序录入,其
2023-06-25

C语言如何实现学生档案管理系统

今天小编给大家分享一下C语言如何实现学生档案管理系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。/* 课程设计项目名
2023-06-30

基于C语言如何实现学生管理系统

本篇内容主要讲解“基于C语言如何实现学生管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于C语言如何实现学生管理系统”吧!1.目标要求:1.学生成绩管理系统2.可增、删、改、查、浏览3.
2023-06-29

C语言实现学生消费管理系统

这篇文章主要为大家详细介绍了C语言实现学生消费管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

C语言如何实现学生宿舍信息管理系统

这篇文章主要讲解了“C语言如何实现学生宿舍信息管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现学生宿舍信息管理系统”吧!功能描述该学生宿舍信息管理系统主要实现的功能有:创
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录