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

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

代码:

//以单链表作为存储结构,设计和实现课程成绩管理的完整程序。
//程序包括如下功能。
//1.建立学生成绩表,包含学生的学号、姓名和成绩。
//2.可以显示所有学生成绩。
//3.可以计算学生的总数。
//4.可以按学号和序号查找学生。
//5.可以在指定位置插入学生成绩数据。
//6.可以删除指定位置的学生数据。
//7.可以把学生成绩按从高到低的顺序排序。 

//作者: yinlinqvan
//操作系统:Mac OS X
//编译器:gcc 

#include "string.h"
#include "sys/malloc.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include "sys/types.h"
#define MAXSIZE 100 

typedef struct Student
{
  char sname[9];
  char sno[5];
  int score;
}DataType; 

typedef struct
{
  DataType data;
  struct Node *next;
}LinkList; 

LinkList * inputdata(); 

void display(LinkList * p); 

//遍历链表
void displayAll(LinkList * L); 

//插入
LinkList * createTailList();//尾插
LinkList * createHeadList();//头插 

//查询
void getElem(LinkList * L, int i);//按序号
void locateElemBysno(LinkList * L, char ch[]);//按值
void locateElemBysname(LinkList * L, char ch[]); 

int lengthList(LinkList * L); 

//插入
void insertElem(LinkList * L, int i);//在第i个结点前进行插入
void insertElemBysno(LinkList * L, char ch[5]);//按学号 

void deleteElem(LinkList * L, char ch[]); 

//排序
void insertSort(LinkList * L); 

int menue(); 

int main(int argc,char *argv[])
{
  LinkList *L;
  char sno[5] = {'\0'};
  char sname[9] = {'\0'};
  int b = 1;
  int i = 1;
  while (b) {
    switch(menue())
    {
      case 1:
        L = createTailList();
        //L = createHeadList();
        break;
      case 2:
        //displayAll(L);
        printf("\t◎输入插入哪个位置前:");
        scanf("%d", &i);
        insertElem(L, i);
        //scanf("%s", sno);
        //insertElemBysno(L, sno);
        break;
      case 3:
        printf("\t◎输入待删除学生的学号:");
        scanf("%s", sno);
        deleteElem(L, sno);
        break;
      case 4:
        printf("╭═══════════════════════════════╮\n");
        printf("║\t学生总数为:%d\t\t║\n", lengthList(L));
        printf("╰═══════════════════════════════╯\n\n");
        break;
      case 5:
        printf("\t◎输入待查找学生的学号:");
        scanf("%s", sno);
        locateElemBysno(L, sno);
        break;
      case 6:
        printf("\t◎输入待查学生的位置:");
        scanf("%d", &i);
        getElem(L, i);
        break;
      case 7:
        displayAll(L);
        break;
      case 8:
        insertSort(L);
        break;
      case 9:
        i = 2;
        while (i)
        {
          system("clear");
          printf("\033[5m");
          printf("\033[?25l");    //隐藏光标
          printf("\n\n\n\n\n\n");
          printf("╭═══════════════════════════════╮\n");
          printf("║\t正在退出(%d秒)\t\t║\n", i--);
          printf("╰═══════════════════════════════╯\n"); 

          sleep(1);
        }
        printf("\033[0m");
        system("clear");
        return 0;
        break;
      default:
        i = 2;
        while (i)
        {
          system("clear");
          printf("╭═══════════════════════════════╮\n");
          printf("║操作数无效,正在返回主菜单(%d秒)║\n", i--);
          printf("╰═══════════════════════════════╯\n");
          sleep(1);
        }
        continue;
    }
    getchar();
    printf("PRESS ENTER TO CONTINUE!");
    while (1) {
      if ('\n' == getchar())
      {
        break;
      }
    }
  }
  return 0;
}
int menue()
{
  system("clear");
  //警告音
  printf("\033[0m");       //关闭所有属性 

  printf("\033[44;37m");     //47是字背景颜色,33是字体的颜色
  printf ("\033[5m");       //闪烁
  printf("\n^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^\n\n");
  printf("\033[0m");       //关闭所有属性 

  printf("\033[44;37m");
  printf("╭═══════════════════════════════╮\n");
  printf("║\t学生成绩管理程序\t║\n");
  printf("║\t\t\t\t║\n");
  printf("║\t<1>创建\t\t\t║\n");
  printf("║\t<2>指定位置后插入\t║\n");
  printf("║\t<3>按位置删除\t\t║\n");
  printf("║\t<4>求学生总数\t\t║\n");
  printf("║\t<5>按学号查找\t\t║\n");
  printf("║\t<6>按位置查找\t\t║\n");
  printf("║\t<7>显示所有学生\t\t║\n");
  printf("║\t<8>成绩排序\t\t║\n");
  printf("║\t<9>退出\t\t\t║\n");
  printf("╰═══════════════════════════════╯\n\n"); 

  printf ("\033[5m");
  printf("^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^\n\n");
  printf("\033[0m");       //关闭所有属性 

  time_t rawtime;
  struct tm * timeinfo;
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  //printf ( "\t\007%s", asctime (timeinfo) ); 

  printf ("\033[;34m");
  printf ("\t[%4d-%02d-%02d %02d:%02d:%02d]\n",
      1900+timeinfo->tm_year,
      1+timeinfo->tm_mon,
      timeinfo->tm_mday,
      timeinfo->tm_hour,
      timeinfo->tm_min,
      timeinfo->tm_sec); 

  char colorname[3][20] = {{"RED"}, {"BLUE"}, {"YELLLOW"}};
  srand(time(&rawtime)); //时间触发
  //textcolor(colorname[rand()%3]);
  //printf("\t[textcolor is %s]\n", colorname[rand()%3]);
  //颜色码和控制码 我的参考链接 http://wenku.baidu.com/view/a38f77ff910ef12d2af9e70b.html 

  printf("\t◎输入功能项:");
  int a = 0;
  scanf("%d",&a);
  printf("\033[0m"); 

  system("clear");
  return a;
} 

