C语言使用单链表实现学生信息管理系统

本文实例为大家分享了C语言使用单链表实现学生信息管理系统,供大家参考,具体内容如下

初学数据结构,记录一下学习过程。

运行结果如图:

1.运行界面

2.录入学生信息

3.按照总分进行排序

代码如下:

#define ERROR 0
#define OK 1
#define OVERFLOW -1;
typedef int ElemType;
typedef int Status;
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include<iostream>
typedef struct{
 char name[20];
 char snumber[20];
 char sex[10];
 int math;
 int chinese;
 int english;
}student;
typedef struct LNode{
 student data;
 struct LNode *next;
}LNode,*LinkList;
//单链表初始化
Status InitList(LinkList &L){
 L = new LNode;
 L->next = NULL;
 return OK;
}
//创建单链表
void CreateList(LinkList &L,int n){
 LinkList r;
 LinkList p;
 L = new LNode;
 L->next = NULL;
 r = L;
 int i;
 for(i = 0;i<n;i++){
  p = new LNode;
  scanf("%s%s%s%d%d%d",&p->data.name,&p->data.snumber,&p->data.sex,&p->data.chinese,&p->data.math,&p->data.english);
  //scanf("%d%d%d",&p->data.chinese,&p->data.math,&p->data.english);
  p->next=NULL;
  r->next=p;
  r = p;
 }
}

//总分统计
int GradeSum(LinkList L){
 int sum;
 sum = (L->data.chinese)+(L->data.english)+(L->data.math);
 return sum;
}
//统计所有学生信息
void BianLi(LinkList L){
 LinkList p;
 p = L->next;
 printf("姓名\t学号\t性别\t语文\t数学\t英语\t总分\n");
 while(p){
  printf("%s\t%s\t%s\t",p->data.name,p->data.snumber,p->data.sex);
  printf("%d\t%d\t%d\t%d",p->data.chinese,p->data.math,p->data.english,GradeSum(p));
  p = p->next;
  printf("\n");
 }
}
//按照总分排序
void OrderSum(LinkList &L){
 LinkList p,q,tail;

 tail = NULL;

 while((L->next->next) != tail)
 {
  p = L;
  q = L->next;
  while(q->next != tail)
  {
   if( GradeSum(q) <  GradeSum(q->next))
   {
    p->next = q->next;
    q->next = q->next->next;
    p->next->next = q;
    q = p->next;
   }
   q = q->next;
   p = p->next;
  }
  tail = q;
 }
 printf("排序完毕!\n");

}
//根据语文进行排序
void OrderChinese(LinkList &L){
 LinkList p,q,tail;

 tail = NULL;

 while((L->next->next) != tail)
 {
  p = L;
  q = L->next;
  while(q->next != tail)
  {
   if((q->data.chinese) < (q->next->data.chinese))
   {
    p->next = q->next;
    q->next = q->next->next;
    p->next->next = q;
    q = p->next;
   }
   q = q->next;
   p = p->next;
  }
  tail = q;
 }
 printf("排序完毕!\n");

}
//根据英语进行排序
void OrderEnglish(LinkList &L){
 LinkList p,q,tail;

 tail = NULL;

 while((L->next->next) != tail)
 {
  p = L;
  q = L->next;
  while(q->next != tail)
  {
   if((q->data.english) < (q->next->data.english))
   {
    p->next = q->next;
    q->next = q->next->next;
    p->next->next = q;
    q = p->next;
   }
   q = q->next;
   p = p->next;
  }
  tail = q;
 }
 printf("排序完毕!\n");

}
//根据数学进行排序
void OrderMath(LinkList &L){
 LinkList p,q,tail;

 tail = NULL;

 while((L->next->next) != tail)
 {
  p = L;
  q = L->next;
  while(q->next != tail)
  {
   if((q->data.math) < (q->next->data.math))
   {
    p->next = q->next;
    q->next = q->next->next;
    p->next->next = q;
    q = p->next;
   }
   q = q->next;
   p = p->next;
  }
  tail = q;
 }
 printf("排序完毕!\n");

}
//删除学生信息
Status ListDelete(LinkList &L,int i){
 LinkList p;
 LinkList q;
 int j;
 p = L;j = 0;
 while((p->next)&&(j<i-1)){
  p = p->next;
  ++j;
 }
 if(!(p->next)||(j>i-1)) return ERROR;
 q = p->next;
 p->next = q->next;
 delete q;
 return OK;
}
void DeleteStudent(LinkList &L){
 int i;
 printf("请输入需要删除的学生序号\n");
 scanf("%d",&i);
 ListDelete(L,i);
 printf("删除完毕!\n");

}
//插入学生信息
Status ListInsert(LinkList &L,int i,char name[],char snumber[],char sex[],int chinese,int math,int english){
 LinkList p = L;
 LinkList s;
 int j = 0;
 while(p && (j<i-1)){
  p = p->next;
  ++j;
 }
 if(!p||j>i-1) return ERROR;
 s = new LNode;
 strcpy(s->data.name,name);
 strcpy(s->data.snumber,snumber);
 strcpy(s->data.sex,sex);
 s->data.chinese = chinese;
 s->data.math = math;
 s->data.english = english;
 s->next = p->next;
 p->next = s;
 return OK;
}
void InsertStudent(LinkList &L){
 int n;
 char name[20],snumber[20],sex[10];
 int chinese,math,english;
 printf("请输入插入的位置N:");
 scanf("%d",&n);
 printf("请依次输入学生的姓名、学号、性别、语文成绩、数学成绩、英语成绩、总分\n");
 scanf("%s%s%s%d%d%d",&name,&snumber,&sex,&chinese,&math,&english);
  ListInsert(L,n,name,snumber,sex,chinese,math,english);

}
void menu(){
 printf("\t\t\t  ======================================================\n\n");
 printf("\t\t\t ‖                学生信息管理系统                    ‖ \n\n");
 printf("\t\t\t  ======================================================\n\n");
 printf("\t\t\t  ===================系统功能菜单=======================\n");
 printf("\t\t\t ‖  ------------------------------------------------  ‖\n");
 printf("\t\t\t ‖  ------------------------------------------------  ‖ \n");
 printf("\t\t\t  ======================================================  \n");
 printf("\t\t\t ‖    0.录入学生信息      ‖ ‖  1.统计学生信息       ‖     \n");
 printf("\t\t\t  ======================================================\n");
 printf("\t\t\t ‖    2.按照总分排序      ‖ ‖  3.按照语文成绩排序   ‖     \n");
 printf("\t\t\t  ====================================================== \n");
 printf("\t\t\t ‖    4.按照数学成绩排序  ‖ ‖  5.按英语成绩排序     ‖    \n");
 printf("\t\t\t  ======================================================\n");
 printf("\t\t\t ‖    6.删除学生信息      ‖ ‖  7.插入学生信息       ‖    \n");
 printf("\t\t\t  ====================================================== \n");
 printf("\t\t\t ‖    8.退出系统          ‖         \n");
 printf("\t\t\t  ==========================     \n");
 printf("\t\t\t     -----------------------------------------------  \n");
 printf("\n\n\n");
}
void luRu(LinkList &L){
 int n;
 printf("请输入学生数目N:");
 scanf("%d",&n);
 printf("请依次输入学生的姓名、学号、性别、语文成绩、数学成绩、英语成绩、总分\n");
 CreateList(L,n);
 printf("学生信息已录入完毕!\n");
}
void main(int args,char argv[]){
 LinkList p;
 InitList(p);
 int i;
 do{
  menu();
  scanf("%d",&i);
  getchar();
  switch(i){
  case 0:luRu(p);break;
  case 1:BianLi(p);break;
  case 2:OrderSum(p);BianLi(p);break;
  case 3:OrderChinese(p);BianLi(p);break;
  case 4:OrderMath(p);BianLi(p);break;
  case 5:OrderEnglish(p);BianLi(p);break;
  case 6: DeleteStudent(p);break;
  case 7:InsertStudent(p);break;
  case 8:exit(0);
  }
 }while(i != -1);
}

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

