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语言单链表版学生信息管理系统

相关文章:

你感兴趣的文章:

标签云: