温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言中怎么利用单链表实现一个学生信息管理系统

发布时间:2021-07-02 17:21:29 来源:亿速云 阅读:145 作者:Leah 栏目:编程语言

本篇文章为大家展示了C语言中怎么利用单链表实现一个学生信息管理系统,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

具体内容如下

代码:

  #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语言中怎么利用单链表实现一个学生信息管理系统,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI