学员管理系统的实现(C语言)

简介: 学员管理系统的实现(C语言)

前天帮一个小学妹修改了下代码,用链表实现的,功能估计是最简单的了.没啥技术含量.中间涉及到了指针,结构体,文件操作.对于刚学习完C语言的同学可以练习一下.

直接上代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Info {
  char ID[20];
  char name[20];
  char sex[10];
    int age;
  //int clanguage;
};
typedef struct Stu
{
  struct Info stu;
  struct Stu *pNext;
} Student, *pStudent;
/*
链表的操作:
  1、创建节点数据结构
  2、创建链表头
  3、创建节点并在节点中存放学员信息
  4、遍历显示
*/
/***************************************************************
功能:创建链表头
传参:无
返回值:需要返回创建头结点的首地址
***************************************************************/
pStudent CreateHead()
{
  pStudent phead = (pStudent)malloc(sizeof(Student));
  phead->pNext = NULL;
  phead->stu.age = 0;
  //phead->stu.name = " ";
  strcpy(phead->stu.ID, " ");
  strcpy(phead->stu.name, " ");
  strcpy(phead->stu.sex, " ");
  return phead;
}
/***************************************************************
功能:创建节点并在节点中存放学员信息
传参:传递学员信息结构
返回值:需要返回创建结点的首地址
***************************************************************/
pStudent CreateInode(struct Info info)
{
  pStudent pnew = (pStudent)malloc(sizeof(Student));
  pnew->pNext = NULL;
  pnew->stu = info;
  return pnew;
}
/***************************************************************
功能:头插法
传参:传递学员信息结构,还需要头结点的首地址
返回值:无返回值
***************************************************************/
void  InsertHead(struct Info info, pStudent head)
{
  pStudent InsertNode = CreateInode(info);//若存在则不存入学员信息//
  InsertNode->pNext = head->pNext;
  head->pNext = InsertNode;
}
/***************************************************************
功能:尾插法
传参:传递学员信息结构,还需要头结点的首地址
返回值:无返回值
***************************************************************/
void  InsertEnd(struct Info info, pStudent head)
{
  pStudent pmove = head;
  pStudent InsertNode = CreateInode(info);
  while (pmove->pNext != NULL)
  {
    pmove = pmove->pNext;
  }
  pmove->pNext = InsertNode;
  InsertNode->pNext = NULL;
}
/***************************************************************
功能:查找
传参:传递查找学员信息结构,还需要头结点的首地址
返回值:返回查找到的学员信息结构首地址
***************************************************************/
pStudent  SeekInfo(struct Info info, pStudent head)
{
  pStudent pmove = head->pNext;
  while (pmove != NULL)
  {
    if (strcmp(pmove->stu.ID, info.ID) == 0)
    {
      break;
    }
    pmove = pmove->pNext;
  }
  return pmove;
}
/***************************************************************
功能:修改信息
传参:传递查找学员信息结构,还需要头结点的首地址,修改信息
返回值:void
***************************************************************/
void  ChangeInfo(struct Info info, pStudent head, struct Info info1)
{
  pStudent tmp = SeekInfo(info, head);
  if(tmp==NULL){
    printf("要修改学生的ID不存在,修改失败!\n"); 
  }else{
    tmp->stu = info1;
    printf("修改成功!\n"); 
  } 
}
/***************************************************************
功能:删除信息
传参:传递查找学员信息结构,还需要头结点的首地址
返回值:void
***************************************************************/
void  DeleteInfo(struct Info info, pStudent head)
{
  pStudent pmove = head->pNext;
  pStudent ptmp = head;//辅助节点. 
  if (pmove == NULL)
  {
    printf("学生表为空,无法进行删除操作\n");
    return;
  }
  while (pmove!=NULL){
    if(strcmp(pmove->stu.ID,info.ID)==0){
      break;
    }
    ptmp = pmove;
    pmove=pmove->pNext;
  }
  if (pmove == NULL){
    printf("查无此人,删除失败!\n");
  }else{
    ptmp->pNext = pmove->pNext;
    free(pmove);
    printf("删除成功!\n");
  }
}
/***************************************************************
功能:打印所有节点的信息
传参:需要头结点的首地址
返回值:无返回值
***************************************************************/
void  Print(pStudent head)
{
  pStudent pmove = head->pNext;
  while (pmove != NULL)
  {
    printf("ID:%s\tname:%s\tsex:%s\tage=%d\n",pmove->stu.ID, pmove->stu.name,pmove->stu.sex, pmove->stu.age);
    pmove = pmove->pNext;
  }
}
/***************************************************************
功能:将学员信息写入文件
传参:需要头结点的首地址
返回值:无返回值
***************************************************************/
void  SaveFile(pStudent head)
{
  FILE *fp = fopen("student.txt", "a+");
  pStudent pmove = head->pNext;
  while (pmove != NULL)
  {
  //ID:%s\tname:%s\tsex:%sage=%d\n
    fprintf(fp, "ID:%s\tname:%s\tsex:%sage=%d\n", pmove->stu.ID,pmove->stu.name,pmove->stu.sex, pmove->stu.age);
    pmove = pmove->pNext;
  }
  fclose(fp);
}
void help()
{
  printf("此学员管理系统功能包括学员信息的增删改查\n通过键入1添加学生信息\n键入2查询学生信息\n键入3修改学生信息\n键入4按学号删除信息\n键入5显示学生信息\n键入6保存当前学生信息\n键入7退出系统\n");
}
/***************************************************************
功能:菜单显示
传参:无需传参
返回值:返回选项数字
***************************************************************/
int menu()
{
  int num;
  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 ---------7.退出菜单-----------\n");
p:
  printf("请输入操作选项0-7\n");
  scanf("%d", &num);
  if (num >= 8 || num < 0)
  {
    printf("请重新输入\n");
    goto p;
  }
  return num;
}
int main()
{
  int num = 0;
  struct Info info, info1;
  pStudent tmp;
  pStudent phead = CreateHead();
  while (1)
  {
    num = menu();
    switch (num)
    {
    case 0:help(); break;
    case 1:
      char ch;
      printf("请输入学员信息ID---name---sex---age\n");
      scanf("%s%s%s%d", info.ID,info.name,info.sex, &info.age);
      InsertHead(info, phead);
      break;
    case 2:printf("请输入查找学员ID\n");
      scanf("%s", info.ID);
      tmp = SeekInfo(info, phead);
      if(tmp!=NULL){
        printf("ID:%s\tname:%s\tsex:%s\tage=%d\n",tmp->stu.ID, tmp->stu.name,tmp->stu.sex, tmp->stu.age);
      }else{
        printf("查无此人!\n");
      }
      //printf("name:%s\tage=%d\n", tmp->stu.name, tmp->stu.age);
      break;
    case 3:
      printf("请输入查找学员学号ID\n");
      scanf("%s", info.ID);
      //scanf("%s%s%s%d", info.ID,info.name,info.sex, &info.age);
      printf("请输入修改后的学员信息:ID---name---sex---age\n");
      //scanf("%s%d", info1.name, &info1.age);
      scanf("%s%s%s%d", info1.ID,info1.name,info1.sex, &info1.age);
      ChangeInfo(info, phead, info1);
      break;
    case 4:printf("请输入删除学员ID\n");
      scanf("%s", info.ID);
      DeleteInfo(info, phead);
      break;
    case 5:Print(phead);
      break;
    case 6:SaveFile(phead);
      break;
    case 7:
      return 0; break;
    }
  }
  system("pause");
  return 0;
}