(0)

相关推荐

  • C语言数组实现学生信息管理系统设计

    概述 单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标. 运行结果如下: 输入数据: 打印数据: 根据学号对信息进行排序: 根据总成绩对信息进行排序: 根据学号删除某一信息: 代码如下: #include <stdio.h> #include <stdlib.h> //exit函数头文件 #include <string.h> //字符串相关操作头文件 #define MAX_STU

  • C语言学生信息管理系统设计与实现

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 #include"stdio.h" //标准的输入输出函数文件头部说明 #include"math.h" // 数学函数头部说明 #include"string.h" #include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h" //头文件声明,下文用到了改变控

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • C语言使用链表实现学生信息管理系统

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 代码实现的功能: 1.插入学生信息 2.显示学生信息 3.删除学生信息 4.在指定位置插入学生信息 5.查找学生信息 代码内容: #include <stdio.h> #include <stdlib.h> #include <string.h> #define Max_Student_Num 10 #define Max_Str_len 20 typedef struct T_stud

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

  • C语言单链表版学生信息管理系统

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序. //程序包括如下功能. //1.建立学生成绩表,包含学生的学号.姓名和成绩. //2.可以显示所有学生成绩. //3.可以计算学生的总数. //4.可以按学号和序号查找学生. //5.可以在指定位置插入学生成绩数据. //6.可以删除指定位置的学生数据. //7.可以把学生成绩按从高到低的顺序排序. //作者: yinlinqvan //操作系统:

  • C语言实现学生信息管理系统(文件版)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 下面是我自己用写的学生信息管理系统,为了增加数据的利用率,分为学生端和教师端,同时实现账号密码登录,以文件的形式将其存入. 代码如下 #include <stdio.h> #include <string.h> #include <string> #include<Windows.h> #define USER "TOM" // 事先定义用户名,用于登录页

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

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

  • C语言版学生信息管理系统

    本文实例为大家分享了C语言版学生信息管理系统的具体代码,供大家参考,具体内容如下 一.题目分析 1.功能概述 1)查询学生信息 2)添加学生信息 3)修改学生信息 4)删除学生信息 5)刷新学生信息 6)保存学生信息 7)输出当前学生信息 2.题目要求: 1)使用结构体建立学生信息体制 2)实现七大基本功能 3)采用文件存储学生信息 二.算法构造 1.难点解析----对文件的操作 1.1文件读取 FILE * fp; if ((fp = fopen(filename, "r")) ==

随机推荐