C语言:分享一下自己写的简单的学生管理系统。

简介: C语言:分享一下自己写的简单的学生管理系统。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
  int num;
  char name[20];
  char sex[10];
  int year;
  float score;
  struct student* next;
};
int n;
struct student* h;
int main()
{
  void log();//登录函数
  void record();//目录
  struct student* creat();//输入函数
  void print(struct student* head); //输出函数
  void dels(); //删除全操作
  void adds(); //添加全操作 
  struct student *refers(struct student *h1);//查询操作 
  struct student *change(struct student *hl); //更改操作 
  int in1, in2;
  log();
  while (1)
  {
    printf("\n请输入你的操作命令:");
    do {
      scanf("%d", &in1);
    } while (in1 != 1 && in1 != 2 && in1 != 3 && in1 != 4 && in1 != 5 && in1 != 6);
    if (in1 == 1 || in1 == 2 || in1 == 3 || in1 == 4 || in1 == 5)
    {
      printf("\n未储存有数据!\n请输入数据!");
      break;
    }
    else {
      printf("你已退出!欢迎使用!");
      break;
    }
  }
  h = creat();
  print(h);
A:  {
  printf("\n**********************************************************");
  printf("\n1、返回界面  2、添加  3、删除  4、更改  5、查询  6、退出");
  printf("\n请输入你的操作命令:");
  scanf("%d", &in2);
  switch (in2)
  {
  case 1: {log();
    break;
  }
  case 2: {adds();
    goto A;
    break;
  }
  case 3: {dels();
    goto A;
    break;
  }
  case 4: {change(h);
    goto A;
    break;
  }
  case 5: {refers(h);
    goto A;
    break;
  }
  case 6: {printf("\n你已退出!欢迎使用!");
    break;
  }
  default:printf("\n输入错误!"); printf("\n你已退出!欢迎使用!"); break;
  }
}
}
void log() //登录函数
{
  int i;
  void record();
  printf("      学生管理系统 \t");
  printf("\n\t1、登录\n\t2、退出\t");
  while (1) //循环输入,判断
  {
    printf("\n\n请输入你要执行的操作:");
    do {
      scanf("%d", &i);
    } while (i != 1 && i != 2);
    if (i == 1)
    {
      record();
      break;
    }
    else
    {
      printf("\n你已退出,欢迎使用!");
      break;
    }
  }
}
void record() //显示目录
{
  printf("\n\t1、显示学生信息");
  printf("\n\t2、添加学生信息");
  printf("\n\t3、删除学生信息");
  printf("\n\t4、更改学生信息");
  printf("\n\t5、查询学生信息");
  printf("\n\t6、退出学生系统");
}
struct student* creat() //输入数据 
{
  struct student* head;
  struct student* p1, * p2;
  p1 = (struct student*)malloc(sizeof(struct student));
  p2 = p1;
  printf("\n请输入学生学号、姓名、性别、年龄、成绩 :");
  scanf("%d%s%s%d%f", &p1->num, &p1->name, &p1->sex, &p1->year, &p1->score);
  head = NULL;
  n = 0;
  while (p1->num != 0)
  {
    n++;
    if (n == 1)
    {
      head = p1;
    }
    else
    {
      p2->next = p1;
    }
    p2 = p1;
    p1 = (struct student*)malloc(sizeof(struct student));
    printf("请输入学生学号、姓名、性别、年龄、成绩 :");
    scanf("%d%s%s%d%f", &p1->num, &p1->name, &p1->sex, &p1->year, &p1->score);
  }
  p2->next = NULL;
  return head;
}
void print(struct student* hl) //输出数据 
{
  struct student* p;
  p = hl;
  if (hl != NULL)
  {
    printf("\n\t学号:\t姓名:\t性别:\t年龄:\t成绩:");
    do {
      printf("\n\t%d\t%s\t%s\t%d\t%.2f", p->num, p->name, p->sex, p->year, p->score);
      p = p->next;
    } while (p != NULL);
  }
}
void dels() //删除全操作 
{
  struct student* del(struct student* h, int sum);
  void print(struct student* head);
  int sum;
  int ch;
  while (1)
  {
    printf("\n你是否需要删除数据(Y/N):");
    do
    {
      ch = getchar();
    } while (ch != 'Y' && ch != 'N');
    if (ch == 'Y')
    {
      printf("请输入你要删除的数据:");
      scanf("%d", &sum);
      h = del(h, sum);
      print(h);
    }
    else
    {
      break;
    }
  }
  printf("删除完毕!最终数据为:\n");
  print(h);
}
struct student* del(struct student* hl, int sum) //删除关键操作 
{
  struct student* p1, * p2;
  p2 = p1 = hl;
  while (p1->num != sum && p1->next != NULL)
  {
    p2 = p1;
    p1 = p1->next;
  }
  if (p1->num == sum)
  {
    if (p1 == h)
    {
      hl = p1->next;
    }
    else
    {
      p2->next = p1->next;
    }
  }
  else
  {
    printf("未找到数据!");
  }
  return h;
}
void adds() //添加全操作 
{
  struct student* add(struct student** h, int num, char name[20], char sex[10], int year, float score);
  void print(struct student* h);
  int num;
  char name[20];
  char sex[10];
  int year;
  float score;
  int ch;
  while (1)
  {
    printf("\n你是否需要添加数据:");
    do {
      ch = getchar();
    } while (ch != 'Y' && ch != 'N');
    if (ch == 'Y')
    {
      printf("\n请输入学生学号、姓名、性别、年龄、成绩 :");
      scanf("%d%s%s%d%f", &num, &name, &sex, &year, &score);
      h = add(&h, num, name, sex, year, score);
    }
    else
    {
      break;
    }
  }
  printf("添加完毕!");
  printf("最终数据为:\n");
  print(h);
}
struct student* add(struct student** hl, int num, char name[20], char sex[10], int year, float score) //添加关键操作 
{
  struct student* p1, * p2, * New;
  p1 = *hl;
  p2 = NULL;
  while (p1 != NULL && p1->num < num)
  {
    p2 = p1;
    p1 = p1->next;
  }
  New = (struct student*)malloc(sizeof(struct student));
  New->num = num;
  strcpy(New->name, name);
  strcpy(New->sex, sex);
  New->year = year;
  New->score = score;
  New->next = p1;
  if (p2 == NULL)
  {
    *hl = New;
  }
  else
  {
    p2->next = New;
  }
  return *hl;
}
struct student *refers(struct student *hl) //查询全操作 
{
  struct student* p1, * p2, * p0;
  int num;
  int ch;
  p0 = NULL;
  while (1)
  {
    p1 = p2 = hl;
    printf("\n你是否需要查询(Y/N):");
    do {
      ch = getchar();
    } while (ch != 'Y' && ch != 'N');
    if (ch == 'Y')
    {
      printf("\n请输入你要查询的学号:");
      scanf("%d", &num);
      while (p1->num != num && p1->next != NULL)
      {
        p2 = p1;
        p1 = p1->next;
      }
      if (p1->num == num)
      {
        p0 = p1;
        printf("\n你的查询结果:");
        printf("\n\t学号:\t姓名:\t性别:\t年龄:\t成绩:");
        printf("\n\t%d\t%s\t%s\t%d\t%.2f", p0->num, p0->name, p0->sex, p0->year, p0->score);
      }
      else
      {
        printf("未找到相关数据!");
      }
    }
    else {
      printf("\n你已退出查询!");
      break;
    }
  }
  return h;
}
struct student *change(struct student *hl) //更改全操作 
{
  struct student *xue(struct student *d);
  struct student *xing(struct student *d);
  struct student *bie(struct student *d);
  struct student *nian(struct student *d);
  struct student *cheng(struct student *d);
  struct student* p1, * p2, * p0;
  int num;
  int ch;
  int chan; 
  p0 = NULL;
  while (1)
  {
    p1 = p2 = hl;
    printf("\n你是否需要更改(Y/N):");
    do {
      ch = getchar();
    } while (ch != 'Y' && ch != 'N');
    if (ch == 'Y')
    {
      printf("\n请输入你要更改的学号:");
      scanf("%d", &num);
      while (p1->num != num && p1->next != NULL)
      {
        p2 = p1;
        p1 = p1->next;
      }
      if (p1->num == num)
      {
        p0 = p1;
        printf("\n1、学号 2、姓名 3、性别 4、年龄 5、成绩");
        printf("\n请输入你的操作:");
        scanf("%d",&chan);
        switch(chan)
        {
          case 1:xue(p0);break;
          case 2:xing(p0);break;
          case 3:bie(p0);break;
          case 4:nian(p0);break;
          case 5:cheng(p0);break;
          default :break;
         } 
         printf("\n你更改后的结果:");
         printf("\n\t学号:\t姓名:\t性别:\t年龄:\t成绩:");
         printf("\n\t%d\t%s\t%s\t%d\t%.2f", p0->num, p0->name, p0->sex, p0->year, p0->score);
      }
      else
      {
        printf("未找到相关数据!");
      }
    }
    else {
      printf("\n你已退出更改!");
      break;
    }
  }
  return h;
}
struct student *xue(struct student *d) //更改学号 
{
  struct student *p;
  p=d;
  printf("\n请输入新的学号:");
  scanf("%d",&p->num);
  return p;
}
struct student *xing(struct student *d)//更改姓名 
{
  struct student *p;
  char s[20];
  p=d;
  printf("\n请输入新的姓名:");
  scanf("%s",&s);
  strcpy(p->name,s);
  return p;
}
struct student *bie(struct student *d)//更改性别 
{
  struct student *p;
  char s[10];
  p=d;
  printf("\n请输入新的性别:");
  scanf("%s",&s);
  strcpy(p->sex,s);
  return p;
}
struct student *nian(struct student *d)//更改年龄 
{
  struct student *p;
  p=d;
  printf("\n请输入新的年龄:");
  scanf("%d",&p->year);
  return p;
}
struct student *cheng(struct student *d)//更改成绩 
{
  struct student *p;
  p=d;
  printf("\n请输入新的成绩:");
  scanf("%f",&p->score);
  return p;
}   



