C语言数据结构之学生信息管理系统课程设计

本文实例为大家分享了学生信息管理系统设计的具体代码,供大家参考,具体内容如下

建立一个动态链表,链表中每一结点包括:学号、姓名、性别、年龄、成绩。程序能实现以下功能:

建立链表
     显示链表
     查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示“无此记录!”的信息。
     删除链表中指定学号的结点。
     在链表中指定的位置插入一个新结点(学号不能和其他结点重复)。

要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序及显示其对应的结果,然后再显示菜单程序,直到按“退出”选项,程序执行结束。

完整的代码如下:

#include "stdio.h"
#include "stdlib.h"
typedef struct student
{
 int id; //学号
 char name[20]; //姓名
 char sex; //性别(f或m)
 int age; //年龄
 int score; //成绩
 struct student *next;
}student;
student *head=NULL;
int length; //链表的长度
void create()
{
 student *p1,*p2;
 length=0;
 p1=(student *)malloc(sizeof(student));
 p1->id=-1;
 if(head==NULL)
  head=p1;
 printf("请输入学生的学号、姓名、性别、年龄、成绩信息:\n");
 while(1) //学号为0的时候退出
 {
  p2=(student *)malloc(sizeof(student));
  scanf("%d %s %c %d %d",&p2->id,p2->name,&p2->sex,&p2->age,&p2->score); //输入学生信息
  if(p2->id==0)
  {
   printf("链表创建完成!\n");
   break;
  }
  length++; //链表的长度
  p1->next=p2;
  p2->next=NULL;
  p1=p1->next;
 }
 return ;
} 

void display()
{
 student *p=head->next;
 printf("链表中所有的学生信息如下:\n");
 while(p!=NULL)
 {
  printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score);
  p=p->next;
 }
 return ;
}
void search()
{
 int num;
 student *p=head->next;
 printf("需要查找的学生学号为:");
 scanf("%d",&num); 

 while(p!=NULL)
 { 

  if(p->id==num)
  {
   printf("学号为%d的学生的信息如下:\n",num);
   printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score);
   return;
  }
  p=p->next;
 }
 if(p==NULL)
  printf("无此记录!\n");
 return ;
} 

void insert()
{
 int num,i;
 student *p,*q;
 p=head; 

 printf("请输入你要插入位置: ");
 scanf("%d",&num);
 if(num>length)
 {
  printf("找不到要插入的位置\n");
  return ;
 }
 else
 {
  printf("请输入你要插入的学生的学号、姓名、性别、年龄、成绩信息:\n");
  q=(student *)malloc(sizeof(student));
  scanf("%d %s %c %d %d",&q->id,q->name,&q->sex,&q->age,&q->score); 

  while(p!=NULL)
  {
   if(p->id==q->id)
   {
    printf("该学号已经存在,无法插入!\n");
    return ;
   }
   p=p->next;
  }
  p=head;
  for(i=0;i<num;i++)
   p=p->next;
  q->next=p->next;
  p->next=q;
  length++;
  printf("插入成功!\n");
  return ;
 }
} 

void Delete()
{
 int num;
 student *p,*q;
 q=head,p=head->next;
 printf("请输入要删除的学生的学号:\n");
 scanf("%d",&num); 

 while(p!=NULL)
 {
  if(p->id==num)
  {
   q->next=p->next;
   free(p);
   length--;
   printf("删除成功!\n");
   return ;
  }
  p=p->next;
  q=q->next;
 }
 if(p==NULL)
 {
  printf("找不到要删除的编号!\n");
  return ;
 }
}
void menu()
{
 printf("________________________________________________________________\n");
 printf("|    学生信息管理系统        |\n");
 printf("|    0、 退出系统         |\n");
 printf("|    1、 建立链表         |\n");
 printf("|    2、 显示链表         |\n");
 printf("|    3、 查找链表中的某个元素      |\n");
 printf("|    4、 删除链表中指定学号的结点     |\n");
 printf("|    5、 指定的位置上插入一个新结点     |\n");
 printf("________________________________________________________________\n");
 return ;
}
int main(void)
{
 int a;
 menu();
 while(1)
 {
  printf("请选择相应的功能:");
  scanf("%d",&a);
  switch(a)
  {
  case 0:
   return 0;
  case 1:
   create();
   menu();
   break;
  case 2:
   if(head)
   {
    display();
    menu();
   }
   else
   {
    printf("链表为空,请先建立链表!\n");
    menu();
   }
   break;
  case 3:
   if(head)
   {
    search();
    menu();
   }
   else
   {
    printf("链表为空,请先建立链表!\n");
    menu();
   }
   break;
  case 4:
   if(head)
   {
    Delete();
    menu();
   }
   else
   {
    printf("链表为空,请先建立链表!\n");
    menu();
   }
   break;
  case 5:
   if(head)
   {
    insert();
    menu();
   }
   else
   {
    printf("链表为空,请先建立链表!\n");
    menu();
   }
   break;
  default:
   break;
  }
 }
 system("pause");
 return 0;
} 

