您的位置:首页 > 运维架构 > Linux

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