2019/1/11 学习LinuxC第九天 链表 作业:用链表编写学生信息管理系统(自己做的两种方法,差别很小,后者稍好一些)
2019-01-11 18:38
537 查看
//链表自做1 //1是在没稍微学好的情况下编写的,区别就是add()和del()两个函数没有用好。1中用pBefor解决问题,2中进行了更改,用pTemp = pHead解决了问题。 #include <stdio.h> #include <stdlib.h> typedef struct std { int id; //学号 char name[20]; //姓名 char gender[10]; //性别 int score; //成绩 }STUD; typedef struct tagLINKLIST { STUD student; struct tagLINKLIST *pNext; }LINKLIST; LINKLIST *pHead; void menu(void); void add(void); void del(void); void change(void); void search(void); void show(void); int SeaId(int n); //专门用来查找学号为n的同是否存在,返回0代表此学生不存在,1则代表存在 int main() { pHead = (LINKLIST *)malloc(sizeof(LINKLIST)); //malloc不能用在主函数之外,原因:程序从主函数开始,malloc放在主函数之外,无法调用库函数 pHead->pNext = NULL; int num = 0; while(1) { menu(); scanf("%d",&num); switch(num) { case 1:add();break; case 2:del();break; case 3:change();break; case 4:search();break; case 0:return 0;break; default :printf("输入错误,请重新输入。\n"); } } } void menu(void) { printf("\t\t**************************************\n"); printf("\t\t*******学生信息管理系统***************\n"); printf("\t\t\t 1.添加信息\n"); printf("\t\t\t 2.删除信息\n"); printf("\t\t\t 3.修改信息\n"); printf("\t\t\t 4.查询信息\n"); printf("\t\t\t 0.退出系统\n"); printf("\t\t**************************************\n"); printf("\t请输入您想要执行的操作:\n"); } void show(void) { LINKLIST *pTemp = pHead->pNext; if(!pTemp) { return; } printf("\t以下学号的信息已存在:\n"); while(pTemp) { printf("%d\t",pTemp->student.id); pTemp = pTemp->pNext; } printf("\n"); } int SeaId(int n) { LINKLIST *pTemp = pHead->pNext; if(!pTemp) return 0; while(pTemp) { if(pTemp->student.id == n) return 1; pTemp = pTemp->pNext; } return 0; } void add(void) { show(); LINKLIST *pNew = (LINKLIST *)malloc(sizeof(LINKLIST)); LINKLIST *pBefor = pHead; LINKLIST *pTemp = pBefor->pNext; int n = 0; printf("\t请输入您要添加学生的学号:\n"); scanf("%d",&n); int flag = SeaId(n); if(flag) { printf("此学生已存在,无法重新添加。\n"); free(pNew); return; } pNew->student.id = n; while(pTemp) { pBefor = pBefor->pNext; pTemp = pTemp->pNext; } printf("请输入姓名:\n"); scanf("%s",pNew->student.name); printf("请输入性别(boy/girl):\n"); scanf("%s",pNew->student.gender); printf("请输入成绩:\n"); scanf("%d",&pNew->student.score); printf("第一步。\n"); pBefor->pNext = pNew; printf("第二步。\n"); pNew->pNext = NULL; printf("输入完毕。\n"); return; } void del(void) { show(); LINKLIST *pBefor = pHead; LINKLIST *pTemp = pBefor->pNext; int n = 0; printf("\t请输入您要删除的学生的学号:\n"); scanf("%d",&n); int flag = SeaId(n); if(!flag) { printf("此学生不存在,无法删除。\n"); return; } while(pTemp) { if(pTemp->student.id == n) break; pBefor = pBefor->pNext; pTemp = pTemp->pNext; } pBefor->pNext = pTemp->pNext; free(pTemp); printf("删除完毕。\n"); return; } void change(void) { show(); LINKLIST *pTemp = pHead->pNext; int n = 0; printf("\t请输入您要修改的学生的学号:\n"); scanf("%d",&n); int flag = SeaId(n); if(!flag) { printf("此学生不存在,无法修改。\n"); return; } while(pTemp) { if(pTemp->student.id == n) break; pTemp = pTemp->pNext; } printf("请输入新的姓名:\n"); scanf("%s",pTemp->student.name); printf("请输入新的性别(boy/girl):\n"); scanf("%s",pTemp->student.gender); printf("请输入新的成绩:\n"); scanf("%d",&pTemp->student.score); printf("修改完毕。\n"); return; } void search(void) { show(); LINKLIST *pTemp = pHead->pNext; int n = 0; printf("\t请输入您要查询的学生的学号:\n"); scanf("%d",&n); int flag = SeaId(n); if(!flag) { printf("此学生不存在,无法查询。\n"); return; } while(pTemp) { if(pTemp->student.id == n) break; pTemp = pTemp->pNext; } printf("此学生信息如下:\n"); printf("学号:%d 姓名:%s 性别:%s 成绩:%d\n",pTemp->student.id,pTemp->student.name,pTemp->student.gender,pTemp->student.score); return; } //链表自做2 #include <stdio.h> #include <stdlib.h> typedef struct std { int id; //学号 char name[20]; //姓名 char gender[10]; //性别 int score; //成绩 }STUD; typedef struct tagLINKLIST { STUD student; struct tagLINKLIST *pNext; }LINKLIST; LINKLIST *pHead; void menu(void); void add(void); void del(void); void change(void); void search(void); void show(void); int SeaId(int n); //专门用来查找学号为n的同是否存在,返回0代表此学生不存在,1则代表存在 int main() { pHead = (LINKLIST *)malloc(sizeof(LINKLIST)); //malloc不能用在主函数之外,原因:程序从主函数开始,malloc放在主函数之外,无法调用库函数 pHead->pNext = NULL; int num = 0; while(1) { menu(); scanf("%d",&num); switch(num) { case 1:add();break; case 2:del();break; case 3:change();break; case 4:search();break; case 0:return 0;break; default :printf("输入错误,请重新输入。\n"); } } } void menu(void) { printf("\t\t**************************************\n"); printf("\t\t*******学生信息管理系统***************\n"); printf("\t\t\t 1.添加信息\n"); printf("\t\t\t 2.删除信息\n"); printf("\t\t\t 3.修改信息\n"); printf("\t\t\t 4.查询信息\n"); printf("\t\t\t 0.退出系统\n"); printf("\t\t**************************************\n"); printf("\t请输入您想要执行的操作:\n"); } void show(void) { LINKLIST *pTemp = pHead->pNext; if(!pTemp) { return; } printf("\t以下学号的信息已存在:\n"); while(pTemp) { printf("%d\t",pTemp->student.id); pTemp = pTemp->pNext; } printf("\n"); } int SeaId(int n) { LINKLIST *pTemp = pHead->pNext; if(!pTemp) return 0; while(pTemp) { if(pTemp->student.id == n) return 1; pTemp = pTemp->pNext; } return 0; } void add(void) { show(); LINKLIST *pNew = (LINKLIST *)malloc(sizeof(LINKLIST)); LINKLIST *pTemp = pHead; int n = 0; printf("\t请输入您要添加学生的学号:\n"); scanf("%d",&n); int flag = SeaId(n); if(flag) { printf("此学生已存在,无法重新添加。\n"); free(pNew); return; } pNew->student.id = n; while(pTemp->pNext) { pTemp = pTemp->pNext; } printf("请输入姓名:\n"); scanf("%s",pNew->student.name); printf("请输入性别(boy/girl):\n"); scanf("%s",pNew->student.gender); printf("请输入成绩:\n"); scanf("%d",&pNew->student.score); pTemp->pNext = pNew; pNew->pNext = NULL; printf("输入完毕。\n"); return; } void del(void) { show(); LINKLIST *pTemp = pHead; int n = 0; printf("\t请输入您要删除的学生的学号:\n"); scanf("%d",&n); int flag = SeaId(n); if(!flag) { printf("此学生不存在,无法删除。\n"); return; } while(pTemp->pNext) { if(pTemp->pNext->student.id == n) break; pTemp = pTemp->pNext; } LINKLIST *pDel = pTemp->pNext; //必须先存储后free pTemp->pNext = pTemp->pNext->pNext; free(pTemp); printf("删除完毕。\n"); return; } void change(void) { show(); LINKLIST *pTemp = pHead->pNext; int n = 0; printf("\t请输入您要修改的学生的学号:\n"); scanf("%d",&n); int flag = SeaId(n); if(!flag) { printf("此学生不存在,无法修改。\n"); return; } while(pTemp) { if(pTemp->student.id == n) break; pTemp = pTemp->pNext; } printf("请输入新的姓名:\n"); scanf("%s",pTemp->student.name); printf("请输入新的性别(boy/girl):\n"); scanf("%s",pTemp->student.gender); printf("请输入新的成绩:\n"); scanf("%d",&pTemp->student.score); printf("修改完毕。\n"); return; } void search(void) { show(); LINKLIST *pTemp = pHead->pNext; int n = 0; printf("\t请输入您要查询的学生的学号:\n"); scanf("%d",&n); int flag = SeaId(n); if(!flag) { printf("此学生不存在,无法查询。\n"); return; } while(pTemp) { if(pTemp->student.id == n) break; pTemp = pTemp->pNext; } printf("此学生信息如下:\n"); printf("学号:%d 姓名:%s 性别:%s 成绩:%d\n",pTemp->student.id,pTemp->student.name,pTemp->student.gender,pTemp->student.score); return; }
相关文章推荐
- 就C语言的指针、链表的原理和各类操作撰写一篇技术博客,说说自己学习C语言指针和链表的体会,并将学生信息管理系统进行修改,使能完成其他的功能,并撰写体会,附加源代码。
- 学生信息管理系统-顺序表&&链表(数据结构第一次作业)
- C++链表类的三种使用方法(学生信息管理系统的实现)
- 用c++语言 编写基于链表的学生信息管理系统
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 数据结构第一次作业(学生信息管理系统-顺序表&&链表)
- ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
- linux学习笔记-学生信息管理系统(shell编程)
- c语言使用链表编写一个可以实现班级学生管理系统,增加,删除,修改学生信息
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
- ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- 基于linux下的学生信息管理系统
- 用单链表实现学生信息管理系统