程序说明:加入已经加入了4个学生信息head->liuwei->zhanghua->lina->liuxiang,链表的长度为4,插入的时候,输入4,将会在liuxiang的后面插入一个学生信息;输入1,将会在liuwei的后面插入一个学生信息;

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

(0)

相关推荐

  • C语言实现二叉树的基本操作

    二叉树是一种非常重要的数据结构.本文总结了二叉树的常见操作:二叉树的构建,查找,删除,二叉树的遍历(包括前序遍历.中序遍历.后序遍历.层次遍历),二叉搜索树的构造等. 1. 二叉树的构建 二叉树的基本构建方式为:添加一个节点,如果这是一棵空树,则将该节点作为根节点:否则按照从左到右.先左子树后右子树的顺序逐个添加节点.比如依次添加节点:1,6,10,2,7,11,则得到的二叉树为: 在这里,我们需要借助一个链表来保存节点,以实现二叉树的顺序插入,具体做法如下: 1.0 初始化一个用来保存二叉树节

  • c语言实现基数排序解析及代码示例

    1. 基数排序(radixsort)属于"分配式排序"(distributionsort),又称"桶子法"(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些"桶"中,藉以达到排序的作用. 2.基数排序的实现方法分为两种: 最高位优先(MostSignificantDigitfirst)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码

  • C语言中输入函数(scanf()、fgets()和gets())的区别详解

    前言 大家都知道在C语言中,有三种主要的输入函数:scanf(),fgets()以及gets().他们的使用方法及注意事项如下: 1.scanf() 它是一种格式化的输入方式,可一次性按照规定的格式输入多个数据域. scanf函数是一个标准库函数,它的函数原型在头文件"stdio.h"中.与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件. scanf函数的一般形式为: scanf("格式控制字符串", 地址表列); 其中,格式控

  • C语言结构体定义的方法汇总

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问. 结构体与数组的比较 (1) 都由多个元素组成 (2) 各个元素在内存中的存储空间是连续的 (3) 数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同 结

  • 利用C语言玩转魔方阵实例教程

    魔方阵 魔方阵,古代又称"纵横图",是指组成元素为自然数1.2-n的平方的n×n的方阵,其中每个元素值都不相等,且每行.每列以及主.副对角线上各n个元素之和都相等. 如3×3的魔方阵: 8 1 6 3 5 7 4 9 2 魔方阵的排列规律如下: (1)将1放在第一行中间一列: (2)从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列): (3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);

  • C语言创建动态dll和调用dll(visual studio 2013环境下)

    第一部分:创建动态dll库. 1.打开visual studio 创建一个控制台应用程序. 2.选择DLL,空项目. 3.点击源文件,创建一个main.c文件 4.在main.c中写入一个简单的函数,内容如下: __declspec(dllexport) int mymax(int a,int b){ return a + b; } 5.编译生成. 6.在项目的目录有dll和lib两个生成好的文件. 第二部分:在新建项目中使用dll. 7.新建一个c的控制台应用程序UseDll,把Dll.dll

  • 利用C语言实现“百马百担”问题方法示例

    前言 百马百担问题,有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问共有多少种驮法?且各种驮法中大.中.小马各多少匹? [分析] 1.定义整型变量m.n.k分别存放大马匹数.中马匹数.小马匹数: 2.定义整型变量sum存放共有几种驮法,且sum赋初值为0: 3.根据题意,大马.中马.小马共100匹:大马.中马.小马驮100担货满足如下关系: m+n+k=100(匹) 3*m+2*n+1/2*k=100(担) 4.三个未知数,两个方程,此题有若干组解: 5.计算机求解此类问题

  • c语言通过opencv实现轮廓处理与切割

    注意在寻找轮廓时要选择中寻找外层轮廓 RETR_EXTERNAL #include "opencv/cv.h" #include "opencv/highgui.h" using namespace std; using namespace cv; int main() { Mat srcimg=imread("./22.jpg"); Mat dst; cvtColor(srcimg,dst,CV_BGR2GRAY); threshold(dst

  • C语言数据结构之学生信息管理系统课程设计

    本文实例为大家分享了学生信息管理系统设计的具体代码,供大家参考,具体内容如下 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能: 建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示"无此记录!"的信息.      删除链表中指定学号的结点.      在链表中指定的位置插入一个新结点(学号不能和其他结点重复). 要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序

  • C语言链表实现学生信息管理系统程序设计

    本文实例为大家分享了C语言链表实现学生信息管理系统的具体代码,供大家参考,具体内容如下 事先存入的数据: 菜单 创建链表并倒序输出 输出链表中的全部信息 写入信息并保存至文件中(覆盖原有文件) 随机读取 指定查找 添加信息 指定删除 特殊查找 特殊删除 退出系统 #include<iostream> #include<string.h> #include<stdlib.h> #include<iomanip> #include<fstream>

  • C语言学生成绩管理系统课程设计

    学生成绩管理系统是比较适合初学者的.它涵盖了c语言几乎知识.对于学了c语言的人,把这个课程设计搞好(当然自己能设计出来是要有很好的基础).不管自己能不能够完成,最重要的是能弄懂.参考其他资料,试着自己编写是不错的选择.这个课程设计也是我参照资料,自己编写的.自己适当地增加了一些功能.不过,编的不够那么专业吧. #include<stdio.h> #include<string.h> #include<stdlib.h> #define size 100 char* cl

  • C语言学生学籍管理系统课程设计

    C语言学生学籍管理系统做了好长时间的,里面有点小问题,希望大佬找到并帮忙改改,注意输入密码三次错误会自动注销用户,密码123456 代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> struct student { char xuehao[100];//输入学号 char name[100];//输入姓名 char sex[100];//输入性别 int

  • C语言实现简单学生信息管理系统

    学生信息管理系统的功能有,也可以自己增加或者改进一些函数功能. 在main函数里调用这8个函数 学生信息包含姓名.年龄.学号.成绩,需要定义一个结构体(结构体是全局变量,所以需要全局声明): typedef struct _student{     char name[20];     int age;     int stuNum;     int score; }student; 需要有一个存储数据的空间,所以使用单链表存储,定义如下: typedef struct _Node{     s

  • C语言实现学生宿舍信息管理系统课程设计

    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 一.问题陈述 宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据我们所学的C语言和数据结构课程中有关链表的内容,为宿舍管理人员编写宿舍管理查询软件,就可以轻松满足实现上述需求. 任务: 1.为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:1).采用交互工作方式2).可按关键字(姓名.学号.房号)

  • C语言学生成绩管理系统课程设计word版

    一份C语言学生成绩管理系统设计报告,分享给大家 一.课程设计题目 <学生成绩管理系统设计> 二.实训目的 (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法. (2)掌握C++的基本概念和基础知识. (3)通过训练能够读懂较为复杂的C++语言源程序并具备基本C++语言程序设计的能力. (4)通过实训,培养自己编写.调试.分析程序的能力. (5)培养自己独立解决问题,查找资料的能力.同学之间相互帮助,相互交流,相互合作的团队精神. (6) 培养自己良好的学习兴趣,独立的

  • C语言实现学生学籍管理系统课程设计

    目录 设计要求 完整代码 运行结果 本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 设计要求 设计学籍管理系统 1.添加学生信息2.浏览学生信息3.查询学生信息4.修改学生信息5.册J除学生信息6.排序学生信息7.读取文件学生8.保存到文件 完整代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<math.h> #includ

  • C语言实现学生成绩管理系统课程设计

    目录 设计要求 完整代码 运行结果 本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 设计要求 设计学生成绩管理系统 要求如下: 1.输入学生信息2.统计学生成绩3.查找并显示学生成绩4.按姓名查找,修改学生资料5.显示所有学生名单6.查找并删除学生信息7.输出个科目成绩最高的学生 完整代码 #include<stdio.h> #include<ctype.h> #include<stdlib.h> #include<string

  • C语言实现超市信息管理系统课程设计

    本文实例为大家分享了C语言实现超市信息管理系统的具体代码,供大家参考,具体内容如下 一. 需求分析 目前商品市场的商品信息玲琅满目,货物信息的储存以及更新就变的越来越重要.因此,我们小组设计的“超市信息管理程序”旨在解决货物的信息和购买商品信息的储存问题以及实现建立库存信息,对购物车添加商品.结算并修改库存等操作,同时也能实现对库存信息的读取和显示. 我们设计的程序要实现以下要求: 1. 使用两个不同的结构体分别保存货物信息和购物车中的商品信息,可在商品信息结构体中嵌套货物信息结构体.2. 将货

随机推荐