运行结果:

20210528185647129.png

20210528185717135.png

20210528185752903.png



相关文章
|
2月前
|
存储 C语言
C语言实现简易学生信息管理系统
C语言实现简易学生信息管理系统
41 4
|
11月前
|
存储 数据可视化 C语言
C语言期末课程设计—【通讯录管理系统】让课程设计不再是痛苦1
C语言期末课程设计—【通讯录管理系统】让课程设计不再是痛苦
|
11月前
|
存储 测试技术 C语言
C语言期末课程设计—【通讯录管理系统】让课程设计不再是痛苦2
C语言期末课程设计—【通讯录管理系统】让课程设计不再是痛苦2
|
12月前
|
Python
学生信息管理系统(C语言版)
学生信息管理系统(C语言版)
124 0
|
C语言
C语言实战项目:学生管理系统(1)
C语言实战项目:学生管理系统(1)
115 0
C语言实战项目:学生管理系统(1)
|
C语言
C语言实战项目:学生管理系统
C语言实战项目:学生管理系统
77 0
|
C语言
C语言项目实战学生管理系统(5)
C语言项目实战学生管理系统(5)
66 0
|
C语言
C语言项目实战学生管理系统(4)
C语言项目实战学生管理系统(4)
69 0
|
C语言
C语言项目实战学生管理系统(3)
C语言项目实战学生管理系统(3)
75 0
|
C语言
C语言项目实战学生管理系统(1)
C语言项目实战学生管理系统(1)
71 0