相关文章
|
1月前
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
58 4
|
1月前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别
pymalloc 和系统的 malloc 有什么区别
|
22天前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
93 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
17天前
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
44 12
|
29天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
45 1
|
29天前
|
人工智能 安全 算法
基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。
本文深入探讨了基于C语言的嵌入式系统开发,涵盖嵌入式系统概述、C语言的优势、开发流程、关键技术、应用实例及面临的挑战与未来趋势。C语言因其高效、可移植、灵活及成熟度高等特点,在嵌入式系统开发中占据重要地位。文章还介绍了从系统需求分析到部署维护的完整开发流程,以及中断处理、内存管理等关键技术,并展望了嵌入式系统在物联网和人工智能领域的未来发展。
67 1
|
1月前
|
程序员 C语言 开发者
pymalloc 和系统的 malloc 有什么区别?
pymalloc 和系统的 malloc 有什么区别?
|
2月前
|
存储 编译器 C语言
【C语言】学生管理系统:完整模拟与实现(一)
【C语言】学生管理系统:完整模拟与实现
|
2月前
|
存储 C语言
手把手教你用C语言实现通讯录管理系统
手把手教你用C语言实现通讯录管理系统
|
2月前
|
测试技术 C语言
【C语言】学生管理系统:完整模拟与实现(三)
【C语言】学生管理系统:完整模拟与实现