LinkList * inputdata()
{
  LinkList *s = NULL;
  char sno[5] = {'\0'};
  char sname[9] = {'\0'};
  int score = 0; 

  printf("\tsno\t->");
  scanf("%s", sno);
  if (sno[0] == '#') {
    return s;
  }
  s = (LinkList *)malloc(sizeof(LinkList));
  strcpy(s -> data.sno, sno); 

  printf("\tsname\t->");
  scanf("%s", sname);
  strcpy(s -> data.sname, sname); 

  printf("\tscore\t->");
  scanf("%d", &score);
  s -> data.score = score; 

  printf("\n");
  return s;
} 

void display(LinkList * p)
{
  printf("╭═══════════════════════════════════════════════╮\n");
  printf("║\tsno\t\tsname\t\tscore\t║\n");
  printf("║\t%s\t\t%s\t\t%-4d\t║\n", p->data.sno, p->data.sname, p->data.score);
  printf("╰═══════════════════════════════════════════════╯\n\n");}
void displayAll(LinkList * L)
{
  printf("╭═══════════════════════════════════════════════╮\n");
  printf("║\tsno\t\tsname\t\tscore\t║\n");
  LinkList * p = L -> next;
  while(p)
  {
    printf("║\t%s\t\t%s\t\t%-4d\t║\n", p->data.sno, p->data.sname, p->data.score);
    p = p -> next;
  }
  printf("╰═══════════════════════════════════════════════╯\n\n");
}
LinkList * createTailList()
{
  //链表头结点
  LinkList * L = (LinkList *)malloc(sizeof(LinkList));
  //结点
  LinkList * s = NULL;
  //尾结点
  LinkList * r = L; 

  printf("╭═══════════════════════════════════════════════╮\n");
  printf("║\t\t尾插法建立\t\t\t║\n");
  printf("║\t请输入学生信息(当学号为\"#\"时结束)\t║\n");
  printf("║\t\t\t\t\t\t║\n");
  printf("║\t学号sno   (不超过4位)\t\t║\n");
  printf("║\t姓名sname  (不超过4个汉字)\t\t║\n");
  printf("║\t成绩score  (int型)\t\t\t║\n");
  printf("╰═══════════════════════════════════════════════╯\n\n"); 

  while (1) {
    s = inputdata();
    if (!s) {
      break;
    }
    r->next = s;
    r = s;
  }
  r->next = NULL;
  return L;
} 

LinkList * createHeadList()
{
  //链表头结点
  LinkList * L = (LinkList *)malloc(sizeof(LinkList));
  //结点
  LinkList * s = NULL; 

  printf("╭═══════════════════════════════════════════════╮\n");
  printf("║\t\t头插法建立\t\t║\n");
  printf("║\t请输入学生信息(当学号为\"#\"时结束)\t║\n");
  printf("║\t\t\t\t\t\t║\n");
  printf("║\t学号sno   (不超过4位)\t\t║\n");
  printf("║\t姓名sname  (不超过4个汉字)\t\t║\n");
  printf("║\t成绩score  (int型)\t\t\t║\n");
  printf("╰═══════════════════════════════════════════════╯\n\n");
  while (1) {
    s = inputdata();
    if (!s) {
      break;
    }
    s->next = L->next;
    L->next = s;
  }
  return L;
} 

void getElem(LinkList * L, int i)
{
  LinkList * p = L;
  int j = 0;
  while (p && j<i) {
    p = p->next;
    j++;
  }
  if (!p) {
    printf("╭═══════════════════════════════╮\n");
    printf("║\tDon't find the student!\t║\n");
    printf("╰═══════════════════════════════╯\n\n");
  }
  else
  {
    display(p);
  }
} 

