欢迎光临散文网 会员登陆 & 注册

单链表做学生信息管理系统

2022-04-17 20:50 作者:恶魔之角2  | 我要投稿

修改前的代码(c语言):

#include<stdio.h>

#include<stdlib.h>

#include<assert.h>

#include<string.h>


//首先把'学生'的数据抽象出来

struct student {


char name[20];

char num[20];

int math;//数学成绩

int english; //英语成绩

int py;//python成绩

int sum;//总分把都加起来。sum=math+english+python;


//所有关于数据的地方都要修改

};




//有头链表先做表头再插入

struct Node {


int data;

struct Node* next;


};//创建结构体


struct Node* list; //需要一个指针存储整个链表


struct Node* createHead() {


struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));

//用指针表示结点,首先要把指针变为变量,即做动态内存申请

assert(headNode); //断言函数,看他的内存是否申请成功;判断当前指针是否为空,如果为空就会引发断点


headNode->next = NULL;

return headNode;


//创建链表,表头的数据不做初始化(headNode->data=1,表头初始化的个人理解),只初始化指针

}



//创建结点。插入数据之前首先要创建结点


struct Node* createNode(int data) {


struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

assert(newNode); //判断newNode内存是否分配成功


newNode->data = 1;

newNode->next = NULL;

return newNode;


}


//插入数据

void insertData(struct Node* headNode,int data)


{

struct Node* newNode = createNode(data); 


newNode->next = headNode->next;

headNode->next = newNode;


}

//打印链表

void printList(struct Node* headNode)  //括号里用头结点代表整个链表

{

//有头链表第一个结构体没有数据。第一个指针指向第二个结点

struct Node* pmove = headNode->next;

while (pmove != NULL)

{

printf("%d\t", pmove->data);

pmove = pmove->next; //打印完,pmove走向下一个


}

}


//删除数据

void deleteData(struct Node* headNode, int posData) {



//删除结点,直到其前后结点的名字,将前一个结点连到后一个结点,自己当灯泡


struct Node* preNode = headNode;

struct Node* curNode = headNode->next;


while (curNode != NULL && curNode->data != posData)


{

preNode = curNode;

curNode = preNode->next;//前驱结点走向当前结点,被踢的当前结点走向当前结点的下一个


}

if (curNode == NULL) {


printf("删除失败!没有找到指定数据!\n");

}

else

{

preNode->next = curNode->next;

free(curNode);

}

}


//查找数据

struct Node* searchData(struct Node* headNode,int posData)

{

struct Node* pmove = headNode->next;

while (pmove != NULL  && pmoce->data!=posData)

{


pmove = pmove->next; //pmove走向下一个位置


}


return pmove;//返回pmove,继续


}









void makeMenu() {


printf("----------[链式学生信息管理系统]---------");

printf("\n\t\t0.退出功能\n"); 

printf("\t\t1.录入功能\n");

printf("\t\t2.浏览功能\n");

printf("\t\t3.查找功能\n");

printf("\t\t4.修改功能\n");

printf("\t\t5.删除功能\n");

printf("------------------------");


printf("请输入(0~5):");

}


void keyDown(){


int userkey = 0;

printf("请输入你需要的功能模块:");

scanf_s("%d", &userkey); //char d 20;等同于canf_s("%s",d,20);


switch (userkey)

{

case 0:

printf("-------[退出功能]-------");

system("pause");

exit(0);//用一个地址把整个程序关掉;

break;


case 1:

printf("-------[录入功能]-------");

break;

    

case 2:


printf("-------[浏览功能]-------");

break;


case 3:

printf("-------[查找功能]-------");

break;


case 4:

printf("-------[修改功能]-------");

break;


case 5:

printf("-------[删除功能]-------");

break;


default:

printf("输入错误!没有该功能、n");

break;





}



}





int main() {

list = createHead(); //初始化

insertData(list,1); //pmove在第一个结点

insertData(list,666); //pmove走向第二个结点

printList(list);

printf("\n");


while(1)

{

makeMenu();

keyDown();

system("pause");

system("cls");

return 0;

}


}


单链表做学生信息管理系统的评论 (共 条)

分享到微博请遵守国家法律