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

 更新时间:2018年01月17日 10:47:41   作者:印林泉  
这篇文章主要为大家详细介绍了C语言单链表版学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

本文实例为大家分享了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语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解

    C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解

    这篇文章主要介绍了C语言中指针 int *p=0;和int *p;*p=0;和”&“有什么关系和区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • C++返回值类型后置实现(跟踪返回值类型)

    C++返回值类型后置实现(跟踪返回值类型)

    本文主要介绍了C++返回值类型后置实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • C++ 单链表的基本操作(详解)

    C++ 单链表的基本操作(详解)

    下面小编就为大家带来一篇C++ 单链表的基本操作(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C语言单链表版学生信息管理系统

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

    这篇文章主要为大家详细介绍了C语言单链表版学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Qt5+QMediaPlayer实现音乐播放器的示例代码

    Qt5+QMediaPlayer实现音乐播放器的示例代码

    这篇文章主要为大家详细介绍了如何利用Qt5和QMediaPlayer实现简易的音乐播放器,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-12-12
  • Qt QFtp客户端实现上传下载文件

    Qt QFtp客户端实现上传下载文件

    本文主要介绍了Qt QFtp客户端实现上传下载文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C语言控制进程之进程等待详解

    C语言控制进程之进程等待详解

    这篇文章主要介绍了C语言控制进程之进程等待即回收子进程的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 详解C++中的ANSI与Unicode和UTF8三种字符编码基本原理与相互转换

    详解C++中的ANSI与Unicode和UTF8三种字符编码基本原理与相互转换

    在C++编程中,我们有时需要去处理字符串编码的相关问题,常见的字符编码有ANSI窄字节编码、Unicode宽字节编码及UTF8可变长编码。很多人在处理字符串编码问题时都会有疑惑,即便是有多年工作经验的朋友也可能搞不清楚。所以有必要讲一下这三种字符编码以及如何去使用它们
    2021-11-11
  • C++元编程语言初步入门详解

    C++元编程语言初步入门详解

    这篇文章主要为大家介绍了C++元编程语言初步入门的详解示例,文中包含详细的基本概念及运用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • C语言实现斗地主的核心算法

    C语言实现斗地主的核心算法

    本文给大家分享的是使用C语言实现的斗地主游戏的核心算法,主要实现了面向对象设计,洗牌、发牌、判断牌型、比较牌的大小、游戏规则等算法。通过这个斗地主小项目的练习,提高了我的面向对象设计能力,加深了对算法的理解。最近把这些设计和算法分享给大家。
    2015-03-03

最新评论

?


http://www.vxiaotou.com