void locateElemBysno(LinkList * L, char ch[5])
{
  LinkList * p = L->next;
  while (p && (0 != strcmp(p->data.sno, ch)))
  {
    p = p -> next;
  }
  if (!p) {
    printf("╭═══════════════════════════════╮\n");
    printf("║\tDon't find the student!\t║\n");
    printf("╰═══════════════════════════════╯\n\n");
  }
  else
  {
    display(p);
  }
}
void locateElemBysname(LinkList * L, char ch[9])
{
  LinkList * p = L->next;
  while (p && (0 != strcmp(p->data.sname, ch)))
  {
    p = p -> next;
  }
  if (!p) {
    printf("╭═══════════════════════════════╮\n");
    printf("║\tDon't find the student!\t║\n");
    printf("╰═══════════════════════════════╯\n\n");
  }
  else
  {
    display(p);
  }
}
int lengthList(LinkList * L)
{
  LinkList * p = L->next;
  int j = 0;
  while (p) {
    p = p->next;
    j ++;
  }
  return j;
}
void insertElem(LinkList * L, int i)
{
  LinkList * s = inputdata();
  LinkList * p = L;
  int j = 0;
  while (p && j<i-1)
  {
    p = p->next;
    j++;
  }
  if (p && p->next)
  {
    s->next = p->next;
    p->next = s;
  }
  else
  {
    printf("╭═══════════════════════════════╮\n");
    printf("║\tDon't find the student!\t║\n");
    printf("╰═══════════════════════════════╯\n\n");
  }
  displayAll(L); 

} 

void insertElemBysno(LinkList * L, char ch[5])
{
  LinkList * p = L;
  LinkList * s = NULL; 

  while (p && (0 != strcmp(p->data.sno, ch)))
  {
    p = p->next;
  }
  if (!p) {
    printf("╭═══════════════════════════════╮\n");
    printf("║\tDon't find the student!\t║\n");
    printf("╰═══════════════════════════════╯\n\n");
  }
  else
  {
    s = inputdata();
    s->next = p->next;
    p->next = s;
  }
} 

void deleteElem(LinkList * L, char ch[5])
{
  LinkList *p, *q;
  p = L->next;
  q=L;
  while (p && (strcmp(p->data.sno, ch) != 0)) {
    q = p;
    p = p->next;
  }
  if (!p) {
    printf("╭═══════════════════════════════╮\n");
    printf("║\tDon't find the student!\t║\n");
    printf("╰═══════════════════════════════╯\n\n");
  }
  else
  {
    display(p);
    q->next = p->next;
    free(p);
  }
}
void insertSort(LinkList * L)
{
  LinkList * L1;
  LinkList * p;
  LinkList * q;
  LinkList * s;
  int len;
  len = lengthList(L);
  L1 = (LinkList *)malloc(sizeof(LinkList));
  if (L->next) {
    s = (LinkList *)malloc(sizeof(LinkList));
    strcpy(s->data.sno, L->data.sno);
    strcpy(s->data.sname, L->data.sname);
    s->data.score = L->data.score;
    s->next = NULL;
    L1->next = s;
    q = L->next;
  }
  else
  {
    printf("╭═══════════════════════════════════╮\n");
    printf("║\tThe student link list is empty!\n║\n");
    printf("╰═══════════════════════════════════╯\n\n"); 

    return;
  }
  while (q) {
    p = L1->next;
    while (p &&(p->data.score >= q->data.score))
    {
      p = p->next;
    }
    s = (LinkList *)malloc(sizeof(LinkList));
    strcpy(s->data.sno, q->data.sno);
    strcpy(s->data.sname, q->data.sname);
    s->data.score = q->data.score;
    if (!p) {
      s->next = NULL;
      p->next = s;
    }
    else
    {
      s->next = p->next;
      p->next = s;
    }
    q = q->next;
  }
  displayAll(L1);
}

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

您可能感兴趣的文章:

  • C语言实现学生信息管理系统(单链表)
  • C语言学生信息管理系统小项目
  • C语言数组实现学生信息管理系统设计
  • C语言版学生成绩管理系统
  • C语言学生信息管理系统设计与实现
  • 基于C语言实现学生成绩管理系统
  • C语言实现通讯管理系统设计
  • C语言实现简单学生成绩管理系统
  • C语言利用结构体数组实现学生成绩管理系统
  • 学生信息管理系统C语言版
(0)

相关推荐

  • 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语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C语言小项目 实现一个学生成绩管理系统 系统功能: 1.实现所有学生成绩的录入(利用结构体数组),当输入字符为end时候,结束成绩的录入:  2.实现所有学生信息的输出  3.输入指定学生姓名,并能输出这名学生的信息  4.将学生成绩按照语文和数学成绩排序 思路: 1. 首先,先把这个小项目的框架打好.考虑要写几个文件,每一个文件里面实现怎样的功能.考虑到这个小项目的代码量以及程序的易读性,我决定将写三个文件.一

  • C语言版学生成绩管理系统

    本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D:\\data"; char tm

  • C语言实现通讯管理系统设计

    本文实例为大家分享了C语言实现通讯管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct{ char num[5]; char name[9]; char sex[9]; char phone[13]; char addr[31]; }DataType; typedef struct node{ DataType data; struct

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

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

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

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

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

  • 基于C语言实现学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 这里只贴代码,具体介绍省略. #include <stdio.h> #include <io.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 200 struct student { char no[10]; // 学号 char name[50]; // 姓名 f

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

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

随机推荐